ETH Price: $2,962.03 (-0.94%)
Gas: 8 Gwei

Token

GoosePunks Renegades (GPR)
 

Overview

Max Total Supply

192 GPR

Holders

121

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
guppys.eth
Balance
1 GPR
0xbf7cf67a9cd9066efc62f0b00bd2f7819c6c8d3b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GoosePunks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-06
*/

// SPDX-License-Identifier: MIT
// Author : iBlockchainer (Telegram)
// Project : Goose Punks NFT
// File: @openzeppelin/contracts/utils/Counters.sol

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(
        address _owner,
        address _operator
    ) public override view returns (bool isOperator) {
      // if OpenSea's ERC721 Proxy Address is detected, auto-return true
        if (_operator == address(0x58807baD0B376efc12F5AD86aAc70E78ed67deaE)) {
            return true;
        }
        
        // otherwise, use the default ERC721.isApprovedForAll()
        return ERC721.isApprovedForAll(_owner, _operator);
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(IERC165, ERC721)
        returns (bool)
    {
        return
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721.balanceOf(owner),
            "ERC721Enumerable: owner index out of bounds"
        );
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            index < ERC721Enumerable.totalSupply(),
            "ERC721Enumerable: global index out of bounds"
        );
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: GoosePunks.sol

pragma solidity ^0.8.0;

