ETH Price: $3,001.02 (+5.26%)
Gas: 2 Gwei

Mutated Pokeverse (mpoke)
 

Overview

TokenID

100

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
MutatedPokeverse

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.4.0 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

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/[email protected]

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/token/ERC721/[email protected]

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/extensions/[email protected]

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/utils/[email protected]

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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}


// File @openzeppelin/contracts/utils/introspection/[email protected]

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/token/ERC721/[email protected]

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}. 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 view virtual override returns (bool) {
        return _operatorApprovals[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 {
                    // solhint-disable-next-line no-inline-assembly
                    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` 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 { }
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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/token/ERC721/extensions/[email protected]

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 @openzeppelin/contracts/access/[email protected]

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File @openzeppelin/contracts/utils/math/[email protected]

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




pragma solidity ^0.8.0;
 contract MutatedPokeverse is ERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    string public PROVENANCE;
    string private baseURI;

    uint256 public maxSupply;
    uint256 public price = 0.06 ether;

    bool public presaleActive = false;
    bool public saleActive = false;

    mapping (address => uint256) public presaleWhitelist;

    constructor(uint256 supply) ERC721("Mutated Pokeverse", "mpoke") {
        maxSupply = supply;
    }
    
    function reserve() public onlyOwner {
        uint256 supply = totalSupply();
        for (uint256 i = 0; i < 50; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function mintPresale(uint256 numberOfMints) public payable {
        uint256 supply = totalSupply();
        uint256 reserved = presaleWhitelist[msg.sender];
        require(presaleActive,                              "Presale must be active to mint");
        require(reserved > 0,                               "No tokens reserved for this address");
        require(numberOfMints <= reserved,                  "Can't mint more than reserved");
        require(supply.add(numberOfMints) <= maxSupply,     "Purchase would exceed max supply of tokens");
        require(price.mul(numberOfMints) == msg.value,      "Ether value sent is not correct");
        presaleWhitelist[msg.sender] = reserved - numberOfMints;

        for(uint256 i; i < numberOfMints; i++){
            _safeMint( msg.sender, supply + i );
        }
    }
    
    function mint(uint256 numberOfMints) public payable {
        uint256 supply = totalSupply();
        require(saleActive,                                 "Sale must be active to mint");
        require(numberOfMints > 0 && numberOfMints < 21,    "Invalid purchase amount");
        require(supply.add(numberOfMints) <= maxSupply,     "Purchase would exceed max supply of tokens");
        require(price.mul(numberOfMints) == msg.value,      "Ether value sent is not correct");
        
        for(uint256 i; i < numberOfMints; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function editPresale(address[] memory presaleAddresses) public onlyOwner {
        for(uint256 i; i < presaleAddresses.length; i++){
            presaleWhitelist[presaleAddresses[i]] = 10;
        }
    }
    
    function walletOfOwner(address _owner) external view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

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

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function togglePresale() public onlyOwner {
        presaleActive = !presaleActive;
    }

    function toggleSale() public onlyOwner {
        saleActive = !saleActive;
    }

    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    function setProvenance(string memory provenance) public onlyOwner {
        PROVENANCE = provenance;
    }
    
    function setBaseURI(string memory uri) public onlyOwner {
        baseURI = uri;
    }
    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
 }

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"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":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":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address[]","name":"presaleAddresses","type":"address[]"}],"name":"editPresale","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mintPresale","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":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"saleActive","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":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266d529ae9e860000600e55600f805461ffff191690553480156200002757600080fd5b5060405162002b5438038062002b548339810160408190526200004a91620001cc565b60408051808201825260118152704d75746174656420506f6b65766572736560781b6020808301918252835180850190945260058452646d706f6b6560d81b908401528151919291620000a09160009162000126565b508051620000b690600190602084019062000126565b5050506000620000cb6200012260201b60201c565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5562000222565b3390565b8280546200013490620001e5565b90600052602060002090601f016020900481019282620001585760008555620001a3565b82601f106200017357805160ff1916838001178555620001a3565b82800160010185558215620001a3579182015b82811115620001a357825182559160200191906001019062000186565b50620001b1929150620001b5565b5090565b5b80821115620001b15760008155600101620001b6565b600060208284031215620001de578081fd5b5051919050565b600281046001821680620001fa57607f821691505b602082108114156200021c57634e487b7160e01b600052602260045260246000fd5b50919050565b61292280620002326000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610599578063eb8835ab146105b9578063f2fde38b146105d9578063f759867a146105f9578063ffe630b51461060c5761020f565b8063b88d4fde1461052f578063c87b56dd1461054f578063cd3293de1461056f578063d5abeb01146105845761020f565b806391b7f5ed116100e757806391b7f5ed146104b257806395d89b41146104d2578063a035b1fe146104e7578063a0712d68146104fc578063a22cb4651461050f5761020f565b806370a0823114610453578063715018a6146104735780637d8966e4146104885780638da5cb5b1461049d5761020f565b80633ccfd60b1161019b57806353135ca01161016a57806353135ca0146103d457806355f804b3146103e95780636352211e146104095780636373a6b11461042957806368428a1b1461043e5761020f565b80633ccfd60b1461035257806342842e0e14610367578063438b6300146103875780634f6ccce7146103b45761020f565b806318160ddd116101e257806318160ddd146102bb5780631aea52e8146102dd57806323b872dd146102fd5780632f745c591461031d578063343937431461033d5761020f565b806301ffc9a71461021457806306fdde031461024a578063081812fc1461026c578063095ea7b314610299575b600080fd5b34801561022057600080fd5b5061023461022f366004611f25565b61062c565b60405161024191906120ab565b60405180910390f35b34801561025657600080fd5b5061025f610659565b60405161024191906120b6565b34801561027857600080fd5b5061028c610287366004611fa3565b6106eb565b6040516102419190612016565b3480156102a557600080fd5b506102b96102b4366004611e4e565b610737565b005b3480156102c757600080fd5b506102d06107cf565b6040516102419190612766565b3480156102e957600080fd5b506102b96102f8366004611e77565b6107d5565b34801561030957600080fd5b506102b9610318366004611d60565b610889565b34801561032957600080fd5b506102d0610338366004611e4e565b6108c1565b34801561034957600080fd5b506102b9610913565b34801561035e57600080fd5b506102b9610966565b34801561037357600080fd5b506102b9610382366004611d60565b6109d4565b34801561039357600080fd5b506103a76103a2366004611d14565b6109ef565b6040516102419190612067565b3480156103c057600080fd5b506102d06103cf366004611fa3565b610aad565b3480156103e057600080fd5b50610234610b08565b3480156103f557600080fd5b506102b9610404366004611f5d565b610b11565b34801561041557600080fd5b5061028c610424366004611fa3565b610b63565b34801561043557600080fd5b5061025f610b98565b34801561044a57600080fd5b50610234610c26565b34801561045f57600080fd5b506102d061046e366004611d14565b610c34565b34801561047f57600080fd5b506102b9610c78565b34801561049457600080fd5b506102b9610d01565b3480156104a957600080fd5b5061028c610d5d565b3480156104be57600080fd5b506102b96104cd366004611fa3565b610d6c565b3480156104de57600080fd5b5061025f610db0565b3480156104f357600080fd5b506102d0610dbf565b6102b961050a366004611fa3565b610dc5565b34801561051b57600080fd5b506102b961052a366004611e14565b610eac565b34801561053b57600080fd5b506102b961054a366004611d9b565b610f7a565b34801561055b57600080fd5b5061025f61056a366004611fa3565b610fb9565b34801561057b57600080fd5b506102b961103c565b34801561059057600080fd5b506102d06110b3565b3480156105a557600080fd5b506102346105b4366004611d2e565b6110b9565b3480156105c557600080fd5b506102d06105d4366004611d14565b6110e7565b3480156105e557600080fd5b506102b96105f4366004611d14565b6110f9565b6102b9610607366004611fa3565b6111ba565b34801561061857600080fd5b506102b9610627366004611f5d565b6112d7565b60006001600160e01b0319821663780e9d6360e01b1480610651575061065182611329565b90505b919050565b60606000805461066890612827565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612827565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b60006106f682611369565b61071b5760405162461bcd60e51b815260040161071290612538565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074282610b63565b9050806001600160a01b0316836001600160a01b031614156107765760405162461bcd60e51b815260040161071290612651565b806001600160a01b0316610788611386565b6001600160a01b031614806107a457506107a4816105b4611386565b6107c05760405162461bcd60e51b815260040161071290612392565b6107ca838361138a565b505050565b60085490565b6107dd611386565b6001600160a01b03166107ee610d5d565b6001600160a01b0316146108145760405162461bcd60e51b815260040161071290612584565b60005b815181101561088557600a6010600084848151811061084657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061087d90612862565b915050610817565b5050565b61089a610894611386565b826113f8565b6108b65760405162461bcd60e51b815260040161071290612692565b6107ca83838361147d565b60006108cc83610c34565b82106108ea5760405162461bcd60e51b815260040161071290612100565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61091b611386565b6001600160a01b031661092c610d5d565b6001600160a01b0316146109525760405162461bcd60e51b815260040161071290612584565b600f805460ff19811660ff90911615179055565b61096e611386565b6001600160a01b031661097f610d5d565b6001600160a01b0316146109a55760405162461bcd60e51b815260040161071290612584565b6040514790339082156108fc029083906000818181858888f19350505050158015610885573d6000803e3d6000fd5b6107ca83838360405180602001604052806000815250610f7a565b606060006109fc83610c34565b905060008167ffffffffffffffff811115610a2757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a50578160200160208202803683370190505b50905060005b82811015610aa557610a6885826108c1565b828281518110610a8857634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610a9d81612862565b915050610a56565b509392505050565b6000610ab76107cf565b8210610ad55760405162461bcd60e51b8152600401610712906126e3565b60088281548110610af657634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600f5460ff1681565b610b19611386565b6001600160a01b0316610b2a610d5d565b6001600160a01b031614610b505760405162461bcd60e51b815260040161071290612584565b805161088590600c906020840190611c0c565b6000818152600260205260408120546001600160a01b0316806106515760405162461bcd60e51b815260040161071290612470565b600b8054610ba590612827565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190612827565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b505050505081565b600f54610100900460ff1681565b60006001600160a01b038216610c5c5760405162461bcd60e51b815260040161071290612426565b506001600160a01b031660009081526003602052604090205490565b610c80611386565b6001600160a01b0316610c91610d5d565b6001600160a01b031614610cb75760405162461bcd60e51b815260040161071290612584565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b610d09611386565b6001600160a01b0316610d1a610d5d565b6001600160a01b031614610d405760405162461bcd60e51b815260040161071290612584565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b031690565b610d74611386565b6001600160a01b0316610d85610d5d565b6001600160a01b031614610dab5760405162461bcd60e51b815260040161071290612584565b600e55565b60606001805461066890612827565b600e5481565b6000610dcf6107cf565b600f54909150610100900460ff16610df95760405162461bcd60e51b8152600401610712906122cc565b600082118015610e095750601582105b610e255760405162461bcd60e51b81526004016107129061272f565b600d54610e3282846115aa565b1115610e505760405162461bcd60e51b8152600401610712906124b9565b600e543490610e5f90846115b6565b14610e7c5760405162461bcd60e51b815260040161071290612295565b60005b828110156107ca57610e9a33610e958385612799565b6115c2565b80610ea481612862565b915050610e7f565b610eb4611386565b6001600160a01b0316826001600160a01b03161415610ee55760405162461bcd60e51b81526004016107129061225e565b8060056000610ef2611386565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610f36611386565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f6e91906120ab565b60405180910390a35050565b610f8b610f85611386565b836113f8565b610fa75760405162461bcd60e51b815260040161071290612692565b610fb3848484846115dc565b50505050565b6060610fc482611369565b610fe05760405162461bcd60e51b815260040161071290612602565b6000610fea61160f565b9050600081511161100a5760405180602001604052806000815250611035565b806110148461161e565b604051602001611025929190611fe7565b6040516020818303038152906040525b9392505050565b611044611386565b6001600160a01b0316611055610d5d565b6001600160a01b03161461107b5760405162461bcd60e51b815260040161071290612584565b60006110856107cf565b905060005b6032811015610885576110a133610e958385612799565b806110ab81612862565b91505061108a565b600d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60106020526000908152604090205481565b611101611386565b6001600160a01b0316611112610d5d565b6001600160a01b0316146111385760405162461bcd60e51b815260040161071290612584565b6001600160a01b03811661115e5760405162461bcd60e51b81526004016107129061219d565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006111c46107cf565b33600090815260106020526040902054600f549192509060ff166111fa5760405162461bcd60e51b8152600401610712906123ef565b6000811161121a5760405162461bcd60e51b81526004016107129061234f565b8083111561123a5760405162461bcd60e51b8152600401610712906120c9565b600d5461124783856115aa565b11156112655760405162461bcd60e51b8152600401610712906124b9565b600e54349061127490856115b6565b146112915760405162461bcd60e51b815260040161071290612295565b61129b83826127e4565b336000908152601060205260408120919091555b83811015610fb3576112c533610e958386612799565b806112cf81612862565b9150506112af565b6112df611386565b6001600160a01b03166112f0610d5d565b6001600160a01b0316146113165760405162461bcd60e51b815260040161071290612584565b805161088590600b906020840190611c0c565b60006001600160e01b031982166380ac58cd60e01b148061135a57506001600160e01b03198216635b5e139f60e01b145b80610651575061065182611739565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113bf82610b63565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061140382611369565b61141f5760405162461bcd60e51b815260040161071290612303565b600061142a83610b63565b9050806001600160a01b0316846001600160a01b031614806114655750836001600160a01b031661145a846106eb565b6001600160a01b0316145b80611475575061147581856110b9565b949350505050565b826001600160a01b031661149082610b63565b6001600160a01b0316146114b65760405162461bcd60e51b8152600401610712906125b9565b6001600160a01b0382166114dc5760405162461bcd60e51b81526004016107129061221a565b6114e7838383611752565b6114f260008261138a565b6001600160a01b038316600090815260036020526040812080546001929061151b9084906127e4565b90915550506001600160a01b0382166000908152600360205260408120805460019290611549908490612799565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006110358284612799565b600061103582846127c5565b6108858282604051806020016040528060008152506117db565b6115e784848461147d565b6115f38484848461180e565b610fb35760405162461bcd60e51b81526004016107129061214b565b6060600c805461066890612827565b60608161164357506040805180820190915260018152600360fc1b6020820152610654565b8160005b811561166d578061165781612862565b91506116669050600a836127b1565b9150611647565b60008167ffffffffffffffff81111561169657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116c0576020820181803683370190505b5090505b8415611475576116d56001836127e4565b91506116e2600a8661287d565b6116ed906030612799565b60f81b81838151811061171057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611732600a866127b1565b94506116c4565b6001600160e01b031981166301ffc9a760e01b14919050565b61175d8383836107ca565b6001600160a01b0383166117795761177481611929565b61179c565b816001600160a01b0316836001600160a01b03161461179c5761179c838261196d565b6001600160a01b0382166117b8576117b381611a0a565b6107ca565b826001600160a01b0316826001600160a01b0316146107ca576107ca8282611ae3565b6117e58383611b27565b6117f2600084848461180e565b6107ca5760405162461bcd60e51b81526004016107129061214b565b6000611822846001600160a01b0316611c06565b1561191e57836001600160a01b031663150b7a0261183e611386565b8786866040518563ffffffff1660e01b8152600401611860949392919061202a565b602060405180830381600087803b15801561187a57600080fd5b505af19250505080156118aa575060408051601f3d908101601f191682019092526118a791810190611f41565b60015b611904573d8080156118d8576040519150601f19603f3d011682016040523d82523d6000602084013e6118dd565b606091505b5080516118fc5760405162461bcd60e51b81526004016107129061214b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611475565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161197a84610c34565b61198491906127e4565b6000838152600760205260409020549091508082146119d7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611a1c906001906127e4565b60008381526009602052604081205460088054939450909284908110611a5257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611a8157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611ac757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611aee83610c34565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611b4d5760405162461bcd60e51b815260040161071290612503565b611b5681611369565b15611b735760405162461bcd60e51b8152600401610712906121e3565b611b7f60008383611752565b6001600160a01b0382166000908152600360205260408120805460019290611ba8908490612799565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611c1890612827565b90600052602060002090601f016020900481019282611c3a5760008555611c80565b82601f10611c5357805160ff1916838001178555611c80565b82800160010185558215611c80579182015b82811115611c80578251825591602001919060010190611c65565b50611c8c929150611c90565b5090565b5b80821115611c8c5760008155600101611c91565b600067ffffffffffffffff831115611cbf57611cbf6128bd565b611cd2601f8401601f191660200161276f565b9050828152838383011115611ce657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461065457600080fd5b600060208284031215611d25578081fd5b61103582611cfd565b60008060408385031215611d40578081fd5b611d4983611cfd565b9150611d5760208401611cfd565b90509250929050565b600080600060608486031215611d74578081fd5b611d7d84611cfd565b9250611d8b60208501611cfd565b9150604084013590509250925092565b60008060008060808587031215611db0578081fd5b611db985611cfd565b9350611dc760208601611cfd565b925060408501359150606085013567ffffffffffffffff811115611de9578182fd5b8501601f81018713611df9578182fd5b611e0887823560208401611ca5565b91505092959194509250565b60008060408385031215611e26578182fd5b611e2f83611cfd565b915060208301358015158114611e43578182fd5b809150509250929050565b60008060408385031215611e60578182fd5b611e6983611cfd565b946020939093013593505050565b60006020808385031215611e89578182fd5b823567ffffffffffffffff80821115611ea0578384fd5b818501915085601f830112611eb3578384fd5b813581811115611ec557611ec56128bd565b8381029150611ed584830161276f565b8181528481019084860184860187018a1015611eef578788fd5b8795505b83861015611f1857611f0481611cfd565b835260019590950194918601918601611ef3565b5098975050505050505050565b600060208284031215611f36578081fd5b8135611035816128d3565b600060208284031215611f52578081fd5b8151611035816128d3565b600060208284031215611f6e578081fd5b813567ffffffffffffffff811115611f84578182fd5b8201601f81018413611f94578182fd5b61147584823560208401611ca5565b600060208284031215611fb4578081fd5b5035919050565b60008151808452611fd38160208601602086016127fb565b601f01601f19169290920160200192915050565b60008351611ff98184602088016127fb565b83519083019061200d8183602088016127fb565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061205d90830184611fbb565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561209f57835183529284019291840191600101612083565b50909695505050505050565b901515815260200190565b6000602082526110356020830184611fbb565b6020808252601d908201527f43616e2774206d696e74206d6f7265207468616e207265736572766564000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601f908201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604082015260600190565b6020808252601b908201527f53616c65206d7573742062652061637469766520746f206d696e740000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526023908201527f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252601e908201527f50726573616c65206d7573742062652061637469766520746f206d696e740000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252602a908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015269206f6620746f6b656e7360b01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526017908201527f496e76616c696420707572636861736520616d6f756e74000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612791576127916128bd565b604052919050565b600082198211156127ac576127ac612891565b500190565b6000826127c0576127c06128a7565b500490565b60008160001904831182151516156127df576127df612891565b500290565b6000828210156127f6576127f6612891565b500390565b60005b838110156128165781810151838201526020016127fe565b83811115610fb35750506000910152565b60028104600182168061283b57607f821691505b6020821081141561285c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561287657612876612891565b5060010190565b60008261288c5761288c6128a7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146128e957600080fd5b5056fea2646970667358221220cbaa843f593ee78121fb68d619b48db1123d02d872a1f48d6bd137dda79dce9d64736f6c634300080000330000000000000000000000000000000000000000000000000000000000001b58

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610599578063eb8835ab146105b9578063f2fde38b146105d9578063f759867a146105f9578063ffe630b51461060c5761020f565b8063b88d4fde1461052f578063c87b56dd1461054f578063cd3293de1461056f578063d5abeb01146105845761020f565b806391b7f5ed116100e757806391b7f5ed146104b257806395d89b41146104d2578063a035b1fe146104e7578063a0712d68146104fc578063a22cb4651461050f5761020f565b806370a0823114610453578063715018a6146104735780637d8966e4146104885780638da5cb5b1461049d5761020f565b80633ccfd60b1161019b57806353135ca01161016a57806353135ca0146103d457806355f804b3146103e95780636352211e146104095780636373a6b11461042957806368428a1b1461043e5761020f565b80633ccfd60b1461035257806342842e0e14610367578063438b6300146103875780634f6ccce7146103b45761020f565b806318160ddd116101e257806318160ddd146102bb5780631aea52e8146102dd57806323b872dd146102fd5780632f745c591461031d578063343937431461033d5761020f565b806301ffc9a71461021457806306fdde031461024a578063081812fc1461026c578063095ea7b314610299575b600080fd5b34801561022057600080fd5b5061023461022f366004611f25565b61062c565b60405161024191906120ab565b60405180910390f35b34801561025657600080fd5b5061025f610659565b60405161024191906120b6565b34801561027857600080fd5b5061028c610287366004611fa3565b6106eb565b6040516102419190612016565b3480156102a557600080fd5b506102b96102b4366004611e4e565b610737565b005b3480156102c757600080fd5b506102d06107cf565b6040516102419190612766565b3480156102e957600080fd5b506102b96102f8366004611e77565b6107d5565b34801561030957600080fd5b506102b9610318366004611d60565b610889565b34801561032957600080fd5b506102d0610338366004611e4e565b6108c1565b34801561034957600080fd5b506102b9610913565b34801561035e57600080fd5b506102b9610966565b34801561037357600080fd5b506102b9610382366004611d60565b6109d4565b34801561039357600080fd5b506103a76103a2366004611d14565b6109ef565b6040516102419190612067565b3480156103c057600080fd5b506102d06103cf366004611fa3565b610aad565b3480156103e057600080fd5b50610234610b08565b3480156103f557600080fd5b506102b9610404366004611f5d565b610b11565b34801561041557600080fd5b5061028c610424366004611fa3565b610b63565b34801561043557600080fd5b5061025f610b98565b34801561044a57600080fd5b50610234610c26565b34801561045f57600080fd5b506102d061046e366004611d14565b610c34565b34801561047f57600080fd5b506102b9610c78565b34801561049457600080fd5b506102b9610d01565b3480156104a957600080fd5b5061028c610d5d565b3480156104be57600080fd5b506102b96104cd366004611fa3565b610d6c565b3480156104de57600080fd5b5061025f610db0565b3480156104f357600080fd5b506102d0610dbf565b6102b961050a366004611fa3565b610dc5565b34801561051b57600080fd5b506102b961052a366004611e14565b610eac565b34801561053b57600080fd5b506102b961054a366004611d9b565b610f7a565b34801561055b57600080fd5b5061025f61056a366004611fa3565b610fb9565b34801561057b57600080fd5b506102b961103c565b34801561059057600080fd5b506102d06110b3565b3480156105a557600080fd5b506102346105b4366004611d2e565b6110b9565b3480156105c557600080fd5b506102d06105d4366004611d14565b6110e7565b3480156105e557600080fd5b506102b96105f4366004611d14565b6110f9565b6102b9610607366004611fa3565b6111ba565b34801561061857600080fd5b506102b9610627366004611f5d565b6112d7565b60006001600160e01b0319821663780e9d6360e01b1480610651575061065182611329565b90505b919050565b60606000805461066890612827565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612827565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b60006106f682611369565b61071b5760405162461bcd60e51b815260040161071290612538565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074282610b63565b9050806001600160a01b0316836001600160a01b031614156107765760405162461bcd60e51b815260040161071290612651565b806001600160a01b0316610788611386565b6001600160a01b031614806107a457506107a4816105b4611386565b6107c05760405162461bcd60e51b815260040161071290612392565b6107ca838361138a565b505050565b60085490565b6107dd611386565b6001600160a01b03166107ee610d5d565b6001600160a01b0316146108145760405162461bcd60e51b815260040161071290612584565b60005b815181101561088557600a6010600084848151811061084657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061087d90612862565b915050610817565b5050565b61089a610894611386565b826113f8565b6108b65760405162461bcd60e51b815260040161071290612692565b6107ca83838361147d565b60006108cc83610c34565b82106108ea5760405162461bcd60e51b815260040161071290612100565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61091b611386565b6001600160a01b031661092c610d5d565b6001600160a01b0316146109525760405162461bcd60e51b815260040161071290612584565b600f805460ff19811660ff90911615179055565b61096e611386565b6001600160a01b031661097f610d5d565b6001600160a01b0316146109a55760405162461bcd60e51b815260040161071290612584565b6040514790339082156108fc029083906000818181858888f19350505050158015610885573d6000803e3d6000fd5b6107ca83838360405180602001604052806000815250610f7a565b606060006109fc83610c34565b905060008167ffffffffffffffff811115610a2757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a50578160200160208202803683370190505b50905060005b82811015610aa557610a6885826108c1565b828281518110610a8857634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610a9d81612862565b915050610a56565b509392505050565b6000610ab76107cf565b8210610ad55760405162461bcd60e51b8152600401610712906126e3565b60088281548110610af657634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600f5460ff1681565b610b19611386565b6001600160a01b0316610b2a610d5d565b6001600160a01b031614610b505760405162461bcd60e51b815260040161071290612584565b805161088590600c906020840190611c0c565b6000818152600260205260408120546001600160a01b0316806106515760405162461bcd60e51b815260040161071290612470565b600b8054610ba590612827565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190612827565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b505050505081565b600f54610100900460ff1681565b60006001600160a01b038216610c5c5760405162461bcd60e51b815260040161071290612426565b506001600160a01b031660009081526003602052604090205490565b610c80611386565b6001600160a01b0316610c91610d5d565b6001600160a01b031614610cb75760405162461bcd60e51b815260040161071290612584565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b610d09611386565b6001600160a01b0316610d1a610d5d565b6001600160a01b031614610d405760405162461bcd60e51b815260040161071290612584565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b031690565b610d74611386565b6001600160a01b0316610d85610d5d565b6001600160a01b031614610dab5760405162461bcd60e51b815260040161071290612584565b600e55565b60606001805461066890612827565b600e5481565b6000610dcf6107cf565b600f54909150610100900460ff16610df95760405162461bcd60e51b8152600401610712906122cc565b600082118015610e095750601582105b610e255760405162461bcd60e51b81526004016107129061272f565b600d54610e3282846115aa565b1115610e505760405162461bcd60e51b8152600401610712906124b9565b600e543490610e5f90846115b6565b14610e7c5760405162461bcd60e51b815260040161071290612295565b60005b828110156107ca57610e9a33610e958385612799565b6115c2565b80610ea481612862565b915050610e7f565b610eb4611386565b6001600160a01b0316826001600160a01b03161415610ee55760405162461bcd60e51b81526004016107129061225e565b8060056000610ef2611386565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610f36611386565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f6e91906120ab565b60405180910390a35050565b610f8b610f85611386565b836113f8565b610fa75760405162461bcd60e51b815260040161071290612692565b610fb3848484846115dc565b50505050565b6060610fc482611369565b610fe05760405162461bcd60e51b815260040161071290612602565b6000610fea61160f565b9050600081511161100a5760405180602001604052806000815250611035565b806110148461161e565b604051602001611025929190611fe7565b6040516020818303038152906040525b9392505050565b611044611386565b6001600160a01b0316611055610d5d565b6001600160a01b03161461107b5760405162461bcd60e51b815260040161071290612584565b60006110856107cf565b905060005b6032811015610885576110a133610e958385612799565b806110ab81612862565b91505061108a565b600d5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60106020526000908152604090205481565b611101611386565b6001600160a01b0316611112610d5d565b6001600160a01b0316146111385760405162461bcd60e51b815260040161071290612584565b6001600160a01b03811661115e5760405162461bcd60e51b81526004016107129061219d565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006111c46107cf565b33600090815260106020526040902054600f549192509060ff166111fa5760405162461bcd60e51b8152600401610712906123ef565b6000811161121a5760405162461bcd60e51b81526004016107129061234f565b8083111561123a5760405162461bcd60e51b8152600401610712906120c9565b600d5461124783856115aa565b11156112655760405162461bcd60e51b8152600401610712906124b9565b600e54349061127490856115b6565b146112915760405162461bcd60e51b815260040161071290612295565b61129b83826127e4565b336000908152601060205260408120919091555b83811015610fb3576112c533610e958386612799565b806112cf81612862565b9150506112af565b6112df611386565b6001600160a01b03166112f0610d5d565b6001600160a01b0316146113165760405162461bcd60e51b815260040161071290612584565b805161088590600b906020840190611c0c565b60006001600160e01b031982166380ac58cd60e01b148061135a57506001600160e01b03198216635b5e139f60e01b145b80610651575061065182611739565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113bf82610b63565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061140382611369565b61141f5760405162461bcd60e51b815260040161071290612303565b600061142a83610b63565b9050806001600160a01b0316846001600160a01b031614806114655750836001600160a01b031661145a846106eb565b6001600160a01b0316145b80611475575061147581856110b9565b949350505050565b826001600160a01b031661149082610b63565b6001600160a01b0316146114b65760405162461bcd60e51b8152600401610712906125b9565b6001600160a01b0382166114dc5760405162461bcd60e51b81526004016107129061221a565b6114e7838383611752565b6114f260008261138a565b6001600160a01b038316600090815260036020526040812080546001929061151b9084906127e4565b90915550506001600160a01b0382166000908152600360205260408120805460019290611549908490612799565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006110358284612799565b600061103582846127c5565b6108858282604051806020016040528060008152506117db565b6115e784848461147d565b6115f38484848461180e565b610fb35760405162461bcd60e51b81526004016107129061214b565b6060600c805461066890612827565b60608161164357506040805180820190915260018152600360fc1b6020820152610654565b8160005b811561166d578061165781612862565b91506116669050600a836127b1565b9150611647565b60008167ffffffffffffffff81111561169657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156116c0576020820181803683370190505b5090505b8415611475576116d56001836127e4565b91506116e2600a8661287d565b6116ed906030612799565b60f81b81838151811061171057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611732600a866127b1565b94506116c4565b6001600160e01b031981166301ffc9a760e01b14919050565b61175d8383836107ca565b6001600160a01b0383166117795761177481611929565b61179c565b816001600160a01b0316836001600160a01b03161461179c5761179c838261196d565b6001600160a01b0382166117b8576117b381611a0a565b6107ca565b826001600160a01b0316826001600160a01b0316146107ca576107ca8282611ae3565b6117e58383611b27565b6117f2600084848461180e565b6107ca5760405162461bcd60e51b81526004016107129061214b565b6000611822846001600160a01b0316611c06565b1561191e57836001600160a01b031663150b7a0261183e611386565b8786866040518563ffffffff1660e01b8152600401611860949392919061202a565b602060405180830381600087803b15801561187a57600080fd5b505af19250505080156118aa575060408051601f3d908101601f191682019092526118a791810190611f41565b60015b611904573d8080156118d8576040519150601f19603f3d011682016040523d82523d6000602084013e6118dd565b606091505b5080516118fc5760405162461bcd60e51b81526004016107129061214b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611475565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161197a84610c34565b61198491906127e4565b6000838152600760205260409020549091508082146119d7576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611a1c906001906127e4565b60008381526009602052604081205460088054939450909284908110611a5257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611a8157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611ac757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611aee83610c34565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611b4d5760405162461bcd60e51b815260040161071290612503565b611b5681611369565b15611b735760405162461bcd60e51b8152600401610712906121e3565b611b7f60008383611752565b6001600160a01b0382166000908152600360205260408120805460019290611ba8908490612799565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611c1890612827565b90600052602060002090601f016020900481019282611c3a5760008555611c80565b82601f10611c5357805160ff1916838001178555611c80565b82800160010185558215611c80579182015b82811115611c80578251825591602001919060010190611c65565b50611c8c929150611c90565b5090565b5b80821115611c8c5760008155600101611c91565b600067ffffffffffffffff831115611cbf57611cbf6128bd565b611cd2601f8401601f191660200161276f565b9050828152838383011115611ce657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461065457600080fd5b600060208284031215611d25578081fd5b61103582611cfd565b60008060408385031215611d40578081fd5b611d4983611cfd565b9150611d5760208401611cfd565b90509250929050565b600080600060608486031215611d74578081fd5b611d7d84611cfd565b9250611d8b60208501611cfd565b9150604084013590509250925092565b60008060008060808587031215611db0578081fd5b611db985611cfd565b9350611dc760208601611cfd565b925060408501359150606085013567ffffffffffffffff811115611de9578182fd5b8501601f81018713611df9578182fd5b611e0887823560208401611ca5565b91505092959194509250565b60008060408385031215611e26578182fd5b611e2f83611cfd565b915060208301358015158114611e43578182fd5b809150509250929050565b60008060408385031215611e60578182fd5b611e6983611cfd565b946020939093013593505050565b60006020808385031215611e89578182fd5b823567ffffffffffffffff80821115611ea0578384fd5b818501915085601f830112611eb3578384fd5b813581811115611ec557611ec56128bd565b8381029150611ed584830161276f565b8181528481019084860184860187018a1015611eef578788fd5b8795505b83861015611f1857611f0481611cfd565b835260019590950194918601918601611ef3565b5098975050505050505050565b600060208284031215611f36578081fd5b8135611035816128d3565b600060208284031215611f52578081fd5b8151611035816128d3565b600060208284031215611f6e578081fd5b813567ffffffffffffffff811115611f84578182fd5b8201601f81018413611f94578182fd5b61147584823560208401611ca5565b600060208284031215611fb4578081fd5b5035919050565b60008151808452611fd38160208601602086016127fb565b601f01601f19169290920160200192915050565b60008351611ff98184602088016127fb565b83519083019061200d8183602088016127fb565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061205d90830184611fbb565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561209f57835183529284019291840191600101612083565b50909695505050505050565b901515815260200190565b6000602082526110356020830184611fbb565b6020808252601d908201527f43616e2774206d696e74206d6f7265207468616e207265736572766564000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601f908201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604082015260600190565b6020808252601b908201527f53616c65206d7573742062652061637469766520746f206d696e740000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526023908201527f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260408201526265737360e81b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252601e908201527f50726573616c65206d7573742062652061637469766520746f206d696e740000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252602a908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015269206f6620746f6b656e7360b01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526017908201527f496e76616c696420707572636861736520616d6f756e74000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612791576127916128bd565b604052919050565b600082198211156127ac576127ac612891565b500190565b6000826127c0576127c06128a7565b500490565b60008160001904831182151516156127df576127df612891565b500290565b6000828210156127f6576127f6612891565b500390565b60005b838110156128165781810151838201526020016127fe565b83811115610fb35750506000910152565b60028104600182168061283b57607f821691505b6020821081141561285c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561287657612876612891565b5060010190565b60008261288c5761288c6128a7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146128e957600080fd5b5056fea2646970667358221220cbaa843f593ee78121fb68d619b48db1123d02d872a1f48d6bd137dda79dce9d64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000001b58

-----Decoded View---------------
Arg [0] : supply (uint256): 7000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000001b58


Deployed Bytecode Sourcemap

49956:3518:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34408:237;;;;;;;;;;-1:-1:-1;34408:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21611:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23071:221::-;;;;;;;;;;-1:-1:-1;23071:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22608:397::-;;;;;;;;;;-1:-1:-1;22608:397:0;;;;;:::i;:::-;;:::i;:::-;;35061:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;52142:208::-;;;;;;;;;;-1:-1:-1;52142:208:0;;;;;:::i;:::-;;:::i;23961:305::-;;;;;;;;;;-1:-1:-1;23961:305:0;;;;;:::i;:::-;;:::i;34729:256::-;;;;;;;;;;-1:-1:-1;34729:256:0;;;;;:::i;:::-;;:::i;52865:91::-;;;;;;;;;;;;;:::i;52714:143::-;;;;;;;;;;;;;:::i;24337:151::-;;;;;;;;;;-1:-1:-1;24337:151:0;;;;;:::i;:::-;;:::i;52362:344::-;;;;;;;;;;-1:-1:-1;52362:344:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35251:233::-;;;;;;;;;;-1:-1:-1;35251:233:0;;;;;:::i;:::-;;:::i;50224:33::-;;;;;;;;;;;;;:::i;53270:88::-;;;;;;;;;;-1:-1:-1;53270:88:0;;;;;:::i;:::-;;:::i;21305:239::-;;;;;;;;;;-1:-1:-1;21305:239:0;;;;;:::i;:::-;;:::i;50089:24::-;;;;;;;;;;;;;:::i;50264:30::-;;;;;;;;;;;;;:::i;21035:208::-;;;;;;;;;;-1:-1:-1;21035:208:0;;;;;:::i;:::-;;:::i;42284:148::-;;;;;;;;;;;;;:::i;52964:82::-;;;;;;;;;;;;;:::i;41633:87::-;;;;;;;;;;;;;:::i;53054:88::-;;;;;;;;;;-1:-1:-1;53054:88:0;;;;;:::i;:::-;;:::i;21780:104::-;;;;;;;;;;;;;:::i;50182:33::-;;;;;;;;;;;;;:::i;51527:607::-;;;;;;:::i;:::-;;:::i;23364:295::-;;;;;;;;;;-1:-1:-1;23364:295:0;;;;;:::i;:::-;;:::i;24559:285::-;;;;;;;;;;-1:-1:-1;24559:285:0;;;;;:::i;:::-;;:::i;21955:360::-;;;;;;;;;;-1:-1:-1;21955:360:0;;;;;:::i;:::-;;:::i;50478:188::-;;;;;;;;;;;;;:::i;50151:24::-;;;;;;;;;;;;;:::i;23730:164::-;;;;;;;;;;-1:-1:-1;23730:164:0;;;;;:::i;:::-;;:::i;50303:52::-;;;;;;;;;;-1:-1:-1;50303:52:0;;;;;:::i;:::-;;:::i;42587:244::-;;;;;;;;;;-1:-1:-1;42587:244:0;;;;;:::i;:::-;;:::i;50674:841::-;;;;;;:::i;:::-;;:::i;53150:108::-;;;;;;;;;;-1:-1:-1;53150:108:0;;;;;:::i;:::-;;:::i;34408:237::-;34510:4;-1:-1:-1;;;;;;34534:50:0;;-1:-1:-1;;;34534:50:0;;:103;;;34601:36;34625:11;34601:23;:36::i;:::-;34527:110;;34408:237;;;;:::o;21611:100::-;21665:13;21698:5;21691:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21611:100;:::o;23071:221::-;23147:7;23175:16;23183:7;23175;:16::i;:::-;23167:73;;;;-1:-1:-1;;;23167:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;23260:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23260:24:0;;23071:221::o;22608:397::-;22689:13;22705:23;22720:7;22705:14;:23::i;:::-;22689:39;;22753:5;-1:-1:-1;;;;;22747:11:0;:2;-1:-1:-1;;;;;22747:11:0;;;22739:57;;;;-1:-1:-1;;;22739:57:0;;;;;;;:::i;:::-;22833:5;-1:-1:-1;;;;;22817:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22817:21:0;;:62;;;;22842:37;22859:5;22866:12;:10;:12::i;22842:37::-;22809:154;;;;-1:-1:-1;;;22809:154:0;;;;;;;:::i;:::-;22976:21;22985:2;22989:7;22976:8;:21::i;:::-;22608:397;;;:::o;35061:113::-;35149:10;:17;35061:113;:::o;52142:208::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;52230:9:::1;52226:117;52245:16;:23;52241:1;:27;52226:117;;;52329:2;52289:16;:37;52306:16;52323:1;52306:19;;;;;;-1:-1:-1::0;;;52306:19:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;52289:37:0::1;-1:-1:-1::0;;;;;52289:37:0::1;;;;;;;;;;;;:42;;;;52270:3;;;;;:::i;:::-;;;;52226:117;;;;52142:208:::0;:::o;23961:305::-;24122:41;24141:12;:10;:12::i;:::-;24155:7;24122:18;:41::i;:::-;24114:103;;;;-1:-1:-1;;;24114:103:0;;;;;;;:::i;:::-;24230:28;24240:4;24246:2;24250:7;24230:9;:28::i;34729:256::-;34826:7;34862:23;34879:5;34862:16;:23::i;:::-;34854:5;:31;34846:87;;;;-1:-1:-1;;;34846:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;34951:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34729:256::o;52865:91::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;52935:13:::1;::::0;;-1:-1:-1;;52918:30:0;::::1;52935:13;::::0;;::::1;52934:14;52918:30;::::0;;52865:91::o;52714:143::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;52812:37:::1;::::0;52780:21:::1;::::0;52820:10:::1;::::0;52812:37;::::1;;;::::0;52780:21;;52762:15:::1;52812:37:::0;52762:15;52812:37;52780:21;52820:10;52812:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;24337:151:::0;24441:39;24458:4;24464:2;24468:7;24441:39;;;;;;;;;;;;:16;:39::i;52362:344::-;52423:16;52452:18;52473:17;52483:6;52473:9;:17::i;:::-;52452:38;;52503:25;52545:10;52531:25;;;;;;-1:-1:-1;;;52531:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52531:25:0;;52503:53;;52571:9;52567:106;52586:10;52582:1;:14;52567:106;;;52631:30;52651:6;52659:1;52631:19;:30::i;:::-;52617:8;52626:1;52617:11;;;;;;-1:-1:-1;;;52617:11:0;;;;;;;;;;;;;;;;;;:44;52598:3;;;;:::i;:::-;;;;52567:106;;;-1:-1:-1;52690:8:0;52362:344;-1:-1:-1;;;52362:344:0:o;35251:233::-;35326:7;35362:30;:28;:30::i;:::-;35354:5;:38;35346:95;;;;-1:-1:-1;;;35346:95:0;;;;;;;:::i;:::-;35459:10;35470:5;35459:17;;;;;;-1:-1:-1;;;35459:17:0;;;;;;;;;;;;;;;;;35452:24;;35251:233;;;:::o;50224:33::-;;;;;;:::o;53270:88::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;53337:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;21305:239::-:0;21377:7;21413:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21413:16:0;21448:19;21440:73;;;;-1:-1:-1;;;21440:73:0;;;;;;;:::i;50089:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50264:30::-;;;;;;;;;:::o;21035:208::-;21107:7;-1:-1:-1;;;;;21135:19:0;;21127:74;;;;-1:-1:-1;;;21127:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21219:16:0;;;;;:9;:16;;;;;;;21035:208::o;42284:148::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;42375:6:::1;::::0;42354:40:::1;::::0;42391:1:::1;::::0;-1:-1:-1;;;;;42375:6:0::1;::::0;42354:40:::1;::::0;42391:1;;42354:40:::1;42405:6;:19:::0;;-1:-1:-1;;;;;;42405:19:0::1;::::0;;42284:148::o;52964:82::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;53028:10:::1;::::0;;-1:-1:-1;;53014:24:0;::::1;53028:10;::::0;;;::::1;;;53027:11;53014:24:::0;;::::1;;::::0;;52964:82::o;41633:87::-;41706:6;;-1:-1:-1;;;;;41706:6:0;41633:87;:::o;53054:88::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;53118:5:::1;:16:::0;53054:88::o;21780:104::-;21836:13;21869:7;21862:14;;;;;:::i;50182:33::-;;;;:::o;51527:607::-;51590:14;51607:13;:11;:13::i;:::-;51639:10;;51590:30;;-1:-1:-1;51639:10:0;;;;;51631:82;;;;-1:-1:-1;;;51631:82:0;;;;;;;:::i;:::-;51748:1;51732:13;:17;:39;;;;;51769:2;51753:13;:18;51732:39;51724:78;;;;-1:-1:-1;;;51724:78:0;;;;;;;:::i;:::-;51850:9;;51821:25;:6;51832:13;51821:10;:25::i;:::-;:38;;51813:97;;;;-1:-1:-1;;;51813:97:0;;;;;;;:::i;:::-;51929:5;;51957:9;;51929:24;;51939:13;51929:9;:24::i;:::-;:37;51921:86;;;;-1:-1:-1;;;51921:86:0;;;;;;;:::i;:::-;52032:9;52028:99;52047:13;52043:1;:17;52028:99;;;52082:33;52092:10;52104;52113:1;52104:6;:10;:::i;:::-;52082:9;:33::i;:::-;52062:3;;;;:::i;:::-;;;;52028:99;;23364:295;23479:12;:10;:12::i;:::-;-1:-1:-1;;;;;23467:24:0;:8;-1:-1:-1;;;;;23467:24:0;;;23459:62;;;;-1:-1:-1;;;23459:62:0;;;;;;;:::i;:::-;23579:8;23534:18;:32;23553:12;:10;:12::i;:::-;-1:-1:-1;;;;;23534:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;23534:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;23534:53:0;;;;;;;;;;;23618:12;:10;:12::i;:::-;-1:-1:-1;;;;;23603:48:0;;23642:8;23603:48;;;;;;:::i;:::-;;;;;;;;23364:295;;:::o;24559:285::-;24691:41;24710:12;:10;:12::i;:::-;24724:7;24691:18;:41::i;:::-;24683:103;;;;-1:-1:-1;;;24683:103:0;;;;;;;:::i;:::-;24797:39;24811:4;24817:2;24821:7;24830:5;24797:13;:39::i;:::-;24559:285;;;;:::o;21955:360::-;22028:13;22062:16;22070:7;22062;:16::i;:::-;22054:76;;;;-1:-1:-1;;;22054:76:0;;;;;;;:::i;:::-;22143:21;22167:10;:8;:10::i;:::-;22143:34;;22219:1;22201:7;22195:21;:25;:112;;;;;;;;;;;;;;;;;22260:7;22269:18;:7;:16;:18::i;:::-;22243:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22195:112;22188:119;21955:360;-1:-1:-1;;;21955:360:0:o;50478:188::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;50525:14:::1;50542:13;:11;:13::i;:::-;50525:30;;50571:9;50566:93;50590:2;50586:1;:6;50566:93;;;50614:33;50624:10;50636;50645:1:::0;50636:6;:10:::1;:::i;50614:33::-;50594:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50566:93;;50151:24:::0;;;;:::o;23730:164::-;-1:-1:-1;;;;;23851:25:0;;;23827:4;23851:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23730:164::o;50303:52::-;;;;;;;;;;;;;:::o;42587:244::-;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42676:22:0;::::1;42668:73;;;;-1:-1:-1::0;;;42668:73:0::1;;;;;;;:::i;:::-;42778:6;::::0;42757:38:::1;::::0;-1:-1:-1;;;;;42757:38:0;;::::1;::::0;42778:6:::1;::::0;42757:38:::1;::::0;42778:6:::1;::::0;42757:38:::1;42806:6;:17:::0;;-1:-1:-1;;;;;;42806:17:0::1;-1:-1:-1::0;;;;;42806:17:0;;;::::1;::::0;;;::::1;::::0;;42587:244::o;50674:841::-;50744:14;50761:13;:11;:13::i;:::-;50821:10;50785:16;50804:28;;;:16;:28;;;;;;50851:13;;50744:30;;-1:-1:-1;50804:28:0;50851:13;;50843:85;;;;-1:-1:-1;;;50843:85:0;;;;;;;:::i;:::-;50958:1;50947:8;:12;50939:90;;;;-1:-1:-1;;;50939:90:0;;;;;;;:::i;:::-;51065:8;51048:13;:25;;51040:84;;;;-1:-1:-1;;;51040:84:0;;;;;;;:::i;:::-;51172:9;;51143:25;:6;51154:13;51143:10;:25::i;:::-;:38;;51135:97;;;;-1:-1:-1;;;51135:97:0;;;;;;;:::i;:::-;51251:5;;51279:9;;51251:24;;51261:13;51251:9;:24::i;:::-;:37;51243:86;;;;-1:-1:-1;;;51243:86:0;;;;;;;:::i;:::-;51371:24;51382:13;51371:8;:24;:::i;:::-;51357:10;51340:28;;;;:16;:28;;;;;:55;;;;51408:100;51427:13;51423:1;:17;51408:100;;;51461:35;51472:10;51484;51493:1;51484:6;:10;:::i;51461:35::-;51442:3;;;;:::i;:::-;;;;51408:100;;53150:108;41864:12;:10;:12::i;:::-;-1:-1:-1;;;;;41853:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;41853:23:0;;41845:68;;;;-1:-1:-1;;;41845:68:0;;;;;;;:::i;:::-;53227:23;;::::1;::::0;:10:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;20679:292::-:0;20781:4;-1:-1:-1;;;;;;20805:40:0;;-1:-1:-1;;;20805:40:0;;:105;;-1:-1:-1;;;;;;;20862:48:0;;-1:-1:-1;;;20862:48:0;20805:105;:158;;;;20927:36;20951:11;20927:23;:36::i;26311:127::-;26376:4;26400:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26400:16:0;:30;;;26311:127::o;15971:98::-;16051:10;15971:98;:::o;30188:174::-;30263:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30263:29:0;-1:-1:-1;;;;;30263:29:0;;;;;;;;:24;;30317:23;30263:24;30317:14;:23::i;:::-;-1:-1:-1;;;;;30308:46:0;;;;;;;;;;;30188:174;;:::o;26605:348::-;26698:4;26723:16;26731:7;26723;:16::i;:::-;26715:73;;;;-1:-1:-1;;;26715:73:0;;;;;;;:::i;:::-;26799:13;26815:23;26830:7;26815:14;:23::i;:::-;26799:39;;26868:5;-1:-1:-1;;;;;26857:16:0;:7;-1:-1:-1;;;;;26857:16:0;;:51;;;;26901:7;-1:-1:-1;;;;;26877:31:0;:20;26889:7;26877:11;:20::i;:::-;-1:-1:-1;;;;;26877:31:0;;26857:51;:87;;;;26912:32;26929:5;26936:7;26912:16;:32::i;:::-;26849:96;26605:348;-1:-1:-1;;;;26605:348:0:o;29526:544::-;29651:4;-1:-1:-1;;;;;29624:31:0;:23;29639:7;29624:14;:23::i;:::-;-1:-1:-1;;;;;29624:31:0;;29616:85;;;;-1:-1:-1;;;29616:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29720:16:0;;29712:65;;;;-1:-1:-1;;;29712:65:0;;;;;;;:::i;:::-;29790:39;29811:4;29817:2;29821:7;29790:20;:39::i;:::-;29894:29;29911:1;29915:7;29894:8;:29::i;:::-;-1:-1:-1;;;;;29936:15:0;;;;;;:9;:15;;;;;:20;;29955:1;;29936:15;:20;;29955:1;;29936:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29967:13:0;;;;;;:9;:13;;;;;:18;;29984:1;;29967:13;:18;;29984:1;;29967:18;:::i;:::-;;;;-1:-1:-1;;29996:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29996:21:0;-1:-1:-1;;;;;29996:21:0;;;;;;;;;30035:27;;29996:16;;30035:27;;;;;;;29526:544;;;:::o;45634:98::-;45692:7;45719:5;45723:1;45719;:5;:::i;46372:98::-;46430:7;46457:5;46461:1;46457;:5;:::i;27295:110::-;27371:26;27381:2;27385:7;27371:26;;;;;;;;;;;;:9;:26::i;25726:272::-;25840:28;25850:4;25856:2;25860:7;25840:9;:28::i;:::-;25887:48;25910:4;25916:2;25920:7;25929:5;25887:22;:48::i;:::-;25879:111;;;;-1:-1:-1;;;25879:111:0;;;;;;;:::i;53370:100::-;53422:13;53455:7;53448:14;;;;;:::i;16630:723::-;16686:13;16907:10;16903:53;;-1:-1:-1;16934:10:0;;;;;;;;;;;;-1:-1:-1;;;16934:10:0;;;;;;16903:53;16981:5;16966:12;17022:78;17029:9;;17022:78;;17055:8;;;;:::i;:::-;;-1:-1:-1;17078:10:0;;-1:-1:-1;17086:2:0;17078:10;;:::i;:::-;;;17022:78;;;17110:19;17142:6;17132:17;;;;;;-1:-1:-1;;;17132:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17132:17:0;;17110:39;;17160:154;17167:10;;17160:154;;17194:11;17204:1;17194:11;;:::i;:::-;;-1:-1:-1;17263:10:0;17271:2;17263:5;:10;:::i;:::-;17250:24;;:2;:24;:::i;:::-;17237:39;;17220:6;17227;17220:14;;;;;;-1:-1:-1;;;17220:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17220:56:0;;;;;;;;-1:-1:-1;17291:11:0;17300:2;17291:11;;:::i;:::-;;;17160:154;;19187:157;-1:-1:-1;;;;;;19296:40:0;;-1:-1:-1;;;19296:40:0;19187:157;;;:::o;36097:555::-;36207:45;36234:4;36240:2;36244:7;36207:26;:45::i;:::-;-1:-1:-1;;;;;36269:18:0;;36265:187;;36304:40;36336:7;36304:31;:40::i;:::-;36265:187;;;36374:2;-1:-1:-1;;;;;36366:10:0;:4;-1:-1:-1;;;;;36366:10:0;;36362:90;;36393:47;36426:4;36432:7;36393:32;:47::i;:::-;-1:-1:-1;;;;;36466:16:0;;36462:183;;36499:45;36536:7;36499:36;:45::i;:::-;36462:183;;;36572:4;-1:-1:-1;;;;;36566:10:0;:2;-1:-1:-1;;;;;36566:10:0;;36562:83;;36593:40;36621:2;36625:7;36593:27;:40::i;27632:250::-;27728:18;27734:2;27738:7;27728:5;:18::i;:::-;27765:54;27796:1;27800:2;27804:7;27813:5;27765:22;:54::i;:::-;27757:117;;;;-1:-1:-1;;;27757:117:0;;;;;;;:::i;30927:843::-;31048:4;31074:15;:2;-1:-1:-1;;;;;31074:13:0;;:15::i;:::-;31070:693;;;31126:2;-1:-1:-1;;;;;31110:36:0;;31147:12;:10;:12::i;:::-;31161:4;31167:7;31176:5;31110:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31110:72:0;;;;;;;;-1:-1:-1;;31110:72:0;;;;;;;;;;;;:::i;:::-;;;31106:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31356:13:0;;31352:341;;31399:60;;-1:-1:-1;;;31399:60:0;;;;;;;:::i;31352:341::-;31643:6;31637:13;31628:6;31624:2;31620:15;31613:38;31106:602;-1:-1:-1;;;;;;31233:55:0;-1:-1:-1;;;31233:55:0;;-1:-1:-1;31226:62:0;;31070:693;-1:-1:-1;31747:4:0;30927:843;;;;;;:::o;37375:164::-;37479:10;:17;;37452:24;;;;:15;:24;;;;;:44;;;37507:24;;;;;;;;;;;;37375:164::o;38166:988::-;38432:22;38482:1;38457:22;38474:4;38457:16;:22::i;:::-;:26;;;;:::i;:::-;38494:18;38515:26;;;:17;:26;;;;;;38432:51;;-1:-1:-1;38648:28:0;;;38644:328;;-1:-1:-1;;;;;38715:18:0;;38693:19;38715:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38766:30;;;;;;:44;;;38883:30;;:17;:30;;;;;:43;;;38644:328;-1:-1:-1;39068:26:0;;;;:17;:26;;;;;;;;39061:33;;;-1:-1:-1;;;;;39112:18:0;;;;;:12;:18;;;;;:34;;;;;;;39105:41;38166:988::o;39449:1079::-;39727:10;:17;39702:22;;39727:21;;39747:1;;39727:21;:::i;:::-;39759:18;39780:24;;;:15;:24;;;;;;40153:10;:26;;39702:46;;-1:-1:-1;39780:24:0;;39702:46;;40153:26;;;;-1:-1:-1;;;40153:26:0;;;;;;;;;;;;;;;;;40131:48;;40217:11;40192:10;40203;40192:22;;;;;;-1:-1:-1;;;40192:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;40297:28;;;:15;:28;;;;;;;:41;;;40469:24;;;;;40462:31;40504:10;:16;;;;;-1:-1:-1;;;40504:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;39449:1079;;;;:::o;36953:221::-;37038:14;37055:20;37072:2;37055:16;:20::i;:::-;-1:-1:-1;;;;;37086:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37131:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;36953:221:0:o;28218:382::-;-1:-1:-1;;;;;28298:16:0;;28290:61;;;;-1:-1:-1;;;28290:61:0;;;;;;;:::i;:::-;28371:16;28379:7;28371;:16::i;:::-;28370:17;28362:58;;;;-1:-1:-1;;;28362:58:0;;;;;;;:::i;:::-;28433:45;28462:1;28466:2;28470:7;28433:20;:45::i;:::-;-1:-1:-1;;;;;28491:13:0;;;;;;:9;:13;;;;;:18;;28508:1;;28491:13;:18;;28508:1;;28491:18;:::i;:::-;;;;-1:-1:-1;;28520:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28520:21:0;-1:-1:-1;;;;;28520:21:0;;;;;;;;28559:33;;28520:16;;;28559:33;;28520:16;;28559:33;28218:382;;:::o;8084:422::-;8451:20;8490:8;;;8084:422::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:198;;720:2;708:9;699:7;695:23;691:32;688:2;;;741:6;733;726:22;688:2;769:31;790:9;769:31;:::i;811:274::-;;;940:2;928:9;919:7;915:23;911:32;908:2;;;961:6;953;946:22;908:2;989:31;1010:9;989:31;:::i;:::-;979:41;;1039:40;1075:2;1064:9;1060:18;1039:40;:::i;:::-;1029:50;;898:187;;;;;:::o;1090:342::-;;;;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1257:6;1249;1242:22;1204:2;1285:31;1306:9;1285:31;:::i;:::-;1275:41;;1335:40;1371:2;1360:9;1356:18;1335:40;:::i;:::-;1325:50;;1422:2;1411:9;1407:18;1394:32;1384:42;;1194:238;;;;;:::o;1437:702::-;;;;;1609:3;1597:9;1588:7;1584:23;1580:33;1577:2;;;1631:6;1623;1616:22;1577:2;1659:31;1680:9;1659:31;:::i;:::-;1649:41;;1709:40;1745:2;1734:9;1730:18;1709:40;:::i;:::-;1699:50;;1796:2;1785:9;1781:18;1768:32;1758:42;;1851:2;1840:9;1836:18;1823:32;1878:18;1870:6;1867:30;1864:2;;;1915:6;1907;1900:22;1864:2;1943:22;;1996:4;1988:13;;1984:27;-1:-1:-1;1974:2:1;;2030:6;2022;2015:22;1974:2;2058:75;2125:7;2120:2;2107:16;2102:2;2098;2094:11;2058:75;:::i;:::-;2048:85;;;1567:572;;;;;;;:::o;2144:369::-;;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2319:31;2340:9;2319:31;:::i;:::-;2309:41;;2400:2;2389:9;2385:18;2372:32;2447:5;2440:13;2433:21;2426:5;2423:32;2413:2;;2474:6;2466;2459:22;2413:2;2502:5;2492:15;;;2228:285;;;;;:::o;2518:266::-;;;2647:2;2635:9;2626:7;2622:23;2618:32;2615:2;;;2668:6;2660;2653:22;2615:2;2696:31;2717:9;2696:31;:::i;:::-;2686:41;2774:2;2759:18;;;;2746:32;;-1:-1:-1;;;2605:179:1:o;2789:1010::-;;2904:2;2947;2935:9;2926:7;2922:23;2918:32;2915:2;;;2968:6;2960;2953:22;2915:2;3013:9;3000:23;3042:18;3083:2;3075:6;3072:14;3069:2;;;3104:6;3096;3089:22;3069:2;3147:6;3136:9;3132:22;3122:32;;3192:7;3185:4;3181:2;3177:13;3173:27;3163:2;;3219:6;3211;3204:22;3163:2;3260;3247:16;3282:2;3278;3275:10;3272:2;;;3288:18;;:::i;:::-;3335:2;3331;3327:11;3317:21;;3358:27;3381:2;3377;3373:11;3358:27;:::i;:::-;3419:15;;;3450:12;;;;3482:11;;;3512;;;3508:20;;3505:33;-1:-1:-1;3502:2:1;;;3556:6;3548;3541:22;3502:2;3583:6;3574:15;;3598:171;3612:2;3609:1;3606:9;3598:171;;;3669:25;3690:3;3669:25;:::i;:::-;3657:38;;3630:1;3623:9;;;;;3715:12;;;;3747;;3598:171;;;-1:-1:-1;3788:5:1;2884:915;-1:-1:-1;;;;;;;;2884:915:1:o;3804:257::-;;3915:2;3903:9;3894:7;3890:23;3886:32;3883:2;;;3936:6;3928;3921:22;3883:2;3980:9;3967:23;3999:32;4025:5;3999:32;:::i;4066:261::-;;4188:2;4176:9;4167:7;4163:23;4159:32;4156:2;;;4209:6;4201;4194:22;4156:2;4246:9;4240:16;4265:32;4291:5;4265:32;:::i;4332:482::-;;4454:2;4442:9;4433:7;4429:23;4425:32;4422:2;;;4475:6;4467;4460:22;4422:2;4520:9;4507:23;4553:18;4545:6;4542:30;4539:2;;;4590:6;4582;4575:22;4539:2;4618:22;;4671:4;4663:13;;4659:27;-1:-1:-1;4649:2:1;;4705:6;4697;4690:22;4649:2;4733:75;4800:7;4795:2;4782:16;4777:2;4773;4769:11;4733:75;:::i;4819:190::-;;4931:2;4919:9;4910:7;4906:23;4902:32;4899:2;;;4952:6;4944;4937:22;4899:2;-1:-1:-1;4980:23:1;;4889:120;-1:-1:-1;4889:120:1:o;5014:259::-;;5095:5;5089:12;5122:6;5117:3;5110:19;5138:63;5194:6;5187:4;5182:3;5178:14;5171:4;5164:5;5160:16;5138:63;:::i;:::-;5255:2;5234:15;-1:-1:-1;;5230:29:1;5221:39;;;;5262:4;5217:50;;5065:208;-1:-1:-1;;5065:208:1:o;5278:470::-;;5495:6;5489:13;5511:53;5557:6;5552:3;5545:4;5537:6;5533:17;5511:53;:::i;:::-;5627:13;;5586:16;;;;5649:57;5627:13;5586:16;5683:4;5671:17;;5649:57;:::i;:::-;5722:20;;5465:283;-1:-1:-1;;;;5465:283:1:o;5753:203::-;-1:-1:-1;;;;;5917:32:1;;;;5899:51;;5887:2;5872:18;;5854:102::o;5961:490::-;-1:-1:-1;;;;;6230:15:1;;;6212:34;;6282:15;;6277:2;6262:18;;6255:43;6329:2;6314:18;;6307:34;;;6377:3;6372:2;6357:18;;6350:31;;;5961:490;;6398:47;;6425:19;;6417:6;6398:47;:::i;:::-;6390:55;6164:287;-1:-1:-1;;;;;;6164:287:1:o;6456:635::-;6627:2;6679:21;;;6749:13;;6652:18;;;6771:22;;;6456:635;;6627:2;6850:15;;;;6824:2;6809:18;;;6456:635;6896:169;6910:6;6907:1;6904:13;6896:169;;;6971:13;;6959:26;;7040:15;;;;7005:12;;;;6932:1;6925:9;6896:169;;;-1:-1:-1;7082:3:1;;6607:484;-1:-1:-1;;;;;;6607:484:1:o;7096:187::-;7261:14;;7254:22;7236:41;;7224:2;7209:18;;7191:92::o;7288:221::-;;7437:2;7426:9;7419:21;7457:46;7499:2;7488:9;7484:18;7476:6;7457:46;:::i;7514:353::-;7716:2;7698:21;;;7755:2;7735:18;;;7728:30;7794:31;7789:2;7774:18;;7767:59;7858:2;7843:18;;7688:179::o;7872:407::-;8074:2;8056:21;;;8113:2;8093:18;;;8086:30;8152:34;8147:2;8132:18;;8125:62;-1:-1:-1;;;8218:2:1;8203:18;;8196:41;8269:3;8254:19;;8046:233::o;8284:414::-;8486:2;8468:21;;;8525:2;8505:18;;;8498:30;8564:34;8559:2;8544:18;;8537:62;-1:-1:-1;;;8630:2:1;8615:18;;8608:48;8688:3;8673:19;;8458:240::o;8703:402::-;8905:2;8887:21;;;8944:2;8924:18;;;8917:30;8983:34;8978:2;8963:18;;8956:62;-1:-1:-1;;;9049:2:1;9034:18;;9027:36;9095:3;9080:19;;8877:228::o;9110:352::-;9312:2;9294:21;;;9351:2;9331:18;;;9324:30;9390;9385:2;9370:18;;9363:58;9453:2;9438:18;;9284:178::o;9467:400::-;9669:2;9651:21;;;9708:2;9688:18;;;9681:30;9747:34;9742:2;9727:18;;9720:62;-1:-1:-1;;;9813:2:1;9798:18;;9791:34;9857:3;9842:19;;9641:226::o;9872:349::-;10074:2;10056:21;;;10113:2;10093:18;;;10086:30;10152:27;10147:2;10132:18;;10125:55;10212:2;10197:18;;10046:175::o;10226:355::-;10428:2;10410:21;;;10467:2;10447:18;;;10440:30;10506:33;10501:2;10486:18;;10479:61;10572:2;10557:18;;10400:181::o;10586:351::-;10788:2;10770:21;;;10827:2;10807:18;;;10800:30;10866:29;10861:2;10846:18;;10839:57;10928:2;10913:18;;10760:177::o;10942:408::-;11144:2;11126:21;;;11183:2;11163:18;;;11156:30;11222:34;11217:2;11202:18;;11195:62;-1:-1:-1;;;11288:2:1;11273:18;;11266:42;11340:3;11325:19;;11116:234::o;11355:399::-;11557:2;11539:21;;;11596:2;11576:18;;;11569:30;11635:34;11630:2;11615:18;;11608:62;-1:-1:-1;;;11701:2:1;11686:18;;11679:33;11744:3;11729:19;;11529:225::o;11759:420::-;11961:2;11943:21;;;12000:2;11980:18;;;11973:30;12039:34;12034:2;12019:18;;12012:62;12110:26;12105:2;12090:18;;12083:54;12169:3;12154:19;;11933:246::o;12184:354::-;12386:2;12368:21;;;12425:2;12405:18;;;12398:30;12464:32;12459:2;12444:18;;12437:60;12529:2;12514:18;;12358:180::o;12543:406::-;12745:2;12727:21;;;12784:2;12764:18;;;12757:30;12823:34;12818:2;12803:18;;12796:62;-1:-1:-1;;;12889:2:1;12874:18;;12867:40;12939:3;12924:19;;12717:232::o;12954:405::-;13156:2;13138:21;;;13195:2;13175:18;;;13168:30;13234:34;13229:2;13214:18;;13207:62;-1:-1:-1;;;13300:2:1;13285:18;;13278:39;13349:3;13334:19;;13128:231::o;13364:406::-;13566:2;13548:21;;;13605:2;13585:18;;;13578:30;13644:34;13639:2;13624:18;;13617:62;-1:-1:-1;;;13710:2:1;13695:18;;13688:40;13760:3;13745:19;;13538:232::o;13775:356::-;13977:2;13959:21;;;13996:18;;;13989:30;14055:34;14050:2;14035:18;;14028:62;14122:2;14107:18;;13949:182::o;14136:408::-;14338:2;14320:21;;;14377:2;14357:18;;;14350:30;14416:34;14411:2;14396:18;;14389:62;-1:-1:-1;;;14482:2:1;14467:18;;14460:42;14534:3;14519:19;;14310:234::o;14549:356::-;14751:2;14733:21;;;14770:18;;;14763:30;14829:34;14824:2;14809:18;;14802:62;14896:2;14881:18;;14723:182::o;14910:405::-;15112:2;15094:21;;;15151:2;15131:18;;;15124:30;15190:34;15185:2;15170:18;;15163:62;-1:-1:-1;;;15256:2:1;15241:18;;15234:39;15305:3;15290:19;;15084:231::o;15320:411::-;15522:2;15504:21;;;15561:2;15541:18;;;15534:30;15600:34;15595:2;15580:18;;15573:62;-1:-1:-1;;;15666:2:1;15651:18;;15644:45;15721:3;15706:19;;15494:237::o;15736:397::-;15938:2;15920:21;;;15977:2;15957:18;;;15950:30;16016:34;16011:2;15996:18;;15989:62;-1:-1:-1;;;16082:2:1;16067:18;;16060:31;16123:3;16108:19;;15910:223::o;16138:413::-;16340:2;16322:21;;;16379:2;16359:18;;;16352:30;16418:34;16413:2;16398:18;;16391:62;-1:-1:-1;;;16484:2:1;16469:18;;16462:47;16541:3;16526:19;;16312:239::o;16556:408::-;16758:2;16740:21;;;16797:2;16777:18;;;16770:30;16836:34;16831:2;16816:18;;16809:62;-1:-1:-1;;;16902:2:1;16887:18;;16880:42;16954:3;16939:19;;16730:234::o;16969:347::-;17171:2;17153:21;;;17210:2;17190:18;;;17183:30;17249:25;17244:2;17229:18;;17222:53;17307:2;17292:18;;17143:173::o;17321:177::-;17467:25;;;17455:2;17440:18;;17422:76::o;17503:251::-;17573:2;17567:9;17603:17;;;17650:18;17635:34;;17671:22;;;17632:62;17629:2;;;17697:18;;:::i;:::-;17733:2;17726:22;17547:207;;-1:-1:-1;17547:207:1:o;17759:128::-;;17830:1;17826:6;17823:1;17820:13;17817:2;;;17836:18;;:::i;:::-;-1:-1:-1;17872:9:1;;17807:80::o;17892:120::-;;17958:1;17948:2;;17963:18;;:::i;:::-;-1:-1:-1;17997:9:1;;17938:74::o;18017:168::-;;18123:1;18119;18115:6;18111:14;18108:1;18105:21;18100:1;18093:9;18086:17;18082:45;18079:2;;;18130:18;;:::i;:::-;-1:-1:-1;18170:9:1;;18069:116::o;18190:125::-;;18258:1;18255;18252:8;18249:2;;;18263:18;;:::i;:::-;-1:-1:-1;18300:9:1;;18239:76::o;18320:258::-;18392:1;18402:113;18416:6;18413:1;18410:13;18402:113;;;18492:11;;;18486:18;18473:11;;;18466:39;18438:2;18431:10;18402:113;;;18533:6;18530:1;18527:13;18524:2;;;-1:-1:-1;;18568:1:1;18550:16;;18543:27;18373:205::o;18583:380::-;18668:1;18658:12;;18715:1;18705:12;;;18726:2;;18780:4;18772:6;18768:17;18758:27;;18726:2;18833;18825:6;18822:14;18802:18;18799:38;18796:2;;;18879:10;18874:3;18870:20;18867:1;18860:31;18914:4;18911:1;18904:15;18942:4;18939:1;18932:15;18796:2;;18638:325;;;:::o;18968:135::-;;-1:-1:-1;;19028:17:1;;19025:2;;;19048:18;;:::i;:::-;-1:-1:-1;19095:1:1;19084:13;;19015:88::o;19108:112::-;;19166:1;19156:2;;19171:18;;:::i;:::-;-1:-1:-1;19205:9:1;;19146:74::o;19225:127::-;19286:10;19281:3;19277:20;19274:1;19267:31;19317:4;19314:1;19307:15;19341:4;19338:1;19331:15;19357:127;19418:10;19413:3;19409:20;19406:1;19399:31;19449:4;19446:1;19439:15;19473:4;19470:1;19463:15;19489:127;19550:10;19545:3;19541:20;19538:1;19531:31;19581:4;19578:1;19571:15;19605:4;19602:1;19595:15;19621:133;-1:-1:-1;;;;;;19697:32:1;;19687:43;;19677:2;;19744:1;19741;19734:12;19677:2;19667:87;:::o

Swarm Source

ipfs://cbaa843f593ee78121fb68d619b48db1123d02d872a1f48d6bd137dda79dce9d
Loading...
Loading
Loading...
Loading
[ 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.