ETH Price: $3,428.15 (-7.07%)
 

Overview

Max Total Supply

272 VAX

Holders

121

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
riceshower.eth
Balance
3 VAX
0xcAdA38b3D2e3d8714E783ae8C420B4024817E3E8
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:
MetaVax

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 10 of 12: MetaVax.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

import "./ECDSA.sol";
import "./ERC721.sol";
import "./Ownable.sol";

contract MetaVax is ERC721, Ownable {
    using ECDSA for bytes32;
    using Strings for uint;
    constructor(string memory hiddenURI_) ERC721("MetaVax","VAX") {
        hiddenURI = hiddenURI_;
    }

    modifier verifyEtherSent(uint amount, uint cost) {
        require(msg.value == amount * cost, "Invalid ether amount sent");
        _;
    }

    modifier verifySignature(bytes memory signature) {
        require(keccak256(abi.encodePacked(msg.sender)).toEthSignedMessageHash().recover(signature) == signer, "Invalid signature");
        _;
    }

    modifier directOnly {
        assert(msg.sender == tx.origin);
        _;
    }

    modifier onlyStaking {
        require(msg.sender == stakingAddress);
        _;
    }

    modifier publicSaleActive {
        require(publicSale);
        _;
    }

    modifier whitelistSaleActive {
        require(whitelistSale);
        _;
    }

    // Constants

    uint constant maxPerTX = 10;
    uint constant maxWhitelistPerAddress = 5;

    uint constant ethPublicCost = 0.069 ether;
    uint constant ethWhitelistCost = 0.059 ether;

    uint constant minPublicId = 1;
    uint constant maxPublicId = 5934;
    uint constant minPrivateId = 5935;
    uint constant maxPrivateId = 6019;
    uint constant minId = 1;

    // Storage Variables

    uint nextPublicId = minPublicId;
    uint nextPrivateId = minPrivateId;

    string baseURI;
    string hiddenURI;

    address signer = 0x571A7D7a73077d74f241dF9e627981720E354E6A;
    address public stakingAddress = address(0);
    
    bool public publicSale;
    bool public whitelistSale;

    mapping(address => uint) public whitelistMints;

    // Minting

    function publicMint(uint amount) external payable directOnly verifyEtherSent(amount, ethPublicCost) publicSaleActive {
        require(amount <= maxPerTX,string(abi.encodePacked("You can only mint up to ", maxPerTX.toString(), " in a single transaction")));
        mint(amount);
    }

    function whitelistMint(uint amount, bytes memory signature) external payable directOnly verifySignature(signature) verifyEtherSent(amount, ethWhitelistCost) whitelistSaleActive {
        require(whitelistMints[msg.sender] + amount <= maxWhitelistPerAddress, string(abi.encodePacked("You can only mint up to ", maxWhitelistPerAddress.toString(), " times using your whitelist!")));
        mint(amount);
        whitelistMints[msg.sender] += amount;
    }

    function mint(uint amount) internal {    
        uint nextId = nextPublicId;
        require(nextId + amount <= maxPublicId + minId, "Mint would exceed supply");
        _batchMint(msg.sender,amount,nextId);
        nextPublicId += amount;
    }

    // View

    function totalSupply() external view returns(uint) {
        return ((nextPublicId - minPublicId) + (nextPrivateId - minPrivateId));
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        if(bytes(baseURI).length != 0 ){
            return string(abi.encodePacked(baseURI, tokenId.toString(),".json"));
        } else {
            return string(hiddenURI);
        }
    }

    // Internal

    function _batchMint(address addr, uint amount, uint startId) internal {
        for(uint i = 0; i < amount; i++) {
            _mint(addr, startId + i);
        }
    }


    // Only Owner

    function adminMint(address[] memory addresses) external onlyOwner {
        unchecked {
            uint nextId = nextPrivateId;
            require(nextId + addresses.length <= maxPrivateId + minId,"Limit reached");

            for(uint i = 0; i < addresses.length; i++) {
                _mint(addresses[i],nextId + i);
            }
            nextPrivateId += addresses.length;
        }
    }

    function adminSetBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_;
    }

    function adminSetSigner(address signer_) external onlyOwner {
        signer = signer_;
    }

    function adminSetStakingAddress(address stakingAddress_) external onlyOwner {
        stakingAddress = stakingAddress_;
    }

    function adminSetSales(bool publicSale_, bool whitelistSale_) external onlyOwner {
        publicSale = publicSale_;
        whitelistSale = whitelistSale_;
    }
    
    address payable constant devs = payable(0x0408CFcde646bbADa944BF4312e6a2EF61ce8e7b);   // 10%
    address payable constant moey = payable(0xe1afF414c96EF6b10C2a51cDB95C7db60c04Bfe6);   // 42.5%
    address payable constant carts = payable(0x936c5150DA2e79C1fAE4c92Fd17FD3bCbC3957DC);  // 42.5%
    address payable constant artist = payable(0xDDbBCb27f07BA44A4c63E9d208278523f7225835); // 5%

    function adminWithdraw() external onlyOwner {
        uint balance = address(this).balance;
        devs.transfer(balance * 100 / 1000);  // 10%
        moey.transfer(balance * 425 / 1000);  // 42.5%
        carts.transfer(balance * 425 / 1000); // 42.5%
        artist.transfer(balance * 50 / 1000); // 5%
    }

    // Future Staking

    function stakingTakeToken(address from, uint id) external onlyStaking {
        _transfer(from,msg.sender,id);
    }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 12: ECDSA.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 4 of 12: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 5 of 12: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

