ETH Price: $3,089.26 (+0.93%)
Gas: 3 Gwei

Token

Hot Tape Girls Club (HTGC)
 

Overview

Max Total Supply

20,401 HTGC

Holders

61

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 HTGC
0xefe2e6f23985ca990253d44c7101733eb33c5eb8
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:
NFT_Contract

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 12 of 16: NFT_ERC721.sol
pragma solidity 0.8.12;
// SPDX-License-Identifier: MIT
import "./ERC721.sol";
import "./Ownable.sol";
import "./MerkleProof.sol";
import "./RandomlyAssigned.sol";

contract NFT_Contract is ERC721, Ownable, RandomlyAssigned {
    using Strings for uint256;
    mapping(address => uint256) public whitelistClaimed;

    string public baseURI;
    string public baseExtension = ".json";
    uint256 public whitelistCost = 0.08 ether;
    uint256 public publicCost = 0.16 ether;
    uint256 public PresaleCost = 0.1 ether;
    uint256 Cost;
    bool public whitelistEnabled = false;

    string public UnrevealedURI;
    bool public revealed = false;
    bool public paused = true;
    bytes32 public merkleRoot;
    uint256 public maxWhitelist = 3;
    uint256 public maxPublic = 3;
    uint256 public maxSupply = 20401;

    uint256 whitelistTimstamp = 1647742200;
    uint256 publicSaleTimestamp = 1648785600;
    uint256 PresaleTimestamp = 1648699200;

    uint256 whitelistCap = 6401;
    uint256 presaleCap = 10401;
    uint256 publicCap = 20401;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _UnrevealedURI
    ) ERC721(_name, _symbol) RandomlyAssigned(maxSupply, 1) {
        setBaseURI(_initBaseURI);
        setUnrevealedUri(_UnrevealedURI);
    }

    function whitelistMint(uint256 quantity, bytes32[] calldata _merkleProof)
        public
        payable
        ensureAvailability
    {
        require(quantity > 0, "Quantity Must Be Higher Than Zero");
        require(whitelistEnabled, "The whitelist sale is not enabled!");
        require(tokenCount() <= whitelistCap , "Whitelist Amount Reached");
        require(
            whitelistClaimed[msg.sender] + quantity <= maxWhitelist,
            "You're not allowed to mint this Much!"
        );
        require(msg.value >= whitelistCost * quantity, "Insufficient Funds");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, merkleRoot, leaf),
            "Invalid proof!"
        );

        whitelistClaimed[msg.sender] += quantity;

        for (uint256 i = 1; i <= quantity; i++) {
            _safeMint(msg.sender, nextToken());
        }
    }

    function mint(uint256 quantity) external payable ensureAvailability {
        require(!paused, "The contract is paused!");
        require(quantity > 0, "Quantity Must Be Higher Than Zero");

        if (msg.sender != owner()) {
            require(
                quantity <= maxPublic,
                "You're Not Allowed To Mint more than maxMint Amount"
            );
            if(block.timestamp >= PresaleTimestamp && block.timestamp <= publicSaleTimestamp){
                Cost = PresaleCost;
                require(tokenCount() <= presaleCap , "Preslae Amount Reached");
            }else if(block.timestamp >= publicSaleTimestamp){
                Cost = publicCost;
                require(tokenCount() <= publicCap , "Public Amount Reached");
            }else{
                revert("");
            }

            require(msg.value >= Cost * quantity, "Insufficient Funds");
        }
        for (uint256 i = 1; i <= quantity; i++) {
            _safeMint(msg.sender, nextToken());
        }
    }

    // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return UnrevealedURI;
        }

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

    function setCost(uint256 _whitelistCost, uint256 _publicCost , uint256 _presaleCost)
        public
        onlyOwner
    {
        whitelistCost = _whitelistCost;
        publicCost = _publicCost;
        PresaleCost = _presaleCost;
    }

    function setTimestamp(uint256 _whitelist , uint256 _public , uint256 _presale) public onlyOwner {
        whitelistTimstamp = _whitelist;
        publicSaleTimestamp = _public;
        PresaleTimestamp = _presale;
    }

    function setCaps(uint256 _whitelist , uint256 _presale , uint256 _public) public onlyOwner {
        whitelistCap = _whitelist;
        presaleCap = _presale;
        publicCap = _public;
    }

    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setUnrevealedUri(string memory _UnrevealedUri) public onlyOwner {
        UnrevealedURI = _UnrevealedUri;
    }

    function setMax(uint256 _whitelist, uint256 _public) public onlyOwner {
        maxWhitelist = _whitelist;
        maxPublic = _public;
    }

    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setWhitelistEnabled(bool _state) public onlyOwner {
        whitelistEnabled = _state;
    }

    function setPaused(bool _state) public onlyOwner {
        paused = _state;
    }

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

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function withdraw() public onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }
}