contract GoosePunks is ERC721Enumerable, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenId;

    uint256 public constant MAX_GPUNK = 11000;
    string baseTokenURI;
    bool public saleOpen = true;

    event GoosePunksMinted(uint256 totalMinted);

    constructor(string memory baseURI) ERC721("GoosePunks Renegades", "GPR") {
        setBaseURI(baseURI);
    }

    //Get token Ids of all tokens owned by _owner
    function walletOfOwner(address _owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    //Close sale if open, open sale if closed
    function flipSaleState() external onlyOwner {
        saleOpen = !saleOpen;
    }

    function withdrawAll() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function getNFTPrice() public view returns (uint256) {
        uint256 currentSupply = totalSupply();

        if (currentSupply > 8000) {
            return 90000000000000000; // 8001 - 11000 0.09 ETH
        } else if (currentSupply > 4500) {
            return 80000000000000000; // 4501 - 8000 0.08 ETH
        } else {
            return 70000000000000000; // 0 - 4500 0.07 ETH
        }
    }

    function presale(address[] calldata _recipients) external onlyOwner {
        require(
            totalSupply() + _recipients.length <= MAX_GPUNK,
            "Presale minting will exceed maximum supply of GoosePunks"
        );
        require(_recipients.length != 0, "Address not found for minting");
        for (uint256 i = 0; i < _recipients.length; i++) {
            require(_recipients[i] != address(0), "Minting to Null address");
            _mint(_recipients[i]);
        }
    }

    //mint GoosePunks
    function mintGoosePunks(uint256 _count) external payable {
        if (msg.sender != owner()) {
            require(saleOpen, "Sale is not open yet");
        }
        require(
            _count > 0 && _count <= 20,
            "Min 1 & Max 20 GoosePunks can be minted per transaction"
        );
        require(
            totalSupply() + _count <= MAX_GPUNK,
            "Transaction will exceed maximum supply of GoosePunks"
        );
        require(
            msg.value >= getNFTPrice() * _count,
            "Ether sent with this transaction is not correct"
        );

        address _to = msg.sender;

        for (uint256 i = 0; i < _count; i++) {
            _mint(_to);
        }
    }

    function _mint(address _to) private {
        _tokenId.increment();
        uint256 tokenId = _tokenId.current();
        _safeMint(_to, tokenId);
        emit GoosePunksMinted(tokenId);
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }
    
    //Pause sale
    function pauseSale() public onlyOwner {
        saleOpen = false;
    }
    
     //Unpasue sale
    function unpauseSale() public onlyOwner {
        saleOpen = true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalMinted","type":"uint256"}],"name":"GoosePunksMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_GPUNK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintGoosePunks","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600d60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162004cfa38038062004cfa8339818101604052810190620000529190620003fb565b6040518060400160405280601481526020017f476f6f736550756e6b732052656e6567616465730000000000000000000000008152506040518060400160405280600381526020017f47505200000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d6929190620002cd565b508060019080519060200190620000ef929190620002cd565b50505062000112620001066200012a60201b60201c565b6200013260201b60201c565b6200012381620001f860201b60201c565b5062000653565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002086200012a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022e620002a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000287576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027e9062000473565b60405180910390fd5b80600c90805190602001906200029f929190620002cd565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002db906200053b565b90600052602060002090601f016020900481019282620002ff57600085556200034b565b82601f106200031a57805160ff19168380011785556200034b565b828001600101855582156200034b579182015b828111156200034a5782518255916020019190600101906200032d565b5b5090506200035a91906200035e565b5090565b5b80821115620003795760008160009055506001016200035f565b5090565b6000620003946200038e84620004be565b62000495565b905082815260208101848484011115620003b357620003b26200060a565b5b620003c084828562000505565b509392505050565b600082601f830112620003e057620003df62000605565b5b8151620003f28482602086016200037d565b91505092915050565b60006020828403121562000414576200041362000614565b5b600082015167ffffffffffffffff8111156200043557620004346200060f565b5b6200044384828501620003c8565b91505092915050565b60006200045b602083620004f4565b915062000468826200062a565b602082019050919050565b600060208201905081810360008301526200048e816200044c565b9050919050565b6000620004a1620004b4565b9050620004af828262000571565b919050565b6000604051905090565b600067ffffffffffffffff821115620004dc57620004db620005d6565b5b620004e78262000619565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200052557808201518184015260208101905062000508565b8381111562000535576000848401525b50505050565b600060028204905060018216806200055457607f821691505b602082108114156200056b576200056a620005a7565b5b50919050565b6200057c8262000619565b810181811067ffffffffffffffff821117156200059e576200059d620005d6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61469780620006636000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a22cb46511610095578063e985e9c511610064578063e985e9c51461063f578063f2fde38b1461067c578063fb107a4f146106a5578063ffe85321146106d0576101cd565b8063a22cb46514610599578063b88d4fde146105c2578063bb33d729146105eb578063c87b56dd14610602576101cd565b80638da5cb5b116100d15780638da5cb5b146104fc57806395d89b411461052757806399288dbb146105525780639e4a6d5d1461057d576101cd565b806370a0823114610491578063715018a6146104ce578063853828b6146104e5576101cd565b806334918dfd1161016f57806355367ba91161013e57806355367ba9146103eb57806355f804b3146104025780636352211e1461042b57806365029d8214610468576101cd565b806334918dfd1461033157806342842e0e14610348578063438b6300146103715780634f6ccce7146103ae576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612ffd565b6106fb565b6040516102069190613695565b60405180910390f35b34801561021b57600080fd5b50610224610775565b60405161023191906136b0565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906130a0565b610807565b60405161026e919061360c565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f70565b61088c565b005b3480156102ac57600080fd5b506102b56109a4565b6040516102c29190613a12565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612e5a565b6109b1565b005b34801561030057600080fd5b5061031b60048036038101906103169190612f70565b610a11565b6040516103289190613a12565b60405180910390f35b34801561033d57600080fd5b50610346610ab6565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e5a565b610b5e565b005b34801561037d57600080fd5b5061039860048036038101906103939190612ded565b610b7e565b6040516103a59190613673565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130a0565b610c2c565b6040516103e29190613a12565b60405180910390f35b3480156103f757600080fd5b50610400610c9d565b005b34801561040e57600080fd5b5061042960048036038101906104249190613057565b610d36565b005b34801561043757600080fd5b50610452600480360381019061044d91906130a0565b610dcc565b60405161045f919061360c565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612fb0565b610e7e565b005b34801561049d57600080fd5b506104b860048036038101906104b39190612ded565b611088565b6040516104c59190613a12565b60405180910390f35b3480156104da57600080fd5b506104e3611140565b005b3480156104f157600080fd5b506104fa6111c8565b005b34801561050857600080fd5b506105116112f3565b60405161051e919061360c565b60405180910390f35b34801561053357600080fd5b5061053c61131d565b60405161054991906136b0565b60405180910390f35b34801561055e57600080fd5b506105676113af565b6040516105749190613695565b60405180910390f35b610597600480360381019061059291906130a0565b6113c2565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190612f30565b611579565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190612ead565b6116fa565b005b3480156105f757600080fd5b5061060061175c565b005b34801561060e57600080fd5b50610629600480360381019061062491906130a0565b6117f5565b60405161063691906136b0565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190612e1a565b61189c565b6040516106739190613695565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612ded565b611902565b005b3480156106b157600080fd5b506106ba6119fa565b6040516106c79190613a12565b60405180910390f35b3480156106dc57600080fd5b506106e5611a4c565b6040516106f29190613a12565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e575061076d82611a52565b5b9050919050565b60606000805461078490613d06565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090613d06565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050905090565b600061081282611b34565b610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906138d2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089782610dcc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610927611ba0565b73ffffffffffffffffffffffffffffffffffffffff161480610956575061095581610950611ba0565b61189c565b5b610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90613852565b60405180910390fd5b61099f8383611ba8565b505050565b6000600880549050905090565b6109c26109bc611ba0565b82611c61565b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906139d2565b60405180910390fd5b610a0c838383611d3f565b505050565b6000610a1c83611088565b8210610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a54906136f2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610abe611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610adc6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613912565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610b79838383604051806020016040528060008152506116fa565b505050565b60606000610b8b83611088565b905060008167ffffffffffffffff811115610ba957610ba8613ece565b5b604051908082528060200260200182016040528015610bd75781602001602082028036833780820191505090505b50905060005b82811015610c2157610bef8582610a11565b828281518110610c0257610c01613e9f565b5b6020026020010181815250508080610c1990613d69565b915050610bdd565b508092505050919050565b6000610c366109a4565b8210610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e906139f2565b60405180910390fd5b60088281548110610c8b57610c8a613e9f565b5b90600052602060002001549050919050565b610ca5611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610cc36112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613912565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b610d3e611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610d5c6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613912565b60405180910390fd5b80600c9080519060200190610dc8929190612bab565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90613892565b60405180910390fd5b80915050919050565b610e86611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610ea46112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613912565b60405180910390fd5b612af882829050610f096109a4565b610f139190613b3b565b1115610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613992565b60405180910390fd5b6000828290501415610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136d2565b60405180910390fd5b60005b8282905081101561108357600073ffffffffffffffffffffffffffffffffffffffff16838383818110610fd457610fd3613e9f565b5b9050602002016020810190610fe99190612ded565b73ffffffffffffffffffffffffffffffffffffffff161415611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613712565b60405180910390fd5b61107083838381811061105657611055613e9f565b5b905060200201602081019061106b9190612ded565b611f9b565b808061107b90613d69565b915050610f9e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090613872565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611148611ba0565b73ffffffffffffffffffffffffffffffffffffffff166111666112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390613912565b60405180910390fd5b6111c66000611ff8565b565b6111d0611ba0565b73ffffffffffffffffffffffffffffffffffffffff166111ee6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613912565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161126a906135f7565b60006040518083038185875af1925050503d80600081146112a7576040519150601f19603f3d011682016040523d82523d6000602084013e6112ac565b606091505b50509050806112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906139b2565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c90613d06565b80601f016020809104026020016040519081016040528092919081815260200182805461135890613d06565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b600d60009054906101000a900460ff1681565b6113ca6112f3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461144c57600d60009054906101000a900460ff1661144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906137d2565b60405180910390fd5b5b60008111801561145d575060148111155b61149c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611493906137f2565b60405180910390fd5b612af8816114a86109a4565b6114b29190613b3b565b11156114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613832565b60405180910390fd5b806114fc6119fa565b6115069190613bc2565b341015611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906138f2565b60405180910390fd5b600033905060005b828110156115745761156182611f9b565b808061156c90613d69565b915050611550565b505050565b611581611ba0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906137b2565b60405180910390fd5b80600560006115fc611ba0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a9611ba0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ee9190613695565b60405180910390a35050565b61170b611705611ba0565b83611c61565b61174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906139d2565b60405180910390fd5b611756848484846120be565b50505050565b611764611ba0565b73ffffffffffffffffffffffffffffffffffffffff166117826112f3565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613912565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b606061180082611b34565b61183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613952565b60405180910390fd5b600061184961211a565b905060008151116118695760405180602001604052806000815250611894565b80611873846121ac565b6040516020016118849291906135d3565b6040516020818303038152906040525b915050919050565b60007358807bad0b376efc12f5ad86aac70e78ed67deae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ef57600190506118fc565b6118f9838361189c565b90505b92915050565b61190a611ba0565b73ffffffffffffffffffffffffffffffffffffffff166119286112f3565b73ffffffffffffffffffffffffffffffffffffffff161461197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590613912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613752565b60405180910390fd5b6119f781611ff8565b50565b600080611a056109a4565b9050611f40811115611a225767013fbe85edc90000915050611a49565b611194811115611a3d5767011c37937e080000915050611a49565b66f8b0a10e4700009150505b90565b612af881565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b1d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b2d5750611b2c8261230d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c1b83610dcc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c6c82611b34565b611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613812565b60405180910390fd5b6000611cb683610dcc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d2557508373ffffffffffffffffffffffffffffffffffffffff16611d0d84610807565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d365750611d35818561189c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d5f82610dcc565b73ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613932565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613792565b60405180910390fd5b611e30838383612377565b611e3b600082611ba8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8b9190613c1c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee29190613b3b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fa5600b61248b565b6000611fb1600b6124a1565b9050611fbd82826124af565b7f190ed5448529c72746aab1caaad9399cb8fab4361b1eb91a6f01f394583daa5181604051611fec9190613a12565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120c9848484611d3f565b6120d5848484846124cd565b612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90613732565b60405180910390fd5b50505050565b6060600c805461212990613d06565b80601f016020809104026020016040519081016040528092919081815260200182805461215590613d06565b80156121a25780601f10612177576101008083540402835291602001916121a2565b820191906000526020600020905b81548152906001019060200180831161218557829003601f168201915b5050505050905090565b606060008214156121f4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612308565b600082905060005b6000821461222657808061220f90613d69565b915050600a8261221f9190613b91565b91506121fc565b60008167ffffffffffffffff81111561224257612241613ece565b5b6040519080825280601f01601f1916602001820160405280156122745781602001600182028036833780820191505090505b5090505b600085146123015760018261228d9190613c1c565b9150600a8561229c9190613db2565b60306122a89190613b3b565b60f81b8183815181106122be576122bd613e9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122fa9190613b91565b9450612278565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612382838383612664565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123c5576123c081612669565b612404565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124035761240283826126b2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612447576124428161281f565b612486565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124855761248482826128f0565b5b5b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6124c982826040518060200160405280600081525061296f565b5050565b60006124ee8473ffffffffffffffffffffffffffffffffffffffff166129ca565b15612657578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612517611ba0565b8786866040518563ffffffff1660e01b81526004016125399493929190613627565b602060405180830381600087803b15801561255357600080fd5b505af192505050801561258457506040513d601f19601f82011682018060405250810190612581919061302a565b60015b612607573d80600081146125b4576040519150601f19603f3d011682016040523d82523d6000602084013e6125b9565b606091505b506000815114156125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f690613732565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061265c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126bf84611088565b6126c99190613c1c565b90506000600760008481526020019081526020016000205490508181146127ae576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128339190613c1c565b905060006009600084815260200190815260200160002054905060006008838154811061286357612862613e9f565b5b90600052602060002001549050806008838154811061288557612884613e9f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d4576128d3613e70565b5b6001900381819060005260206000200160009055905550505050565b60006128fb83611088565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61297983836129dd565b61298660008484846124cd565b6129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613732565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906138b2565b60405180910390fd5b612a5681611b34565b15612a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8d90613772565b60405180910390fd5b612aa260008383612377565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190613b3b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bb790613d06565b90600052602060002090601f016020900481019282612bd95760008555612c20565b82601f10612bf257805160ff1916838001178555612c20565b82800160010185558215612c20579182015b82811115612c1f578251825591602001919060010190612c04565b5b509050612c2d9190612c31565b5090565b5b80821115612c4a576000816000905550600101612c32565b5090565b6000612c61612c5c84613a52565b613a2d565b905082815260208101848484011115612c7d57612c7c613f0c565b5b612c88848285613cc4565b509392505050565b6000612ca3612c9e84613a83565b613a2d565b905082815260208101848484011115612cbf57612cbe613f0c565b5b612cca848285613cc4565b509392505050565b600081359050612ce181614605565b92915050565b60008083601f840112612cfd57612cfc613f02565b5b8235905067ffffffffffffffff811115612d1a57612d19613efd565b5b602083019150836020820283011115612d3657612d35613f07565b5b9250929050565b600081359050612d4c8161461c565b92915050565b600081359050612d6181614633565b92915050565b600081519050612d7681614633565b92915050565b600082601f830112612d9157612d90613f02565b5b8135612da1848260208601612c4e565b91505092915050565b600082601f830112612dbf57612dbe613f02565b5b8135612dcf848260208601612c90565b91505092915050565b600081359050612de78161464a565b92915050565b600060208284031215612e0357612e02613f16565b5b6000612e1184828501612cd2565b91505092915050565b60008060408385031215612e3157612e30613f16565b5b6000612e3f85828601612cd2565b9250506020612e5085828601612cd2565b9150509250929050565b600080600060608486031215612e7357612e72613f16565b5b6000612e8186828701612cd2565b9350506020612e9286828701612cd2565b9250506040612ea386828701612dd8565b9150509250925092565b60008060008060808587031215612ec757612ec6613f16565b5b6000612ed587828801612cd2565b9450506020612ee687828801612cd2565b9350506040612ef787828801612dd8565b925050606085013567ffffffffffffffff811115612f1857612f17613f11565b5b612f2487828801612d7c565b91505092959194509250565b60008060408385031215612f4757612f46613f16565b5b6000612f5585828601612cd2565b9250506020612f6685828601612d3d565b9150509250929050565b60008060408385031215612f8757612f86613f16565b5b6000612f9585828601612cd2565b9250506020612fa685828601612dd8565b9150509250929050565b60008060208385031215612fc757612fc6613f16565b5b600083013567ffffffffffffffff811115612fe557612fe4613f11565b5b612ff185828601612ce7565b92509250509250929050565b60006020828403121561301357613012613f16565b5b600061302184828501612d52565b91505092915050565b6000602082840312156130405761303f613f16565b5b600061304e84828501612d67565b91505092915050565b60006020828403121561306d5761306c613f16565b5b600082013567ffffffffffffffff81111561308b5761308a613f11565b5b61309784828501612daa565b91505092915050565b6000602082840312156130b6576130b5613f16565b5b60006130c484828501612dd8565b91505092915050565b60006130d983836135b5565b60208301905092915050565b6130ee81613c50565b82525050565b60006130ff82613ac4565b6131098185613af2565b935061311483613ab4565b8060005b8381101561314557815161312c88826130cd565b975061313783613ae5565b925050600181019050613118565b5085935050505092915050565b61315b81613c62565b82525050565b600061316c82613acf565b6131768185613b03565b9350613186818560208601613cd3565b61318f81613f1b565b840191505092915050565b60006131a582613ada565b6131af8185613b1f565b93506131bf818560208601613cd3565b6131c881613f1b565b840191505092915050565b60006131de82613ada565b6131e88185613b30565b93506131f8818560208601613cd3565b80840191505092915050565b6000613211601d83613b1f565b915061321c82613f2c565b602082019050919050565b6000613234602b83613b1f565b915061323f82613f55565b604082019050919050565b6000613257601783613b1f565b915061326282613fa4565b602082019050919050565b600061327a603283613b1f565b915061328582613fcd565b604082019050919050565b600061329d602683613b1f565b91506132a88261401c565b604082019050919050565b60006132c0601c83613b1f565b91506132cb8261406b565b602082019050919050565b60006132e3602483613b1f565b91506132ee82614094565b604082019050919050565b6000613306601983613b1f565b9150613311826140e3565b602082019050919050565b6000613329601483613b1f565b91506133348261410c565b602082019050919050565b600061334c603783613b1f565b915061335782614135565b604082019050919050565b600061336f602c83613b1f565b915061337a82614184565b604082019050919050565b6000613392603483613b1f565b915061339d826141d3565b604082019050919050565b60006133b5603883613b1f565b91506133c082614222565b604082019050919050565b60006133d8602a83613b1f565b91506133e382614271565b604082019050919050565b60006133fb602983613b1f565b9150613406826142c0565b604082019050919050565b600061341e602083613b1f565b91506134298261430f565b602082019050919050565b6000613441602c83613b1f565b915061344c82614338565b604082019050919050565b6000613464602f83613b1f565b915061346f82614387565b604082019050919050565b6000613487602083613b1f565b9150613492826143d6565b602082019050919050565b60006134aa602983613b1f565b91506134b5826143ff565b604082019050919050565b60006134cd602f83613b1f565b91506134d88261444e565b604082019050919050565b60006134f0602183613b1f565b91506134fb8261449d565b604082019050919050565b6000613513603883613b1f565b915061351e826144ec565b604082019050919050565b6000613536600083613b14565b91506135418261453b565b600082019050919050565b6000613559601083613b1f565b91506135648261453e565b602082019050919050565b600061357c603183613b1f565b915061358782614567565b604082019050919050565b600061359f602c83613b1f565b91506135aa826145b6565b604082019050919050565b6135be81613cba565b82525050565b6135cd81613cba565b82525050565b60006135df82856131d3565b91506135eb82846131d3565b91508190509392505050565b600061360282613529565b9150819050919050565b600060208201905061362160008301846130e5565b92915050565b600060808201905061363c60008301876130e5565b61364960208301866130e5565b61365660408301856135c4565b81810360608301526136688184613161565b905095945050505050565b6000602082019050818103600083015261368d81846130f4565b905092915050565b60006020820190506136aa6000830184613152565b92915050565b600060208201905081810360008301526136ca818461319a565b905092915050565b600060208201905081810360008301526136eb81613204565b9050919050565b6000602082019050818103600083015261370b81613227565b9050919050565b6000602082019050818103600083015261372b8161324a565b9050919050565b6000602082019050818103600083015261374b8161326d565b9050919050565b6000602082019050818103600083015261376b81613290565b9050919050565b6000602082019050818103600083015261378b816132b3565b9050919050565b600060208201905081810360008301526137ab816132d6565b9050919050565b600060208201905081810360008301526137cb816132f9565b9050919050565b600060208201905081810360008301526137eb8161331c565b9050919050565b6000602082019050818103600083015261380b8161333f565b9050919050565b6000602082019050818103600083015261382b81613362565b9050919050565b6000602082019050818103600083015261384b81613385565b9050919050565b6000602082019050818103600083015261386b816133a8565b9050919050565b6000602082019050818103600083015261388b816133cb565b9050919050565b600060208201905081810360008301526138ab816133ee565b9050919050565b600060208201905081810360008301526138cb81613411565b9050919050565b600060208201905081810360008301526138eb81613434565b9050919050565b6000602082019050818103600083015261390b81613457565b9050919050565b6000602082019050818103600083015261392b8161347a565b9050919050565b6000602082019050818103600083015261394b8161349d565b9050919050565b6000602082019050818103600083015261396b816134c0565b9050919050565b6000602082019050818103600083015261398b816134e3565b9050919050565b600060208201905081810360008301526139ab81613506565b9050919050565b600060208201905081810360008301526139cb8161354c565b9050919050565b600060208201905081810360008301526139eb8161356f565b9050919050565b60006020820190508181036000830152613a0b81613592565b9050919050565b6000602082019050613a2760008301846135c4565b92915050565b6000613a37613a48565b9050613a438282613d38565b919050565b6000604051905090565b600067ffffffffffffffff821115613a6d57613a6c613ece565b5b613a7682613f1b565b9050602081019050919050565b600067ffffffffffffffff821115613a9e57613a9d613ece565b5b613aa782613f1b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b4682613cba565b9150613b5183613cba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8657613b85613de3565b5b828201905092915050565b6000613b9c82613cba565b9150613ba783613cba565b925082613bb757613bb6613e12565b5b828204905092915050565b6000613bcd82613cba565b9150613bd883613cba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c1157613c10613de3565b5b828202905092915050565b6000613c2782613cba565b9150613c3283613cba565b925082821015613c4557613c44613de3565b5b828203905092915050565b6000613c5b82613c9a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cf1578082015181840152602081019050613cd6565b83811115613d00576000848401525b50505050565b60006002820490506001821680613d1e57607f821691505b60208210811415613d3257613d31613e41565b5b50919050565b613d4182613f1b565b810181811067ffffffffffffffff82111715613d6057613d5f613ece565b5b80604052505050565b6000613d7482613cba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613da757613da6613de3565b5b600182019050919050565b6000613dbd82613cba565b9150613dc883613cba565b925082613dd857613dd7613e12565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f41646472657373206e6f7420666f756e6420666f72206d696e74696e67000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720746f204e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f4d696e20312026204d617820323020476f6f736550756e6b732063616e20626560008201527f206d696e74656420706572207472616e73616374696f6e000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f737570706c79206f6620476f6f736550756e6b73000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c65206d696e74696e672077696c6c20657863656564206d61786960008201527f6d756d20737570706c79206f6620476f6f736550756e6b730000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61460e81613c50565b811461461957600080fd5b50565b61462581613c62565b811461463057600080fd5b50565b61463c81613c6e565b811461464757600080fd5b50565b61465381613cba565b811461465e57600080fd5b5056fea26469706673582212203120c3c9018ba65e336955f265547408a241ccd9beba67d18a23a2df185364d864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6444726f7a6f6e6b78556b4634454e79383461353769416d5169705531446f6b726d716a637939714b4a4a582f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a22cb46511610095578063e985e9c511610064578063e985e9c51461063f578063f2fde38b1461067c578063fb107a4f146106a5578063ffe85321146106d0576101cd565b8063a22cb46514610599578063b88d4fde146105c2578063bb33d729146105eb578063c87b56dd14610602576101cd565b80638da5cb5b116100d15780638da5cb5b146104fc57806395d89b411461052757806399288dbb146105525780639e4a6d5d1461057d576101cd565b806370a0823114610491578063715018a6146104ce578063853828b6146104e5576101cd565b806334918dfd1161016f57806355367ba91161013e57806355367ba9146103eb57806355f804b3146104025780636352211e1461042b57806365029d8214610468576101cd565b806334918dfd1461033157806342842e0e14610348578063438b6300146103715780634f6ccce7146103ae576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612ffd565b6106fb565b6040516102069190613695565b60405180910390f35b34801561021b57600080fd5b50610224610775565b60405161023191906136b0565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906130a0565b610807565b60405161026e919061360c565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f70565b61088c565b005b3480156102ac57600080fd5b506102b56109a4565b6040516102c29190613a12565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612e5a565b6109b1565b005b34801561030057600080fd5b5061031b60048036038101906103169190612f70565b610a11565b6040516103289190613a12565b60405180910390f35b34801561033d57600080fd5b50610346610ab6565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e5a565b610b5e565b005b34801561037d57600080fd5b5061039860048036038101906103939190612ded565b610b7e565b6040516103a59190613673565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130a0565b610c2c565b6040516103e29190613a12565b60405180910390f35b3480156103f757600080fd5b50610400610c9d565b005b34801561040e57600080fd5b5061042960048036038101906104249190613057565b610d36565b005b34801561043757600080fd5b50610452600480360381019061044d91906130a0565b610dcc565b60405161045f919061360c565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190612fb0565b610e7e565b005b34801561049d57600080fd5b506104b860048036038101906104b39190612ded565b611088565b6040516104c59190613a12565b60405180910390f35b3480156104da57600080fd5b506104e3611140565b005b3480156104f157600080fd5b506104fa6111c8565b005b34801561050857600080fd5b506105116112f3565b60405161051e919061360c565b60405180910390f35b34801561053357600080fd5b5061053c61131d565b60405161054991906136b0565b60405180910390f35b34801561055e57600080fd5b506105676113af565b6040516105749190613695565b60405180910390f35b610597600480360381019061059291906130a0565b6113c2565b005b3480156105a557600080fd5b506105c060048036038101906105bb9190612f30565b611579565b005b3480156105ce57600080fd5b506105e960048036038101906105e49190612ead565b6116fa565b005b3480156105f757600080fd5b5061060061175c565b005b34801561060e57600080fd5b50610629600480360381019061062491906130a0565b6117f5565b60405161063691906136b0565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190612e1a565b61189c565b6040516106739190613695565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190612ded565b611902565b005b3480156106b157600080fd5b506106ba6119fa565b6040516106c79190613a12565b60405180910390f35b3480156106dc57600080fd5b506106e5611a4c565b6040516106f29190613a12565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e575061076d82611a52565b5b9050919050565b60606000805461078490613d06565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090613d06565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050905090565b600061081282611b34565b610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906138d2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089782610dcc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610927611ba0565b73ffffffffffffffffffffffffffffffffffffffff161480610956575061095581610950611ba0565b61189c565b5b610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90613852565b60405180910390fd5b61099f8383611ba8565b505050565b6000600880549050905090565b6109c26109bc611ba0565b82611c61565b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906139d2565b60405180910390fd5b610a0c838383611d3f565b505050565b6000610a1c83611088565b8210610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a54906136f2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610abe611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610adc6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613912565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b610b79838383604051806020016040528060008152506116fa565b505050565b60606000610b8b83611088565b905060008167ffffffffffffffff811115610ba957610ba8613ece565b5b604051908082528060200260200182016040528015610bd75781602001602082028036833780820191505090505b50905060005b82811015610c2157610bef8582610a11565b828281518110610c0257610c01613e9f565b5b6020026020010181815250508080610c1990613d69565b915050610bdd565b508092505050919050565b6000610c366109a4565b8210610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e906139f2565b60405180910390fd5b60088281548110610c8b57610c8a613e9f565b5b90600052602060002001549050919050565b610ca5611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610cc36112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613912565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b610d3e611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610d5c6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613912565b60405180910390fd5b80600c9080519060200190610dc8929190612bab565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c90613892565b60405180910390fd5b80915050919050565b610e86611ba0565b73ffffffffffffffffffffffffffffffffffffffff16610ea46112f3565b73ffffffffffffffffffffffffffffffffffffffff1614610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613912565b60405180910390fd5b612af882829050610f096109a4565b610f139190613b3b565b1115610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613992565b60405180910390fd5b6000828290501415610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906136d2565b60405180910390fd5b60005b8282905081101561108357600073ffffffffffffffffffffffffffffffffffffffff16838383818110610fd457610fd3613e9f565b5b9050602002016020810190610fe99190612ded565b73ffffffffffffffffffffffffffffffffffffffff161415611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613712565b60405180910390fd5b61107083838381811061105657611055613e9f565b5b905060200201602081019061106b9190612ded565b611f9b565b808061107b90613d69565b915050610f9e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090613872565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611148611ba0565b73ffffffffffffffffffffffffffffffffffffffff166111666112f3565b73ffffffffffffffffffffffffffffffffffffffff16146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390613912565b60405180910390fd5b6111c66000611ff8565b565b6111d0611ba0565b73ffffffffffffffffffffffffffffffffffffffff166111ee6112f3565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613912565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161126a906135f7565b60006040518083038185875af1925050503d80600081146112a7576040519150601f19603f3d011682016040523d82523d6000602084013e6112ac565b606091505b50509050806112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906139b2565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132c90613d06565b80601f016020809104026020016040519081016040528092919081815260200182805461135890613d06565b80156113a55780601f1061137a576101008083540402835291602001916113a5565b820191906000526020600020905b81548152906001019060200180831161138857829003601f168201915b5050505050905090565b600d60009054906101000a900460ff1681565b6113ca6112f3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461144c57600d60009054906101000a900460ff1661144b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611442906137d2565b60405180910390fd5b5b60008111801561145d575060148111155b61149c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611493906137f2565b60405180910390fd5b612af8816114a86109a4565b6114b29190613b3b565b11156114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613832565b60405180910390fd5b806114fc6119fa565b6115069190613bc2565b341015611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906138f2565b60405180910390fd5b600033905060005b828110156115745761156182611f9b565b808061156c90613d69565b915050611550565b505050565b611581611ba0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906137b2565b60405180910390fd5b80600560006115fc611ba0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a9611ba0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ee9190613695565b60405180910390a35050565b61170b611705611ba0565b83611c61565b61174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906139d2565b60405180910390fd5b611756848484846120be565b50505050565b611764611ba0565b73ffffffffffffffffffffffffffffffffffffffff166117826112f3565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613912565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b606061180082611b34565b61183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183690613952565b60405180910390fd5b600061184961211a565b905060008151116118695760405180602001604052806000815250611894565b80611873846121ac565b6040516020016118849291906135d3565b6040516020818303038152906040525b915050919050565b60007358807bad0b376efc12f5ad86aac70e78ed67deae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ef57600190506118fc565b6118f9838361189c565b90505b92915050565b61190a611ba0565b73ffffffffffffffffffffffffffffffffffffffff166119286112f3565b73ffffffffffffffffffffffffffffffffffffffff161461197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590613912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613752565b60405180910390fd5b6119f781611ff8565b50565b600080611a056109a4565b9050611f40811115611a225767013fbe85edc90000915050611a49565b611194811115611a3d5767011c37937e080000915050611a49565b66f8b0a10e4700009150505b90565b612af881565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b1d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b2d5750611b2c8261230d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c1b83610dcc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c6c82611b34565b611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca290613812565b60405180910390fd5b6000611cb683610dcc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d2557508373ffffffffffffffffffffffffffffffffffffffff16611d0d84610807565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d365750611d35818561189c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d5f82610dcc565b73ffffffffffffffffffffffffffffffffffffffff1614611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613932565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90613792565b60405180910390fd5b611e30838383612377565b611e3b600082611ba8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e8b9190613c1c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee29190613b3b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fa5600b61248b565b6000611fb1600b6124a1565b9050611fbd82826124af565b7f190ed5448529c72746aab1caaad9399cb8fab4361b1eb91a6f01f394583daa5181604051611fec9190613a12565b60405180910390a15050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120c9848484611d3f565b6120d5848484846124cd565b612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90613732565b60405180910390fd5b50505050565b6060600c805461212990613d06565b80601f016020809104026020016040519081016040528092919081815260200182805461215590613d06565b80156121a25780601f10612177576101008083540402835291602001916121a2565b820191906000526020600020905b81548152906001019060200180831161218557829003601f168201915b5050505050905090565b606060008214156121f4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612308565b600082905060005b6000821461222657808061220f90613d69565b915050600a8261221f9190613b91565b91506121fc565b60008167ffffffffffffffff81111561224257612241613ece565b5b6040519080825280601f01601f1916602001820160405280156122745781602001600182028036833780820191505090505b5090505b600085146123015760018261228d9190613c1c565b9150600a8561229c9190613db2565b60306122a89190613b3b565b60f81b8183815181106122be576122bd613e9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122fa9190613b91565b9450612278565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612382838383612664565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123c5576123c081612669565b612404565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124035761240283826126b2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612447576124428161281f565b612486565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124855761248482826128f0565b5b5b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6124c982826040518060200160405280600081525061296f565b5050565b60006124ee8473ffffffffffffffffffffffffffffffffffffffff166129ca565b15612657578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612517611ba0565b8786866040518563ffffffff1660e01b81526004016125399493929190613627565b602060405180830381600087803b15801561255357600080fd5b505af192505050801561258457506040513d601f19601f82011682018060405250810190612581919061302a565b60015b612607573d80600081146125b4576040519150601f19603f3d011682016040523d82523d6000602084013e6125b9565b606091505b506000815114156125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f690613732565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061265c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126bf84611088565b6126c99190613c1c565b90506000600760008481526020019081526020016000205490508181146127ae576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128339190613c1c565b905060006009600084815260200190815260200160002054905060006008838154811061286357612862613e9f565b5b90600052602060002001549050806008838154811061288557612884613e9f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d4576128d3613e70565b5b6001900381819060005260206000200160009055905550505050565b60006128fb83611088565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61297983836129dd565b61298660008484846124cd565b6129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613732565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906138b2565b60405180910390fd5b612a5681611b34565b15612a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8d90613772565b60405180910390fd5b612aa260008383612377565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190613b3b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bb790613d06565b90600052602060002090601f016020900481019282612bd95760008555612c20565b82601f10612bf257805160ff1916838001178555612c20565b82800160010185558215612c20579182015b82811115612c1f578251825591602001919060010190612c04565b5b509050612c2d9190612c31565b5090565b5b80821115612c4a576000816000905550600101612c32565b5090565b6000612c61612c5c84613a52565b613a2d565b905082815260208101848484011115612c7d57612c7c613f0c565b5b612c88848285613cc4565b509392505050565b6000612ca3612c9e84613a83565b613a2d565b905082815260208101848484011115612cbf57612cbe613f0c565b5b612cca848285613cc4565b509392505050565b600081359050612ce181614605565b92915050565b60008083601f840112612cfd57612cfc613f02565b5b8235905067ffffffffffffffff811115612d1a57612d19613efd565b5b602083019150836020820283011115612d3657612d35613f07565b5b9250929050565b600081359050612d4c8161461c565b92915050565b600081359050612d6181614633565b92915050565b600081519050612d7681614633565b92915050565b600082601f830112612d9157612d90613f02565b5b8135612da1848260208601612c4e565b91505092915050565b600082601f830112612dbf57612dbe613f02565b5b8135612dcf848260208601612c90565b91505092915050565b600081359050612de78161464a565b92915050565b600060208284031215612e0357612e02613f16565b5b6000612e1184828501612cd2565b91505092915050565b60008060408385031215612e3157612e30613f16565b5b6000612e3f85828601612cd2565b9250506020612e5085828601612cd2565b9150509250929050565b600080600060608486031215612e7357612e72613f16565b5b6000612e8186828701612cd2565b9350506020612e9286828701612cd2565b9250506040612ea386828701612dd8565b9150509250925092565b60008060008060808587031215612ec757612ec6613f16565b5b6000612ed587828801612cd2565b9450506020612ee687828801612cd2565b9350506040612ef787828801612dd8565b925050606085013567ffffffffffffffff811115612f1857612f17613f11565b5b612f2487828801612d7c565b91505092959194509250565b60008060408385031215612f4757612f46613f16565b5b6000612f5585828601612cd2565b9250506020612f6685828601612d3d565b9150509250929050565b60008060408385031215612f8757612f86613f16565b5b6000612f9585828601612cd2565b9250506020612fa685828601612dd8565b9150509250929050565b60008060208385031215612fc757612fc6613f16565b5b600083013567ffffffffffffffff811115612fe557612fe4613f11565b5b612ff185828601612ce7565b92509250509250929050565b60006020828403121561301357613012613f16565b5b600061302184828501612d52565b91505092915050565b6000602082840312156130405761303f613f16565b5b600061304e84828501612d67565b91505092915050565b60006020828403121561306d5761306c613f16565b5b600082013567ffffffffffffffff81111561308b5761308a613f11565b5b61309784828501612daa565b91505092915050565b6000602082840312156130b6576130b5613f16565b5b60006130c484828501612dd8565b91505092915050565b60006130d983836135b5565b60208301905092915050565b6130ee81613c50565b82525050565b60006130ff82613ac4565b6131098185613af2565b935061311483613ab4565b8060005b8381101561314557815161312c88826130cd565b975061313783613ae5565b925050600181019050613118565b5085935050505092915050565b61315b81613c62565b82525050565b600061316c82613acf565b6131768185613b03565b9350613186818560208601613cd3565b61318f81613f1b565b840191505092915050565b60006131a582613ada565b6131af8185613b1f565b93506131bf818560208601613cd3565b6131c881613f1b565b840191505092915050565b60006131de82613ada565b6131e88185613b30565b93506131f8818560208601613cd3565b80840191505092915050565b6000613211601d83613b1f565b915061321c82613f2c565b602082019050919050565b6000613234602b83613b1f565b915061323f82613f55565b604082019050919050565b6000613257601783613b1f565b915061326282613fa4565b602082019050919050565b600061327a603283613b1f565b915061328582613fcd565b604082019050919050565b600061329d602683613b1f565b91506132a88261401c565b604082019050919050565b60006132c0601c83613b1f565b91506132cb8261406b565b602082019050919050565b60006132e3602483613b1f565b91506132ee82614094565b604082019050919050565b6000613306601983613b1f565b9150613311826140e3565b602082019050919050565b6000613329601483613b1f565b91506133348261410c565b602082019050919050565b600061334c603783613b1f565b915061335782614135565b604082019050919050565b600061336f602c83613b1f565b915061337a82614184565b604082019050919050565b6000613392603483613b1f565b915061339d826141d3565b604082019050919050565b60006133b5603883613b1f565b91506133c082614222565b604082019050919050565b60006133d8602a83613b1f565b91506133e382614271565b604082019050919050565b60006133fb602983613b1f565b9150613406826142c0565b604082019050919050565b600061341e602083613b1f565b91506134298261430f565b602082019050919050565b6000613441602c83613b1f565b915061344c82614338565b604082019050919050565b6000613464602f83613b1f565b915061346f82614387565b604082019050919050565b6000613487602083613b1f565b9150613492826143d6565b602082019050919050565b60006134aa602983613b1f565b91506134b5826143ff565b604082019050919050565b60006134cd602f83613b1f565b91506134d88261444e565b604082019050919050565b60006134f0602183613b1f565b91506134fb8261449d565b604082019050919050565b6000613513603883613b1f565b915061351e826144ec565b604082019050919050565b6000613536600083613b14565b91506135418261453b565b600082019050919050565b6000613559601083613b1f565b91506135648261453e565b602082019050919050565b600061357c603183613b1f565b915061358782614567565b604082019050919050565b600061359f602c83613b1f565b91506135aa826145b6565b604082019050919050565b6135be81613cba565b82525050565b6135cd81613cba565b82525050565b60006135df82856131d3565b91506135eb82846131d3565b91508190509392505050565b600061360282613529565b9150819050919050565b600060208201905061362160008301846130e5565b92915050565b600060808201905061363c60008301876130e5565b61364960208301866130e5565b61365660408301856135c4565b81810360608301526136688184613161565b905095945050505050565b6000602082019050818103600083015261368d81846130f4565b905092915050565b60006020820190506136aa6000830184613152565b92915050565b600060208201905081810360008301526136ca818461319a565b905092915050565b600060208201905081810360008301526136eb81613204565b9050919050565b6000602082019050818103600083015261370b81613227565b9050919050565b6000602082019050818103600083015261372b8161324a565b9050919050565b6000602082019050818103600083015261374b8161326d565b9050919050565b6000602082019050818103600083015261376b81613290565b9050919050565b6000602082019050818103600083015261378b816132b3565b9050919050565b600060208201905081810360008301526137ab816132d6565b9050919050565b600060208201905081810360008301526137cb816132f9565b9050919050565b600060208201905081810360008301526137eb8161331c565b9050919050565b6000602082019050818103600083015261380b8161333f565b9050919050565b6000602082019050818103600083015261382b81613362565b9050919050565b6000602082019050818103600083015261384b81613385565b9050919050565b6000602082019050818103600083015261386b816133a8565b9050919050565b6000602082019050818103600083015261388b816133cb565b9050919050565b600060208201905081810360008301526138ab816133ee565b9050919050565b600060208201905081810360008301526138cb81613411565b9050919050565b600060208201905081810360008301526138eb81613434565b9050919050565b6000602082019050818103600083015261390b81613457565b9050919050565b6000602082019050818103600083015261392b8161347a565b9050919050565b6000602082019050818103600083015261394b8161349d565b9050919050565b6000602082019050818103600083015261396b816134c0565b9050919050565b6000602082019050818103600083015261398b816134e3565b9050919050565b600060208201905081810360008301526139ab81613506565b9050919050565b600060208201905081810360008301526139cb8161354c565b9050919050565b600060208201905081810360008301526139eb8161356f565b9050919050565b60006020820190508181036000830152613a0b81613592565b9050919050565b6000602082019050613a2760008301846135c4565b92915050565b6000613a37613a48565b9050613a438282613d38565b919050565b6000604051905090565b600067ffffffffffffffff821115613a6d57613a6c613ece565b5b613a7682613f1b565b9050602081019050919050565b600067ffffffffffffffff821115613a9e57613a9d613ece565b5b613aa782613f1b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b4682613cba565b9150613b5183613cba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b8657613b85613de3565b5b828201905092915050565b6000613b9c82613cba565b9150613ba783613cba565b925082613bb757613bb6613e12565b5b828204905092915050565b6000613bcd82613cba565b9150613bd883613cba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c1157613c10613de3565b5b828202905092915050565b6000613c2782613cba565b9150613c3283613cba565b925082821015613c4557613c44613de3565b5b828203905092915050565b6000613c5b82613c9a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cf1578082015181840152602081019050613cd6565b83811115613d00576000848401525b50505050565b60006002820490506001821680613d1e57607f821691505b60208210811415613d3257613d31613e41565b5b50919050565b613d4182613f1b565b810181811067ffffffffffffffff82111715613d6057613d5f613ece565b5b80604052505050565b6000613d7482613cba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613da757613da6613de3565b5b600182019050919050565b6000613dbd82613cba565b9150613dc883613cba565b925082613dd857613dd7613e12565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f41646472657373206e6f7420666f756e6420666f72206d696e74696e67000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720746f204e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206f70656e20796574000000000000000000000000600082015250565b7f4d696e20312026204d617820323020476f6f736550756e6b732063616e20626560008201527f206d696e74656420706572207472616e73616374696f6e000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f737570706c79206f6620476f6f736550756e6b73000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45746865722073656e7420776974682074686973207472616e73616374696f6e60008201527f206973206e6f7420636f72726563740000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c65206d696e74696e672077696c6c20657863656564206d61786960008201527f6d756d20737570706c79206f6620476f6f736550756e6b730000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61460e81613c50565b811461461957600080fd5b50565b61462581613c62565b811461463057600080fd5b50565b61463c81613c6e565b811461464757600080fd5b50565b61465381613cba565b811461465e57600080fd5b5056fea26469706673582212203120c3c9018ba65e336955f265547408a241ccd9beba67d18a23a2df185364d864736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6444726f7a6f6e6b78556b4634454e79383461353769416d5169705531446f6b726d716a637939714b4a4a582f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://ipfs.io/ipfs/QmdDrozonkxUkF4ENy84a57iAmQipU1Dokrmqjcy9qKJJX/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d6444726f7a6f6e6b78
Arg [3] : 556b4634454e79383461353769416d5169705531446f6b726d716a637939714b
Arg [4] : 4a4a582f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

46658:3510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40192:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27098:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28791:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28314:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40995:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30104:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40576:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47679:83;;;;;;;;;;;;;:::i;:::-;;30551:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47130:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41185:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49985:73;;;;;;;;;;;;;:::i;:::-;;47523:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26705:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48370:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26348:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9805:94;;;;;;;;;;;;;:::i;:::-;;47770:176;;;;;;;;;;;;;:::i;:::-;;9154:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27267:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46872:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48903:726;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29171:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30807:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50091:74;;;;;;;;;;;;;:::i;:::-;;27442:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29569;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10054:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47954:408;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46798:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40192:300;40339:4;40396:35;40381:50;;;:11;:50;;;;:103;;;;40448:36;40472:11;40448:23;:36::i;:::-;40381:103;40361:123;;40192:300;;;:::o;27098:100::-;27152:13;27185:5;27178:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27098:100;:::o;28791:308::-;28912:7;28959:16;28967:7;28959;:16::i;:::-;28937:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29067:15;:24;29083:7;29067:24;;;;;;;;;;;;;;;;;;;;;29060:31;;28791:308;;;:::o;28314:411::-;28395:13;28411:23;28426:7;28411:14;:23::i;:::-;28395:39;;28459:5;28453:11;;:2;:11;;;;28445:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28553:5;28537:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28562:37;28579:5;28586:12;:10;:12::i;:::-;28562:16;:37::i;:::-;28537:62;28515:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28696:21;28705:2;28709:7;28696:8;:21::i;:::-;28384:341;28314:411;;:::o;40995:113::-;41056:7;41083:10;:17;;;;41076:24;;40995:113;:::o;30104:376::-;30313:41;30332:12;:10;:12::i;:::-;30346:7;30313:18;:41::i;:::-;30291:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30444:28;30454:4;30460:2;30464:7;30444:9;:28::i;:::-;30104:376;;;:::o;40576:343::-;40718:7;40773:23;40790:5;40773:16;:23::i;:::-;40765:5;:31;40743:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40885:12;:19;40898:5;40885:19;;;;;;;;;;;;;;;:26;40905:5;40885:26;;;;;;;;;;;;40878:33;;40576:343;;;;:::o;47679:83::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47746:8:::1;;;;;;;;;;;47745:9;47734:8;;:20;;;;;;;;;;;;;;;;;;47679:83::o:0;30551:185::-;30689:39;30706:4;30712:2;30716:7;30689:39;;;;;;;;;;;;:16;:39::i;:::-;30551:185;;;:::o;47130:385::-;47219:16;47253:18;47274:17;47284:6;47274:9;:17::i;:::-;47253:38;;47304:25;47346:10;47332:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47304:53;;47373:9;47368:112;47392:10;47388:1;:14;47368:112;;;47438:30;47458:6;47466:1;47438:19;:30::i;:::-;47424:8;47433:1;47424:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47404:3;;;;;:::i;:::-;;;;47368:112;;;;47499:8;47492:15;;;;47130:385;;;:::o;41185:320::-;41305:7;41360:30;:28;:30::i;:::-;41352:5;:38;41330:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;41480:10;41491:5;41480:17;;;;;;;;:::i;:::-;;;;;;;;;;41473:24;;41185:320;;;:::o;49985:73::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50045:5:::1;50034:8;;:16;;;;;;;;;;;;;;;;;;49985:73::o:0;47523:101::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47609:7:::1;47594:12;:22;;;;;;;;;;;;:::i;:::-;;47523:101:::0;:::o;26705:326::-;26822:7;26847:13;26863:7;:16;26871:7;26863:16;;;;;;;;;;;;;;;;;;;;;26847:32;;26929:1;26912:19;;:5;:19;;;;26890:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27018:5;27011:12;;;26705:326;;;:::o;48370:502::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46834:5:::1;48487:11;;:18;;48471:13;:11;:13::i;:::-;:34;;;;:::i;:::-;:47;;48449:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;48643:1;48621:11;;:18;;:23;;48613:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48694:9;48689:176;48713:11;;:18;;48709:1;:22;48689:176;;;48787:1;48761:28;;:11;;48773:1;48761:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:28;;;;48753:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48832:21;48838:11;;48850:1;48838:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48832:5;:21::i;:::-;48733:3;;;;;:::i;:::-;;;;48689:176;;;;48370:502:::0;;:::o;26348:295::-;26465:7;26529:1;26512:19;;:5;:19;;;;26490:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26619:9;:16;26629:5;26619:16;;;;;;;;;;;;;;;;26612:23;;26348:295;;;:::o;9805:94::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9870:21:::1;9888:1;9870:9;:21::i;:::-;9805:94::o:0;47770:176::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47824:12:::1;47842:10;:15;;47865:21;47842:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47823:68;;;47910:7;47902:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;47812:134;47770:176::o:0;9154:87::-;9200:7;9227:6;;;;;;;;;;;9220:13;;9154:87;:::o;27267:104::-;27323:13;27356:7;27349:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27267:104;:::o;46872:27::-;;;;;;;;;;;;;:::o;48903:726::-;48989:7;:5;:7::i;:::-;48975:21;;:10;:21;;;48971:95;;49021:8;;;;;;;;;;;49013:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;48971:95;49107:1;49098:6;:10;:26;;;;;49122:2;49112:6;:12;;49098:26;49076:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;46834:5;49256:6;49240:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;49218:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;49417:6;49401:13;:11;:13::i;:::-;:22;;;;:::i;:::-;49388:9;:35;;49366:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;49511:11;49525:10;49511:24;;49553:9;49548:74;49572:6;49568:1;:10;49548:74;;;49600:10;49606:3;49600:5;:10::i;:::-;49580:3;;;;;:::i;:::-;;;;49548:74;;;;48960:669;48903:726;:::o;29171:327::-;29318:12;:10;:12::i;:::-;29306:24;;:8;:24;;;;29298:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29418:8;29373:18;:32;29392:12;:10;:12::i;:::-;29373:32;;;;;;;;;;;;;;;:42;29406:8;29373:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29471:8;29442:48;;29457:12;:10;:12::i;:::-;29442:48;;;29481:8;29442:48;;;;;;:::i;:::-;;;;;;;;29171:327;;:::o;30807:365::-;30996:41;31015:12;:10;:12::i;:::-;31029:7;30996:18;:41::i;:::-;30974:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31125:39;31139:4;31145:2;31149:7;31158:5;31125:13;:39::i;:::-;30807:365;;;;:::o;50091:74::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50153:4:::1;50142:8;;:15;;;;;;;;;;;;;;;;;;50091:74::o:0;27442:468::-;27560:13;27613:16;27621:7;27613;:16::i;:::-;27591:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27717:21;27741:10;:8;:10::i;:::-;27717:34;;27806:1;27788:7;27782:21;:25;:120;;;;;;;;;;;;;;;;;27851:7;27860:18;:7;:16;:18::i;:::-;27834:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27782:120;27762:140;;;27442:468;;;:::o;29569:::-;29685:15;29812:42;29791:64;;:9;:64;;;29787:108;;;29879:4;29872:11;;;;29787:108;29987:42;30011:6;30019:9;29987:23;:42::i;:::-;29980:49;;29569:468;;;;;:::o;10054:229::-;9385:12;:10;:12::i;:::-;9374:23;;:7;:5;:7::i;:::-;:23;;;9366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10177:1:::1;10157:22;;:8;:22;;;;10135:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10256:19;10266:8;10256:9;:19::i;:::-;10054:229:::0;:::o;47954:408::-;47998:7;48018:21;48042:13;:11;:13::i;:::-;48018:37;;48088:4;48072:13;:20;48068:287;;;48116:17;48109:24;;;;;48068:287;48196:4;48180:13;:20;48176:179;;;48224:17;48217:24;;;;;48176:179;48305:17;48298:24;;;47954:408;;:::o;46798:41::-;46834:5;46798:41;:::o;25929:355::-;26076:4;26133:25;26118:40;;;:11;:40;;;;:105;;;;26190:33;26175:48;;;:11;:48;;;;26118:105;:158;;;;26240:36;26264:11;26240:23;:36::i;:::-;26118:158;26098:178;;25929:355;;;:::o;32719:127::-;32784:4;32836:1;32808:30;;:7;:16;32816:7;32808:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32801:37;;32719:127;;;:::o;2127:98::-;2180:7;2207:10;2200:17;;2127:98;:::o;36842:174::-;36944:2;36917:15;:24;36933:7;36917:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37000:7;36996:2;36962:46;;36971:23;36986:7;36971:14;:23::i;:::-;36962:46;;;;;;;;;;;;36842:174;;:::o;33013:452::-;33142:4;33186:16;33194:7;33186;:16::i;:::-;33164:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33285:13;33301:23;33316:7;33301:14;:23::i;:::-;33285:39;;33354:5;33343:16;;:7;:16;;;:64;;;;33400:7;33376:31;;:20;33388:7;33376:11;:20::i;:::-;:31;;;33343:64;:113;;;;33424:32;33441:5;33448:7;33424:16;:32::i;:::-;33343:113;33335:122;;;33013:452;;;;:::o;36109:615::-;36282:4;36255:31;;:23;36270:7;36255:14;:23::i;:::-;:31;;;36233:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;36388:1;36374:16;;:2;:16;;;;36366:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36444:39;36465:4;36471:2;36475:7;36444:20;:39::i;:::-;36548:29;36565:1;36569:7;36548:8;:29::i;:::-;36609:1;36590:9;:15;36600:4;36590:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36638:1;36621:9;:13;36631:2;36621:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36669:2;36650:7;:16;36658:7;36650:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36708:7;36704:2;36689:27;;36698:4;36689:27;;;;;;;;;;;;36109:615;;;:::o;49637:197::-;49684:20;:8;:18;:20::i;:::-;49715:15;49733:18;:8;:16;:18::i;:::-;49715:36;;49762:23;49772:3;49777:7;49762:9;:23::i;:::-;49801:25;49818:7;49801:25;;;;;;:::i;:::-;;;;;;;;49673:161;49637:197;:::o;10291:173::-;10347:16;10366:6;;;;;;;;;;;10347:25;;10392:8;10383:6;;:17;;;;;;;;;;;;;;;;;;10447:8;10416:40;;10437:8;10416:40;;;;;;;;;;;;10336:128;10291:173;:::o;32054:352::-;32211:28;32221:4;32227:2;32231:7;32211:9;:28::i;:::-;32272:48;32295:4;32301:2;32305:7;32314:5;32272:22;:48::i;:::-;32250:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:352;;;;:::o;49842:113::-;49902:13;49935:12;49928:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49842:113;:::o;12796:723::-;12852:13;13082:1;13073:5;:10;13069:53;;;13100:10;;;;;;;;;;;;;;;;;;;;;13069:53;13132:12;13147:5;13132:20;;13163:14;13188:78;13203:1;13195:4;:9;13188:78;;13221:8;;;;;:::i;:::-;;;;13252:2;13244:10;;;;;:::i;:::-;;;13188:78;;;13276:19;13308:6;13298:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13276:39;;13326:154;13342:1;13333:5;:10;13326:154;;13370:1;13360:11;;;;;:::i;:::-;;;13437:2;13429:5;:10;;;;:::i;:::-;13416:2;:24;;;;:::i;:::-;13403:39;;13386:6;13393;13386:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;13466:2;13457:11;;;;;:::i;:::-;;;13326:154;;;13504:6;13490:21;;;;;12796:723;;;;:::o;12275:207::-;12405:4;12449:25;12434:40;;;:11;:40;;;;12427:47;;12275:207;;;:::o;42118:589::-;42262:45;42289:4;42295:2;42299:7;42262:26;:45::i;:::-;42340:1;42324:18;;:4;:18;;;42320:187;;;42359:40;42391:7;42359:31;:40::i;:::-;42320:187;;;42429:2;42421:10;;:4;:10;;;42417:90;;42448:47;42481:4;42487:7;42448:32;:47::i;:::-;42417:90;42320:187;42535:1;42521:16;;:2;:16;;;42517:183;;;42554:45;42591:7;42554:36;:45::i;:::-;42517:183;;;42627:4;42621:10;;:2;:10;;;42617:83;;42648:40;42676:2;42680:7;42648:27;:40::i;:::-;42617:83;42517:183;42118:589;;;:::o;1036:127::-;1143:1;1125:7;:14;;;:19;;;;;;;;;;;1036:127;:::o;914:114::-;979:7;1006;:14;;;999:21;;914:114;;;:::o;33807:110::-;33883:26;33893:2;33897:7;33883:26;;;;;;;;;;;;:9;:26::i;:::-;33807:110;;:::o;37581:984::-;37736:4;37757:15;:2;:13;;;:15::i;:::-;37753:805;;;37826:2;37810:36;;;37869:12;:10;:12::i;:::-;37904:4;37931:7;37961:5;37810:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37789:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38189:1;38172:6;:13;:18;38168:320;;;38215:108;;;;;;;;;;:::i;:::-;;;;;;;;38168:320;38438:6;38432:13;38423:6;38419:2;38415:15;38408:38;37789:714;38059:45;;;38049:55;;;:6;:55;;;;38042:62;;;;;37753:805;38542:4;38535:11;;37581:984;;;;;;;:::o;39137:126::-;;;;:::o;43430:164::-;43534:10;:17;;;;43507:15;:24;43523:7;43507:24;;;;;;;;;;;:44;;;;43562:10;43578:7;43562:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43430:164;:::o;44221:1002::-;44501:22;44551:1;44526:22;44543:4;44526:16;:22::i;:::-;:26;;;;:::i;:::-;44501:51;;44563:18;44584:17;:26;44602:7;44584:26;;;;;;;;;;;;44563:47;;44731:14;44717:10;:28;44713:328;;44762:19;44784:12;:18;44797:4;44784:18;;;;;;;;;;;;;;;:34;44803:14;44784:34;;;;;;;;;;;;44762:56;;44868:11;44835:12;:18;44848:4;44835:18;;;;;;;;;;;;;;;:30;44854:10;44835:30;;;;;;;;;;;:44;;;;44985:10;44952:17;:30;44970:11;44952:30;;;;;;;;;;;:43;;;;44747:294;44713:328;45137:17;:26;45155:7;45137:26;;;;;;;;;;;45130:33;;;45181:12;:18;45194:4;45181:18;;;;;;;;;;;;;;;:34;45200:14;45181:34;;;;;;;;;;;45174:41;;;44316:907;;44221:1002;;:::o;45518:1079::-;45771:22;45816:1;45796:10;:17;;;;:21;;;;:::i;:::-;45771:46;;45828:18;45849:15;:24;45865:7;45849:24;;;;;;;;;;;;45828:45;;46200:19;46222:10;46233:14;46222:26;;;;;;;;:::i;:::-;;;;;;;;;;46200:48;;46286:11;46261:10;46272;46261:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46397:10;46366:15;:28;46382:11;46366:28;;;;;;;;;;;:41;;;;46538:15;:24;46554:7;46538:24;;;;;;;;;;;46531:31;;;46573:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45589:1008;;;45518:1079;:::o;43008:221::-;43093:14;43110:20;43127:2;43110:16;:20::i;:::-;43093:37;;43168:7;43141:12;:16;43154:2;43141:16;;;;;;;;;;;;;;;:24;43158:6;43141:24;;;;;;;;;;;:34;;;;43215:6;43186:17;:26;43204:7;43186:26;;;;;;;;;;;:35;;;;43082:147;43008:221;;:::o;34144:321::-;34274:18;34280:2;34284:7;34274:5;:18::i;:::-;34325:54;34356:1;34360:2;34364:7;34373:5;34325:22;:54::i;:::-;34303:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34144:321;;;:::o;15349:387::-;15409:4;15617:12;15684:7;15672:20;15664:28;;15727:1;15720:4;:8;15713:15;;;15349:387;;;:::o;34801:382::-;34895:1;34881:16;;:2;:16;;;;34873:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34954:16;34962:7;34954;:16::i;:::-;34953:17;34945:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35016:45;35045:1;35049:2;35053:7;35016:20;:45::i;:::-;35091:1;35074:9;:13;35084:2;35074:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35122:2;35103:7;:16;35111:7;35103:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35167:7;35163:2;35142:33;;35159:1;35142:33;;;;;;;;;;;;34801:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:179::-;8383:10;8404:46;8446:3;8438:6;8404:46;:::i;:::-;8482:4;8477:3;8473:14;8459:28;;8314:179;;;;:::o;8499:118::-;8586:24;8604:5;8586:24;:::i;:::-;8581:3;8574:37;8499:118;;:::o;8653:732::-;8772:3;8801:54;8849:5;8801:54;:::i;:::-;8871:86;8950:6;8945:3;8871:86;:::i;:::-;8864:93;;8981:56;9031:5;8981:56;:::i;:::-;9060:7;9091:1;9076:284;9101:6;9098:1;9095:13;9076:284;;;9177:6;9171:13;9204:63;9263:3;9248:13;9204:63;:::i;:::-;9197:70;;9290:60;9343:6;9290:60;:::i;:::-;9280:70;;9136:224;9123:1;9120;9116:9;9111:14;;9076:284;;;9080:14;9376:3;9369:10;;8777:608;;;8653:732;;;;:::o;9391:109::-;9472:21;9487:5;9472:21;:::i;:::-;9467:3;9460:34;9391:109;;:::o;9506:360::-;9592:3;9620:38;9652:5;9620:38;:::i;:::-;9674:70;9737:6;9732:3;9674:70;:::i;:::-;9667:77;;9753:52;9798:6;9793:3;9786:4;9779:5;9775:16;9753:52;:::i;:::-;9830:29;9852:6;9830:29;:::i;:::-;9825:3;9821:39;9814:46;;9596:270;9506:360;;;;:::o;9872:364::-;9960:3;9988:39;10021:5;9988:39;:::i;:::-;10043:71;10107:6;10102:3;10043:71;:::i;:::-;10036:78;;10123:52;10168:6;10163:3;10156:4;10149:5;10145:16;10123:52;:::i;:::-;10200:29;10222:6;10200:29;:::i;:::-;10195:3;10191:39;10184:46;;9964:272;9872:364;;;;:::o;10242:377::-;10348:3;10376:39;10409:5;10376:39;:::i;:::-;10431:89;10513:6;10508:3;10431:89;:::i;:::-;10424:96;;10529:52;10574:6;10569:3;10562:4;10555:5;10551:16;10529:52;:::i;:::-;10606:6;10601:3;10597:16;10590:23;;10352:267;10242:377;;;;:::o;10625:366::-;10767:3;10788:67;10852:2;10847:3;10788:67;:::i;:::-;10781:74;;10864:93;10953:3;10864:93;:::i;:::-;10982:2;10977:3;10973:12;10966:19;;10625:366;;;:::o;10997:::-;11139:3;11160:67;11224:2;11219:3;11160:67;:::i;:::-;11153:74;;11236:93;11325:3;11236:93;:::i;:::-;11354:2;11349:3;11345:12;11338:19;;10997:366;;;:::o;11369:::-;11511:3;11532:67;11596:2;11591:3;11532:67;:::i;:::-;11525:74;;11608:93;11697:3;11608:93;:::i;:::-;11726:2;11721:3;11717:12;11710:19;;11369:366;;;:::o;11741:::-;11883:3;11904:67;11968:2;11963:3;11904:67;:::i;:::-;11897:74;;11980:93;12069:3;11980:93;:::i;:::-;12098:2;12093:3;12089:12;12082:19;;11741:366;;;:::o;12113:::-;12255:3;12276:67;12340:2;12335:3;12276:67;:::i;:::-;12269:74;;12352:93;12441:3;12352:93;:::i;:::-;12470:2;12465:3;12461:12;12454:19;;12113:366;;;:::o;12485:::-;12627:3;12648:67;12712:2;12707:3;12648:67;:::i;:::-;12641:74;;12724:93;12813:3;12724:93;:::i;:::-;12842:2;12837:3;12833:12;12826:19;;12485:366;;;:::o;12857:::-;12999:3;13020:67;13084:2;13079:3;13020:67;:::i;:::-;13013:74;;13096:93;13185:3;13096:93;:::i;:::-;13214:2;13209:3;13205:12;13198:19;;12857:366;;;:::o;13229:::-;13371:3;13392:67;13456:2;13451:3;13392:67;:::i;:::-;13385:74;;13468:93;13557:3;13468:93;:::i;:::-;13586:2;13581:3;13577:12;13570:19;;13229:366;;;:::o;13601:::-;13743:3;13764:67;13828:2;13823:3;13764:67;:::i;:::-;13757:74;;13840:93;13929:3;13840:93;:::i;:::-;13958:2;13953:3;13949:12;13942:19;;13601:366;;;:::o;13973:::-;14115:3;14136:67;14200:2;14195:3;14136:67;:::i;:::-;14129:74;;14212:93;14301:3;14212:93;:::i;:::-;14330:2;14325:3;14321:12;14314:19;;13973:366;;;:::o;14345:::-;14487:3;14508:67;14572:2;14567:3;14508:67;:::i;:::-;14501:74;;14584:93;14673:3;14584:93;:::i;:::-;14702:2;14697:3;14693:12;14686:19;;14345:366;;;:::o;14717:::-;14859:3;14880:67;14944:2;14939:3;14880:67;:::i;:::-;14873:74;;14956:93;15045:3;14956:93;:::i;:::-;15074:2;15069:3;15065:12;15058:19;;14717:366;;;:::o;15089:::-;15231:3;15252:67;15316:2;15311:3;15252:67;:::i;:::-;15245:74;;15328:93;15417:3;15328:93;:::i;:::-;15446:2;15441:3;15437:12;15430:19;;15089:366;;;:::o;15461:::-;15603:3;15624:67;15688:2;15683:3;15624:67;:::i;:::-;15617:74;;15700:93;15789:3;15700:93;:::i;:::-;15818:2;15813:3;15809:12;15802:19;;15461:366;;;:::o;15833:::-;15975:3;15996:67;16060:2;16055:3;15996:67;:::i;:::-;15989:74;;16072:93;16161:3;16072:93;:::i;:::-;16190:2;16185:3;16181:12;16174:19;;15833:366;;;:::o;16205:::-;16347:3;16368:67;16432:2;16427:3;16368:67;:::i;:::-;16361:74;;16444:93;16533:3;16444:93;:::i;:::-;16562:2;16557:3;16553:12;16546:19;;16205:366;;;:::o;16577:::-;16719:3;16740:67;16804:2;16799:3;16740:67;:::i;:::-;16733:74;;16816:93;16905:3;16816:93;:::i;:::-;16934:2;16929:3;16925:12;16918:19;;16577:366;;;:::o;16949:::-;17091:3;17112:67;17176:2;17171:3;17112:67;:::i;:::-;17105:74;;17188:93;17277:3;17188:93;:::i;:::-;17306:2;17301:3;17297:12;17290:19;;16949:366;;;:::o;17321:::-;17463:3;17484:67;17548:2;17543:3;17484:67;:::i;:::-;17477:74;;17560:93;17649:3;17560:93;:::i;:::-;17678:2;17673:3;17669:12;17662:19;;17321:366;;;:::o;17693:::-;17835:3;17856:67;17920:2;17915:3;17856:67;:::i;:::-;17849:74;;17932:93;18021:3;17932:93;:::i;:::-;18050:2;18045:3;18041:12;18034:19;;17693:366;;;:::o;18065:::-;18207:3;18228:67;18292:2;18287:3;18228:67;:::i;:::-;18221:74;;18304:93;18393:3;18304:93;:::i;:::-;18422:2;18417:3;18413:12;18406:19;;18065:366;;;:::o;18437:::-;18579:3;18600:67;18664:2;18659:3;18600:67;:::i;:::-;18593:74;;18676:93;18765:3;18676:93;:::i;:::-;18794:2;18789:3;18785:12;18778:19;;18437:366;;;:::o;18809:::-;18951:3;18972:67;19036:2;19031:3;18972:67;:::i;:::-;18965:74;;19048:93;19137:3;19048:93;:::i;:::-;19166:2;19161:3;19157:12;19150:19;;18809:366;;;:::o;19181:398::-;19340:3;19361:83;19442:1;19437:3;19361:83;:::i;:::-;19354:90;;19453:93;19542:3;19453:93;:::i;:::-;19571:1;19566:3;19562:11;19555:18;;19181:398;;;:::o;19585:366::-;19727:3;19748:67;19812:2;19807:3;19748:67;:::i;:::-;19741:74;;19824:93;19913:3;19824:93;:::i;:::-;19942:2;19937:3;19933:12;19926:19;;19585:366;;;:::o;19957:::-;20099:3;20120:67;20184:2;20179:3;20120:67;:::i;:::-;20113:74;;20196:93;20285:3;20196:93;:::i;:::-;20314:2;20309:3;20305:12;20298:19;;19957:366;;;:::o;20329:::-;20471:3;20492:67;20556:2;20551:3;20492:67;:::i;:::-;20485:74;;20568:93;20657:3;20568:93;:::i;:::-;20686:2;20681:3;20677:12;20670:19;;20329:366;;;:::o;20701:108::-;20778:24;20796:5;20778:24;:::i;:::-;20773:3;20766:37;20701:108;;:::o;20815:118::-;20902:24;20920:5;20902:24;:::i;:::-;20897:3;20890:37;20815:118;;:::o;20939:435::-;21119:3;21141:95;21232:3;21223:6;21141:95;:::i;:::-;21134:102;;21253:95;21344:3;21335:6;21253:95;:::i;:::-;21246:102;;21365:3;21358:10;;20939:435;;;;;:::o;21380:379::-;21564:3;21586:147;21729:3;21586:147;:::i;:::-;21579:154;;21750:3;21743:10;;21380:379;;;:::o;21765:222::-;21858:4;21896:2;21885:9;21881:18;21873:26;;21909:71;21977:1;21966:9;21962:17;21953:6;21909:71;:::i;:::-;21765:222;;;;:::o;21993:640::-;22188:4;22226:3;22215:9;22211:19;22203:27;;22240:71;22308:1;22297:9;22293:17;22284:6;22240:71;:::i;:::-;22321:72;22389:2;22378:9;22374:18;22365:6;22321:72;:::i;:::-;22403;22471:2;22460:9;22456:18;22447:6;22403:72;:::i;:::-;22522:9;22516:4;22512:20;22507:2;22496:9;22492:18;22485:48;22550:76;22621:4;22612:6;22550:76;:::i;:::-;22542:84;;21993:640;;;;;;;:::o;22639:373::-;22782:4;22820:2;22809:9;22805:18;22797:26;;22869:9;22863:4;22859:20;22855:1;22844:9;22840:17;22833:47;22897:108;23000:4;22991:6;22897:108;:::i;:::-;22889:116;;22639:373;;;;:::o;23018:210::-;23105:4;23143:2;23132:9;23128:18;23120:26;;23156:65;23218:1;23207:9;23203:17;23194:6;23156:65;:::i;:::-;23018:210;;;;:::o;23234:313::-;23347:4;23385:2;23374:9;23370:18;23362:26;;23434:9;23428:4;23424:20;23420:1;23409:9;23405:17;23398:47;23462:78;23535:4;23526:6;23462:78;:::i;:::-;23454:86;;23234:313;;;;:::o;23553:419::-;23719:4;23757:2;23746:9;23742:18;23734:26;;23806:9;23800:4;23796:20;23792:1;23781:9;23777:17;23770:47;23834:131;23960:4;23834:131;:::i;:::-;23826:139;;23553:419;;;:::o;23978:::-;24144:4;24182:2;24171:9;24167:18;24159:26;;24231:9;24225:4;24221:20;24217:1;24206:9;24202:17;24195:47;24259:131;24385:4;24259:131;:::i;:::-;24251:139;;23978:419;;;:::o;24403:::-;24569:4;24607:2;24596:9;24592:18;24584:26;;24656:9;24650:4;24646:20;24642:1;24631:9;24627:17;24620:47;24684:131;24810:4;24684:131;:::i;:::-;24676:139;;24403:419;;;:::o;24828:::-;24994:4;25032:2;25021:9;25017:18;25009:26;;25081:9;25075:4;25071:20;25067:1;25056:9;25052:17;25045:47;25109:131;25235:4;25109:131;:::i;:::-;25101:139;;24828:419;;;:::o;25253:::-;25419:4;25457:2;25446:9;25442:18;25434:26;;25506:9;25500:4;25496:20;25492:1;25481:9;25477:17;25470:47;25534:131;25660:4;25534:131;:::i;:::-;25526:139;;25253:419;;;:::o;25678:::-;25844:4;25882:2;25871:9;25867:18;25859:26;;25931:9;25925:4;25921:20;25917:1;25906:9;25902:17;25895:47;25959:131;26085:4;25959:131;:::i;:::-;25951:139;;25678:419;;;:::o;26103:::-;26269:4;26307:2;26296:9;26292:18;26284:26;;26356:9;26350:4;26346:20;26342:1;26331:9;26327:17;26320:47;26384:131;26510:4;26384:131;:::i;:::-;26376:139;;26103:419;;;:::o;26528:::-;26694:4;26732:2;26721:9;26717:18;26709:26;;26781:9;26775:4;26771:20;26767:1;26756:9;26752:17;26745:47;26809:131;26935:4;26809:131;:::i;:::-;26801:139;;26528:419;;;:::o;26953:::-;27119:4;27157:2;27146:9;27142:18;27134:26;;27206:9;27200:4;27196:20;27192:1;27181:9;27177:17;27170:47;27234:131;27360:4;27234:131;:::i;:::-;27226:139;;26953:419;;;:::o;27378:::-;27544:4;27582:2;27571:9;27567:18;27559:26;;27631:9;27625:4;27621:20;27617:1;27606:9;27602:17;27595:47;27659:131;27785:4;27659:131;:::i;:::-;27651:139;;27378:419;;;:::o;27803:::-;27969:4;28007:2;27996:9;27992:18;27984:26;;28056:9;28050:4;28046:20;28042:1;28031:9;28027:17;28020:47;28084:131;28210:4;28084:131;:::i;:::-;28076:139;;27803:419;;;:::o;28228:::-;28394:4;28432:2;28421:9;28417:18;28409:26;;28481:9;28475:4;28471:20;28467:1;28456:9;28452:17;28445:47;28509:131;28635:4;28509:131;:::i;:::-;28501:139;;28228:419;;;:::o;28653:::-;28819:4;28857:2;28846:9;28842:18;28834:26;;28906:9;28900:4;28896:20;28892:1;28881:9;28877:17;28870:47;28934:131;29060:4;28934:131;:::i;:::-;28926:139;;28653:419;;;:::o;29078:::-;29244:4;29282:2;29271:9;29267:18;29259:26;;29331:9;29325:4;29321:20;29317:1;29306:9;29302:17;29295:47;29359:131;29485:4;29359:131;:::i;:::-;29351:139;;29078:419;;;:::o;29503:::-;29669:4;29707:2;29696:9;29692:18;29684:26;;29756:9;29750:4;29746:20;29742:1;29731:9;29727:17;29720:47;29784:131;29910:4;29784:131;:::i;:::-;29776:139;;29503:419;;;:::o;29928:::-;30094:4;30132:2;30121:9;30117:18;30109:26;;30181:9;30175:4;30171:20;30167:1;30156:9;30152:17;30145:47;30209:131;30335:4;30209:131;:::i;:::-;30201:139;;29928:419;;;:::o;30353:::-;30519:4;30557:2;30546:9;30542:18;30534:26;;30606:9;30600:4;30596:20;30592:1;30581:9;30577:17;30570:47;30634:131;30760:4;30634:131;:::i;:::-;30626:139;;30353:419;;;:::o;30778:::-;30944:4;30982:2;30971:9;30967:18;30959:26;;31031:9;31025:4;31021:20;31017:1;31006:9;31002:17;30995:47;31059:131;31185:4;31059:131;:::i;:::-;31051:139;;30778:419;;;:::o;31203:::-;31369:4;31407:2;31396:9;31392:18;31384:26;;31456:9;31450:4;31446:20;31442:1;31431:9;31427:17;31420:47;31484:131;31610:4;31484:131;:::i;:::-;31476:139;;31203:419;;;:::o;31628:::-;31794:4;31832:2;31821:9;31817:18;31809:26;;31881:9;31875:4;31871:20;31867:1;31856:9;31852:17;31845:47;31909:131;32035:4;31909:131;:::i;:::-;31901:139;;31628:419;;;:::o;32053:::-;32219:4;32257:2;32246:9;32242:18;32234:26;;32306:9;32300:4;32296:20;32292:1;32281:9;32277:17;32270:47;32334:131;32460:4;32334:131;:::i;:::-;32326:139;;32053:419;;;:::o;32478:::-;32644:4;32682:2;32671:9;32667:18;32659:26;;32731:9;32725:4;32721:20;32717:1;32706:9;32702:17;32695:47;32759:131;32885:4;32759:131;:::i;:::-;32751:139;;32478:419;;;:::o;32903:::-;33069:4;33107:2;33096:9;33092:18;33084:26;;33156:9;33150:4;33146:20;33142:1;33131:9;33127:17;33120:47;33184:131;33310:4;33184:131;:::i;:::-;33176:139;;32903:419;;;:::o;33328:::-;33494:4;33532:2;33521:9;33517:18;33509:26;;33581:9;33575:4;33571:20;33567:1;33556:9;33552:17;33545:47;33609:131;33735:4;33609:131;:::i;:::-;33601:139;;33328:419;;;:::o;33753:::-;33919:4;33957:2;33946:9;33942:18;33934:26;;34006:9;34000:4;33996:20;33992:1;33981:9;33977:17;33970:47;34034:131;34160:4;34034:131;:::i;:::-;34026:139;;33753:419;;;:::o;34178:::-;34344:4;34382:2;34371:9;34367:18;34359:26;;34431:9;34425:4;34421:20;34417:1;34406:9;34402:17;34395:47;34459:131;34585:4;34459:131;:::i;:::-;34451:139;;34178:419;;;:::o;34603:222::-;34696:4;34734:2;34723:9;34719:18;34711:26;;34747:71;34815:1;34804:9;34800:17;34791:6;34747:71;:::i;:::-;34603:222;;;;:::o;34831:129::-;34865:6;34892:20;;:::i;:::-;34882:30;;34921:33;34949:4;34941:6;34921:33;:::i;:::-;34831:129;;;:::o;34966:75::-;34999:6;35032:2;35026:9;35016:19;;34966:75;:::o;35047:307::-;35108:4;35198:18;35190:6;35187:30;35184:56;;;35220:18;;:::i;:::-;35184:56;35258:29;35280:6;35258:29;:::i;:::-;35250:37;;35342:4;35336;35332:15;35324:23;;35047:307;;;:::o;35360:308::-;35422:4;35512:18;35504:6;35501:30;35498:56;;;35534:18;;:::i;:::-;35498:56;35572:29;35594:6;35572:29;:::i;:::-;35564:37;;35656:4;35650;35646:15;35638:23;;35360:308;;;:::o;35674:132::-;35741:4;35764:3;35756:11;;35794:4;35789:3;35785:14;35777:22;;35674:132;;;:::o;35812:114::-;35879:6;35913:5;35907:12;35897:22;;35812:114;;;:::o;35932:98::-;35983:6;36017:5;36011:12;36001:22;;35932:98;;;:::o;36036:99::-;36088:6;36122:5;36116:12;36106:22;;36036:99;;;:::o;36141:113::-;36211:4;36243;36238:3;36234:14;36226:22;;36141:113;;;:::o;36260:184::-;36359:11;36393:6;36388:3;36381:19;36433:4;36428:3;36424:14;36409:29;;36260:184;;;;:::o;36450:168::-;36533:11;36567:6;36562:3;36555:19;36607:4;36602:3;36598:14;36583:29;;36450:168;;;;:::o;36624:147::-;36725:11;36762:3;36747:18;;36624:147;;;;:::o;36777:169::-;36861:11;36895:6;36890:3;36883:19;36935:4;36930:3;36926:14;36911:29;;36777:169;;;;:::o;36952:148::-;37054:11;37091:3;37076:18;;36952:148;;;;:::o;37106:305::-;37146:3;37165:20;37183:1;37165:20;:::i;:::-;37160:25;;37199:20;37217:1;37199:20;:::i;:::-;37194:25;;37353:1;37285:66;37281:74;37278:1;37275:81;37272:107;;;37359:18;;:::i;:::-;37272:107;37403:1;37400;37396:9;37389:16;;37106:305;;;;:::o;37417:185::-;37457:1;37474:20;37492:1;37474:20;:::i;:::-;37469:25;;37508:20;37526:1;37508:20;:::i;:::-;37503:25;;37547:1;37537:35;;37552:18;;:::i;:::-;37537:35;37594:1;37591;37587:9;37582:14;;37417:185;;;;:::o;37608:348::-;37648:7;37671:20;37689:1;37671:20;:::i;:::-;37666:25;;37705:20;37723:1;37705:20;:::i;:::-;37700:25;;37893:1;37825:66;37821:74;37818:1;37815:81;37810:1;37803:9;37796:17;37792:105;37789:131;;;37900:18;;:::i;:::-;37789:131;37948:1;37945;37941:9;37930:20;;37608:348;;;;:::o;37962:191::-;38002:4;38022:20;38040:1;38022:20;:::i;:::-;38017:25;;38056:20;38074:1;38056:20;:::i;:::-;38051:25;;38095:1;38092;38089:8;38086:34;;;38100:18;;:::i;:::-;38086:34;38145:1;38142;38138:9;38130:17;;37962:191;;;;:::o;38159:96::-;38196:7;38225:24;38243:5;38225:24;:::i;:::-;38214:35;;38159:96;;;:::o;38261:90::-;38295:7;38338:5;38331:13;38324:21;38313:32;;38261:90;;;:::o;38357:149::-;38393:7;38433:66;38426:5;38422:78;38411:89;;38357:149;;;:::o;38512:126::-;38549:7;38589:42;38582:5;38578:54;38567:65;;38512:126;;;:::o;38644:77::-;38681:7;38710:5;38699:16;;38644:77;;;:::o;38727:154::-;38811:6;38806:3;38801;38788:30;38873:1;38864:6;38859:3;38855:16;38848:27;38727:154;;;:::o;38887:307::-;38955:1;38965:113;38979:6;38976:1;38973:13;38965:113;;;39064:1;39059:3;39055:11;39049:18;39045:1;39040:3;39036:11;39029:39;39001:2;38998:1;38994:10;38989:15;;38965:113;;;39096:6;39093:1;39090:13;39087:101;;;39176:1;39167:6;39162:3;39158:16;39151:27;39087:101;38936:258;38887:307;;;:::o;39200:320::-;39244:6;39281:1;39275:4;39271:12;39261:22;;39328:1;39322:4;39318:12;39349:18;39339:81;;39405:4;39397:6;39393:17;39383:27;;39339:81;39467:2;39459:6;39456:14;39436:18;39433:38;39430:84;;;39486:18;;:::i;:::-;39430:84;39251:269;39200:320;;;:::o;39526:281::-;39609:27;39631:4;39609:27;:::i;:::-;39601:6;39597:40;39739:6;39727:10;39724:22;39703:18;39691:10;39688:34;39685:62;39682:88;;;39750:18;;:::i;:::-;39682:88;39790:10;39786:2;39779:22;39569:238;39526:281;;:::o;39813:233::-;39852:3;39875:24;39893:5;39875:24;:::i;:::-;39866:33;;39921:66;39914:5;39911:77;39908:103;;;39991:18;;:::i;:::-;39908:103;40038:1;40031:5;40027:13;40020:20;;39813:233;;;:::o;40052:176::-;40084:1;40101:20;40119:1;40101:20;:::i;:::-;40096:25;;40135:20;40153:1;40135:20;:::i;:::-;40130:25;;40174:1;40164:35;;40179:18;;:::i;:::-;40164:35;40220:1;40217;40213:9;40208:14;;40052:176;;;;:::o;40234:180::-;40282:77;40279:1;40272:88;40379:4;40376:1;40369:15;40403:4;40400:1;40393:15;40420:180;40468:77;40465:1;40458:88;40565:4;40562:1;40555:15;40589:4;40586:1;40579:15;40606:180;40654:77;40651:1;40644:88;40751:4;40748:1;40741:15;40775:4;40772:1;40765:15;40792:180;40840:77;40837:1;40830:88;40937:4;40934:1;40927:15;40961:4;40958:1;40951:15;40978:180;41026:77;41023:1;41016:88;41123:4;41120:1;41113:15;41147:4;41144:1;41137:15;41164:180;41212:77;41209:1;41202:88;41309:4;41306:1;41299:15;41333:4;41330:1;41323:15;41350:117;41459:1;41456;41449:12;41473:117;41582:1;41579;41572:12;41596:117;41705:1;41702;41695:12;41719:117;41828:1;41825;41818:12;41842:117;41951:1;41948;41941:12;41965:117;42074:1;42071;42064:12;42088:102;42129:6;42180:2;42176:7;42171:2;42164:5;42160:14;42156:28;42146:38;;42088:102;;;:::o;42196:179::-;42336:31;42332:1;42324:6;42320:14;42313:55;42196:179;:::o;42381:230::-;42521:34;42517:1;42509:6;42505:14;42498:58;42590:13;42585:2;42577:6;42573:15;42566:38;42381:230;:::o;42617:173::-;42757:25;42753:1;42745:6;42741:14;42734:49;42617:173;:::o;42796:237::-;42936:34;42932:1;42924:6;42920:14;42913:58;43005:20;43000:2;42992:6;42988:15;42981:45;42796:237;:::o;43039:225::-;43179:34;43175:1;43167:6;43163:14;43156:58;43248:8;43243:2;43235:6;43231:15;43224:33;43039:225;:::o;43270:178::-;43410:30;43406:1;43398:6;43394:14;43387:54;43270:178;:::o;43454:223::-;43594:34;43590:1;43582:6;43578:14;43571:58;43663:6;43658:2;43650:6;43646:15;43639:31;43454:223;:::o;43683:175::-;43823:27;43819:1;43811:6;43807:14;43800:51;43683:175;:::o;43864:170::-;44004:22;44000:1;43992:6;43988:14;43981:46;43864:170;:::o;44040:242::-;44180:34;44176:1;44168:6;44164:14;44157:58;44249:25;44244:2;44236:6;44232:15;44225:50;44040:242;:::o;44288:231::-;44428:34;44424:1;44416:6;44412:14;44405:58;44497:14;44492:2;44484:6;44480:15;44473:39;44288:231;:::o;44525:239::-;44665:34;44661:1;44653:6;44649:14;44642:58;44734:22;44729:2;44721:6;44717:15;44710:47;44525:239;:::o;44770:243::-;44910:34;44906:1;44898:6;44894:14;44887:58;44979:26;44974:2;44966:6;44962:15;44955:51;44770:243;:::o;45019:229::-;45159:34;45155:1;45147:6;45143:14;45136:58;45228:12;45223:2;45215:6;45211:15;45204:37;45019:229;:::o;45254:228::-;45394:34;45390:1;45382:6;45378:14;45371:58;45463:11;45458:2;45450:6;45446:15;45439:36;45254:228;:::o;45488:182::-;45628:34;45624:1;45616:6;45612:14;45605:58;45488:182;:::o;45676:231::-;45816:34;45812:1;45804:6;45800:14;45793:58;45885:14;45880:2;45872:6;45868:15;45861:39;45676:231;:::o;45913:234::-;46053:34;46049:1;46041:6;46037:14;46030:58;46122:17;46117:2;46109:6;46105:15;46098:42;45913:234;:::o;46153:182::-;46293:34;46289:1;46281:6;46277:14;46270:58;46153:182;:::o;46341:228::-;46481:34;46477:1;46469:6;46465:14;46458:58;46550:11;46545:2;46537:6;46533:15;46526:36;46341:228;:::o;46575:234::-;46715:34;46711:1;46703:6;46699:14;46692:58;46784:17;46779:2;46771:6;46767:15;46760:42;46575:234;:::o;46815:220::-;46955:34;46951:1;46943:6;46939:14;46932:58;47024:3;47019:2;47011:6;47007:15;47000:28;46815:220;:::o;47041:243::-;47181:34;47177:1;47169:6;47165:14;47158:58;47250:26;47245:2;47237:6;47233:15;47226:51;47041:243;:::o;47290:114::-;;:::o;47410:166::-;47550:18;47546:1;47538:6;47534:14;47527:42;47410:166;:::o;47582:236::-;47722:34;47718:1;47710:6;47706:14;47699:58;47791:19;47786:2;47778:6;47774:15;47767:44;47582:236;:::o;47824:231::-;47964:34;47960:1;47952:6;47948:14;47941:58;48033:14;48028:2;48020:6;48016:15;48009:39;47824:231;:::o;48061:122::-;48134:24;48152:5;48134:24;:::i;:::-;48127:5;48124:35;48114:63;;48173:1;48170;48163:12;48114:63;48061:122;:::o;48189:116::-;48259:21;48274:5;48259:21;:::i;:::-;48252:5;48249:32;48239:60;;48295:1;48292;48285:12;48239:60;48189:116;:::o;48311:120::-;48383:23;48400:5;48383:23;:::i;:::-;48376:5;48373:34;48363:62;;48421:1;48418;48411:12;48363:62;48311:120;:::o;48437:122::-;48510:24;48528:5;48510:24;:::i;:::-;48503:5;48500:35;48490:63;;48549:1;48546;48539:12;48490:63;48437:122;:::o

Swarm Source

ipfs://3120c3c9018ba65e336955f265547408a241ccd9beba67d18a23a2df185364d8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.