File 6 of 12: IERC165.sol
// 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 7 of 12: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 8 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @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 9 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

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 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"hiddenURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"adminSetBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"publicSale_","type":"bool"},{"internalType":"bool","name":"whitelistSale_","type":"bool"}],"name":"adminSetSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer_","type":"address"}],"name":"adminSetSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakingAddress_","type":"address"}],"name":"adminSetStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminWithdraw","outputs":[],"stateMutability":"nonpayable","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":"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":"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"stakingTakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052600160075561172f600855600b80546001600160a01b031990811673571a7d7a73077d74f241df9e627981720e354e6a17909155600c805490911690553480156200004e57600080fd5b5060405162002b0838038062002b08833981016040819052620000719162000207565b604080518082018252600781526609acae8c2acc2f60cb1b6020808301918252835180850190945260038452620ac82b60eb1b908401528151919291620000bb9160009162000161565b508051620000d190600190602084019062000161565b505050620000ee620000e86200010b60201b60201c565b6200010f565b80516200010390600a90602084019062000161565b505062000336565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016f90620002e3565b90600052602060002090601f016020900481019282620001935760008555620001de565b82601f10620001ae57805160ff1916838001178555620001de565b82800160010185558215620001de579182015b82811115620001de578251825591602001919060010190620001c1565b50620001ec929150620001f0565b5090565b5b80821115620001ec5760008155600101620001f1565b600060208083850312156200021b57600080fd5b82516001600160401b03808211156200023357600080fd5b818501915085601f8301126200024857600080fd5b8151818111156200025d576200025d62000320565b604051601f8201601f19908116603f0116810190838211818310171562000288576200028862000320565b816040528281528886848701011115620002a157600080fd5b600093505b82841015620002c55784840186015181850187015292850192620002a6565b82841115620002d75760008684830101525b98975050505050505050565b600181811c90821680620002f857607f821691505b602082108114156200031a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127c280620003466000396000f3fe6080604052600436106101cc5760003560e01c806342842e0e116100f75780639e852f7511610095578063d7b4be2411610064578063d7b4be2414610522578063e985e9c514610542578063f18d20be1461058b578063f2fde38b146105a057600080fd5b80639e852f75146104af578063a22cb465146104c2578063b88d4fde146104e2578063c87b56dd1461050257600080fd5b8063715018a6116100d1578063715018a6146104475780638da5cb5b1461045c57806395d89b411461047a57806398c2f5651461048f57600080fd5b806342842e0e146103e75780636352211e1461040757806370a082311461042757600080fd5b80631b11800d1161016f57806331ffd6f11161013e57806331ffd6f11461036557806333bc1c5c14610386578063372fade1146103a75780633e976df5146103c757600080fd5b80631b11800d146102f257806321cbb5bd1461031257806323b872dd146103325780632db115441461035257600080fd5b806306fdde03116101ab57806306fdde0314610263578063081812fc14610285578063095ea7b3146102bd57806318160ddd146102dd57600080fd5b80628af2e6146101d157806301ffc9a71461021157806305b7891514610241575b600080fd5b3480156101dd57600080fd5b506101fe6101ec366004611fd7565b600d6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021d57600080fd5b5061023161022c3660046121ed565b6105c0565b6040519015158152602001610208565b34801561024d57600080fd5b5061026161025c3660046121d1565b610612565b005b34801561026f57600080fd5b50610278610679565b60405161020891906124de565b34801561029157600080fd5b506102a56102a0366004612270565b61070b565b6040516001600160a01b039091168152602001610208565b3480156102c957600080fd5b506102616102d83660046120f3565b6107a0565b3480156102e957600080fd5b506101fe6108b6565b3480156102fe57600080fd5b5061026161030d366004611fd7565b6108e6565b34801561031e57600080fd5b5061026161032d36600461211d565b610932565b34801561033e57600080fd5b5061026161034d366004612025565b6109ec565b610261610360366004612270565b610a1d565b34801561037157600080fd5b50600c5461023190600160a81b900460ff1681565b34801561039257600080fd5b50600c5461023190600160a01b900460ff1681565b3480156103b357600080fd5b506102616103c23660046120f3565b610af5565b3480156103d357600080fd5b506102616103e2366004612227565b610b1b565b3480156103f357600080fd5b50610261610402366004612025565b610b58565b34801561041357600080fd5b506102a5610422366004612270565b610b73565b34801561043357600080fd5b506101fe610442366004611fd7565b610bea565b34801561045357600080fd5b50610261610c71565b34801561046857600080fd5b506006546001600160a01b03166102a5565b34801561048657600080fd5b50610278610ca7565b34801561049b57600080fd5b506102616104aa366004611fd7565b610cb6565b6102616104bd366004612289565b610d02565b3480156104ce57600080fd5b506102616104dd3660046120c9565b610eff565b3480156104ee57600080fd5b506102616104fd366004612061565b610f0a565b34801561050e57600080fd5b5061027861051d366004612270565b610f42565b34801561052e57600080fd5b50600c546102a5906001600160a01b031681565b34801561054e57600080fd5b5061023161055d366004611ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561059757600080fd5b5061026161109e565b3480156105ac57600080fd5b506102616105bb366004611fd7565b61122e565b60006001600160e01b031982166380ac58cd60e01b14806105f157506001600160e01b03198216635b5e139f60e01b145b8061060c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146106455760405162461bcd60e51b815260040161063c90612543565b60405180910390fd5b600c805461ffff60a01b1916600160a01b9315159390930260ff60a81b191692909217600160a81b91151591909102179055565b60606000805461068890612688565b80601f01602080910402602001604051908101604052809291908181526020018280546106b490612688565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107845760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161063c565b506000908152600460205260409020546001600160a01b031690565b60006107ab82610b73565b9050806001600160a01b0316836001600160a01b031614156108195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161063c565b336001600160a01b03821614806108355750610835813361055d565b6108a75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161063c565b6108b183836112c9565b505050565b600061172f6008546108c89190612645565b60016007546108d79190612645565b6108e191906125fa565b905090565b6006546001600160a01b031633146109105760405162461bcd60e51b815260040161063c90612543565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461095c5760405162461bcd60e51b815260040161063c90612543565b600854815161178490820111156109a55760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b604482015260640161063c565b60005b82518110156109de576109d68382815181106109c6576109c661274a565b6020026020010151828401611337565b6001016109a8565b505051600880549091019055565b6109f63382611479565b610a125760405162461bcd60e51b815260040161063c90612578565b6108b1838383611570565b333214610a2c57610a2c6126f2565b8066f5232269808000610a3f8183612626565b3414610a895760405162461bcd60e51b8152602060048201526019602482015278125b9d985b1a5908195d1a195c88185b5bdd5b9d081cd95b9d603a1b604482015260640161063c565b600c54600160a01b900460ff16610a9f57600080fd5b600a831115610aae600a611710565b604051602001610abe91906123d3565b60405160208183030381529060405290610aeb5760405162461bcd60e51b815260040161063c91906124de565b506108b18361180e565b600c546001600160a01b03163314610b0c57600080fd5b610b17823383611570565b5050565b6006546001600160a01b03163314610b455760405162461bcd60e51b815260040161063c90612543565b8051610b17906009906020840190611e98565b6108b183838360405180602001604052806000815250610f0a565b6000818152600260205260408120546001600160a01b03168061060c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161063c565b60006001600160a01b038216610c555760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161063c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610c9b5760405162461bcd60e51b815260040161063c90612543565b610ca5600061189c565b565b60606001805461068890612688565b6006546001600160a01b03163314610ce05760405162461bcd60e51b815260040161063c90612543565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b333214610d1157610d116126f2565b600b54604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006054840152607080840191909152835180840390910181526090909201909252805191012082916001600160a01b031690610da690836118ee565b6001600160a01b031614610df05760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161063c565b8266d19c2ff9bf8000610e038183612626565b3414610e4d5760405162461bcd60e51b8152602060048201526019602482015278125b9d985b1a5908195d1a195c88185b5bdd5b9d081cd95b9d603a1b604482015260640161063c565b600c54600160a81b900460ff16610e6357600080fd5b336000908152600d6020526040902054600590610e819087906125fa565b1115610e8d6005611710565b604051602001610e9d919061243a565b60405160208183030381529060405290610eca5760405162461bcd60e51b815260040161063c91906124de565b50610ed48561180e565b336000908152600d602052604081208054879290610ef39084906125fa565b90915550505050505050565b610b17338383611912565b610f143383611479565b610f305760405162461bcd60e51b815260040161063c90612578565b610f3c848484846119e1565b50505050565b6000818152600260205260409020546060906001600160a01b0316610fc15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161063c565b60098054610fce90612688565b159050611007576009610fe083611710565b604051602001610ff1929190612318565b6040516020818303038152906040529050919050565b600a805461101490612688565b80601f016020809104026020016040519081016040528092919081815260200182805461104090612688565b801561108d5780601f106110625761010080835404028352916020019161108d565b820191906000526020600020905b81548152906001019060200180831161107057829003601f168201915b50505050509050919050565b919050565b6006546001600160a01b031633146110c85760405162461bcd60e51b815260040161063c90612543565b47730408cfcde646bbada944bf4312e6a2ef61ce8e7b6108fc6103e86110ef846064612626565b6110f99190612612565b6040518115909202916000818181858888f19350505050158015611121573d6000803e3d6000fd5b5073e1aff414c96ef6b10c2a51cdb95c7db60c04bfe66108fc6103e8611149846101a9612626565b6111539190612612565b6040518115909202916000818181858888f1935050505015801561117b573d6000803e3d6000fd5b5073936c5150da2e79c1fae4c92fd17fd3bcbc3957dc6108fc6103e86111a3846101a9612626565b6111ad9190612612565b6040518115909202916000818181858888f193505050501580156111d5573d6000803e3d6000fd5b5073ddbbcb27f07ba44a4c63e9d208278523f72258356108fc6103e86111fc846032612626565b6112069190612612565b6040518115909202916000818181858888f19350505050158015610b17573d6000803e3d6000fd5b6006546001600160a01b031633146112585760405162461bcd60e51b815260040161063c90612543565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161063c565b6112c68161189c565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112fe82610b73565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b03821661138d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161063c565b6000818152600260205260409020546001600160a01b0316156113f25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161063c565b6001600160a01b038216600090815260036020526040812080546001929061141b9084906125fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818152600260205260408120546001600160a01b03166114f25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161063c565b60006114fd83610b73565b9050806001600160a01b0316846001600160a01b031614806115385750836001600160a01b031661152d8461070b565b6001600160a01b0316145b8061156857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661158382610b73565b6001600160a01b0316146115eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161063c565b6001600160a01b03821661164d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161063c565b6116586000826112c9565b6001600160a01b0383166000908152600360205260408120805460019290611681908490612645565b90915550506001600160a01b03821660009081526003602052604081208054600192906116af9084906125fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6060816117345750506040805180820190915260018152600360fc1b602082015290565b8160005b811561175e5780611748816126c3565b91506117579050600a83612612565b9150611738565b60008167ffffffffffffffff81111561177957611779612760565b6040519080825280601f01601f1916602001820160405280156117a3576020820181803683370190505b5090505b8415611568576117b8600183612645565b91506117c5600a866126de565b6117d09060306125fa565b60f81b8183815181106117e5576117e561274a565b60200101906001600160f81b031916908160001a905350611807600a86612612565b94506117a7565b60075461181e600161172e6125fa565b61182883836125fa565b11156118765760405162461bcd60e51b815260206004820152601860248201527f4d696e7420776f756c642065786365656420737570706c790000000000000000604482015260640161063c565b611881338383611a14565b816007600082825461189391906125fa565b90915550505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006118fd8585611a44565b9150915061190a81611ab4565b509392505050565b816001600160a01b0316836001600160a01b031614156119745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161063c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119ec848484611570565b6119f884848484611c6f565b610f3c5760405162461bcd60e51b815260040161063c906124f1565b60005b82811015610f3c57611a3284611a2d83856125fa565b611337565b80611a3c816126c3565b915050611a17565b600080825160411415611a7b5760208301516040840151606085015160001a611a6f87828585611d7c565b94509450505050611aad565b825160401415611aa55760208301516040840151611a9a868383611e69565b935093505050611aad565b506000905060025b9250929050565b6000816004811115611ac857611ac8612734565b1415611ad15750565b6001816004811115611ae557611ae5612734565b1415611b335760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161063c565b6002816004811115611b4757611b47612734565b1415611b955760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161063c565b6003816004811115611ba957611ba9612734565b1415611c025760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161063c565b6004816004811115611c1657611c16612734565b14156112c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161063c565b60006001600160a01b0384163b15611d7157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cb39033908990889088906004016124a1565b602060405180830381600087803b158015611ccd57600080fd5b505af1925050508015611cfd575060408051601f3d908101601f19168201909252611cfa9181019061220a565b60015b611d57573d808015611d2b576040519150601f19603f3d011682016040523d82523d6000602084013e611d30565b606091505b508051611d4f5760405162461bcd60e51b815260040161063c906124f1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611568565b506001949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611db35750600090506003611e60565b8460ff16601b14158015611dcb57508460ff16601c14155b15611ddc5750600090506004611e60565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e30573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e5957600060019250925050611e60565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611e8a87828885611d7c565b935093505050935093915050565b828054611ea490612688565b90600052602060002090601f016020900481019282611ec65760008555611f0c565b82601f10611edf57805160ff1916838001178555611f0c565b82800160010185558215611f0c579182015b82811115611f0c578251825591602001919060010190611ef1565b50611f18929150611f1c565b5090565b5b80821115611f185760008155600101611f1d565b600067ffffffffffffffff831115611f4b57611f4b612760565b611f5e601f8401601f19166020016125c9565b9050828152838383011115611f7257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461109957600080fd5b8035801515811461109957600080fd5b600082601f830112611fc157600080fd5b611fd083833560208501611f31565b9392505050565b600060208284031215611fe957600080fd5b611fd082611f89565b6000806040838503121561200557600080fd5b61200e83611f89565b915061201c60208401611f89565b90509250929050565b60008060006060848603121561203a57600080fd5b61204384611f89565b925061205160208501611f89565b9150604084013590509250925092565b6000806000806080858703121561207757600080fd5b61208085611f89565b935061208e60208601611f89565b925060408501359150606085013567ffffffffffffffff8111156120b157600080fd5b6120bd87828801611fb0565b91505092959194509250565b600080604083850312156120dc57600080fd5b6120e583611f89565b915061201c60208401611fa0565b6000806040838503121561210657600080fd5b61210f83611f89565b946020939093013593505050565b6000602080838503121561213057600080fd5b823567ffffffffffffffff8082111561214857600080fd5b818501915085601f83011261215c57600080fd5b81358181111561216e5761216e612760565b8060051b915061217f8483016125c9565b8181528481019084860184860187018a101561219a57600080fd5b600095505b838610156121c4576121b081611f89565b83526001959095019491860191860161219f565b5098975050505050505050565b600080604083850312156121e457600080fd5b6120e583611fa0565b6000602082840312156121ff57600080fd5b8135611fd081612776565b60006020828403121561221c57600080fd5b8151611fd081612776565b60006020828403121561223957600080fd5b813567ffffffffffffffff81111561225057600080fd5b8201601f8101841361226157600080fd5b61156884823560208401611f31565b60006020828403121561228257600080fd5b5035919050565b6000806040838503121561229c57600080fd5b82359150602083013567ffffffffffffffff8111156122ba57600080fd5b6122c685828601611fb0565b9150509250929050565b600081518084526122e881602086016020860161265c565b601f01601f19169290920160200192915050565b6000815161230e81856020860161265c565b9290920192915050565b600080845481600182811c91508083168061233457607f831692505b602080841082141561235457634e487b7160e01b86526022600452602486fd5b8180156123685760018114612379576123a6565b60ff198616895284890196506123a6565b60008b81526020902060005b8681101561239e5781548b820152908501908301612385565b505084890196505b5050505050506123ca6123b982866122fc565b64173539b7b760d91b815260050190565b95945050505050565b7702cb7ba9031b0b71037b7363c9036b4b73a103ab8103a37960451b81526000825161240681601885016020870161265c565b7f20696e20612073696e676c65207472616e73616374696f6e00000000000000006018939091019283015250603001919050565b7702cb7ba9031b0b71037b7363c9036b4b73a103ab8103a37960451b81526000825161246d81601885016020870161265c565b7f2074696d6573207573696e6720796f75722077686974656c69737421000000006018939091019283015250603401919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124d4908301846122d0565b9695505050505050565b602081526000611fd060208301846122d0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125f2576125f2612760565b604052919050565b6000821982111561260d5761260d612708565b500190565b6000826126215761262161271e565b500490565b600081600019048311821515161561264057612640612708565b500290565b60008282101561265757612657612708565b500390565b60005b8381101561267757818101518382015260200161265f565b83811115610f3c5750506000910152565b600181811c9082168061269c57607f821691505b602082108114156126bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126d7576126d7612708565b5060010190565b6000826126ed576126ed61271e565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112c657600080fdfea26469706673582212203e51f2af4d25fc533ea80fdf7b8ffe93f4e00d352041733bdd5664afbafeaa3164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d50506e69675a5371434a437871556b433431486f61744874596b37686b52624a325942557357544237436e4b0000000000000000000000

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c806342842e0e116100f75780639e852f7511610095578063d7b4be2411610064578063d7b4be2414610522578063e985e9c514610542578063f18d20be1461058b578063f2fde38b146105a057600080fd5b80639e852f75146104af578063a22cb465146104c2578063b88d4fde146104e2578063c87b56dd1461050257600080fd5b8063715018a6116100d1578063715018a6146104475780638da5cb5b1461045c57806395d89b411461047a57806398c2f5651461048f57600080fd5b806342842e0e146103e75780636352211e1461040757806370a082311461042757600080fd5b80631b11800d1161016f57806331ffd6f11161013e57806331ffd6f11461036557806333bc1c5c14610386578063372fade1146103a75780633e976df5146103c757600080fd5b80631b11800d146102f257806321cbb5bd1461031257806323b872dd146103325780632db115441461035257600080fd5b806306fdde03116101ab57806306fdde0314610263578063081812fc14610285578063095ea7b3146102bd57806318160ddd146102dd57600080fd5b80628af2e6146101d157806301ffc9a71461021157806305b7891514610241575b600080fd5b3480156101dd57600080fd5b506101fe6101ec366004611fd7565b600d6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561021d57600080fd5b5061023161022c3660046121ed565b6105c0565b6040519015158152602001610208565b34801561024d57600080fd5b5061026161025c3660046121d1565b610612565b005b34801561026f57600080fd5b50610278610679565b60405161020891906124de565b34801561029157600080fd5b506102a56102a0366004612270565b61070b565b6040516001600160a01b039091168152602001610208565b3480156102c957600080fd5b506102616102d83660046120f3565b6107a0565b3480156102e957600080fd5b506101fe6108b6565b3480156102fe57600080fd5b5061026161030d366004611fd7565b6108e6565b34801561031e57600080fd5b5061026161032d36600461211d565b610932565b34801561033e57600080fd5b5061026161034d366004612025565b6109ec565b610261610360366004612270565b610a1d565b34801561037157600080fd5b50600c5461023190600160a81b900460ff1681565b34801561039257600080fd5b50600c5461023190600160a01b900460ff1681565b3480156103b357600080fd5b506102616103c23660046120f3565b610af5565b3480156103d357600080fd5b506102616103e2366004612227565b610b1b565b3480156103f357600080fd5b50610261610402366004612025565b610b58565b34801561041357600080fd5b506102a5610422366004612270565b610b73565b34801561043357600080fd5b506101fe610442366004611fd7565b610bea565b34801561045357600080fd5b50610261610c71565b34801561046857600080fd5b506006546001600160a01b03166102a5565b34801561048657600080fd5b50610278610ca7565b34801561049b57600080fd5b506102616104aa366004611fd7565b610cb6565b6102616104bd366004612289565b610d02565b3480156104ce57600080fd5b506102616104dd3660046120c9565b610eff565b3480156104ee57600080fd5b506102616104fd366004612061565b610f0a565b34801561050e57600080fd5b5061027861051d366004612270565b610f42565b34801561052e57600080fd5b50600c546102a5906001600160a01b031681565b34801561054e57600080fd5b5061023161055d366004611ff2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561059757600080fd5b5061026161109e565b3480156105ac57600080fd5b506102616105bb366004611fd7565b61122e565b60006001600160e01b031982166380ac58cd60e01b14806105f157506001600160e01b03198216635b5e139f60e01b145b8061060c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146106455760405162461bcd60e51b815260040161063c90612543565b60405180910390fd5b600c805461ffff60a01b1916600160a01b9315159390930260ff60a81b191692909217600160a81b91151591909102179055565b60606000805461068890612688565b80601f01602080910402602001604051908101604052809291908181526020018280546106b490612688565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107845760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161063c565b506000908152600460205260409020546001600160a01b031690565b60006107ab82610b73565b9050806001600160a01b0316836001600160a01b031614156108195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161063c565b336001600160a01b03821614806108355750610835813361055d565b6108a75760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161063c565b6108b183836112c9565b505050565b600061172f6008546108c89190612645565b60016007546108d79190612645565b6108e191906125fa565b905090565b6006546001600160a01b031633146109105760405162461bcd60e51b815260040161063c90612543565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461095c5760405162461bcd60e51b815260040161063c90612543565b600854815161178490820111156109a55760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b604482015260640161063c565b60005b82518110156109de576109d68382815181106109c6576109c661274a565b6020026020010151828401611337565b6001016109a8565b505051600880549091019055565b6109f63382611479565b610a125760405162461bcd60e51b815260040161063c90612578565b6108b1838383611570565b333214610a2c57610a2c6126f2565b8066f5232269808000610a3f8183612626565b3414610a895760405162461bcd60e51b8152602060048201526019602482015278125b9d985b1a5908195d1a195c88185b5bdd5b9d081cd95b9d603a1b604482015260640161063c565b600c54600160a01b900460ff16610a9f57600080fd5b600a831115610aae600a611710565b604051602001610abe91906123d3565b60405160208183030381529060405290610aeb5760405162461bcd60e51b815260040161063c91906124de565b506108b18361180e565b600c546001600160a01b03163314610b0c57600080fd5b610b17823383611570565b5050565b6006546001600160a01b03163314610b455760405162461bcd60e51b815260040161063c90612543565b8051610b17906009906020840190611e98565b6108b183838360405180602001604052806000815250610f0a565b6000818152600260205260408120546001600160a01b03168061060c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161063c565b60006001600160a01b038216610c555760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161063c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610c9b5760405162461bcd60e51b815260040161063c90612543565b610ca5600061189c565b565b60606001805461068890612688565b6006546001600160a01b03163314610ce05760405162461bcd60e51b815260040161063c90612543565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b333214610d1157610d116126f2565b600b54604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006054840152607080840191909152835180840390910181526090909201909252805191012082916001600160a01b031690610da690836118ee565b6001600160a01b031614610df05760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161063c565b8266d19c2ff9bf8000610e038183612626565b3414610e4d5760405162461bcd60e51b8152602060048201526019602482015278125b9d985b1a5908195d1a195c88185b5bdd5b9d081cd95b9d603a1b604482015260640161063c565b600c54600160a81b900460ff16610e6357600080fd5b336000908152600d6020526040902054600590610e819087906125fa565b1115610e8d6005611710565b604051602001610e9d919061243a565b60405160208183030381529060405290610eca5760405162461bcd60e51b815260040161063c91906124de565b50610ed48561180e565b336000908152600d602052604081208054879290610ef39084906125fa565b90915550505050505050565b610b17338383611912565b610f143383611479565b610f305760405162461bcd60e51b815260040161063c90612578565b610f3c848484846119e1565b50505050565b6000818152600260205260409020546060906001600160a01b0316610fc15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161063c565b60098054610fce90612688565b159050611007576009610fe083611710565b604051602001610ff1929190612318565b6040516020818303038152906040529050919050565b600a805461101490612688565b80601f016020809104026020016040519081016040528092919081815260200182805461104090612688565b801561108d5780601f106110625761010080835404028352916020019161108d565b820191906000526020600020905b81548152906001019060200180831161107057829003601f168201915b50505050509050919050565b919050565b6006546001600160a01b031633146110c85760405162461bcd60e51b815260040161063c90612543565b47730408cfcde646bbada944bf4312e6a2ef61ce8e7b6108fc6103e86110ef846064612626565b6110f99190612612565b6040518115909202916000818181858888f19350505050158015611121573d6000803e3d6000fd5b5073e1aff414c96ef6b10c2a51cdb95c7db60c04bfe66108fc6103e8611149846101a9612626565b6111539190612612565b6040518115909202916000818181858888f1935050505015801561117b573d6000803e3d6000fd5b5073936c5150da2e79c1fae4c92fd17fd3bcbc3957dc6108fc6103e86111a3846101a9612626565b6111ad9190612612565b6040518115909202916000818181858888f193505050501580156111d5573d6000803e3d6000fd5b5073ddbbcb27f07ba44a4c63e9d208278523f72258356108fc6103e86111fc846032612626565b6112069190612612565b6040518115909202916000818181858888f19350505050158015610b17573d6000803e3d6000fd5b6006546001600160a01b031633146112585760405162461bcd60e51b815260040161063c90612543565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161063c565b6112c68161189c565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112fe82610b73565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b03821661138d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161063c565b6000818152600260205260409020546001600160a01b0316156113f25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161063c565b6001600160a01b038216600090815260036020526040812080546001929061141b9084906125fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818152600260205260408120546001600160a01b03166114f25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161063c565b60006114fd83610b73565b9050806001600160a01b0316846001600160a01b031614806115385750836001600160a01b031661152d8461070b565b6001600160a01b0316145b8061156857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661158382610b73565b6001600160a01b0316146115eb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161063c565b6001600160a01b03821661164d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161063c565b6116586000826112c9565b6001600160a01b0383166000908152600360205260408120805460019290611681908490612645565b90915550506001600160a01b03821660009081526003602052604081208054600192906116af9084906125fa565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6060816117345750506040805180820190915260018152600360fc1b602082015290565b8160005b811561175e5780611748816126c3565b91506117579050600a83612612565b9150611738565b60008167ffffffffffffffff81111561177957611779612760565b6040519080825280601f01601f1916602001820160405280156117a3576020820181803683370190505b5090505b8415611568576117b8600183612645565b91506117c5600a866126de565b6117d09060306125fa565b60f81b8183815181106117e5576117e561274a565b60200101906001600160f81b031916908160001a905350611807600a86612612565b94506117a7565b60075461181e600161172e6125fa565b61182883836125fa565b11156118765760405162461bcd60e51b815260206004820152601860248201527f4d696e7420776f756c642065786365656420737570706c790000000000000000604482015260640161063c565b611881338383611a14565b816007600082825461189391906125fa565b90915550505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006118fd8585611a44565b9150915061190a81611ab4565b509392505050565b816001600160a01b0316836001600160a01b031614156119745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161063c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119ec848484611570565b6119f884848484611c6f565b610f3c5760405162461bcd60e51b815260040161063c906124f1565b60005b82811015610f3c57611a3284611a2d83856125fa565b611337565b80611a3c816126c3565b915050611a17565b600080825160411415611a7b5760208301516040840151606085015160001a611a6f87828585611d7c565b94509450505050611aad565b825160401415611aa55760208301516040840151611a9a868383611e69565b935093505050611aad565b506000905060025b9250929050565b6000816004811115611ac857611ac8612734565b1415611ad15750565b6001816004811115611ae557611ae5612734565b1415611b335760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161063c565b6002816004811115611b4757611b47612734565b1415611b955760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161063c565b6003816004811115611ba957611ba9612734565b1415611c025760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161063c565b6004816004811115611c1657611c16612734565b14156112c65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161063c565b60006001600160a01b0384163b15611d7157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cb39033908990889088906004016124a1565b602060405180830381600087803b158015611ccd57600080fd5b505af1925050508015611cfd575060408051601f3d908101601f19168201909252611cfa9181019061220a565b60015b611d57573d808015611d2b576040519150601f19603f3d011682016040523d82523d6000602084013e611d30565b606091505b508051611d4f5760405162461bcd60e51b815260040161063c906124f1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611568565b506001949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611db35750600090506003611e60565b8460ff16601b14158015611dcb57508460ff16601c14155b15611ddc5750600090506004611e60565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e30573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e5957600060019250925050611e60565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611e8a87828885611d7c565b935093505050935093915050565b828054611ea490612688565b90600052602060002090601f016020900481019282611ec65760008555611f0c565b82601f10611edf57805160ff1916838001178555611f0c565b82800160010185558215611f0c579182015b82811115611f0c578251825591602001919060010190611ef1565b50611f18929150611f1c565b5090565b5b80821115611f185760008155600101611f1d565b600067ffffffffffffffff831115611f4b57611f4b612760565b611f5e601f8401601f19166020016125c9565b9050828152838383011115611f7257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461109957600080fd5b8035801515811461109957600080fd5b600082601f830112611fc157600080fd5b611fd083833560208501611f31565b9392505050565b600060208284031215611fe957600080fd5b611fd082611f89565b6000806040838503121561200557600080fd5b61200e83611f89565b915061201c60208401611f89565b90509250929050565b60008060006060848603121561203a57600080fd5b61204384611f89565b925061205160208501611f89565b9150604084013590509250925092565b6000806000806080858703121561207757600080fd5b61208085611f89565b935061208e60208601611f89565b925060408501359150606085013567ffffffffffffffff8111156120b157600080fd5b6120bd87828801611fb0565b91505092959194509250565b600080604083850312156120dc57600080fd5b6120e583611f89565b915061201c60208401611fa0565b6000806040838503121561210657600080fd5b61210f83611f89565b946020939093013593505050565b6000602080838503121561213057600080fd5b823567ffffffffffffffff8082111561214857600080fd5b818501915085601f83011261215c57600080fd5b81358181111561216e5761216e612760565b8060051b915061217f8483016125c9565b8181528481019084860184860187018a101561219a57600080fd5b600095505b838610156121c4576121b081611f89565b83526001959095019491860191860161219f565b5098975050505050505050565b600080604083850312156121e457600080fd5b6120e583611fa0565b6000602082840312156121ff57600080fd5b8135611fd081612776565b60006020828403121561221c57600080fd5b8151611fd081612776565b60006020828403121561223957600080fd5b813567ffffffffffffffff81111561225057600080fd5b8201601f8101841361226157600080fd5b61156884823560208401611f31565b60006020828403121561228257600080fd5b5035919050565b6000806040838503121561229c57600080fd5b82359150602083013567ffffffffffffffff8111156122ba57600080fd5b6122c685828601611fb0565b9150509250929050565b600081518084526122e881602086016020860161265c565b601f01601f19169290920160200192915050565b6000815161230e81856020860161265c565b9290920192915050565b600080845481600182811c91508083168061233457607f831692505b602080841082141561235457634e487b7160e01b86526022600452602486fd5b8180156123685760018114612379576123a6565b60ff198616895284890196506123a6565b60008b81526020902060005b8681101561239e5781548b820152908501908301612385565b505084890196505b5050505050506123ca6123b982866122fc565b64173539b7b760d91b815260050190565b95945050505050565b7702cb7ba9031b0b71037b7363c9036b4b73a103ab8103a37960451b81526000825161240681601885016020870161265c565b7f20696e20612073696e676c65207472616e73616374696f6e00000000000000006018939091019283015250603001919050565b7702cb7ba9031b0b71037b7363c9036b4b73a103ab8103a37960451b81526000825161246d81601885016020870161265c565b7f2074696d6573207573696e6720796f75722077686974656c69737421000000006018939091019283015250603401919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124d4908301846122d0565b9695505050505050565b602081526000611fd060208301846122d0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125f2576125f2612760565b604052919050565b6000821982111561260d5761260d612708565b500190565b6000826126215761262161271e565b500490565b600081600019048311821515161561264057612640612708565b500290565b60008282101561265757612657612708565b500390565b60005b8381101561267757818101518382015260200161265f565b83811115610f3c5750506000910152565b600181811c9082168061269c57607f821691505b602082108114156126bd57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126d7576126d7612708565b5060010190565b6000826126ed576126ed61271e565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112c657600080fdfea26469706673582212203e51f2af4d25fc533ea80fdf7b8ffe93f4e00d352041733bdd5664afbafeaa3164736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d50506e69675a5371434a437871556b433431486f61744874596b37686b52624a325942557357544237436e4b0000000000000000000000