File 1 of 16: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 16: 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 16: Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 4 of 16: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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 16: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (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 overridden 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 ||
            isApprovedForAll(owner, spender) ||
            getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner"
        );
        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);

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 16: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 7 of 16: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

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 16: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 9 of 16: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

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 10 of 16: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 11 of 16: MerkleProof.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 13 of 16: 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() {
        _transferOwnership(_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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 14 of 16: RandomlyAssigned.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./WithLimitedSupply.sol";

/// @author 1001.digital
/// @title Randomly assign tokenIDs from a given set of tokens.
abstract contract RandomlyAssigned is WithLimitedSupply {
    // Used for random index assignment
    mapping(uint256 => uint256) private tokenMatrix;

    // The initial token ID
    uint256 private startFrom;

    /// Instanciate the contract
    /// @param _totalSupply how many tokens this collection should hold
    /// @param _startFrom the tokenID with which to start counting
    constructor(uint256 _totalSupply, uint256 _startFrom)
        WithLimitedSupply(_totalSupply)
    {
        startFrom = _startFrom;
    }

    /// Get the next token ID
    /// @dev Randomly gets a new token ID and keeps track of the ones that are still available.
    /// @return the next token ID
    function nextToken()
        internal
        override
        ensureAvailability
        returns (uint256)
    {
        uint256 maxIndex = totalSupply() - tokenCount();
        uint256 random = uint256(
            keccak256(
                abi.encodePacked(
                    msg.sender,
                    block.coinbase,
                    block.difficulty,
                    block.gaslimit,
                    block.timestamp
                )
            )
        ) % maxIndex;

        uint256 value = 0;
        if (tokenMatrix[random] == 0) {
            // If this matrix position is empty, set the value to the generated random number.
            value = random;
        } else {
            // Otherwise, use the previously stored number from the matrix.
            value = tokenMatrix[random];
        }

        // If the last available tokenID is still unused...
        if (tokenMatrix[maxIndex - 1] == 0) {
            // ...store that ID in the current matrix position.
            tokenMatrix[random] = maxIndex - 1;
        } else {
            // ...otherwise copy over the stored number to the current matrix position.
            tokenMatrix[random] = tokenMatrix[maxIndex - 1];
        }

        // Increment counts
        super.nextToken();

        return value + startFrom;
    }
}

File 15 of 16: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 16 of 16: WithLimitedSupply.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./Counters.sol";

/// @author 1001.digital
/// @title A token tracker that limits the token supply and increments token IDs on each new mint.
abstract contract WithLimitedSupply {
    using Counters for Counters.Counter;

    /// @dev Emitted when the supply of this collection changes
    event SupplyChanged(uint256 indexed supply);

    // Keeps track of how many we have minted
    Counters.Counter private _tokenCount;

    /// @dev The maximum count of tokens this token tracker will hold.
    uint256 private _totalSupply;

    /// Instanciate the contract
    /// @param totalSupply_ how many tokens this collection should hold
    constructor(uint256 totalSupply_) {
        _totalSupply = totalSupply_;
    }

    /// @dev Get the max Supply
    /// @return the maximum token count
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /// @dev Get the current token count
    /// @return the created token count
    function tokenCount() public view returns (uint256) {
        return _tokenCount.current();
    }

    /// @dev Check whether tokens are still available
    /// @return the available token count
    function availableTokenCount() public view returns (uint256) {
        return totalSupply() - tokenCount();
    }

    /// @dev Increment the token count and fetch the latest count
    /// @return the next token id
    function nextToken() internal virtual returns (uint256) {
        uint256 token = _tokenCount.current();

        _tokenCount.increment();

        return token;
    }

    /// @dev Check whether another token is still available
    modifier ensureAvailability() {
        require(availableTokenCount() > 0, "No more tokens available");
        _;
    }

    /// @param amount Check whether number of tokens are still available
    /// @dev Check whether tokens are still available
    modifier ensureAvailabilityFor(uint256 amount) {
        require(
            availableTokenCount() >= amount,
            "Requested number of tokens not available"
        );
        _;
    }

    /// Update the supply for the collection
    /// @param _supply the new token supply.
    /// @dev create additional token supply for this collection.
    function _setSupply(uint256 _supply) internal virtual {
        require(
            _supply > tokenCount(),
            "Can't set the supply to less than the current token count"
        );
        _totalSupply = _supply;

        emit SupplyChanged(totalSupply());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_UnrevealedURI","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":"uint256","name":"supply","type":"uint256"}],"name":"SupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PresaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UnrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelist","type":"uint256"},{"internalType":"uint256","name":"_presale","type":"uint256"},{"internalType":"uint256","name":"_public","type":"uint256"}],"name":"setCaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistCost","type":"uint256"},{"internalType":"uint256","name":"_publicCost","type":"uint256"},{"internalType":"uint256","name":"_presaleCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelist","type":"uint256"},{"internalType":"uint256","name":"_public","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelist","type":"uint256"},{"internalType":"uint256","name":"_public","type":"uint256"},{"internalType":"uint256","name":"_presale","type":"uint256"}],"name":"setTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_UnrevealedUri","type":"string"}],"name":"setUnrevealedUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600d919062000262565b5067011c37937e080000600e556702386f26fc100000600f5567016345785d8a00006010556012805460ff191690556014805461ffff191661010017905560036016819055601755614fb160188190556362368cf860195563624678c0601a556362452740601b55611901601c556128a1601d55601e55348015620000ac57600080fd5b5060405162002f2138038062002f21833981016040819052620000cf91620003d5565b60185460018186868160009080519060200190620000ef92919062000262565b5080516200010590600190602084019062000262565b505050620001226200011c6200014960201b60201c565b6200014d565b600855600a555062000134826200019f565b6200013f8162000207565b50505050620004cb565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001ee5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f0183398151915260448201526064015b60405180910390fd5b80516200020390600c90602084019062000262565b5050565b6006546001600160a01b03163314620002525760405162461bcd60e51b8152602060048201819052602482015260008051602062002f018339815191526044820152606401620001e5565b8051620002039060139060208401905b82805462000270906200048e565b90600052602060002090601f016020900481019282620002945760008555620002df565b82601f10620002af57805160ff1916838001178555620002df565b82800160010185558215620002df579182015b82811115620002df578251825591602001919060010190620002c2565b50620002ed929150620002f1565b5090565b5b80821115620002ed5760008155600101620002f2565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200033057600080fd5b81516001600160401b03808211156200034d576200034d62000308565b604051601f8301601f19908116603f0116810190828211818310171562000378576200037862000308565b816040528381526020925086838588010111156200039557600080fd5b600091505b83821015620003b957858201830151818301840152908201906200039a565b83821115620003cb5760008385830101525b9695505050505050565b60008060008060808587031215620003ec57600080fd5b84516001600160401b03808211156200040457600080fd5b62000412888389016200031e565b955060208701519150808211156200042957600080fd5b62000437888389016200031e565b945060408701519150808211156200044e57600080fd5b6200045c888389016200031e565b935060608701519150808211156200047357600080fd5b5062000482878288016200031e565b91505092959194509250565b600181811c90821680620004a357607f821691505b60208210811415620004c557634e487b7160e01b600052602260045260246000fd5b50919050565b612a2680620004db6000396000f3fe6080604052600436106102885760003560e01c80637dc429751161015a578063c6682862116100c1578063db4bec441161007a578063db4bec441461072b578063e0a8085314610758578063e14ca35314610778578063e7b99ec71461078d578063e985e9c5146107a3578063f2fde38b146107ec57600080fd5b8063c66828621461068d578063c87b56dd146106a2578063caefb79e146106c2578063d2cab056146106e2578063d5abeb01146106f5578063da3ef23f1461070b57600080fd5b80639f181b5e116101135780639f181b5e146105f9578063a0712d681461060e578063a22cb46514610621578063a529e2b014610641578063b88d4fde14610657578063bf0d96c31461067757600080fd5b80637dc429751461055a5780638693da201461057057806387e71673146105865780638da5cb5b146105a657806390fb5fb9146105c457806395d89b41146105e457600080fd5b80633b91ceef116101fe5780635c975abb116101b75780635c975abb146104b15780636352211e146104d05780636c0360eb146104f057806370a0823114610505578063715018a6146105255780637cb647591461053a57600080fd5b80633b91ceef146104085780633ccfd60b1461042857806342842e0e1461043d578063518302271461045d57806351fb012d1461047757806355f804b31461049157600080fd5b8063095ea7b311610250578063095ea7b31461035357806316c38b3c1461037357806318160ddd1461039357806323b872dd146103b25780632eb4a7ab146103d257806336edc79a146103e857600080fd5b806301ffc9a71461028d578063052d9e7e146102c257806305970523146102e457806306fdde0314610306578063081812fc1461031b575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612295565b61080c565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046122c2565b61085e565b005b3480156102f057600080fd5b506102f96108a4565b6040516102b99190612335565b34801561031257600080fd5b506102f9610932565b34801561032757600080fd5b5061033b610336366004612348565b6109c4565b6040516001600160a01b0390911681526020016102b9565b34801561035f57600080fd5b506102e261036e366004612378565b610a59565b34801561037f57600080fd5b506102e261038e3660046122c2565b610b6f565b34801561039f57600080fd5b506008545b6040519081526020016102b9565b3480156103be57600080fd5b506102e26103cd3660046123a2565b610bb3565b3480156103de57600080fd5b506103a460155481565b3480156103f457600080fd5b506102e26104033660046123de565b610be4565b34801561041457600080fd5b506102e261042336600461240a565b610c1c565b34801561043457600080fd5b506102e2610c51565b34801561044957600080fd5b506102e26104583660046123a2565b610cef565b34801561046957600080fd5b506014546102ad9060ff1681565b34801561048357600080fd5b506012546102ad9060ff1681565b34801561049d57600080fd5b506102e26104ac3660046124b8565b610d0a565b3480156104bd57600080fd5b506014546102ad90610100900460ff1681565b3480156104dc57600080fd5b5061033b6104eb366004612348565b610d4b565b3480156104fc57600080fd5b506102f9610dc2565b34801561051157600080fd5b506103a4610520366004612501565b610dcf565b34801561053157600080fd5b506102e2610e56565b34801561054657600080fd5b506102e2610555366004612348565b610e8c565b34801561056657600080fd5b506103a460175481565b34801561057c57600080fd5b506103a4600f5481565b34801561059257600080fd5b506102e26105a13660046123de565b610ebb565b3480156105b257600080fd5b506006546001600160a01b031661033b565b3480156105d057600080fd5b506102e26105df3660046124b8565b610ef3565b3480156105f057600080fd5b506102f9610f30565b34801561060557600080fd5b506103a4610f3f565b6102e261061c366004612348565b610f4f565b34801561062d57600080fd5b506102e261063c36600461251c565b6111e5565b34801561064d57600080fd5b506103a460105481565b34801561066357600080fd5b506102e261067236600461254f565b6111f0565b34801561068357600080fd5b506103a460165481565b34801561069957600080fd5b506102f9611228565b3480156106ae57600080fd5b506102f96106bd366004612348565b611235565b3480156106ce57600080fd5b506102e26106dd3660046123de565b6113af565b6102e26106f03660046125cb565b6113e7565b34801561070157600080fd5b506103a460185481565b34801561071757600080fd5b506102e26107263660046124b8565b6116bb565b34801561073757600080fd5b506103a4610746366004612501565b600b6020526000908152604090205481565b34801561076457600080fd5b506102e26107733660046122c2565b6116f8565b34801561078457600080fd5b506103a4611735565b34801561079957600080fd5b506103a4600e5481565b3480156107af57600080fd5b506102ad6107be36600461264a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107f857600080fd5b506102e2610807366004612501565b61174c565b60006001600160e01b031982166380ac58cd60e01b148061083d57506001600160e01b03198216635b5e139f60e01b145b8061085857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108915760405162461bcd60e51b815260040161088890612674565b60405180910390fd5b6012805460ff1916911515919091179055565b601380546108b1906126a9565b80601f01602080910402602001604051908101604052809291908181526020018280546108dd906126a9565b801561092a5780601f106108ff5761010080835404028352916020019161092a565b820191906000526020600020905b81548152906001019060200180831161090d57829003601f168201915b505050505081565b606060008054610941906126a9565b80601f016020809104026020016040519081016040528092919081815260200182805461096d906126a9565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a3d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610888565b506000908152600460205260409020546001600160a01b031690565b6000610a6482610d4b565b9050806001600160a01b0316836001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610888565b336001600160a01b0382161480610aee5750610aee81336107be565b610b605760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610888565b610b6a83836117e4565b505050565b6006546001600160a01b03163314610b995760405162461bcd60e51b815260040161088890612674565b601480549115156101000261ff0019909216919091179055565b610bbd3382611852565b610bd95760405162461bcd60e51b8152600401610888906126e4565b610b6a838383611949565b6006546001600160a01b03163314610c0e5760405162461bcd60e51b815260040161088890612674565b601992909255601a55601b55565b6006546001600160a01b03163314610c465760405162461bcd60e51b815260040161088890612674565b601691909155601755565b6006546001600160a01b03163314610c7b5760405162461bcd60e51b815260040161088890612674565b6000610c8f6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610cd9576040519150601f19603f3d011682016040523d82523d6000602084013e610cde565b606091505b5050905080610cec57600080fd5b50565b610b6a838383604051806020016040528060008152506111f0565b6006546001600160a01b03163314610d345760405162461bcd60e51b815260040161088890612674565b8051610d4790600c9060208401906121e6565b5050565b6000818152600260205260408120546001600160a01b0316806108585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610888565b600c80546108b1906126a9565b60006001600160a01b038216610e3a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610888565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610e805760405162461bcd60e51b815260040161088890612674565b610e8a6000611ae5565b565b6006546001600160a01b03163314610eb65760405162461bcd60e51b815260040161088890612674565b601555565b6006546001600160a01b03163314610ee55760405162461bcd60e51b815260040161088890612674565b600e92909255600f55601055565b6006546001600160a01b03163314610f1d5760405162461bcd60e51b815260040161088890612674565b8051610d479060139060208401906121e6565b606060018054610941906126a9565b6000610f4a60075490565b905090565b6000610f59611735565b11610f765760405162461bcd60e51b815260040161088890612735565b601454610100900460ff1615610fce5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610888565b60008111610fee5760405162461bcd60e51b81526004016108889061276c565b6006546001600160a01b031633146111b85760175481111561106e5760405162461bcd60e51b815260206004820152603360248201527f596f75277265204e6f7420416c6c6f77656420546f204d696e74206d6f7265206044820152721d1a185b881b585e135a5b9d08105b5bdd5b9d606a1b6064820152608401610888565b601b5442101580156110825750601a544211155b156110e457601054601155601d54611098610f3f565b11156110df5760405162461bcd60e51b8152602060048201526016602482015275141c995cdb185948105b5bdd5b9d0814995858da195960521b6044820152606401610888565b611166565b601a54421061114457600f54601155601e546110fe610f3f565b11156110df5760405162461bcd60e51b8152602060048201526015602482015274141d589b1a58c8105b5bdd5b9d0814995858da1959605a1b6044820152606401610888565b60405162461bcd60e51b81526020600482015260006024820152604401610888565b8060115461117491906127c3565b3410156111b85760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742046756e647360701b6044820152606401610888565b60015b818111610d47576111d3336111ce611b37565b611c9f565b806111dd816127e2565b9150506111bb565b610d47338383611cb9565b6111fa3383611852565b6112165760405162461bcd60e51b8152600401610888906126e4565b61122284848484611d88565b50505050565b600d80546108b1906126a9565b6000818152600260205260409020546060906001600160a01b03166112b45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610888565b60145460ff1661135057601380546112cb906126a9565b80601f01602080910402602001604051908101604052809291908181526020018280546112f7906126a9565b80156113445780601f1061131957610100808354040283529160200191611344565b820191906000526020600020905b81548152906001019060200180831161132757829003601f168201915b50505050509050919050565b600061135a611dbb565b9050600081511161137a57604051806020016040528060008152506113a8565b8061138484611dca565b600d604051602001611398939291906127fd565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146113d95760405162461bcd60e51b815260040161088890612674565b601c92909255601d55601e55565b60006113f1611735565b1161140e5760405162461bcd60e51b815260040161088890612735565b6000831161142e5760405162461bcd60e51b81526004016108889061276c565b60125460ff1661148b5760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610888565b601c54611496610f3f565b11156114e45760405162461bcd60e51b815260206004820152601860248201527f57686974656c69737420416d6f756e74205265616368656400000000000000006044820152606401610888565b601654336000908152600b60205260409020546115029085906128c1565b111561155e5760405162461bcd60e51b815260206004820152602560248201527f596f75277265206e6f7420616c6c6f77656420746f206d696e742074686973206044820152644d7563682160d81b6064820152608401610888565b82600e5461156c91906127c3565b3410156115b05760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742046756e647360701b6044820152606401610888565b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061162a838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506015549150849050611ec8565b6116675760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610888565b336000908152600b6020526040812080548692906116869084906128c1565b90915550600190505b8481116116b4576116a2336111ce611b37565b806116ac816127e2565b91505061168f565b5050505050565b6006546001600160a01b031633146116e55760405162461bcd60e51b815260040161088890612674565b8051610d4790600d9060208401906121e6565b6006546001600160a01b031633146117225760405162461bcd60e51b815260040161088890612674565b6014805460ff1916911515919091179055565b600061173f610f3f565b600854610f4a91906128d9565b6006546001600160a01b031633146117765760405162461bcd60e51b815260040161088890612674565b6001600160a01b0381166117db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610888565b610cec81611ae5565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181982610d4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610888565b60006118d683610d4b565b9050806001600160a01b0316846001600160a01b0316148061191d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119415750836001600160a01b0316611936846109c4565b6001600160a01b0316145b949350505050565b826001600160a01b031661195c82610d4b565b6001600160a01b0316146119c05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610888565b6001600160a01b038216611a225760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610888565b611a2d6000826117e4565b6001600160a01b0383166000908152600360205260408120805460019290611a569084906128d9565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a849084906128c1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080611b42611735565b11611b5f5760405162461bcd60e51b815260040161088890612735565b6000611b69610f3f565b600854611b7691906128d9565b6040516bffffffffffffffffffffffff1933606090811b8216602084015241901b166034820152446048820152456068820152426088820152909150600090829060a8016040516020818303038152906040528051906020012060001c611bdd9190612906565b60008181526009602052604081205491925090611bfb575080611c0c565b506000818152600960205260409020545b60096000611c1b6001866128d9565b81526020019081526020016000205460001415611c5157611c3d6001846128d9565b600083815260096020526040902055611c81565b60096000611c606001866128d9565b81526020808201929092526040908101600090812054858252600990935220555b611c89611ede565b50600a54611c9790826128c1565b935050505090565b610d47828260405180602001604052806000815250611eff565b816001600160a01b0316836001600160a01b03161415611d1b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610888565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d93848484611949565b611d9f84848484611f32565b6112225760405162461bcd60e51b81526004016108889061291a565b6060600c8054610941906126a9565b606081611dee5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e185780611e02816127e2565b9150611e119050600a8361296c565b9150611df2565b60008167ffffffffffffffff811115611e3357611e3361242c565b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b5090505b841561194157611e726001836128d9565b9150611e7f600a86612906565b611e8a9060306128c1565b60f81b818381518110611e9f57611e9f612980565b60200101906001600160f81b031916908160001a905350611ec1600a8661296c565b9450611e61565b600082611ed58584612030565b14949350505050565b600080611eea60075490565b9050611efa600780546001019055565b919050565b611f0983836120a4565b611f166000848484611f32565b610b6a5760405162461bcd60e51b81526004016108889061291a565b60006001600160a01b0384163b1561202557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f76903390899088908890600401612996565b6020604051808303816000875af1925050508015611fb1575060408051601f3d908101601f19168201909252611fae918101906129d3565b60015b61200b573d808015611fdf576040519150601f19603f3d011682016040523d82523d6000602084013e611fe4565b606091505b5080516120035760405162461bcd60e51b81526004016108889061291a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611941565b506001949350505050565b600081815b845181101561209c57600085828151811061205257612052612980565b602002602001015190508083116120785760008381526020829052604090209250612089565b600081815260208490526040902092505b5080612094816127e2565b915050612035565b509392505050565b6001600160a01b0382166120fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610888565b6000818152600260205260409020546001600160a01b03161561215f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610888565b6001600160a01b03821660009081526003602052604081208054600192906121889084906128c1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121f2906126a9565b90600052602060002090601f016020900481019282612214576000855561225a565b82601f1061222d57805160ff191683800117855561225a565b8280016001018555821561225a579182015b8281111561225a57825182559160200191906001019061223f565b5061226692915061226a565b5090565b5b80821115612266576000815560010161226b565b6001600160e01b031981168114610cec57600080fd5b6000602082840312156122a757600080fd5b81356113a88161227f565b80358015158114611efa57600080fd5b6000602082840312156122d457600080fd5b6113a8826122b2565b60005b838110156122f85781810151838201526020016122e0565b838111156112225750506000910152565b600081518084526123218160208601602086016122dd565b601f01601f19169290920160200192915050565b6020815260006113a86020830184612309565b60006020828403121561235a57600080fd5b5035919050565b80356001600160a01b0381168114611efa57600080fd5b6000806040838503121561238b57600080fd5b61239483612361565b946020939093013593505050565b6000806000606084860312156123b757600080fd5b6123c084612361565b92506123ce60208501612361565b9150604084013590509250925092565b6000806000606084860312156123f357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561241d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561245d5761245d61242c565b604051601f8501601f19908116603f011681019082821181831017156124855761248561242c565b8160405280935085815286868601111561249e57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156124ca57600080fd5b813567ffffffffffffffff8111156124e157600080fd5b8201601f810184136124f257600080fd5b61194184823560208401612442565b60006020828403121561251357600080fd5b6113a882612361565b6000806040838503121561252f57600080fd5b61253883612361565b9150612546602084016122b2565b90509250929050565b6000806000806080858703121561256557600080fd5b61256e85612361565b935061257c60208601612361565b925060408501359150606085013567ffffffffffffffff81111561259f57600080fd5b8501601f810187136125b057600080fd5b6125bf87823560208401612442565b91505092959194509250565b6000806000604084860312156125e057600080fd5b83359250602084013567ffffffffffffffff808211156125ff57600080fd5b818601915086601f83011261261357600080fd5b81358181111561262257600080fd5b8760208260051b850101111561263757600080fd5b6020830194508093505050509250925092565b6000806040838503121561265d57600080fd5b61266683612361565b915061254660208401612361565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806126bd57607f821691505b602082108114156126de57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f4e6f206d6f726520746f6b656e7320617661696c61626c650000000000000000604082015260600190565b60208082526021908201527f5175616e74697479204d75737420426520486967686572205468616e205a65726040820152606f60f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127dd576127dd6127ad565b500290565b60006000198214156127f6576127f66127ad565b5060010190565b6000845160206128108285838a016122dd565b8551918401916128238184848a016122dd565b8554920191600090600181811c908083168061284057607f831692505b85831081141561285e57634e487b7160e01b85526022600452602485fd5b8080156128725760018114612883576128b0565b60ff198516885283880195506128b0565b60008b81526020902060005b858110156128a85781548a82015290840190880161288f565b505083880195505b50939b9a5050505050505050505050565b600082198211156128d4576128d46127ad565b500190565b6000828210156128eb576128eb6127ad565b500390565b634e487b7160e01b600052601260045260246000fd5b600082612915576129156128f0565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261297b5761297b6128f0565b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c990830184612309565b9695505050505050565b6000602082840312156129e557600080fd5b81516113a88161227f56fea26469706673582212207738e5814c19303fd52909b4fa272e15be63266025d4206f2a1ba9e715fd1b4564736f6c634300080c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000013486f742054617065204769726c7320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448544743000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d534d557a5841314d676d554b527144534a755a647a6f456f413835557a6b63546838375945487439463974622f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d647857313233524756574157436f4644455861516f626b34355a4361597a37786b7951634c79615a6e7a32362f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80637dc429751161015a578063c6682862116100c1578063db4bec441161007a578063db4bec441461072b578063e0a8085314610758578063e14ca35314610778578063e7b99ec71461078d578063e985e9c5146107a3578063f2fde38b146107ec57600080fd5b8063c66828621461068d578063c87b56dd146106a2578063caefb79e146106c2578063d2cab056146106e2578063d5abeb01146106f5578063da3ef23f1461070b57600080fd5b80639f181b5e116101135780639f181b5e146105f9578063a0712d681461060e578063a22cb46514610621578063a529e2b014610641578063b88d4fde14610657578063bf0d96c31461067757600080fd5b80637dc429751461055a5780638693da201461057057806387e71673146105865780638da5cb5b146105a657806390fb5fb9146105c457806395d89b41146105e457600080fd5b80633b91ceef116101fe5780635c975abb116101b75780635c975abb146104b15780636352211e146104d05780636c0360eb146104f057806370a0823114610505578063715018a6146105255780637cb647591461053a57600080fd5b80633b91ceef146104085780633ccfd60b1461042857806342842e0e1461043d578063518302271461045d57806351fb012d1461047757806355f804b31461049157600080fd5b8063095ea7b311610250578063095ea7b31461035357806316c38b3c1461037357806318160ddd1461039357806323b872dd146103b25780632eb4a7ab146103d257806336edc79a146103e857600080fd5b806301ffc9a71461028d578063052d9e7e146102c257806305970523146102e457806306fdde0314610306578063081812fc1461031b575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612295565b61080c565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd3660046122c2565b61085e565b005b3480156102f057600080fd5b506102f96108a4565b6040516102b99190612335565b34801561031257600080fd5b506102f9610932565b34801561032757600080fd5b5061033b610336366004612348565b6109c4565b6040516001600160a01b0390911681526020016102b9565b34801561035f57600080fd5b506102e261036e366004612378565b610a59565b34801561037f57600080fd5b506102e261038e3660046122c2565b610b6f565b34801561039f57600080fd5b506008545b6040519081526020016102b9565b3480156103be57600080fd5b506102e26103cd3660046123a2565b610bb3565b3480156103de57600080fd5b506103a460155481565b3480156103f457600080fd5b506102e26104033660046123de565b610be4565b34801561041457600080fd5b506102e261042336600461240a565b610c1c565b34801561043457600080fd5b506102e2610c51565b34801561044957600080fd5b506102e26104583660046123a2565b610cef565b34801561046957600080fd5b506014546102ad9060ff1681565b34801561048357600080fd5b506012546102ad9060ff1681565b34801561049d57600080fd5b506102e26104ac3660046124b8565b610d0a565b3480156104bd57600080fd5b506014546102ad90610100900460ff1681565b3480156104dc57600080fd5b5061033b6104eb366004612348565b610d4b565b3480156104fc57600080fd5b506102f9610dc2565b34801561051157600080fd5b506103a4610520366004612501565b610dcf565b34801561053157600080fd5b506102e2610e56565b34801561054657600080fd5b506102e2610555366004612348565b610e8c565b34801561056657600080fd5b506103a460175481565b34801561057c57600080fd5b506103a4600f5481565b34801561059257600080fd5b506102e26105a13660046123de565b610ebb565b3480156105b257600080fd5b506006546001600160a01b031661033b565b3480156105d057600080fd5b506102e26105df3660046124b8565b610ef3565b3480156105f057600080fd5b506102f9610f30565b34801561060557600080fd5b506103a4610f3f565b6102e261061c366004612348565b610f4f565b34801561062d57600080fd5b506102e261063c36600461251c565b6111e5565b34801561064d57600080fd5b506103a460105481565b34801561066357600080fd5b506102e261067236600461254f565b6111f0565b34801561068357600080fd5b506103a460165481565b34801561069957600080fd5b506102f9611228565b3480156106ae57600080fd5b506102f96106bd366004612348565b611235565b3480156106ce57600080fd5b506102e26106dd3660046123de565b6113af565b6102e26106f03660046125cb565b6113e7565b34801561070157600080fd5b506103a460185481565b34801561071757600080fd5b506102e26107263660046124b8565b6116bb565b34801561073757600080fd5b506103a4610746366004612501565b600b6020526000908152604090205481565b34801561076457600080fd5b506102e26107733660046122c2565b6116f8565b34801561078457600080fd5b506103a4611735565b34801561079957600080fd5b506103a4600e5481565b3480156107af57600080fd5b506102ad6107be36600461264a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107f857600080fd5b506102e2610807366004612501565b61174c565b60006001600160e01b031982166380ac58cd60e01b148061083d57506001600160e01b03198216635b5e139f60e01b145b8061085857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108915760405162461bcd60e51b815260040161088890612674565b60405180910390fd5b6012805460ff1916911515919091179055565b601380546108b1906126a9565b80601f01602080910402602001604051908101604052809291908181526020018280546108dd906126a9565b801561092a5780601f106108ff5761010080835404028352916020019161092a565b820191906000526020600020905b81548152906001019060200180831161090d57829003601f168201915b505050505081565b606060008054610941906126a9565b80601f016020809104026020016040519081016040528092919081815260200182805461096d906126a9565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a3d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610888565b506000908152600460205260409020546001600160a01b031690565b6000610a6482610d4b565b9050806001600160a01b0316836001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610888565b336001600160a01b0382161480610aee5750610aee81336107be565b610b605760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610888565b610b6a83836117e4565b505050565b6006546001600160a01b03163314610b995760405162461bcd60e51b815260040161088890612674565b601480549115156101000261ff0019909216919091179055565b610bbd3382611852565b610bd95760405162461bcd60e51b8152600401610888906126e4565b610b6a838383611949565b6006546001600160a01b03163314610c0e5760405162461bcd60e51b815260040161088890612674565b601992909255601a55601b55565b6006546001600160a01b03163314610c465760405162461bcd60e51b815260040161088890612674565b601691909155601755565b6006546001600160a01b03163314610c7b5760405162461bcd60e51b815260040161088890612674565b6000610c8f6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610cd9576040519150601f19603f3d011682016040523d82523d6000602084013e610cde565b606091505b5050905080610cec57600080fd5b50565b610b6a838383604051806020016040528060008152506111f0565b6006546001600160a01b03163314610d345760405162461bcd60e51b815260040161088890612674565b8051610d4790600c9060208401906121e6565b5050565b6000818152600260205260408120546001600160a01b0316806108585760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610888565b600c80546108b1906126a9565b60006001600160a01b038216610e3a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610888565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610e805760405162461bcd60e51b815260040161088890612674565b610e8a6000611ae5565b565b6006546001600160a01b03163314610eb65760405162461bcd60e51b815260040161088890612674565b601555565b6006546001600160a01b03163314610ee55760405162461bcd60e51b815260040161088890612674565b600e92909255600f55601055565b6006546001600160a01b03163314610f1d5760405162461bcd60e51b815260040161088890612674565b8051610d479060139060208401906121e6565b606060018054610941906126a9565b6000610f4a60075490565b905090565b6000610f59611735565b11610f765760405162461bcd60e51b815260040161088890612735565b601454610100900460ff1615610fce5760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610888565b60008111610fee5760405162461bcd60e51b81526004016108889061276c565b6006546001600160a01b031633146111b85760175481111561106e5760405162461bcd60e51b815260206004820152603360248201527f596f75277265204e6f7420416c6c6f77656420546f204d696e74206d6f7265206044820152721d1a185b881b585e135a5b9d08105b5bdd5b9d606a1b6064820152608401610888565b601b5442101580156110825750601a544211155b156110e457601054601155601d54611098610f3f565b11156110df5760405162461bcd60e51b8152602060048201526016602482015275141c995cdb185948105b5bdd5b9d0814995858da195960521b6044820152606401610888565b611166565b601a54421061114457600f54601155601e546110fe610f3f565b11156110df5760405162461bcd60e51b8152602060048201526015602482015274141d589b1a58c8105b5bdd5b9d0814995858da1959605a1b6044820152606401610888565b60405162461bcd60e51b81526020600482015260006024820152604401610888565b8060115461117491906127c3565b3410156111b85760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742046756e647360701b6044820152606401610888565b60015b818111610d47576111d3336111ce611b37565b611c9f565b806111dd816127e2565b9150506111bb565b610d47338383611cb9565b6111fa3383611852565b6112165760405162461bcd60e51b8152600401610888906126e4565b61122284848484611d88565b50505050565b600d80546108b1906126a9565b6000818152600260205260409020546060906001600160a01b03166112b45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610888565b60145460ff1661135057601380546112cb906126a9565b80601f01602080910402602001604051908101604052809291908181526020018280546112f7906126a9565b80156113445780601f1061131957610100808354040283529160200191611344565b820191906000526020600020905b81548152906001019060200180831161132757829003601f168201915b50505050509050919050565b600061135a611dbb565b9050600081511161137a57604051806020016040528060008152506113a8565b8061138484611dca565b600d604051602001611398939291906127fd565b6040516020818303038152906040525b9392505050565b6006546001600160a01b031633146113d95760405162461bcd60e51b815260040161088890612674565b601c92909255601d55601e55565b60006113f1611735565b1161140e5760405162461bcd60e51b815260040161088890612735565b6000831161142e5760405162461bcd60e51b81526004016108889061276c565b60125460ff1661148b5760405162461bcd60e51b815260206004820152602260248201527f5468652077686974656c6973742073616c65206973206e6f7420656e61626c65604482015261642160f01b6064820152608401610888565b601c54611496610f3f565b11156114e45760405162461bcd60e51b815260206004820152601860248201527f57686974656c69737420416d6f756e74205265616368656400000000000000006044820152606401610888565b601654336000908152600b60205260409020546115029085906128c1565b111561155e5760405162461bcd60e51b815260206004820152602560248201527f596f75277265206e6f7420616c6c6f77656420746f206d696e742074686973206044820152644d7563682160d81b6064820152608401610888565b82600e5461156c91906127c3565b3410156115b05760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742046756e647360701b6044820152606401610888565b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061162a838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506015549150849050611ec8565b6116675760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642070726f6f662160901b6044820152606401610888565b336000908152600b6020526040812080548692906116869084906128c1565b90915550600190505b8481116116b4576116a2336111ce611b37565b806116ac816127e2565b91505061168f565b5050505050565b6006546001600160a01b031633146116e55760405162461bcd60e51b815260040161088890612674565b8051610d4790600d9060208401906121e6565b6006546001600160a01b031633146117225760405162461bcd60e51b815260040161088890612674565b6014805460ff1916911515919091179055565b600061173f610f3f565b600854610f4a91906128d9565b6006546001600160a01b031633146117765760405162461bcd60e51b815260040161088890612674565b6001600160a01b0381166117db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610888565b610cec81611ae5565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181982610d4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610888565b60006118d683610d4b565b9050806001600160a01b0316846001600160a01b0316148061191d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119415750836001600160a01b0316611936846109c4565b6001600160a01b0316145b949350505050565b826001600160a01b031661195c82610d4b565b6001600160a01b0316146119c05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610888565b6001600160a01b038216611a225760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610888565b611a2d6000826117e4565b6001600160a01b0383166000908152600360205260408120805460019290611a569084906128d9565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a849084906128c1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080611b42611735565b11611b5f5760405162461bcd60e51b815260040161088890612735565b6000611b69610f3f565b600854611b7691906128d9565b6040516bffffffffffffffffffffffff1933606090811b8216602084015241901b166034820152446048820152456068820152426088820152909150600090829060a8016040516020818303038152906040528051906020012060001c611bdd9190612906565b60008181526009602052604081205491925090611bfb575080611c0c565b506000818152600960205260409020545b60096000611c1b6001866128d9565b81526020019081526020016000205460001415611c5157611c3d6001846128d9565b600083815260096020526040902055611c81565b60096000611c606001866128d9565b81526020808201929092526040908101600090812054858252600990935220555b611c89611ede565b50600a54611c9790826128c1565b935050505090565b610d47828260405180602001604052806000815250611eff565b816001600160a01b0316836001600160a01b03161415611d1b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610888565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d93848484611949565b611d9f84848484611f32565b6112225760405162461bcd60e51b81526004016108889061291a565b6060600c8054610941906126a9565b606081611dee5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e185780611e02816127e2565b9150611e119050600a8361296c565b9150611df2565b60008167ffffffffffffffff811115611e3357611e3361242c565b6040519080825280601f01601f191660200182016040528015611e5d576020820181803683370190505b5090505b841561194157611e726001836128d9565b9150611e7f600a86612906565b611e8a9060306128c1565b60f81b818381518110611e9f57611e9f612980565b60200101906001600160f81b031916908160001a905350611ec1600a8661296c565b9450611e61565b600082611ed58584612030565b14949350505050565b600080611eea60075490565b9050611efa600780546001019055565b919050565b611f0983836120a4565b611f166000848484611f32565b610b6a5760405162461bcd60e51b81526004016108889061291a565b60006001600160a01b0384163b1561202557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f76903390899088908890600401612996565b6020604051808303816000875af1925050508015611fb1575060408051601f3d908101601f19168201909252611fae918101906129d3565b60015b61200b573d808015611fdf576040519150601f19603f3d011682016040523d82523d6000602084013e611fe4565b606091505b5080516120035760405162461bcd60e51b81526004016108889061291a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611941565b506001949350505050565b600081815b845181101561209c57600085828151811061205257612052612980565b602002602001015190508083116120785760008381526020829052604090209250612089565b600081815260208490526040902092505b5080612094816127e2565b915050612035565b509392505050565b6001600160a01b0382166120fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610888565b6000818152600260205260409020546001600160a01b03161561215f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610888565b6001600160a01b03821660009081526003602052604081208054600192906121889084906128c1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546121f2906126a9565b90600052602060002090601f016020900481019282612214576000855561225a565b82601f1061222d57805160ff191683800117855561225a565b8280016001018555821561225a579182015b8281111561225a57825182559160200191906001019061223f565b5061226692915061226a565b5090565b5b80821115612266576000815560010161226b565b6001600160e01b031981168114610cec57600080fd5b6000602082840312156122a757600080fd5b81356113a88161227f565b80358015158114611efa57600080fd5b6000602082840312156122d457600080fd5b6113a8826122b2565b60005b838110156122f85781810151838201526020016122e0565b838111156112225750506000910152565b600081518084526123218160208601602086016122dd565b601f01601f19169290920160200192915050565b6020815260006113a86020830184612309565b60006020828403121561235a57600080fd5b5035919050565b80356001600160a01b0381168114611efa57600080fd5b6000806040838503121561238b57600080fd5b61239483612361565b946020939093013593505050565b6000806000606084860312156123b757600080fd5b6123c084612361565b92506123ce60208501612361565b9150604084013590509250925092565b6000806000606084860312156123f357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561241d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561245d5761245d61242c565b604051601f8501601f19908116603f011681019082821181831017156124855761248561242c565b8160405280935085815286868601111561249e57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156124ca57600080fd5b813567ffffffffffffffff8111156124e157600080fd5b8201601f810184136124f257600080fd5b61194184823560208401612442565b60006020828403121561251357600080fd5b6113a882612361565b6000806040838503121561252f57600080fd5b61253883612361565b9150612546602084016122b2565b90509250929050565b6000806000806080858703121561256557600080fd5b61256e85612361565b935061257c60208601612361565b925060408501359150606085013567ffffffffffffffff81111561259f57600080fd5b8501601f810187136125b057600080fd5b6125bf87823560208401612442565b91505092959194509250565b6000806000604084860312156125e057600080fd5b83359250602084013567ffffffffffffffff808211156125ff57600080fd5b818601915086601f83011261261357600080fd5b81358181111561262257600080fd5b8760208260051b850101111561263757600080fd5b6020830194508093505050509250925092565b6000806040838503121561265d57600080fd5b61266683612361565b915061254660208401612361565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806126bd57607f821691505b602082108114156126de57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526018908201527f4e6f206d6f726520746f6b656e7320617661696c61626c650000000000000000604082015260600190565b60208082526021908201527f5175616e74697479204d75737420426520486967686572205468616e205a65726040820152606f60f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127dd576127dd6127ad565b500290565b60006000198214156127f6576127f66127ad565b5060010190565b6000845160206128108285838a016122dd565b8551918401916128238184848a016122dd565b8554920191600090600181811c908083168061284057607f831692505b85831081141561285e57634e487b7160e01b85526022600452602485fd5b8080156128725760018114612883576128b0565b60ff198516885283880195506128b0565b60008b81526020902060005b858110156128a85781548a82015290840190880161288f565b505083880195505b50939b9a5050505050505050505050565b600082198211156128d4576128d46127ad565b500190565b6000828210156128eb576128eb6127ad565b500390565b634e487b7160e01b600052601260045260246000fd5b600082612915576129156128f0565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261297b5761297b6128f0565b500490565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129c990830184612309565b9695505050505050565b6000602082840312156129e557600080fd5b81516113a88161227f56fea26469706673582212207738e5814c19303fd52909b4fa272e15be63266025d4206f2a1ba9e715fd1b4564736f6c634300080c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000013486f742054617065204769726c7320436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448544743000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d534d557a5841314d676d554b527144534a755a647a6f456f413835557a6b63546838375945487439463974622f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d647857313233524756574157436f4644455861516f626b34355a4361597a37786b7951634c79615a6e7a32362f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Hot Tape Girls Club
Arg [1] : _symbol (string): HTGC
Arg [2] : _initBaseURI (string): ipfs://QmSMUzXA1MgmUKRqDSJuZdzoEoA85UzkcTh87YEHt9F9tb/
Arg [3] : _UnrevealedURI (string): ipfs://QmdxW123RGVWAWCoFDEXaQobk45ZCaYz7xkyQcLyaZnz26/hidden.json

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [5] : 486f742054617065204769726c7320436c756200000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4854474300000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d534d557a5841314d676d554b527144534a755a647a6f45
Arg [10] : 6f413835557a6b63546838375945487439463974622f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d647857313233524756574157436f4644455861516f626b
Arg [13] : 34355a4361597a37786b7951634c79615a6e7a32362f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

165:5719:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:344:4;;;;;;;;;;-1:-1:-1;1505:344:4;;;;;:::i;:::-;;:::i;:::-;;;565:14:16;;558:22;540:41;;528:2;513:18;1505:344:4;;;;;;;;5284:101:11;;;;;;;;;;-1:-1:-1;5284:101:11;;;;;:::i;:::-;;:::i;:::-;;585:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2623:98:4:-;;;;;;;;;;;;;:::i;4257:295::-;;;;;;;;;;-1:-1:-1;4257:295:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:16;;;2024:51;;2012:2;1997:18;4257:295:4;1878:203:16;3795:401:4;;;;;;;;;;-1:-1:-1;3795:401:4;;;;;:::i;:::-;;:::i;5391:81:11:-;;;;;;;;;;-1:-1:-1;5391:81:11;;;;;:::i;:::-;;:::i;861:89:15:-;;;;;;;;;;-1:-1:-1;931:12:15;;861:89;;;2669:25:16;;;2657:2;2642:18;861:89:15;2523:177:16;5134:364:4;;;;;;;;;;-1:-1:-1;5134:364:4;;;;;:::i;:::-;;:::i;683:25:11:-;;;;;;;;;;;;;;;;4388:219;;;;;;;;;;-1:-1:-1;4388:219:11;;;;;:::i;:::-;;:::i;5029:141::-;;;;;;;;;;-1:-1:-1;5029:141:11;;;;;:::i;:::-;;:::i;5738:144::-;;;;;;;;;;;;;:::i;5564:179:4:-;;;;;;;;;;-1:-1:-1;5564:179:4;;;;;:::i;:::-;;:::i;618:28:11:-;;;;;;;;;;-1:-1:-1;618:28:11;;;;;;;;542:36;;;;;;;;;;-1:-1:-1;542:36:11;;;;;;;;5478:102;;;;;;;;;;-1:-1:-1;5478:102:11;;;;;:::i;:::-;;:::i;652:25::-;;;;;;;;;;-1:-1:-1;652:25:11;;;;;;;;;;;2248:313:4;;;;;;;;;;-1:-1:-1;2248:313:4;;;;;:::i;:::-;;:::i;319:21:11:-;;;;;;;;;;;;;:::i;1908:283:4:-;;;;;;;;;;-1:-1:-1;1908:283:4;;;;;:::i;:::-;;:::i;1628:101:12:-;;;;;;;;;;;;;:::i;5176:102:11:-;;;;;;;;;;-1:-1:-1;5176:102:11;;;;;:::i;:::-;;:::i;751:28::-;;;;;;;;;;;;;;;;436:38;;;;;;;;;;;;;;;;4143:239;;;;;;;;;;-1:-1:-1;4143:239:11;;;;;:::i;:::-;;:::i;996:85:12:-;;;;;;;;;;-1:-1:-1;1068:6:12;;-1:-1:-1;;;;;1068:6:12;996:85;;4903:120:11;;;;;;;;;;-1:-1:-1;4903:120:11;;;;;:::i;:::-;;:::i;2785:102:4:-;;;;;;;;;;;;;:::i;1037:97:15:-;;;;;;;;;;;;;:::i;2288:1018:11:-;;;;;;:::i;:::-;;:::i;4619:181:4:-;;;;;;;;;;-1:-1:-1;4619:181:4;;;;;:::i;:::-;;:::i;480:38:11:-;;;;;;;;;;;;;;;;5809:354:4;;;;;;;;;;-1:-1:-1;5809:354:4;;;;;:::i;:::-;;:::i;714:31:11:-;;;;;;;;;;;;;;;;346:37;;;;;;;;;;;;;:::i;3440:697::-;;;;;;;;;;-1:-1:-1;3440:697:11;;;;;:::i;:::-;;:::i;4613:193::-;;;;;;;;;;-1:-1:-1;4613:193:11;;;;;:::i;:::-;;:::i;1350:932::-;;;;;;:::i;:::-;;:::i;785:32::-;;;;;;;;;;;;;;;;5586:146;;;;;;;;;;-1:-1:-1;5586:146:11;;;;;:::i;:::-;;:::i;261:51::-;;;;;;;;;;-1:-1:-1;261:51:11;;;;;:::i;:::-;;;;;;;;;;;;;;4812:85;;;;;;;;;;-1:-1:-1;4812:85:11;;;;;:::i;:::-;;:::i;1236:113:15:-;;;;;;;;;;;;;:::i;389:41:11:-;;;;;;;;;;;;;;;;4866:206:4;;;;;;;;;;-1:-1:-1;4866:206:4;;;;;:::i;:::-;-1:-1:-1;;;;;5030:25:4;;;5003:4;5030:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4866:206;1878:232:12;;;;;;;;;;-1:-1:-1;1878:232:12;;;;;:::i;:::-;;:::i;1505:344:4:-;1647:4;-1:-1:-1;;;;;;1686:40:4;;-1:-1:-1;;;1686:40:4;;:104;;-1:-1:-1;;;;;;;1742:48:4;;-1:-1:-1;;;1742:48:4;1686:104;:156;;;-1:-1:-1;;;;;;;;;;981:40:3;;;1806:36:4;1667:175;1505:344;-1:-1:-1;;1505:344:4:o;5284:101:11:-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;;;;;;;;;5353:16:11::1;:25:::0;;-1:-1:-1;;5353:25:11::1;::::0;::::1;;::::0;;;::::1;::::0;;5284:101::o;585:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2623:98:4:-;2677:13;2709:5;2702:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2623:98;:::o;4257:295::-;4373:7;7757:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7757:16:4;4396:107;;;;-1:-1:-1;;;4396:107:4;;8227:2:16;4396:107:4;;;8209:21:16;8266:2;8246:18;;;8239:30;8305:34;8285:18;;;8278:62;-1:-1:-1;;;8356:18:16;;;8349:42;8408:19;;4396:107:4;8025:408:16;4396:107:4;-1:-1:-1;4521:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4521:24:4;;4257:295::o;3795:401::-;3875:13;3891:23;3906:7;3891:14;:23::i;:::-;3875:39;;3938:5;-1:-1:-1;;;;;3932:11:4;:2;-1:-1:-1;;;;;3932:11:4;;;3924:57;;;;-1:-1:-1;;;3924:57:4;;8640:2:16;3924:57:4;;;8622:21:16;8679:2;8659:18;;;8652:30;8718:34;8698:18;;;8691:62;-1:-1:-1;;;8769:18:16;;;8762:31;8810:19;;3924:57:4;8438:397:16;3924:57:4;665:10:1;-1:-1:-1;;;;;4013:21:4;;;;:62;;-1:-1:-1;4038:37:4;4055:5;665:10:1;4866:206:4;:::i;4038:37::-;3992:165;;;;-1:-1:-1;;;3992:165:4;;9042:2:16;3992:165:4;;;9024:21:16;9081:2;9061:18;;;9054:30;9120:34;9100:18;;;9093:62;9191:26;9171:18;;;9164:54;9235:19;;3992:165:4;8840:420:16;3992:165:4;4168:21;4177:2;4181:7;4168:8;:21::i;:::-;3865:331;3795:401;;:::o;5391:81:11:-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5450:6:11::1;:15:::0;;;::::1;;;;-1:-1:-1::0;;5450:15:11;;::::1;::::0;;;::::1;::::0;;5391:81::o;5134:364:4:-;5336:41;665:10:1;5369:7:4;5336:18;:41::i;:::-;5315:137;;;;-1:-1:-1;;;5315:137:4;;;;;;;:::i;:::-;5463:28;5473:4;5479:2;5483:7;5463:9;:28::i;4388:219:11:-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;4494:17:11::1;:30:::0;;;;4534:19:::1;:29:::0;4573:16:::1;:27:::0;4388:219::o;5029:141::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5109:12:11::1;:25:::0;;;;5144:9:::1;:19:::0;5029:141::o;5738:144::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5786:7:11::1;5807;1068:6:12::0;;-1:-1:-1;;;;;1068:6:12;;996:85;5807:7:11::1;-1:-1:-1::0;;;;;5799:21:11::1;5828;5799:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5785:69;;;5872:2;5864:11;;;::::0;::::1;;5775:107;5738:144::o:0;5564:179:4:-;5697:39;5714:4;5720:2;5724:7;5697:39;;;;;;;;;;;;:16;:39::i;5478:102:11:-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5552:21:11;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;5478:102:::0;:::o;2248:313:4:-;2360:7;2399:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2399:16:4;2446:19;2425:107;;;;-1:-1:-1;;;2425:107:4;;10095:2:16;2425:107:4;;;10077:21:16;10134:2;10114:18;;;10107:30;10173:34;10153:18;;;10146:62;-1:-1:-1;;;10224:18:16;;;10217:39;10273:19;;2425:107:4;9893:405:16;319:21:11;;;;;;;:::i;1908:283:4:-;2020:7;-1:-1:-1;;;;;2064:19:4;;2043:108;;;;-1:-1:-1;;;2043:108:4;;10505:2:16;2043:108:4;;;10487:21:16;10544:2;10524:18;;;10517:30;10583:34;10563:18;;;10556:62;-1:-1:-1;;;10634:18:16;;;10627:40;10684:19;;2043:108:4;10303:406:16;2043:108:4;-1:-1:-1;;;;;;2168:16:4;;;;;:9;:16;;;;;;;1908:283::o;1628:101:12:-;1068:6;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;1692:30:::1;1719:1;1692:18;:30::i;:::-;1628:101::o:0;5176:102:11:-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5247:10:11::1;:24:::0;5176:102::o;4143:239::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;4275:13:11::1;:30:::0;;;;4315:10:::1;:24:::0;4349:11:::1;:26:::0;4143:239::o;4903:120::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;4986:30:11;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;2785:102:4:-:0;2841:13;2873:7;2866:14;;;;;:::i;1037:97:15:-;1080:7;1106:21;:11;918:14:2;;827:112;1106:21:15;1099:28;;1037:97;:::o;2288:1018:11:-;1760:1:15;1736:21;:19;:21::i;:::-;:25;1728:62;;;;-1:-1:-1;;;1728:62:15;;;;;;;:::i;:::-;2375:6:11::1;::::0;::::1;::::0;::::1;;;2374:7;2366:43;;;::::0;-1:-1:-1;;;2366:43:11;;11269:2:16;2366:43:11::1;::::0;::::1;11251:21:16::0;11308:2;11288:18;;;11281:30;11347:25;11327:18;;;11320:53;11390:18;;2366:43:11::1;11067:347:16::0;2366:43:11::1;2438:1;2427:8;:12;2419:58;;;;-1:-1:-1::0;;;2419:58:11::1;;;;;;;:::i;:::-;1068:6:12::0;;-1:-1:-1;;;;;1068:6:12;2492:10:11::1;:21;2488:704;;2566:9;;2554:8;:21;;2529:131;;;::::0;-1:-1:-1;;;2529:131:11;;12023:2:16;2529:131:11::1;::::0;::::1;12005:21:16::0;12062:2;12042:18;;;12035:30;12101:34;12081:18;;;12074:62;-1:-1:-1;;;12152:18:16;;;12145:49;12211:19;;2529:131:11::1;11821:415:16::0;2529:131:11::1;2696:16;;2677:15;:35;;:77;;;;;2735:19;;2716:15;:38;;2677:77;2674:434;;;2780:11;::::0;2773:4:::1;:18:::0;2833:10:::1;::::0;2817:12:::1;:10;:12::i;:::-;:26;;2809:62;;;::::0;-1:-1:-1;;;2809:62:11;;12443:2:16;2809:62:11::1;::::0;::::1;12425:21:16::0;12482:2;12462:18;;;12455:30;-1:-1:-1;;;12501:18:16;;;12494:52;12563:18;;2809:62:11::1;12241:346:16::0;2809:62:11::1;2674:434;;;2913:19;;2894:15;:38;2891:217;;2958:10;::::0;2951:4:::1;:17:::0;3010:9:::1;::::0;2994:12:::1;:10;:12::i;:::-;:25;;2986:60;;;::::0;-1:-1:-1;;;2986:60:11;;12794:2:16;2986:60:11::1;::::0;::::1;12776:21:16::0;12833:2;12813:18;;;12806:30;-1:-1:-1;;;12852:18:16;;;12845:51;12913:18;;2986:60:11::1;12592:345:16::0;2891:217:11::1;3083:10;::::0;-1:-1:-1;;;3083:10:11;;13144:2:16;3083:10:11::1;::::0;::::1;13126:21:16::0;-1:-1:-1;13163:18:16;;;13156:29;13202:18;;3083:10:11::1;12942:284:16::0;2891:217:11::1;3150:8;3143:4;;:15;;;;:::i;:::-;3130:9;:28;;3122:59;;;::::0;-1:-1:-1;;;3122:59:11;;13738:2:16;3122:59:11::1;::::0;::::1;13720:21:16::0;13777:2;13757:18;;;13750:30;-1:-1:-1;;;13796:18:16;;;13789:48;13854:18;;3122:59:11::1;13536:342:16::0;3122:59:11::1;3218:1;3201:99;3226:8;3221:1;:13;3201:99;;3255:34;3265:10;3277:11;:9;:11::i;:::-;3255:9;:34::i;:::-;3236:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3201:99;;4619:181:4::0;4741:52;665:10:1;4774:8:4;4784;4741:18;:52::i;5809:354::-;5991:41;665:10:1;6024:7:4;5991:18;:41::i;:::-;5970:137;;;;-1:-1:-1;;;5970:137:4;;;;;;;:::i;:::-;6117:39;6131:4;6137:2;6141:7;6150:5;6117:13;:39::i;:::-;5809:354;;;;:::o;346:37:11:-;;;;;;;:::i;3440:697::-;7734:4:4;7757:16;;;:7;:16;;;;;;3553:13:11;;-1:-1:-1;;;;;7757:16:4;3582:110:11;;;;-1:-1:-1;;;3582:110:11;;14225:2:16;3582:110:11;;;14207:21:16;14264:2;14244:18;;;14237:30;14303:34;14283:18;;;14276:62;-1:-1:-1;;;14354:18:16;;;14347:45;14409:19;;3582:110:11;14023:411:16;3582:110:11;3707:8;;;;3703:68;;3747:13;3740:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3440:697;;;:::o;3703:68::-;3781:28;3812:10;:8;:10::i;:::-;3781:41;;3882:1;3857:14;3851:28;:32;:279;;;;;;;;;;;;;;;;;3972:14;4012:18;:7;:16;:18::i;:::-;4056:13;3930:161;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3851:279;3832:298;3440:697;-1:-1:-1;;;3440:697:11:o;4613:193::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;4714:12:11::1;:25:::0;;;;4749:10:::1;:21:::0;4780:9:::1;:19:::0;4613:193::o;1350:932::-;1760:1:15;1736:21;:19;:21::i;:::-;:25;1728:62;;;;-1:-1:-1;;;1728:62:15;;;;;;;:::i;:::-;1515:1:11::1;1504:8;:12;1496:58;;;;-1:-1:-1::0;;;1496:58:11::1;;;;;;;:::i;:::-;1572:16;::::0;::::1;;1564:63;;;::::0;-1:-1:-1;;;1564:63:11;;16299:2:16;1564:63:11::1;::::0;::::1;16281:21:16::0;16338:2;16318:18;;;16311:30;16377:34;16357:18;;;16350:62;-1:-1:-1;;;16428:18:16;;;16421:32;16470:19;;1564:63:11::1;16097:398:16::0;1564:63:11::1;1661:12;;1645;:10;:12::i;:::-;:28;;1637:66;;;::::0;-1:-1:-1;;;1637:66:11;;16702:2:16;1637:66:11::1;::::0;::::1;16684:21:16::0;16741:2;16721:18;;;16714:30;16780:26;16760:18;;;16753:54;16824:18;;1637:66:11::1;16500:348:16::0;1637:66:11::1;1777:12;::::0;1751:10:::1;1734:28;::::0;;;:16:::1;:28;::::0;;;;;:39:::1;::::0;1765:8;;1734:39:::1;:::i;:::-;:55;;1713:139;;;::::0;-1:-1:-1;;;1713:139:11;;17188:2:16;1713:139:11::1;::::0;::::1;17170:21:16::0;17227:2;17207:18;;;17200:30;17266:34;17246:18;;;17239:62;-1:-1:-1;;;17317:18:16;;;17310:35;17362:19;;1713:139:11::1;16986:401:16::0;1713:139:11::1;1899:8;1883:13;;:24;;;;:::i;:::-;1870:9;:37;;1862:68;;;::::0;-1:-1:-1;;;1862:68:11;;13738:2:16;1862:68:11::1;::::0;::::1;13720:21:16::0;13777:2;13757:18;;;13750:30;-1:-1:-1;;;13796:18:16;;;13789:48;13854:18;;1862:68:11::1;13536:342:16::0;1862:68:11::1;1965:28;::::0;-1:-1:-1;;1982:10:11::1;17541:2:16::0;17537:15;17533:53;1965:28:11::1;::::0;::::1;17521:66:16::0;1940:12:11::1;::::0;17603::16;;1965:28:11::1;;;;;;;;;;;;1955:39;;;;;;1940:54;;2025:50;2044:12;;2025:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;2058:10:11::1;::::0;;-1:-1:-1;2070:4:11;;-1:-1:-1;2025:18:11::1;:50::i;:::-;2004:111;;;::::0;-1:-1:-1;;;2004:111:11;;17828:2:16;2004:111:11::1;::::0;::::1;17810:21:16::0;17867:2;17847:18;;;17840:30;-1:-1:-1;;;17886:18:16;;;17879:44;17940:18;;2004:111:11::1;17626:338:16::0;2004:111:11::1;2143:10;2126:28;::::0;;;:16:::1;:28;::::0;;;;:40;;2158:8;;2126:28;:40:::1;::::0;2158:8;;2126:40:::1;:::i;:::-;::::0;;;-1:-1:-1;2194:1:11::1;::::0;-1:-1:-1;2177:99:11::1;2202:8;2197:1;:13;2177:99;;2231:34;2241:10;2253:11;:9;:11::i;2231:34::-;2212:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2177:99;;;;1486:796;1350:932:::0;;;:::o;5586:146::-;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;5692:33:11;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;4812:85::-:0;1068:6:12;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;4873:8:11::1;:17:::0;;-1:-1:-1;;4873:17:11::1;::::0;::::1;;::::0;;;::::1;::::0;;4812:85::o;1236:113:15:-;1288:7;1330:12;:10;:12::i;:::-;931;;1314:28;;;;:::i;1878:232:12:-;1068:6;;-1:-1:-1;;;;;1068:6:12;665:10:1;1208:23:12;1200:68;;;;-1:-1:-1;;;1200:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;1979:22:12;::::1;1958:107;;;::::0;-1:-1:-1;;;1958:107:12;;18301:2:16;1958:107:12::1;::::0;::::1;18283:21:16::0;18340:2;18320:18;;;18313:30;18379:34;18359:18;;;18352:62;-1:-1:-1;;;18430:18:16;;;18423:36;18476:19;;1958:107:12::1;18099:402:16::0;1958:107:12::1;2075:28;2094:8;2075:18;:28::i;11806:171:4:-:0;11880:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11880:29:4;-1:-1:-1;;;;;11880:29:4;;;;;;;;:24;;11933:23;11880:24;11933:14;:23::i;:::-;-1:-1:-1;;;;;11924:46:4;;;;;;;;;;;11806:171;;:::o;7952:438::-;8077:4;7757:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7757:16:4;8097:107;;;;-1:-1:-1;;;8097:107:4;;18708:2:16;8097:107:4;;;18690:21:16;18747:2;18727:18;;;18720:30;18786:34;18766:18;;;18759:62;-1:-1:-1;;;18837:18:16;;;18830:42;18889:19;;8097:107:4;18506:408:16;8097:107:4;8214:13;8230:23;8245:7;8230:14;:23::i;:::-;8214:39;;8282:5;-1:-1:-1;;;;;8271:16:4;:7;-1:-1:-1;;;;;8271:16:4;;:64;;;-1:-1:-1;;;;;;5030:25:4;;;5003:4;5030:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8303:32;8271:111;;;;8375:7;-1:-1:-1;;;;;8351:31:4;:20;8363:7;8351:11;:20::i;:::-;-1:-1:-1;;;;;8351:31:4;;8271:111;8263:120;7952:438;-1:-1:-1;;;;7952:438:4:o;11056:639::-;11223:4;-1:-1:-1;;;;;11196:31:4;:23;11211:7;11196:14;:23::i;:::-;-1:-1:-1;;;;;11196:31:4;;11175:115;;;;-1:-1:-1;;;11175:115:4;;19121:2:16;11175:115:4;;;19103:21:16;19160:2;19140:18;;;19133:30;19199:34;19179:18;;;19172:62;-1:-1:-1;;;19250:18:16;;;19243:35;19295:19;;11175:115:4;18919:401:16;11175:115:4;-1:-1:-1;;;;;11308:16:4;;11300:65;;;;-1:-1:-1;;;11300:65:4;;19527:2:16;11300:65:4;;;19509:21:16;19566:2;19546:18;;;19539:30;19605:34;19585:18;;;19578:62;-1:-1:-1;;;19656:18:16;;;19649:34;19700:19;;11300:65:4;19325:400:16;11300:65:4;11477:29;11494:1;11498:7;11477:8;:29::i;:::-;-1:-1:-1;;;;;11517:15:4;;;;;;:9;:15;;;;;:20;;11536:1;;11517:15;:20;;11536:1;;11517:20;:::i;:::-;;;;-1:-1:-1;;;;;;;11547:13:4;;;;;;:9;:13;;;;;:18;;11564:1;;11547:13;:18;;11564:1;;11547:18;:::i;:::-;;;;-1:-1:-1;;11575:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;11575:21:4;-1:-1:-1;;;;;11575:21:4;;;;;;;;;11612:27;;11575:16;;11612:27;;;;;;;3865:331;3795:401;;:::o;2264:187:12:-;2356:6;;;-1:-1:-1;;;;;2372:17:12;;;-1:-1:-1;;;;;;2372:17:12;;;;;;;2404:40;;2356:6;;;2372:17;2356:6;;2404:40;;2337:16;;2404:40;2327:124;2264:187;:::o;872:1320:13:-;971:7;1760:1:15;1736:21;:19;:21::i;:::-;:25;1728:62;;;;-1:-1:-1;;;1728:62:15;;;;;;;:::i;:::-;994:16:13::1;1029:12;:10;:12::i;:::-;931::15::0;;1013:28:13::1;;;;:::i;:::-;1116:213;::::0;-1:-1:-1;;1154:10:13::1;20057:2:16::0;20053:15;;;20049:24;;1116:213:13::1;::::0;::::1;20037:37:16::0;1186:14:13::1;20108:15:16::0;;20104:24;20090:12;;;20083:46;1222:16:13::1;20145:12:16::0;;;20138:28;1260:14:13::1;20182:12:16::0;;;20175:28;1296:15:13::1;20219:13:16::0;;;20212:29;994:47:13;;-1:-1:-1;1051:14:13::1;::::0;994:47;;20257:13:16;;1116:213:13::1;;;;;;;;;;;;1089:254;;;;;;1068:285;;:296;;;;:::i;:::-;1375:13;1406:19:::0;;;:11:::1;:19;::::0;;;;;1051:313;;-1:-1:-1;1375:13:13;1402:298:::1;;-1:-1:-1::0;1549:6:13;1402:298:::1;;;-1:-1:-1::0;1670:19:13::1;::::0;;;:11:::1;:19;::::0;;;;;1402:298:::1;1774:11;:25;1786:12;1797:1;1786:8:::0;:12:::1;:::i;:::-;1774:25;;;;;;;;;;;;1803:1;1774:30;1770:325;;;1906:12;1917:1;1906:8:::0;:12:::1;:::i;:::-;1884:19;::::0;;;:11:::1;:19;::::0;;;;:34;1770:325:::1;;;2059:11;:25;2071:12;2082:1;2071:8:::0;:12:::1;:::i;:::-;2059:25:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;2059:25:13;;;;2037:19;;;:11:::1;:19:::0;;;;:47;1770:325:::1;2133:17;:15;:17::i;:::-;-1:-1:-1::0;2176:9:13::1;::::0;2168:17:::1;::::0;:5;:17:::1;:::i;:::-;2161:24;;;;;872:1320:::0;:::o;8720:108:4:-;8795:26;8805:2;8809:7;8795:26;;;;;;;;;;;;:9;:26::i;12112:307::-;12262:8;-1:-1:-1;;;;;12253:17:4;:5;-1:-1:-1;;;;;12253:17:4;;;12245:55;;;;-1:-1:-1;;;12245:55:4;;20732:2:16;12245:55:4;;;20714:21:16;20771:2;20751:18;;;20744:30;20810:27;20790:18;;;20783:55;20855:18;;12245:55:4;20530:349:16;12245:55:4;-1:-1:-1;;;;;12310:25:4;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12310:46:4;;;;;;;;;;12371:41;;540::16;;;12371::4;;513:18:16;12371:41:4;;;;;;;12112:307;;;:::o;7025:341::-;7176:28;7186:4;7192:2;7196:7;7176:9;:28::i;:::-;7235:48;7258:4;7264:2;7268:7;7277:5;7235:22;:48::i;:::-;7214:145;;;;-1:-1:-1;;;7214:145:4;;;;;;;:::i;3328:106:11:-;3388:13;3420:7;3413:14;;;;;:::i;328:703:14:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:14;;;;;;;;;;;;-1:-1:-1;;;627:10:14;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:14;;-1:-1:-1;773:2:14;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:14;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:14;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;902:56:14;;;;;;;;-1:-1:-1;972:11:14;981:2;972:11;;:::i;:::-;;;844:150;;1069:184:10;1190:4;1242;1213:25;1226:5;1233:4;1213:12;:25::i;:::-;:33;;1069:184;-1:-1:-1;;;;1069:184:10:o;1455:167:15:-;1502:7;1521:13;1537:21;:11;918:14:2;;827:112;1537:21:15;1521:37;;1569:23;:11;1032:19:2;;1050:1;1032:19;;;945:123;1569:23:15;1610:5;1455:167;-1:-1:-1;1455:167:15:o;9049:311:4:-;9174:18;9180:2;9184:7;9174:5;:18::i;:::-;9223:54;9254:1;9258:2;9262:7;9271:5;9223:22;:54::i;:::-;9202:151;;;;-1:-1:-1;;;9202:151:4;;;;;;;:::i;12972:950::-;13122:4;-1:-1:-1;;;;;13142:13:4;;1450:19:0;:23;13138:778:4;;13193:170;;-1:-1:-1;;;13193:170:4;;-1:-1:-1;;;;;13193:36:4;;;;;:170;;665:10:1;;13285:4:4;;13311:7;;13340:5;;13193:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13193:170:4;;;;;;;;-1:-1:-1;;13193:170:4;;;;;;;;;;;;:::i;:::-;;;13173:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13542:13:4;;13538:312;;13584:106;;-1:-1:-1;;;13584:106:4;;;;;;;:::i;13538:312::-;13802:6;13796:13;13787:6;13783:2;13779:15;13772:38;13173:691;-1:-1:-1;;;;;;13425:51:4;-1:-1:-1;;;13425:51:4;;-1:-1:-1;13418:58:4;;13138:778;-1:-1:-1;13901:4:4;12972:950;;;;;;:::o;1604:662:10:-;1687:7;1729:4;1687:7;1743:488;1767:5;:12;1763:1;:16;1743:488;;;1800:20;1823:5;1829:1;1823:8;;;;;;;;:::i;:::-;;;;;;;1800:31;;1865:12;1849;:28;1845:376;;2340:13;2388:15;;;2423:4;2416:15;;;2469:4;2453:21;;1975:57;;1845:376;;;2340:13;2388:15;;;2423:4;2416:15;;;2469:4;2453:21;;2149:57;;1845:376;-1:-1:-1;1781:3:10;;;;:::i;:::-;;;;1743:488;;;-1:-1:-1;2247:12:10;1604:662;-1:-1:-1;;;1604:662:10:o;9682:427:4:-;-1:-1:-1;;;;;9761:16:4;;9753:61;;;;-1:-1:-1;;;9753:61:4;;22510:2:16;9753:61:4;;;22492:21:16;;;22529:18;;;22522:30;22588:34;22568:18;;;22561:62;22640:18;;9753:61:4;22308:356:16;9753:61:4;7734:4;7757:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7757:16:4;:30;9824:58;;;;-1:-1:-1;;;9824:58:4;;22871:2:16;9824:58:4;;;22853:21:16;22910:2;22890:18;;;22883:30;22949;22929:18;;;22922:58;22997:18;;9824:58:4;22669:352:16;9824:58:4;-1:-1:-1;;;;;9949:13:4;;;;;;:9;:13;;;;;:18;;9966:1;;9949:13;:18;;9966:1;;9949:18;:::i;:::-;;;;-1:-1:-1;;9977:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9977:21:4;-1:-1:-1;;;;;9977:21:4;;;;;;;;10014:33;;9977:16;;;10014:33;;9977:16;;10014:33;5552:21:11::1;5478:102:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:16;-1:-1:-1;;;;;;88:32:16;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;757:180;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:16;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:16;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:16:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:16;;1693:180;-1:-1:-1;1693:180:16:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:16;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:254;2332:6;2340;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;2432:29;2451:9;2432:29;:::i;:::-;2422:39;2508:2;2493:18;;;;2480:32;;-1:-1:-1;;;2264:254:16:o;2705:328::-;2782:6;2790;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;;2938:38;2972:2;2961:9;2957:18;2938:38;:::i;:::-;2928:48;;3023:2;3012:9;3008:18;2995:32;2985:42;;2705:328;;;;;:::o;3220:316::-;3297:6;3305;3313;3366:2;3354:9;3345:7;3341:23;3337:32;3334:52;;;3382:1;3379;3372:12;3334:52;-1:-1:-1;;3405:23:16;;;3475:2;3460:18;;3447:32;;-1:-1:-1;3526:2:16;3511:18;;;3498:32;;3220:316;-1:-1:-1;3220:316:16:o;3541:248::-;3609:6;3617;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;-1:-1:-1;;3709:23:16;;;3779:2;3764:18;;;3751:32;;-1:-1:-1;3541:248:16:o;3794:127::-;3855:10;3850:3;3846:20;3843:1;3836:31;3886:4;3883:1;3876:15;3910:4;3907:1;3900:15;3926:632;3991:5;4021:18;4062:2;4054:6;4051:14;4048:40;;;4068:18;;:::i;:::-;4143:2;4137:9;4111:2;4197:15;;-1:-1:-1;;4193:24:16;;;4219:2;4189:33;4185:42;4173:55;;;4243:18;;;4263:22;;;4240:46;4237:72;;;4289:18;;:::i;:::-;4329:10;4325:2;4318:22;4358:6;4349:15;;4388:6;4380;4373:22;4428:3;4419:6;4414:3;4410:16;4407:25;4404:45;;;4445:1;4442;4435:12;4404:45;4495:6;4490:3;4483:4;4475:6;4471:17;4458:44;4550:1;4543:4;4534:6;4526;4522:19;4518:30;4511:41;;;;3926:632;;;;;:::o;4563:451::-;4632:6;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;4741:9;4728:23;4774:18;4766:6;4763:30;4760:50;;;4806:1;4803;4796:12;4760:50;4829:22;;4882:4;4874:13;;4870:27;-1:-1:-1;4860:55:16;;4911:1;4908;4901:12;4860:55;4934:74;5000:7;4995:2;4982:16;4977:2;4973;4969:11;4934:74;:::i;5019:186::-;5078:6;5131:2;5119:9;5110:7;5106:23;5102:32;5099:52;;;5147:1;5144;5137:12;5099:52;5170:29;5189:9;5170:29;:::i;5395:254::-;5460:6;5468;5521:2;5509:9;5500:7;5496:23;5492:32;5489:52;;;5537:1;5534;5527:12;5489:52;5560:29;5579:9;5560:29;:::i;:::-;5550:39;;5608:35;5639:2;5628:9;5624:18;5608:35;:::i;:::-;5598:45;;5395:254;;;;;:::o;5654:667::-;5749:6;5757;5765;5773;5826:3;5814:9;5805:7;5801:23;5797:33;5794:53;;;5843:1;5840;5833:12;5794:53;5866:29;5885:9;5866:29;:::i;:::-;5856:39;;5914:38;5948:2;5937:9;5933:18;5914:38;:::i;:::-;5904:48;;5999:2;5988:9;5984:18;5971:32;5961:42;;6054:2;6043:9;6039:18;6026:32;6081:18;6073:6;6070:30;6067:50;;;6113:1;6110;6103:12;6067:50;6136:22;;6189:4;6181:13;;6177:27;-1:-1:-1;6167:55:16;;6218:1;6215;6208:12;6167:55;6241:74;6307:7;6302:2;6289:16;6284:2;6280;6276:11;6241:74;:::i;:::-;6231:84;;;5654:667;;;;;;;:::o;6326:683::-;6421:6;6429;6437;6490:2;6478:9;6469:7;6465:23;6461:32;6458:52;;;6506:1;6503;6496:12;6458:52;6542:9;6529:23;6519:33;;6603:2;6592:9;6588:18;6575:32;6626:18;6667:2;6659:6;6656:14;6653:34;;;6683:1;6680;6673:12;6653:34;6721:6;6710:9;6706:22;6696:32;;6766:7;6759:4;6755:2;6751:13;6747:27;6737:55;;6788:1;6785;6778:12;6737:55;6828:2;6815:16;6854:2;6846:6;6843:14;6840:34;;;6870:1;6867;6860:12;6840:34;6923:7;6918:2;6908:6;6905:1;6901:14;6897:2;6893:23;6889:32;6886:45;6883:65;;;6944:1;6941;6934:12;6883:65;6975:2;6971;6967:11;6957:21;;6997:6;6987:16;;;;;6326:683;;;;;:::o;7014:260::-;7082:6;7090;7143:2;7131:9;7122:7;7118:23;7114:32;7111:52;;;7159:1;7156;7149:12;7111:52;7182:29;7201:9;7182:29;:::i;:::-;7172:39;;7230:38;7264:2;7253:9;7249:18;7230:38;:::i;7279:356::-;7481:2;7463:21;;;7500:18;;;7493:30;7559:34;7554:2;7539:18;;7532:62;7626:2;7611:18;;7279:356::o;7640:380::-;7719:1;7715:12;;;;7762;;;7783:61;;7837:4;7829:6;7825:17;7815:27;;7783:61;7890:2;7882:6;7879:14;7859:18;7856:38;7853:161;;;7936:10;7931:3;7927:20;7924:1;7917:31;7971:4;7968:1;7961:15;7999:4;7996:1;7989:15;7853:161;;7640:380;;;:::o;9265:413::-;9467:2;9449:21;;;9506:2;9486:18;;;9479:30;9545:34;9540:2;9525:18;;9518:62;-1:-1:-1;;;9611:2:16;9596:18;;9589:47;9668:3;9653:19;;9265:413::o;10714:348::-;10916:2;10898:21;;;10955:2;10935:18;;;10928:30;10994:26;10989:2;10974:18;;10967:54;11053:2;11038:18;;10714:348::o;11419:397::-;11621:2;11603:21;;;11660:2;11640:18;;;11633:30;11699:34;11694:2;11679:18;;11672:62;-1:-1:-1;;;11765:2:16;11750:18;;11743:31;11806:3;11791:19;;11419:397::o;13231:127::-;13292:10;13287:3;13283:20;13280:1;13273:31;13323:4;13320:1;13313:15;13347:4;13344:1;13337:15;13363:168;13403:7;13469:1;13465;13461:6;13457:14;13454:1;13451:21;13446:1;13439:9;13432:17;13428:45;13425:71;;;13476:18;;:::i;:::-;-1:-1:-1;13516:9:16;;13363:168::o;13883:135::-;13922:3;-1:-1:-1;;13943:17:16;;13940:43;;;13963:18;;:::i;:::-;-1:-1:-1;14010:1:16;13999:13;;13883:135::o;14565:1527::-;14789:3;14827:6;14821:13;14853:4;14866:51;14910:6;14905:3;14900:2;14892:6;14888:15;14866:51;:::i;:::-;14980:13;;14939:16;;;;15002:55;14980:13;14939:16;15024:15;;;15002:55;:::i;:::-;15146:13;;15079:20;;;15119:1;;15206;15228:18;;;;15281;;;;15308:93;;15386:4;15376:8;15372:19;15360:31;;15308:93;15449:2;15439:8;15436:16;15416:18;15413:40;15410:167;;;-1:-1:-1;;;15476:33:16;;15532:4;15529:1;15522:15;15562:4;15483:3;15550:17;15410:167;15593:18;15620:110;;;;15744:1;15739:328;;;;15586:481;;15620:110;-1:-1:-1;;15655:24:16;;15641:39;;15700:20;;;;-1:-1:-1;15620:110:16;;15739:328;14512:1;14505:14;;;14549:4;14536:18;;15834:1;15848:169;15862:8;15859:1;15856:15;15848:169;;;15944:14;;15929:13;;;15922:37;15987:16;;;;15879:10;;15848:169;;;15852:3;;16048:8;16041:5;16037:20;16030:27;;15586:481;-1:-1:-1;16083:3:16;;14565:1527;-1:-1:-1;;;;;;;;;;;14565:1527:16:o;16853:128::-;16893:3;16924:1;16920:6;16917:1;16914:13;16911:39;;;16930:18;;:::i;:::-;-1:-1:-1;16966:9:16;;16853:128::o;17969:125::-;18009:4;18037:1;18034;18031:8;18028:34;;;18042:18;;:::i;:::-;-1:-1:-1;18079:9:16;;17969:125::o;20281:127::-;20342:10;20337:3;20333:20;20330:1;20323:31;20373:4;20370:1;20363:15;20397:4;20394:1;20387:15;20413:112;20445:1;20471;20461:35;;20476:18;;:::i;:::-;-1:-1:-1;20510:9:16;;20413:112::o;20884:414::-;21086:2;21068:21;;;21125:2;21105:18;;;21098:30;21164:34;21159:2;21144:18;;21137:62;-1:-1:-1;;;21230:2:16;21215:18;;21208:48;21288:3;21273:19;;20884:414::o;21303:120::-;21343:1;21369;21359:35;;21374:18;;:::i;:::-;-1:-1:-1;21408:9:16;;21303:120::o;21428:127::-;21489:10;21484:3;21480:20;21477:1;21470:31;21520:4;21517:1;21510:15;21544:4;21541:1;21534:15;21560:489;-1:-1:-1;;;;;21829:15:16;;;21811:34;;21881:15;;21876:2;21861:18;;21854:43;21928:2;21913:18;;21906:34;;;21976:3;21971:2;21956:18;;21949:31;;;21754:4;;21997:46;;22023:19;;22015:6;21997:46;:::i;:::-;21989:54;21560:489;-1:-1:-1;;;;;;21560:489:16:o;22054:249::-;22123:6;22176:2;22164:9;22155:7;22151:23;22147:32;22144:52;;;22192:1;22189;22182:12;22144:52;22224:9;22218:16;22243:30;22267:5;22243:30;:::i

Swarm Source

ipfs://7738e5814c19303fd52909b4fa272e15be63266025d4206f2a1ba9e715fd1b45
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.