-----Decoded View---------------
Arg [0] : hiddenURI_ (string): ipfs://QmPPnigZSqCJCxqUkC41HoatHtYk7hkRbJ2YBUsWTB7CnK

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d50506e69675a5371434a437871556b433431486f617448
Arg [3] : 74596b37686b52624a325942557357544237436e4b0000000000000000000000


Deployed Bytecode Sourcemap

133:5346:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1799:46;;;;;;;;;;-1:-1:-1;1799:46:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20313:25:12;;;20301:2;20286:18;1799:46:9;;;;;;;;1541:305:4;;;;;;;;;;-1:-1:-1;1541:305:4;;;;;:::i;:::-;;:::i;:::-;;;10217:14:12;;10210:22;10192:41;;10180:2;10165:18;1541:305:4;10052:187:12;4429:165:9;;;;;;;;;;-1:-1:-1;4429:165:9;;;;;:::i;:::-;;:::i;:::-;;2486:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4045:221::-;;;;;;;;;;-1:-1:-1;4045:221:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9515:32:12;;;9497:51;;9485:2;9470:18;4045:221:4;9351:203:12;3568:411:4;;;;;;;;;;-1:-1:-1;3568:411:4;;;;;:::i;:::-;;:::i;2907:140:9:-;;;;;;;;;;;;;:::i;4294:127::-;;;;;;;;;;-1:-1:-1;4294:127:9;;;;;:::i;:::-;;:::i;3661:409::-;;;;;;;;;;-1:-1:-1;3661:409:9;;;;;:::i;:::-;;:::i;4795:339:4:-;;;;;;;;;;-1:-1:-1;4795:339:4;;;;;:::i;:::-;;:::i;1872:288:9:-;;;;;;:::i;:::-;;:::i;1765:25::-;;;;;;;;;;-1:-1:-1;1765:25:9;;;;-1:-1:-1;;;1765:25:9;;;;;;1736:22;;;;;;;;;;-1:-1:-1;1736:22:9;;;;-1:-1:-1;;;1736:22:9;;;;;;5358:118;;;;;;;;;;-1:-1:-1;5358:118:9;;;;;:::i;:::-;;:::i;4078:105::-;;;;;;;;;;-1:-1:-1;4078:105:9;;;;;:::i;:::-;;:::i;5205:185:4:-;;;;;;;;;;-1:-1:-1;5205:185:4;;;;;:::i;:::-;;:::i;2180:239::-;;;;;;;;;;-1:-1:-1;2180:239:4;;;;;:::i;:::-;;:::i;1910:208::-;;;;;;;;;;-1:-1:-1;1910:208:4;;;;;:::i;:::-;;:::i;1598:92:10:-;;;;;;;;;;;;;:::i;966:85::-;;;;;;;;;;-1:-1:-1;1038:6:10;;-1:-1:-1;;;;;1038:6:10;966:85;;2655:104:4;;;;;;;;;;;;;:::i;4191:95:9:-;;;;;;;;;;-1:-1:-1;4191:95:9;;;;;:::i;:::-;;:::i;2168:457::-;;;;;;:::i;:::-;;:::i;4338:155:4:-;;;;;;;;;;-1:-1:-1;4338:155:4;;;;;:::i;:::-;;:::i;5461:328::-;;;;;;;;;;-1:-1:-1;5461:328:4;;;;;:::i;:::-;;:::i;3055:376:9:-;;;;;;;;;;-1:-1:-1;3055:376:9;;;;;:::i;:::-;;:::i;1681:42::-;;;;;;;;;;-1:-1:-1;1681:42:9;;;;-1:-1:-1;;;;;1681:42:9;;;4564:164:4;;;;;;;;;;-1:-1:-1;4564:164:4;;;;;:::i;:::-;-1:-1:-1;;;;;4685:25:4;;;4661:4;4685:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4564:164;5007:318:9;;;;;;;;;;;;;:::i;1839:189:10:-;;;;;;;;;;-1:-1:-1;1839:189:10;;;;;:::i;:::-;;:::i;1541:305:4:-;1643:4;-1:-1:-1;;;;;;1680:40:4;;-1:-1:-1;;;1680:40:4;;:105;;-1:-1:-1;;;;;;;1737:48:4;;-1:-1:-1;;;1737:48:4;1680:105;:158;;;-1:-1:-1;;;;;;;;;;871:40:3;;;1802:36:4;1660:178;1541:305;-1:-1:-1;;1541:305:4:o;4429:165:9:-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;;;;;;;;;4521:10:9::1;:24:::0;;-1:-1:-1;;;;4556:30:9;-1:-1:-1;;;4521:24:9;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;4556:30:9;;;;;-1:-1:-1;;;4556:30:9;::::1;;::::0;;;::::1;;::::0;;4429:165::o;2486:100:4:-;2540:13;2573:5;2566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2486:100;:::o;4045:221::-;4121:7;7388:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7388:16:4;4141:73;;;;-1:-1:-1;;;4141:73:4;;17242:2:12;4141:73:4;;;17224:21:12;17281:2;17261:18;;;17254:30;17320:34;17300:18;;;17293:62;-1:-1:-1;;;17371:18:12;;;17364:42;17423:19;;4141:73:4;17040:408:12;4141:73:4;-1:-1:-1;4234:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4234:24:4;;4045:221::o;3568:411::-;3649:13;3665:23;3680:7;3665:14;:23::i;:::-;3649:39;;3713:5;-1:-1:-1;;;;;3707:11:4;:2;-1:-1:-1;;;;;3707:11:4;;;3699:57;;;;-1:-1:-1;;;3699:57:4;;19195:2:12;3699:57:4;;;19177:21:12;19234:2;19214:18;;;19207:30;19273:34;19253:18;;;19246:62;-1:-1:-1;;;19324:18:12;;;19317:31;19365:19;;3699:57:4;18993:397:12;3699:57:4;666:10:1;-1:-1:-1;;;;;3791:21:4;;;;:62;;-1:-1:-1;3816:37:4;3833:5;666:10:1;4564:164:4;:::i;3816:37::-;3769:168;;;;-1:-1:-1;;;3769:168:4;;15232:2:12;3769:168:4;;;15214:21:12;15271:2;15251:18;;;15244:30;15310:34;15290:18;;;15283:62;15381:26;15361:18;;;15354:54;15425:19;;3769:168:4;15030:420:12;3769:168:4;3950:21;3959:2;3963:7;3950:8;:21::i;:::-;3638:341;3568:411;;:::o;2907:140:9:-;2952:4;1378;3009:13;;:28;;;;:::i;:::-;1302:1;2978:12;;:26;;;;:::i;:::-;2977:61;;;;:::i;:::-;2969:70;;2907:140;:::o;4294:127::-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;4381:14:9::1;:32:::0;;-1:-1:-1;;;;;;4381:32:9::1;-1:-1:-1::0;;;;;4381:32:9;;;::::1;::::0;;;::::1;::::0;;4294:127::o;3661:409::-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;3777:13:9::1;::::0;3822:16;;3842:20;3813:25;;::::1;:49;;3805:74;;;::::0;-1:-1:-1;;;3805:74:9;;13728:2:12;3805:74:9::1;::::0;::::1;13710:21:12::0;13767:2;13747:18;;;13740:30;-1:-1:-1;;;13786:18:12;;;13779:43;13839:18;;3805:74:9::1;13526:337:12::0;3805:74:9::1;3900:6;3896:108;3916:9;:16;3912:1;:20;3896:108;;;3958:30;3964:9;3974:1;3964:12;;;;;;;;:::i;:::-;;;;;;;3986:1;3977:6;:10;3958:5;:30::i;:::-;3934:3;;3896:108;;;-1:-1:-1::0;;4035:16:9;4018:13:::1;:33:::0;;;;::::1;::::0;;3661:409::o;4795:339:4:-;4990:41;666:10:1;5023:7:4;4990:18;:41::i;:::-;4982:103;;;;-1:-1:-1;;;4982:103:4;;;;;;;:::i;:::-;5098:28;5108:4;5114:2;5118:7;5098:9;:28::i;1872:288:9:-;747:10;761:9;747:23;740:31;;;;:::i;:::-;1949:6;1203:11:::1;427:13;1203:11:::0;1949:6;427:13:::1;:::i;:::-;414:9;:26;406:64;;;::::0;-1:-1:-1;;;406:64:9;;19597:2:12;406:64:9::1;::::0;::::1;19579:21:12::0;19636:2;19616:18;;;19609:30;-1:-1:-1;;;19655:18:12;;;19648:55;19720:18;;406:64:9::1;19395:349:12::0;406:64:9::1;941:10:::2;::::0;-1:-1:-1;;;941:10:9;::::2;;;933:19;;;::::0;::::2;;1115:2:::3;2008:6;:18;;2079:19;1115:2;2079:17;:19::i;:::-;2034:93;;;;;;;;:::i;:::-;;;;;;;;;;;;;2000:129;;;;;-1:-1:-1::0;;;2000:129:9::3;;;;;;;;:::i;:::-;;2140:12;2145:6;2140:4;:12::i;5358:118::-:0;853:14;;-1:-1:-1;;;;;853:14:9;839:10;:28;831:37;;;;;;5439:29:::1;5449:4;5454:10;5465:2;5439:9;:29::i;:::-;5358:118:::0;;:::o;4078:105::-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;4157:18:9;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;5205:185:4:-:0;5343:39;5360:4;5366:2;5370:7;5343:39;;;;;;;;;;;;:16;:39::i;2180:239::-;2252:7;2288:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2288:16:4;2323:19;2315:73;;;;-1:-1:-1;;;2315:73:4;;16068:2:12;2315:73:4;;;16050:21:12;16107:2;16087:18;;;16080:30;16146:34;16126:18;;;16119:62;-1:-1:-1;;;16197:18:12;;;16190:39;16246:19;;2315:73:4;15866:405:12;1910:208:4;1982:7;-1:-1:-1;;;;;2010:19:4;;2002:74;;;;-1:-1:-1;;;2002:74:4;;15657:2:12;2002:74:4;;;15639:21:12;15696:2;15676:18;;;15669:30;15735:34;15715:18;;;15708:62;-1:-1:-1;;;15786:18:12;;;15779:40;15836:19;;2002:74:4;15455:406:12;2002:74:4;-1:-1:-1;;;;;;2094:16:4;;;;;:9;:16;;;;;;;1910:208::o;1598:92:10:-;1038:6;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;2655:104:4:-;2711:13;2744:7;2737:14;;;;;:::i;4191:95:9:-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;4262:6:9::1;:16:::0;;-1:-1:-1;;;;;;4262:16:9::1;-1:-1:-1::0;;;;;4262:16:9;;;::::1;::::0;;;::::1;::::0;;4191:95::o;2168:457::-;747:10;761:9;747:23;740:31;;;;:::i;:::-;653:6:::1;::::0;576:28:::1;::::0;;593:10:::1;6319:2:12::0;6315:15;-1:-1:-1;;6311:53:12;576:28:9::1;::::0;;::::1;6299:66:12::0;;;;576:28:9;;;;;;;;;6381:12:12;;;576:28:9;;566:39;;;;::::1;::::0;9208:66:12;8149:58:2;;;9196:79:12;9291:12;;;;9284:28;;;;8149:58:2;;;;;;;;;;9328:12:12;;;;8149:58:2;;;8139:69;;;;;2272:9:9;;-1:-1:-1;;;;;653:6:9::1;::::0;566:83:::1;::::0;2272:9;566:72:::1;:83::i;:::-;-1:-1:-1::0;;;;;566:93:9::1;;558:123;;;::::0;-1:-1:-1;;;558:123:9;;14070:2:12;558:123:9::1;::::0;::::1;14052:21:12::0;14109:2;14089:18;;;14082:30;-1:-1:-1;;;14128:18:12;;;14121:47;14185:18;;558:123:9::1;13868:341:12::0;558:123:9::1;2299:6:::0;1254:11:::2;427:13;1254:11:::0;2299:6;427:13:::2;:::i;:::-;414:9;:26;406:64;;;::::0;-1:-1:-1;;;406:64:9;;19597:2:12;406:64:9::2;::::0;::::2;19579:21:12::0;19636:2;19616:18;;;19609:30;-1:-1:-1;;;19655:18:12;;;19648:55;19720:18;;406:64:9::2;19395:349:12::0;406:64:9::2;1028:13:::3;::::0;-1:-1:-1;;;1028:13:9;::::3;;;1020:22;;;::::0;::::3;;2379:10:::4;2364:26;::::0;;;:14:::4;:26;::::0;;;;;1163:1:::4;::::0;2364:35:::4;::::0;2393:6;;2364:35:::4;:::i;:::-;:61;;2479:33;1163:1;2479:31;:33::i;:::-;2434:111;;;;;;;;:::i;:::-;;;;;;;;;;;;;2356:191;;;;;-1:-1:-1::0;;;2356:191:9::4;;;;;;;;:::i;:::-;;2558:12;2563:6;2558:4;:12::i;:::-;2596:10;2581:26;::::0;;;:14:::4;:26;::::0;;;;:36;;2611:6;;2581:26;:36:::4;::::0;2611:6;;2581:36:::4;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2168:457:9:o;4338:155:4:-;4433:52;666:10:1;4466:8:4;4476;4433:18;:52::i;5461:328::-;5636:41;666:10:1;5669:7:4;5636:18;:41::i;:::-;5628:103;;;;-1:-1:-1;;;5628:103:4;;;;;;;:::i;:::-;5742:39;5756:4;5762:2;5766:7;5775:5;5742:13;:39::i;:::-;5461:328;;;;:::o;3055:376:9:-;7364:4:4;7388:16;;;:7;:16;;;;;;3128:13:9;;-1:-1:-1;;;;;7388:16:4;3154:76:9;;;;-1:-1:-1;;;3154:76:9;;18426:2:12;3154:76:9;;;18408:21:12;18465:2;18445:18;;;18438:30;18504:34;18484:18;;;18477:62;-1:-1:-1;;;18555:18:12;;;18548:45;18610:19;;3154:76:9;18224:411:12;3154:76:9;3250:7;3244:21;;;;;:::i;:::-;:26;;-1:-1:-1;3241:183:9;;3318:7;3327:18;:7;:16;:18::i;:::-;3301:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3287:68;;3055:376;;;:::o;3241:183::-;3402:9;3388:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3055:376;;;:::o;3241:183::-;3055:376;;;:::o;5007:318::-;1038:6:10;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;5077:21:9::1;4646:42;5109:35;5139:4;5123:13;5077:21:::0;5133:3:::1;5123:13;:::i;:::-;:20;;;;:::i;:::-;5109:35;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;4745:42:9::1;5163:35;5193:4;5177:13;:7:::0;5187:3:::1;5177:13;:::i;:::-;:20;;;;:::i;:::-;5163:35;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;4847:42:9::1;5219:36;5250:4;5234:13;:7:::0;5244:3:::1;5234:13;:::i;:::-;:20;;;;:::i;:::-;5219:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;4949:42:9::1;5275:36;5306:4;5291:12;:7:::0;5301:2:::1;5291:12;:::i;:::-;:19;;;;:::i;:::-;5275:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;1839:189:10::0;1038:6;;-1:-1:-1;;;;;1038:6:10;666:10:1;1178:23:10;1170:68;;;;-1:-1:-1;;;1170:68:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:10;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:10;;12205:2:12;1919:73:10::1;::::0;::::1;12187:21:12::0;12244:2;12224:18;;;12217:30;12283:34;12263:18;;;12256:62;-1:-1:-1;;;12334:18:12;;;12327:36;12380:19;;1919:73:10::1;12003:402:12::0;1919:73:10::1;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;11281:174:4:-;11356:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11356:29:4;-1:-1:-1;;;;;11356:29:4;;;;;;;;:24;;11410:23;11356:24;11410:14;:23::i;:::-;-1:-1:-1;;;;;11401:46:4;;;;;;;;;;;11281:174;;:::o;9277:382::-;-1:-1:-1;;;;;9357:16:4;;9349:61;;;;-1:-1:-1;;;9349:61:4;;16881:2:12;9349:61:4;;;16863:21:12;;;16900:18;;;16893:30;16959:34;16939:18;;;16932:62;17011:18;;9349:61:4;16679:356:12;9349:61:4;7364:4;7388:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7388:16:4;:30;9421:58;;;;-1:-1:-1;;;9421:58:4;;12612:2:12;9421:58:4;;;12594:21:12;12651:2;12631:18;;;12624:30;12690;12670:18;;;12663:58;12738:18;;9421:58:4;12410:352:12;9421:58:4;-1:-1:-1;;;;;9550:13:4;;;;;;:9;:13;;;;;:18;;9567:1;;9550:13;:18;;9567:1;;9550:18;:::i;:::-;;;;-1:-1:-1;;9579:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9579:21:4;-1:-1:-1;;;;;9579:21:4;;;;;;;;9618:33;;9579:16;;;9618:33;;9579:16;;9618:33;9277:382;;:::o;7593:348::-;7686:4;7388:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7388:16:4;7703:73;;;;-1:-1:-1;;;7703:73:4;;14819:2:12;7703:73:4;;;14801:21:12;14858:2;14838:18;;;14831:30;14897:34;14877:18;;;14870:62;-1:-1:-1;;;14948:18:12;;;14941:42;15000:19;;7703:73:4;14617:408:12;7703:73:4;7787:13;7803:23;7818:7;7803:14;:23::i;:::-;7787:39;;7856:5;-1:-1:-1;;;;;7845:16:4;:7;-1:-1:-1;;;;;7845:16:4;;:51;;;;7889:7;-1:-1:-1;;;;;7865:31:4;:20;7877:7;7865:11;:20::i;:::-;-1:-1:-1;;;;;7865:31:4;;7845:51;:87;;;-1:-1:-1;;;;;;4685:25:4;;;4661:4;4685:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7900:32;7837:96;7593:348;-1:-1:-1;;;;7593:348:4:o;10585:578::-;10744:4;-1:-1:-1;;;;;10717:31:4;:23;10732:7;10717:14;:23::i;:::-;-1:-1:-1;;;;;10717:31:4;;10709:85;;;;-1:-1:-1;;;10709:85:4;;18016:2:12;10709:85:4;;;17998:21:12;18055:2;18035:18;;;18028:30;18094:34;18074:18;;;18067:62;-1:-1:-1;;;18145:18:12;;;18138:39;18194:19;;10709:85:4;17814:405:12;10709:85:4;-1:-1:-1;;;;;10813:16:4;;10805:65;;;;-1:-1:-1;;;10805:65:4;;12969:2:12;10805:65:4;;;12951:21:12;13008:2;12988:18;;;12981:30;13047:34;13027:18;;;13020:62;-1:-1:-1;;;13098:18:12;;;13091:34;13142:19;;10805:65:4;12767:400:12;10805:65:4;10987:29;11004:1;11008:7;10987:8;:29::i;:::-;-1:-1:-1;;;;;11029:15:4;;;;;;:9;:15;;;;;:20;;11048:1;;11029:15;:20;;11048:1;;11029:20;:::i;:::-;;;;-1:-1:-1;;;;;;;11060:13:4;;;;;;:9;:13;;;;;:18;;11077:1;;11060:13;:18;;11077:1;;11060:18;:::i;:::-;;;;-1:-1:-1;;11089:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;11089:21:4;-1:-1:-1;;;;;11089:21:4;;;;;;;;;11128:27;;11089:16;;11128:27;;;;;;;10585:578;;;:::o;275:703:11:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:11;;;;;;;;;;;;-1:-1:-1;;;574:10:11;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:11;;-1:-1:-1;720:2:11;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:11;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:11;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:11;;;;;;;;-1:-1:-1;919:11:11;928:2;919:11;;:::i;:::-;;;791:150;;2633:251:9;2698:12;;2748:19;1451:1;1338:4;2748:19;:::i;:::-;2729:15;2738:6;2729;:15;:::i;:::-;:38;;2721:75;;;;-1:-1:-1;;;2721:75:9;;18842:2:12;2721:75:9;;;18824:21:12;18881:2;18861:18;;;18854:30;18920:26;18900:18;;;18893:54;18964:18;;2721:75:9;18640:348:12;2721:75:9;2807:36;2818:10;2829:6;2836;2807:10;:36::i;:::-;2870:6;2854:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;2633:251:9:o;2034:169:10:-;2108:6;;;-1:-1:-1;;;;;2124:17:10;;;-1:-1:-1;;;;;;2124:17:10;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2079:124;2034:169;:::o;4203:227:2:-;4281:7;4301:17;4320:18;4342:27;4353:4;4359:9;4342:10;:27::i;:::-;4300:69;;;;4379:18;4391:5;4379:11;:18::i;:::-;-1:-1:-1;4414:9:2;4203:227;-1:-1:-1;;;4203:227:2:o;11597:315:4:-;11752:8;-1:-1:-1;;;;;11743:17:4;:5;-1:-1:-1;;;;;11743:17:4;;;11735:55;;;;-1:-1:-1;;;11735:55:4;;13374:2:12;11735:55:4;;;13356:21:12;13413:2;13393:18;;;13386:30;13452:27;13432:18;;;13425:55;13497:18;;11735:55:4;13172:349:12;11735:55:4;-1:-1:-1;;;;;11801:25:4;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11801:46:4;;;;;;;;;;11863:41;;10192::12;;;11863::4;;10165:18:12;11863:41:4;;;;;;;11597:315;;;:::o;6671:::-;6828:28;6838:4;6844:2;6848:7;6828:9;:28::i;:::-;6875:48;6898:4;6904:2;6908:7;6917:5;6875:22;:48::i;:::-;6867:111;;;;-1:-1:-1;;;6867:111:4;;;;;;;:::i;3458:172:9:-;3543:6;3539:84;3559:6;3555:1;:10;3539:84;;;3587:24;3593:4;3599:11;3609:1;3599:7;:11;:::i;:::-;3587:5;:24::i;:::-;3567:3;;;;:::i;:::-;;;;3539:84;;2138:1279:2;2219:7;2228:12;2449:9;:16;2469:2;2449:22;2445:966;;;2738:4;2723:20;;2717:27;2787:4;2772:20;;2766:27;2844:4;2829:20;;2823:27;2487:9;2815:36;2885:25;2896:4;2815:36;2717:27;2766;2885:10;:25::i;:::-;2878:32;;;;;;;;;2445:966;2931:9;:16;2951:2;2931:22;2927:484;;;3200:4;3185:20;;3179:27;3250:4;3235:20;;3229:27;3290:23;3301:4;3179:27;3229;3290:10;:23::i;:::-;3283:30;;;;;;;;2927:484;-1:-1:-1;3360:1:2;;-1:-1:-1;3364:35:2;2927:484;2138:1279;;;;;:::o;443:631::-;520:20;511:5;:29;;;;;;;;:::i;:::-;;507:561;;;443:631;:::o;507:561::-;616:29;607:5;:38;;;;;;;;:::i;:::-;;603:465;;;661:34;;-1:-1:-1;;;661:34:2;;11073:2:12;661:34:2;;;11055:21:12;11112:2;11092:18;;;11085:30;11151:26;11131:18;;;11124:54;11195:18;;661:34:2;10871:348:12;603:465:2;725:35;716:5;:44;;;;;;;;:::i;:::-;;712:356;;;776:41;;-1:-1:-1;;;776:41:2;;11426:2:12;776:41:2;;;11408:21:12;11465:2;11445:18;;;11438:30;11504:33;11484:18;;;11477:61;11555:18;;776:41:2;11224:355:12;712:356:2;847:30;838:5;:39;;;;;;;;:::i;:::-;;834:234;;;893:44;;-1:-1:-1;;;893:44:2;;14416:2:12;893:44:2;;;14398:21:12;14455:2;14435:18;;;14428:30;14494:34;14474:18;;;14467:62;-1:-1:-1;;;14545:18:12;;;14538:32;14587:19;;893:44:2;14214:398:12;834:234:2;967:30;958:5;:39;;;;;;;;:::i;:::-;;954:114;;;1013:44;;-1:-1:-1;;;1013:44:2;;16478:2:12;1013:44:2;;;16460:21:12;16517:2;16497:18;;;16490:30;16556:34;16536:18;;;16529:62;-1:-1:-1;;;16607:18:12;;;16600:32;16649:19;;1013:44:2;16276:398:12;12477:799:4;12632:4;-1:-1:-1;;;;;12653:13:4;;1034:20:0;1080:8;12649:620:4;;12689:72;;-1:-1:-1;;;12689:72:4;;-1:-1:-1;;;;;12689:36:4;;;;;:72;;666:10:1;;12740:4:4;;12746:7;;12755:5;;12689:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12689:72:4;;;;;;;;-1:-1:-1;;12689:72:4;;;;;;;;;;;;:::i;:::-;;;12685:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12931:13:4;;12927:272;;12974:60;;-1:-1:-1;;;12974:60:4;;;;;;;:::i;12927:272::-;13149:6;13143:13;13134:6;13130:2;13126:15;13119:38;12685:529;-1:-1:-1;;;;;;12812:51:4;-1:-1:-1;;;12812:51:4;;-1:-1:-1;12805:58:4;;12649:620;-1:-1:-1;13253:4:4;12477:799;;;;;;:::o;5654:1603:2:-;5780:7;;6704:66;6691:79;;6687:161;;;-1:-1:-1;6802:1:2;;-1:-1:-1;6806:30:2;6786:51;;6687:161;6861:1;:7;;6866:2;6861:7;;:18;;;;;6872:1;:7;;6877:2;6872:7;;6861:18;6857:100;;;-1:-1:-1;6911:1:2;;-1:-1:-1;6915:30:2;6895:51;;6857:100;7068:24;;;7051:14;7068:24;;;;;;;;;10471:25:12;;;10544:4;10532:17;;10512:18;;;10505:45;;;;10566:18;;;10559:34;;;10609:18;;;10602:34;;;7068:24:2;;10443:19:12;;7068:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7068:24:2;;-1:-1:-1;;7068:24:2;;;-1:-1:-1;;;;;;;7106:20:2;;7102:101;;7158:1;7162:29;7142:50;;;;;;;7102:101;7221:6;-1:-1:-1;7229:20:2;;-1:-1:-1;5654:1603:2;;;;;;;;:::o;4684:379::-;4794:7;;-1:-1:-1;;;;;4891:75:2;;4992:3;4988:12;;;5002:2;4984:21;5031:25;5042:4;4984:21;5051:1;4891:75;5031:10;:25::i;:::-;5024:32;;;;;;4684:379;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:12;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:12;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:12;;532:42;;522:70;;588:1;585;578:12;603:160;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:220;810:5;863:3;856:4;848:6;844:17;840:27;830:55;;881:1;878;871:12;830:55;903:79;978:3;969:6;956:20;949:4;941:6;937:17;903:79;:::i;:::-;894:88;768:220;-1:-1:-1;;;768:220:12:o;993:186::-;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:537::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:49;2305:7;2296:6;2285:9;2281:22;2264:49;:::i;:::-;2254:59;;;1782:537;;;;;;;:::o;2324:254::-;2389:6;2397;2450:2;2438:9;2429:7;2425:23;2421:32;2418:52;;;2466:1;2463;2456:12;2418:52;2489:29;2508:9;2489:29;:::i;:::-;2479:39;;2537:35;2568:2;2557:9;2553:18;2537:35;:::i;2583:254::-;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2751:29;2770:9;2751:29;:::i;:::-;2741:39;2827:2;2812:18;;;;2799:32;;-1:-1:-1;;;2583:254:12:o;2842:963::-;2926:6;2957:2;3000;2988:9;2979:7;2975:23;2971:32;2968:52;;;3016:1;3013;3006:12;2968:52;3056:9;3043:23;3085:18;3126:2;3118:6;3115:14;3112:34;;;3142:1;3139;3132:12;3112:34;3180:6;3169:9;3165:22;3155:32;;3225:7;3218:4;3214:2;3210:13;3206:27;3196:55;;3247:1;3244;3237:12;3196:55;3283:2;3270:16;3305:2;3301;3298:10;3295:36;;;3311:18;;:::i;:::-;3357:2;3354:1;3350:10;3340:20;;3380:28;3404:2;3400;3396:11;3380:28;:::i;:::-;3442:15;;;3473:12;;;;3505:11;;;3535;;;3531:20;;3528:33;-1:-1:-1;3525:53:12;;;3574:1;3571;3564:12;3525:53;3596:1;3587:10;;3606:169;3620:2;3617:1;3614:9;3606:169;;;3677:23;3696:3;3677:23;:::i;:::-;3665:36;;3638:1;3631:9;;;;;3721:12;;;;3753;;3606:169;;;-1:-1:-1;3794:5:12;2842:963;-1:-1:-1;;;;;;;;2842:963:12:o;3810:248::-;3872:6;3880;3933:2;3921:9;3912:7;3908:23;3904:32;3901:52;;;3949:1;3946;3939:12;3901:52;3972:26;3988:9;3972:26;:::i;4063:245::-;4121:6;4174:2;4162:9;4153:7;4149:23;4145:32;4142:52;;;4190:1;4187;4180:12;4142:52;4229:9;4216:23;4248:30;4272:5;4248:30;:::i;4313:249::-;4382:6;4435:2;4423:9;4414:7;4410:23;4406:32;4403:52;;;4451:1;4448;4441:12;4403:52;4483:9;4477:16;4502:30;4526:5;4502:30;:::i;4567:450::-;4636:6;4689:2;4677:9;4668:7;4664:23;4660:32;4657:52;;;4705:1;4702;4695:12;4657:52;4745:9;4732:23;4778:18;4770:6;4767:30;4764:50;;;4810:1;4807;4800:12;4764:50;4833:22;;4886:4;4878:13;;4874:27;-1:-1:-1;4864:55:12;;4915:1;4912;4905:12;4864:55;4938:73;5003:7;4998:2;4985:16;4980:2;4976;4972:11;4938:73;:::i;5022:180::-;5081:6;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;-1:-1:-1;5173:23:12;;5022:180;-1:-1:-1;5022:180:12:o;5207:388::-;5284:6;5292;5345:2;5333:9;5324:7;5320:23;5316:32;5313:52;;;5361:1;5358;5351:12;5313:52;5397:9;5384:23;5374:33;;5458:2;5447:9;5443:18;5430:32;5485:18;5477:6;5474:30;5471:50;;;5517:1;5514;5507:12;5471:50;5540:49;5581:7;5572:6;5561:9;5557:22;5540:49;:::i;:::-;5530:59;;;5207:388;;;;;:::o;5600:257::-;5641:3;5679:5;5673:12;5706:6;5701:3;5694:19;5722:63;5778:6;5771:4;5766:3;5762:14;5755:4;5748:5;5744:16;5722:63;:::i;:::-;5839:2;5818:15;-1:-1:-1;;5814:29:12;5805:39;;;;5846:4;5801:50;;5600:257;-1:-1:-1;;5600:257:12:o;5862:185::-;5904:3;5942:5;5936:12;5957:52;6002:6;5997:3;5990:4;5983:5;5979:16;5957:52;:::i;:::-;6025:16;;;;;5862:185;-1:-1:-1;;5862:185:12:o;6404:1301::-;6681:3;6710:1;6743:6;6737:13;6773:3;6795:1;6823:9;6819:2;6815:18;6805:28;;6883:2;6872:9;6868:18;6905;6895:61;;6949:4;6941:6;6937:17;6927:27;;6895:61;6975:2;7023;7015:6;7012:14;6992:18;6989:38;6986:165;;;-1:-1:-1;;;7050:33:12;;7106:4;7103:1;7096:15;7136:4;7057:3;7124:17;6986:165;7167:18;7194:104;;;;7312:1;7307:320;;;;7160:467;;7194:104;-1:-1:-1;;7227:24:12;;7215:37;;7272:16;;;;-1:-1:-1;7194:104:12;;7307:320;20702:1;20695:14;;;20739:4;20726:18;;7402:1;7416:165;7430:6;7427:1;7424:13;7416:165;;;7508:14;;7495:11;;;7488:35;7551:16;;;;7445:10;;7416:165;;;7420:3;;7610:6;7605:3;7601:16;7594:23;;7160:467;;;;;;;7643:56;7668:30;7694:3;7686:6;7668:30;:::i;:::-;-1:-1:-1;;;6112:20:12;;6157:1;6148:11;;6052:113;7643:56;7636:63;6404:1301;-1:-1:-1;;;;;6404:1301:12:o;7710:621::-;-1:-1:-1;;;8068:3:12;8061:39;8043:3;8129:6;8123:13;8145:62;8200:6;8195:2;8190:3;8186:12;8179:4;8171:6;8167:17;8145:62;:::i;:::-;8271:26;8266:2;8226:16;;;;8258:11;;;8251:47;-1:-1:-1;8322:2:12;8314:11;;7710:621;-1:-1:-1;7710:621:12:o;8336:625::-;-1:-1:-1;;;8694:3:12;8687:39;8669:3;8755:6;8749:13;8771:62;8826:6;8821:2;8816:3;8812:12;8805:4;8797:6;8793:17;8771:62;:::i;:::-;8897:30;8892:2;8852:16;;;;8884:11;;;8877:51;-1:-1:-1;8952:2:12;8944:11;;8336:625;-1:-1:-1;8336:625:12:o;9559:488::-;-1:-1:-1;;;;;9828:15:12;;;9810:34;;9880:15;;9875:2;9860:18;;9853:43;9927:2;9912:18;;9905:34;;;9975:3;9970:2;9955:18;;9948:31;;;9753:4;;9996:45;;10021:19;;10013:6;9996:45;:::i;:::-;9988:53;9559:488;-1:-1:-1;;;;;;9559:488:12:o;10647:219::-;10796:2;10785:9;10778:21;10759:4;10816:44;10856:2;10845:9;10841:18;10833:6;10816:44;:::i;11584:414::-;11786:2;11768:21;;;11825:2;11805:18;;;11798:30;11864:34;11859:2;11844:18;;11837:62;-1:-1:-1;;;11930:2:12;11915:18;;11908:48;11988:3;11973:19;;11584:414::o;17453:356::-;17655:2;17637:21;;;17674:18;;;17667:30;17733:34;17728:2;17713:18;;17706:62;17800:2;17785:18;;17453:356::o;19749:413::-;19951:2;19933:21;;;19990:2;19970:18;;;19963:30;20029:34;20024:2;20009:18;;20002:62;-1:-1:-1;;;20095:2:12;20080:18;;20073:47;20152:3;20137:19;;19749:413::o;20349:275::-;20420:2;20414:9;20485:2;20466:13;;-1:-1:-1;;20462:27:12;20450:40;;20520:18;20505:34;;20541:22;;;20502:62;20499:88;;;20567:18;;:::i;:::-;20603:2;20596:22;20349:275;;-1:-1:-1;20349:275:12:o;20755:128::-;20795:3;20826:1;20822:6;20819:1;20816:13;20813:39;;;20832:18;;:::i;:::-;-1:-1:-1;20868:9:12;;20755:128::o;20888:120::-;20928:1;20954;20944:35;;20959:18;;:::i;:::-;-1:-1:-1;20993:9:12;;20888:120::o;21013:168::-;21053:7;21119:1;21115;21111:6;21107:14;21104:1;21101:21;21096:1;21089:9;21082:17;21078:45;21075:71;;;21126:18;;:::i;:::-;-1:-1:-1;21166:9:12;;21013:168::o;21186:125::-;21226:4;21254:1;21251;21248:8;21245:34;;;21259:18;;:::i;:::-;-1:-1:-1;21296:9:12;;21186:125::o;21316:258::-;21388:1;21398:113;21412:6;21409:1;21406:13;21398:113;;;21488:11;;;21482:18;21469:11;;;21462:39;21434:2;21427:10;21398:113;;;21529:6;21526:1;21523:13;21520:48;;;-1:-1:-1;;21564:1:12;21546:16;;21539:27;21316:258::o;21579:380::-;21658:1;21654:12;;;;21701;;;21722:61;;21776:4;21768:6;21764:17;21754:27;;21722:61;21829:2;21821:6;21818:14;21798:18;21795:38;21792:161;;;21875:10;21870:3;21866:20;21863:1;21856:31;21910:4;21907:1;21900:15;21938:4;21935:1;21928:15;21792:161;;21579:380;;;:::o;21964:135::-;22003:3;-1:-1:-1;;22024:17:12;;22021:43;;;22044:18;;:::i;:::-;-1:-1:-1;22091:1:12;22080:13;;21964:135::o;22104:112::-;22136:1;22162;22152:35;;22167:18;;:::i;:::-;-1:-1:-1;22201:9:12;;22104:112::o;22221:127::-;22282:10;22277:3;22273:20;22270:1;22263:31;22313:4;22310:1;22303:15;22337:4;22334:1;22327:15;22353:127;22414:10;22409:3;22405:20;22402:1;22395:31;22445:4;22442:1;22435:15;22469:4;22466:1;22459:15;22485:127;22546:10;22541:3;22537:20;22534:1;22527:31;22577:4;22574:1;22567:15;22601:4;22598:1;22591:15;22617:127;22678:10;22673:3;22669:20;22666:1;22659:31;22709:4;22706:1;22699:15;22733:4;22730:1;22723:15;22749:127;22810:10;22805:3;22801:20;22798:1;22791:31;22841:4;22838:1;22831:15;22865:4;22862:1;22855:15;22881:127;22942:10;22937:3;22933:20;22930:1;22923:31;22973:4;22970:1;22963:15;22997:4;22994:1;22987:15;23013:131;-1:-1:-1;;;;;;23087:32:12;;23077:43;;23067:71;;23134:1;23131;23124:12

Swarm Source

ipfs://3e51f2af4d25fc533ea80fdf7b8ffe93f4e00d352041733bdd5664afbafeaa31
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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