ETH Price: $2,604.08 (-0.26%)

Token

Treasure Quest Club (TQC)
 

Overview

Max Total Supply

551 TQC

Holders

58

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 TQC
0x183036552039c46afca86ba85523b1645a9c0b60
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:
TreasureQuestClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-13
*/

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


// 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: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


// 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: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: erc721a/contracts/ERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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: TreasureQuestClub.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;





contract TreasureQuestClub is ERC721A, Ownable, Pausable {
    using Strings for uint256;

    string public baseURI;
    uint256 public mintRate = 0.1 ether;
    uint256 public MAX_SUPPLY = 7250;
    uint256 public MAX_MINTS_OG_WHITELIST = 20;
    bool public publicMint = false;

    // Two whitelist stages - og and regular
    // true - whitelist og mint; false - regular whitelist mint
    bool public whitelistOgMint = true;

    mapping(address => bool) private _whitelistOg;
    mapping(address => bool) private _whitelistRegular;

    constructor(string memory _initBaseURI) ERC721A("Treasure Quest Club", "TQC") {
        baseURI = _initBaseURI;
    }

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


    function mint(uint256 quantity) external payable whenNotPaused() {

    require(quantity > 0, "Quantity cannot be zero");
    uint256 totalMinted = totalSupply();

        if (publicMint == true) {

             require(totalMinted + quantity <= MAX_SUPPLY, "Not enough NFTs left to mint");
             
            if (msg.sender != owner()) {
                require(msg.value >= mintRate * quantity, "Insufficient funds sent");
            }

            _safeMint(msg.sender, quantity);

        } else {
            if (whitelistOgMint == true) {
                require(_whitelistOg[msg.sender] == true, "Not a whitelisted address");
                require(balanceOf(msg.sender) <= MAX_MINTS_OG_WHITELIST, "Not allowed to mint more than 20");
                require(quantity <= MAX_MINTS_OG_WHITELIST - balanceOf(msg.sender), "Not allowed to mint more than 20");

                require(msg.value >= mintRate * quantity, "Insufficient funds sent");
                _safeMint(msg.sender, quantity);
            } else {
                // Regular whitelist mint
                require(_whitelistRegular[msg.sender] == true, "Not a whitelisted address");
                require(totalMinted + quantity <= MAX_SUPPLY, "Not enough NFTs left to mint");

                require(msg.value >= mintRate * quantity, "Insufficient funds sent");
                _safeMint(msg.sender, quantity);
            }
        }
        
    }

    function _startTokenId() internal pure override returns (uint256) {
        return 1;
    }

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

        string memory currentBaseURI = _baseURI();

        return string(abi.encodePacked(currentBaseURI, tokenId.toString(), '.json'));

    }


    ///////////// Only owner

    function isWhitelistOg(address _address) public view onlyOwner() returns(bool) {
        return _whitelistOg[_address];
    }

    function isWhitelistRegular(address _address) public view onlyOwner() returns(bool) {
        return _whitelistRegular[_address];
    }

    function setPublicMint(bool state) public onlyOwner() {
        publicMint = state;
    }

    function setWhitelistOgMint(bool state) public onlyOwner() {
        whitelistOgMint = state;
    }

    function setWhitelistOg(address[] memory addresses) public onlyOwner() {
        for (uint256 i; i < addresses.length; i++) {
            _whitelistOg[addresses[i]] = true;
        }
    }

    function setWhitelistRegular(address[] memory addresses) public onlyOwner() {
        for (uint256 i; i < addresses.length; i++) {
            _whitelistRegular[addresses[i]] = true;
        }
    }

    function pause() public onlyOwner() {
        _pause();
    }

    function unpause() public onlyOwner() {
        _unpause();
    }

    function setCost(uint256 _newMintRate) public onlyOwner() {
        mintRate = _newMintRate;
    }

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

    function withdraw() public onlyOwner() {
        uint balance = address(this).balance;

        require(balance > 0, 'Balance is 0');

        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_MINTS_OG_WHITELIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelistOg","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelistRegular","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintRate","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelistOg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelistOgMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setWhitelistRegular","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistOgMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600a55611c52600b556014600c55600d805461ffff19166101001790553480156200003757600080fd5b50604051620025e0380380620025e08339810160408190526200005a9162000205565b604080518082018252601381527f547265617375726520517565737420436c75620000000000000000000000000060208083019182528351808501909452600384526254514360e81b908401528151919291620000ba916002916200015f565b508051620000d09060039060208401906200015f565b5050600160005550620000e3336200010d565b6008805460ff60a01b191690558051620001059060099060208401906200015f565b505062000334565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016d90620002e1565b90600052602060002090601f016020900481019282620001915760008555620001dc565b82601f10620001ac57805160ff1916838001178555620001dc565b82800160010185558215620001dc579182015b82811115620001dc578251825591602001919060010190620001bf565b50620001ea929150620001ee565b5090565b5b80821115620001ea5760008155600101620001ef565b600060208083850312156200021957600080fd5b82516001600160401b03808211156200023157600080fd5b818501915085601f8301126200024657600080fd5b8151818111156200025b576200025b6200031e565b604051601f8201601f19908116603f011681019083821181831017156200028657620002866200031e565b8160405282815288868487010111156200029f57600080fd5b600093505b82841015620002c35784840186015181850187015292850192620002a4565b82841115620002d55760008684830101525b98975050505050505050565b600181811c90821680620002f657607f821691505b602082108114156200031857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61229c80620003446000396000f3fe60806040526004361061020f5760003560e01c80636c0360eb11610118578063a22cb465116100a0578063d19abf3a1161006f578063d19abf3a146105bf578063e985e9c5146105df578063eeea31d514610628578063f2602f4a14610648578063f2fde38b1461065e57600080fd5b8063a22cb46514610549578063b88d4fde14610569578063c87b56dd14610589578063ca0dcf16146105a957600080fd5b80638456cb59116100e75780638456cb59146104ce5780638887ca22146104e35780638da5cb5b1461050357806395d89b4114610521578063a0712d681461053657600080fd5b80636c0360eb1461046557806370a082311461047a578063715018a61461049a5780637c24fc36146104af57600080fd5b80633ccfd60b1161019b57806344a0d68a1161016a57806344a0d68a146103c657806345358801146103e657806355f804b3146104065780635c975abb146104265780636352211e1461044557600080fd5b80633ccfd60b1461035c5780633f4ba83a1461037157806342842e0e146103865780634457f9d5146103a657600080fd5b80630e2d56cf116101e25780630e2d56cf146102c557806318160ddd146102e557806323b872dd1461030c57806326092b831461032c57806332cb6b0c1461034657600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611f43565b61067e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106d0565b6040516102409190612087565b34801561027757600080fd5b5061028b610286366004611fc6565b610762565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611e4a565b6107a6565b005b3480156102d157600080fd5b506102c36102e0366004611f28565b61082d565b3480156102f157600080fd5b5060015460005403600019015b604051908152602001610240565b34801561031857600080fd5b506102c3610327366004611d68565b610873565b34801561033857600080fd5b50600d546102349060ff1681565b34801561035257600080fd5b506102fe600b5481565b34801561036857600080fd5b506102c361087e565b34801561037d57600080fd5b506102c3610916565b34801561039257600080fd5b506102c36103a1366004611d68565b61094a565b3480156103b257600080fd5b506102346103c1366004611d13565b610965565b3480156103d257600080fd5b506102c36103e1366004611fc6565b6109b5565b3480156103f257600080fd5b506102c3610401366004611f28565b6109e4565b34801561041257600080fd5b506102c3610421366004611f7d565b610a28565b34801561043257600080fd5b50600854600160a01b900460ff16610234565b34801561045157600080fd5b5061028b610460366004611fc6565b610a65565b34801561047157600080fd5b5061025e610a77565b34801561048657600080fd5b506102fe610495366004611d13565b610b05565b3480156104a657600080fd5b506102c3610b54565b3480156104bb57600080fd5b50600d5461023490610100900460ff1681565b3480156104da57600080fd5b506102c3610b88565b3480156104ef57600080fd5b506102c36104fe366004611e74565b610bba565b34801561050f57600080fd5b506008546001600160a01b031661028b565b34801561052d57600080fd5b5061025e610c4c565b6102c3610544366004611fc6565b610c5b565b34801561055557600080fd5b506102c3610564366004611e20565b610ff2565b34801561057557600080fd5b506102c3610584366004611da4565b611088565b34801561059557600080fd5b5061025e6105a4366004611fc6565b6110d2565b3480156105b557600080fd5b506102fe600a5481565b3480156105cb57600080fd5b506102346105da366004611d13565b61117f565b3480156105eb57600080fd5b506102346105fa366004611d35565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561063457600080fd5b506102c3610643366004611e74565b6111cb565b34801561065457600080fd5b506102fe600c5481565b34801561066a57600080fd5b506102c3610679366004611d13565b61125d565b60006001600160e01b031982166380ac58cd60e01b14806106af57506001600160e01b03198216635b5e139f60e01b145b806106ca57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546106df9061218e565b80601f016020809104026020016040519081016040528092919081815260200182805461070b9061218e565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d826112f8565b61078a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107b182610a65565b9050806001600160a01b0316836001600160a01b031614156107e65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161461081d5761080081336105fa565b61081d576040516367d9dca160e11b815260040160405180910390fd5b610828838383611331565b505050565b6008546001600160a01b031633146108605760405162461bcd60e51b81526004016108579061209a565b60405180910390fd5b600d805460ff1916911515919091179055565b61082883838361138d565b6008546001600160a01b031633146108a85760405162461bcd60e51b81526004016108579061209a565b47806108e55760405162461bcd60e51b815260206004820152600c60248201526b042616c616e636520697320360a41b6044820152606401610857565b604051339082156108fc029083906000818181858888f19350505050158015610912573d6000803e3d6000fd5b5050565b6008546001600160a01b031633146109405760405162461bcd60e51b81526004016108579061209a565b61094861157c565b565b61082883838360405180602001604052806000815250611088565b6008546000906001600160a01b031633146109925760405162461bcd60e51b81526004016108579061209a565b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b6008546001600160a01b031633146109df5760405162461bcd60e51b81526004016108579061209a565b600a55565b6008546001600160a01b03163314610a0e5760405162461bcd60e51b81526004016108579061209a565b600d80549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610a525760405162461bcd60e51b81526004016108579061209a565b8051610912906009906020840190611bfb565b6000610a7082611619565b5192915050565b60098054610a849061218e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061218e565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b505050505081565b60006001600160a01b038216610b2e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610b7e5760405162461bcd60e51b81526004016108579061209a565b610948600061173d565b6008546001600160a01b03163314610bb25760405162461bcd60e51b81526004016108579061209a565b61094861178f565b6008546001600160a01b03163314610be45760405162461bcd60e51b81526004016108579061209a565b60005b8151811015610912576001600e6000848481518110610c0857610c08612224565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c44816121c9565b915050610be7565b6060600380546106df9061218e565b600854600160a01b900460ff1615610ca85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610857565b60008111610cf85760405162461bcd60e51b815260206004820152601760248201527f5175616e746974792063616e6e6f74206265207a65726f0000000000000000006044820152606401610857565b6000610d0d6001546000546000199190030190565b600d5490915060ff16151560011415610df457600b54610d2d8383612100565b1115610d7b5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e74000000006044820152606401610857565b6008546001600160a01b03163314610dea5781600a54610d9b919061212c565b341015610dea5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742066756e64732073656e740000000000000000006044820152606401610857565b6109123383611817565b600d5460ff61010090910416151560011415610f3757336000908152600e602052604090205460ff161515600114610e6a5760405162461bcd60e51b81526020600482015260196024820152784e6f7420612077686974656c6973746564206164647265737360381b6044820152606401610857565b600c54610e7633610b05565b1115610ec45760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e2032306044820152606401610857565b610ecd33610b05565b600c54610eda919061214b565b821115610f295760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e2032306044820152606401610857565b81600a54610d9b919061212c565b336000908152600f602052604090205460ff161515600114610f975760405162461bcd60e51b81526020600482015260196024820152784e6f7420612077686974656c6973746564206164647265737360381b6044820152606401610857565b600b54610fa48383612100565b1115610f295760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e74000000006044820152606401610857565b6001600160a01b03821633141561101c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61109384848461138d565b6001600160a01b0383163b156110cc576110af84848484611831565b6110cc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606110dd826112f8565b6111415760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610857565b600061114b611929565b90508061115784611938565b60405160200161116892919061200b565b604051602081830303815290604052915050919050565b6008546000906001600160a01b031633146111ac5760405162461bcd60e51b81526004016108579061209a565b506001600160a01b03166000908152600e602052604090205460ff1690565b6008546001600160a01b031633146111f55760405162461bcd60e51b81526004016108579061209a565b60005b8151811015610912576001600f600084848151811061121957611219612224565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611255816121c9565b9150506111f8565b6008546001600160a01b031633146112875760405162461bcd60e51b81526004016108579061209a565b6001600160a01b0381166112ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610857565b6112f58161173d565b50565b60008160011115801561130c575060005482105b80156106ca575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061139882611619565b9050836001600160a01b031681600001516001600160a01b0316146113cf5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806113ed57506113ed85336105fa565b806114085750336113fd84610762565b6001600160a01b0316145b90508061142857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661144f57604051633a954ecd60e21b815260040160405180910390fd5b61145b60008487611331565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611531576000548214611531578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600854600160a01b900460ff166115cc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610857565b6008805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b604080516060810182526000808252602082018190529181019190915281806001116117245760005481101561172457600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906117225780516001600160a01b0316156116b8579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff161515928101929092521561171d579392505050565b6116b8565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600854600160a01b900460ff16156117dc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610857565b6008805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115fc3390565b610912828260405180602001604052806000815250611a36565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061186690339089908890889060040161204a565b602060405180830381600087803b15801561188057600080fd5b505af19250505080156118b0575060408051601f3d908101601f191682019092526118ad91810190611f60565b60015b61190b573d8080156118de576040519150601f19603f3d011682016040523d82523d6000602084013e6118e3565b606091505b508051611903576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600980546106df9061218e565b60608161195c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119865780611970816121c9565b915061197f9050600a83612118565b9150611960565b60008167ffffffffffffffff8111156119a1576119a161223a565b6040519080825280601f01601f1916602001820160405280156119cb576020820181803683370190505b5090505b8415611921576119e060018361214b565b91506119ed600a866121e4565b6119f8906030612100565b60f81b818381518110611a0d57611a0d612224565b60200101906001600160f81b031916908160001a905350611a2f600a86612118565b94506119cf565b6000546001600160a01b038416611a5f57604051622e076360e81b815260040160405180910390fd5b82611a7d5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611ba6575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611b6f6000878480600101955087611831565b611b8c576040516368d2bf6b60e11b815260040160405180910390fd5b808210611b24578260005414611ba157600080fd5b611beb565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611ba7575b5060009081556110cc9085838684565b828054611c079061218e565b90600052602060002090601f016020900481019282611c295760008555611c6f565b82601f10611c4257805160ff1916838001178555611c6f565b82800160010185558215611c6f579182015b82811115611c6f578251825591602001919060010190611c54565b50611c7b929150611c7f565b5090565b5b80821115611c7b5760008155600101611c80565b600067ffffffffffffffff831115611cae57611cae61223a565b611cc1601f8401601f19166020016120cf565b9050828152838383011115611cd557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146109b057600080fd5b803580151581146109b057600080fd5b600060208284031215611d2557600080fd5b611d2e82611cec565b9392505050565b60008060408385031215611d4857600080fd5b611d5183611cec565b9150611d5f60208401611cec565b90509250929050565b600080600060608486031215611d7d57600080fd5b611d8684611cec565b9250611d9460208501611cec565b9150604084013590509250925092565b60008060008060808587031215611dba57600080fd5b611dc385611cec565b9350611dd160208601611cec565b925060408501359150606085013567ffffffffffffffff811115611df457600080fd5b8501601f81018713611e0557600080fd5b611e1487823560208401611c94565b91505092959194509250565b60008060408385031215611e3357600080fd5b611e3c83611cec565b9150611d5f60208401611d03565b60008060408385031215611e5d57600080fd5b611e6683611cec565b946020939093013593505050565b60006020808385031215611e8757600080fd5b823567ffffffffffffffff80821115611e9f57600080fd5b818501915085601f830112611eb357600080fd5b813581811115611ec557611ec561223a565b8060051b9150611ed68483016120cf565b8181528481019084860184860187018a1015611ef157600080fd5b600095505b83861015611f1b57611f0781611cec565b835260019590950194918601918601611ef6565b5098975050505050505050565b600060208284031215611f3a57600080fd5b611d2e82611d03565b600060208284031215611f5557600080fd5b8135611d2e81612250565b600060208284031215611f7257600080fd5b8151611d2e81612250565b600060208284031215611f8f57600080fd5b813567ffffffffffffffff811115611fa657600080fd5b8201601f81018413611fb757600080fd5b61192184823560208401611c94565b600060208284031215611fd857600080fd5b5035919050565b60008151808452611ff7816020860160208601612162565b601f01601f19169290920160200192915050565b6000835161201d818460208801612162565b835190830190612031818360208801612162565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207d90830184611fdf565b9695505050505050565b602081526000611d2e6020830184611fdf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156120f8576120f861223a565b604052919050565b60008219821115612113576121136121f8565b500190565b6000826121275761212761220e565b500490565b6000816000190483118215151615612146576121466121f8565b500290565b60008282101561215d5761215d6121f8565b500390565b60005b8381101561217d578181015183820152602001612165565b838111156110cc5750506000910152565b600181811c908216806121a257607f821691505b602082108114156121c357634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121dd576121dd6121f8565b5060010190565b6000826121f3576121f361220e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112f557600080fdfea26469706673582212203a682f5351c2482a1a05785c730c95c056543b98ce8c262ad84177e434660c7264736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d544a785648545036725179687359756756426d7a6d637244486176506675526e5a6f435461395145646461552f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636c0360eb11610118578063a22cb465116100a0578063d19abf3a1161006f578063d19abf3a146105bf578063e985e9c5146105df578063eeea31d514610628578063f2602f4a14610648578063f2fde38b1461065e57600080fd5b8063a22cb46514610549578063b88d4fde14610569578063c87b56dd14610589578063ca0dcf16146105a957600080fd5b80638456cb59116100e75780638456cb59146104ce5780638887ca22146104e35780638da5cb5b1461050357806395d89b4114610521578063a0712d681461053657600080fd5b80636c0360eb1461046557806370a082311461047a578063715018a61461049a5780637c24fc36146104af57600080fd5b80633ccfd60b1161019b57806344a0d68a1161016a57806344a0d68a146103c657806345358801146103e657806355f804b3146104065780635c975abb146104265780636352211e1461044557600080fd5b80633ccfd60b1461035c5780633f4ba83a1461037157806342842e0e146103865780634457f9d5146103a657600080fd5b80630e2d56cf116101e25780630e2d56cf146102c557806318160ddd146102e557806323b872dd1461030c57806326092b831461032c57806332cb6b0c1461034657600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a3575b600080fd5b34801561022057600080fd5b5061023461022f366004611f43565b61067e565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106d0565b6040516102409190612087565b34801561027757600080fd5b5061028b610286366004611fc6565b610762565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611e4a565b6107a6565b005b3480156102d157600080fd5b506102c36102e0366004611f28565b61082d565b3480156102f157600080fd5b5060015460005403600019015b604051908152602001610240565b34801561031857600080fd5b506102c3610327366004611d68565b610873565b34801561033857600080fd5b50600d546102349060ff1681565b34801561035257600080fd5b506102fe600b5481565b34801561036857600080fd5b506102c361087e565b34801561037d57600080fd5b506102c3610916565b34801561039257600080fd5b506102c36103a1366004611d68565b61094a565b3480156103b257600080fd5b506102346103c1366004611d13565b610965565b3480156103d257600080fd5b506102c36103e1366004611fc6565b6109b5565b3480156103f257600080fd5b506102c3610401366004611f28565b6109e4565b34801561041257600080fd5b506102c3610421366004611f7d565b610a28565b34801561043257600080fd5b50600854600160a01b900460ff16610234565b34801561045157600080fd5b5061028b610460366004611fc6565b610a65565b34801561047157600080fd5b5061025e610a77565b34801561048657600080fd5b506102fe610495366004611d13565b610b05565b3480156104a657600080fd5b506102c3610b54565b3480156104bb57600080fd5b50600d5461023490610100900460ff1681565b3480156104da57600080fd5b506102c3610b88565b3480156104ef57600080fd5b506102c36104fe366004611e74565b610bba565b34801561050f57600080fd5b506008546001600160a01b031661028b565b34801561052d57600080fd5b5061025e610c4c565b6102c3610544366004611fc6565b610c5b565b34801561055557600080fd5b506102c3610564366004611e20565b610ff2565b34801561057557600080fd5b506102c3610584366004611da4565b611088565b34801561059557600080fd5b5061025e6105a4366004611fc6565b6110d2565b3480156105b557600080fd5b506102fe600a5481565b3480156105cb57600080fd5b506102346105da366004611d13565b61117f565b3480156105eb57600080fd5b506102346105fa366004611d35565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561063457600080fd5b506102c3610643366004611e74565b6111cb565b34801561065457600080fd5b506102fe600c5481565b34801561066a57600080fd5b506102c3610679366004611d13565b61125d565b60006001600160e01b031982166380ac58cd60e01b14806106af57506001600160e01b03198216635b5e139f60e01b145b806106ca57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546106df9061218e565b80601f016020809104026020016040519081016040528092919081815260200182805461070b9061218e565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d826112f8565b61078a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107b182610a65565b9050806001600160a01b0316836001600160a01b031614156107e65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161461081d5761080081336105fa565b61081d576040516367d9dca160e11b815260040160405180910390fd5b610828838383611331565b505050565b6008546001600160a01b031633146108605760405162461bcd60e51b81526004016108579061209a565b60405180910390fd5b600d805460ff1916911515919091179055565b61082883838361138d565b6008546001600160a01b031633146108a85760405162461bcd60e51b81526004016108579061209a565b47806108e55760405162461bcd60e51b815260206004820152600c60248201526b042616c616e636520697320360a41b6044820152606401610857565b604051339082156108fc029083906000818181858888f19350505050158015610912573d6000803e3d6000fd5b5050565b6008546001600160a01b031633146109405760405162461bcd60e51b81526004016108579061209a565b61094861157c565b565b61082883838360405180602001604052806000815250611088565b6008546000906001600160a01b031633146109925760405162461bcd60e51b81526004016108579061209a565b506001600160a01b0381166000908152600f602052604090205460ff165b919050565b6008546001600160a01b031633146109df5760405162461bcd60e51b81526004016108579061209a565b600a55565b6008546001600160a01b03163314610a0e5760405162461bcd60e51b81526004016108579061209a565b600d80549115156101000261ff0019909216919091179055565b6008546001600160a01b03163314610a525760405162461bcd60e51b81526004016108579061209a565b8051610912906009906020840190611bfb565b6000610a7082611619565b5192915050565b60098054610a849061218e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab09061218e565b8015610afd5780601f10610ad257610100808354040283529160200191610afd565b820191906000526020600020905b815481529060010190602001808311610ae057829003601f168201915b505050505081565b60006001600160a01b038216610b2e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610b7e5760405162461bcd60e51b81526004016108579061209a565b610948600061173d565b6008546001600160a01b03163314610bb25760405162461bcd60e51b81526004016108579061209a565b61094861178f565b6008546001600160a01b03163314610be45760405162461bcd60e51b81526004016108579061209a565b60005b8151811015610912576001600e6000848481518110610c0857610c08612224565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c44816121c9565b915050610be7565b6060600380546106df9061218e565b600854600160a01b900460ff1615610ca85760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610857565b60008111610cf85760405162461bcd60e51b815260206004820152601760248201527f5175616e746974792063616e6e6f74206265207a65726f0000000000000000006044820152606401610857565b6000610d0d6001546000546000199190030190565b600d5490915060ff16151560011415610df457600b54610d2d8383612100565b1115610d7b5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e74000000006044820152606401610857565b6008546001600160a01b03163314610dea5781600a54610d9b919061212c565b341015610dea5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742066756e64732073656e740000000000000000006044820152606401610857565b6109123383611817565b600d5460ff61010090910416151560011415610f3757336000908152600e602052604090205460ff161515600114610e6a5760405162461bcd60e51b81526020600482015260196024820152784e6f7420612077686974656c6973746564206164647265737360381b6044820152606401610857565b600c54610e7633610b05565b1115610ec45760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e2032306044820152606401610857565b610ecd33610b05565b600c54610eda919061214b565b821115610f295760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77656420746f206d696e74206d6f7265207468616e2032306044820152606401610857565b81600a54610d9b919061212c565b336000908152600f602052604090205460ff161515600114610f975760405162461bcd60e51b81526020600482015260196024820152784e6f7420612077686974656c6973746564206164647265737360381b6044820152606401610857565b600b54610fa48383612100565b1115610f295760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768204e465473206c65667420746f206d696e74000000006044820152606401610857565b6001600160a01b03821633141561101c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61109384848461138d565b6001600160a01b0383163b156110cc576110af84848484611831565b6110cc576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606110dd826112f8565b6111415760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610857565b600061114b611929565b90508061115784611938565b60405160200161116892919061200b565b604051602081830303815290604052915050919050565b6008546000906001600160a01b031633146111ac5760405162461bcd60e51b81526004016108579061209a565b506001600160a01b03166000908152600e602052604090205460ff1690565b6008546001600160a01b031633146111f55760405162461bcd60e51b81526004016108579061209a565b60005b8151811015610912576001600f600084848151811061121957611219612224565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611255816121c9565b9150506111f8565b6008546001600160a01b031633146112875760405162461bcd60e51b81526004016108579061209a565b6001600160a01b0381166112ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610857565b6112f58161173d565b50565b60008160011115801561130c575060005482105b80156106ca575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061139882611619565b9050836001600160a01b031681600001516001600160a01b0316146113cf5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806113ed57506113ed85336105fa565b806114085750336113fd84610762565b6001600160a01b0316145b90508061142857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661144f57604051633a954ecd60e21b815260040160405180910390fd5b61145b60008487611331565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611531576000548214611531578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600854600160a01b900460ff166115cc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610857565b6008805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b604080516060810182526000808252602082018190529181019190915281806001116117245760005481101561172457600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906117225780516001600160a01b0316156116b8579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff161515928101929092521561171d579392505050565b6116b8565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600854600160a01b900460ff16156117dc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610857565b6008805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115fc3390565b610912828260405180602001604052806000815250611a36565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061186690339089908890889060040161204a565b602060405180830381600087803b15801561188057600080fd5b505af19250505080156118b0575060408051601f3d908101601f191682019092526118ad91810190611f60565b60015b61190b573d8080156118de576040519150601f19603f3d011682016040523d82523d6000602084013e6118e3565b606091505b508051611903576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600980546106df9061218e565b60608161195c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119865780611970816121c9565b915061197f9050600a83612118565b9150611960565b60008167ffffffffffffffff8111156119a1576119a161223a565b6040519080825280601f01601f1916602001820160405280156119cb576020820181803683370190505b5090505b8415611921576119e060018361214b565b91506119ed600a866121e4565b6119f8906030612100565b60f81b818381518110611a0d57611a0d612224565b60200101906001600160f81b031916908160001a905350611a2f600a86612118565b94506119cf565b6000546001600160a01b038416611a5f57604051622e076360e81b815260040160405180910390fd5b82611a7d5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611ba6575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611b6f6000878480600101955087611831565b611b8c576040516368d2bf6b60e11b815260040160405180910390fd5b808210611b24578260005414611ba157600080fd5b611beb565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611ba7575b5060009081556110cc9085838684565b828054611c079061218e565b90600052602060002090601f016020900481019282611c295760008555611c6f565b82601f10611c4257805160ff1916838001178555611c6f565b82800160010185558215611c6f579182015b82811115611c6f578251825591602001919060010190611c54565b50611c7b929150611c7f565b5090565b5b80821115611c7b5760008155600101611c80565b600067ffffffffffffffff831115611cae57611cae61223a565b611cc1601f8401601f19166020016120cf565b9050828152838383011115611cd557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146109b057600080fd5b803580151581146109b057600080fd5b600060208284031215611d2557600080fd5b611d2e82611cec565b9392505050565b60008060408385031215611d4857600080fd5b611d5183611cec565b9150611d5f60208401611cec565b90509250929050565b600080600060608486031215611d7d57600080fd5b611d8684611cec565b9250611d9460208501611cec565b9150604084013590509250925092565b60008060008060808587031215611dba57600080fd5b611dc385611cec565b9350611dd160208601611cec565b925060408501359150606085013567ffffffffffffffff811115611df457600080fd5b8501601f81018713611e0557600080fd5b611e1487823560208401611c94565b91505092959194509250565b60008060408385031215611e3357600080fd5b611e3c83611cec565b9150611d5f60208401611d03565b60008060408385031215611e5d57600080fd5b611e6683611cec565b946020939093013593505050565b60006020808385031215611e8757600080fd5b823567ffffffffffffffff80821115611e9f57600080fd5b818501915085601f830112611eb357600080fd5b813581811115611ec557611ec561223a565b8060051b9150611ed68483016120cf565b8181528481019084860184860187018a1015611ef157600080fd5b600095505b83861015611f1b57611f0781611cec565b835260019590950194918601918601611ef6565b5098975050505050505050565b600060208284031215611f3a57600080fd5b611d2e82611d03565b600060208284031215611f5557600080fd5b8135611d2e81612250565b600060208284031215611f7257600080fd5b8151611d2e81612250565b600060208284031215611f8f57600080fd5b813567ffffffffffffffff811115611fa657600080fd5b8201601f81018413611fb757600080fd5b61192184823560208401611c94565b600060208284031215611fd857600080fd5b5035919050565b60008151808452611ff7816020860160208601612162565b601f01601f19169290920160200192915050565b6000835161201d818460208801612162565b835190830190612031818360208801612162565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061207d90830184611fdf565b9695505050505050565b602081526000611d2e6020830184611fdf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156120f8576120f861223a565b604052919050565b60008219821115612113576121136121f8565b500190565b6000826121275761212761220e565b500490565b6000816000190483118215151615612146576121466121f8565b500290565b60008282101561215d5761215d6121f8565b500390565b60005b8381101561217d578181015183820152602001612165565b838111156110cc5750506000910152565b600181811c908216806121a257607f821691505b602082108114156121c357634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156121dd576121dd6121f8565b5060010190565b6000826121f3576121f361220e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112f557600080fdfea26469706673582212203a682f5351c2482a1a05785c730c95c056543b98ce8c262ad84177e434660c7264736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d544a785648545036725179687359756756426d7a6d637244486176506675526e5a6f435461395145646461552f00000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d544a78564854503672
Arg [3] : 5179687359756756426d7a6d637244486176506675526e5a6f43546139514564
Arg [4] : 6461552f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49780:4212:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26015:305;;;;;;;;;;-1:-1:-1;26015:305:0;;;;;:::i;:::-;;:::i;:::-;;;6813:14:1;;6806:22;6788:41;;6776:2;6761:18;26015:305:0;;;;;;;;29130:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30634:204::-;;;;;;;;;;-1:-1:-1;30634:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6111:32:1;;;6093:51;;6081:2;6066:18;30634:204:0;5947:203:1;30196:372:0;;;;;;;;;;-1:-1:-1;30196:372:0;;;;;:::i;:::-;;:::i;:::-;;52810:91;;;;;;;;;;-1:-1:-1;52810:91:0;;;;;:::i;:::-;;:::i;25255:312::-;;;;;;;;;;-1:-1:-1;52151:1:0;25518:12;25308:7;25502:13;:28;-1:-1:-1;;25502:46:0;25255:312;;;11205:25:1;;;11193:2;11178:18;25255:312:0;11059:177:1;31499:170:0;;;;;;;;;;-1:-1:-1;31499:170:0;;;;;:::i;:::-;;:::i;50036:30::-;;;;;;;;;;-1:-1:-1;50036:30:0;;;;;;;;49948:32;;;;;;;;;;;;;;;;53796:193;;;;;;;;;;;;;:::i;53499:67::-;;;;;;;;;;;;;:::i;31740:185::-;;;;;;;;;;-1:-1:-1;31740:185:0;;;;;:::i;:::-;;:::i;52665:137::-;;;;;;;;;;-1:-1:-1;52665:137:0;;;;;:::i;:::-;;:::i;53574:100::-;;;;;;;;;;-1:-1:-1;53574:100:0;;;;;:::i;:::-;;:::i;52909:101::-;;;;;;;;;;-1:-1:-1;52909:101:0;;;;;:::i;:::-;;:::i;53682:106::-;;;;;;;;;;-1:-1:-1;53682:106:0;;;;;:::i;:::-;;:::i;45961:86::-;;;;;;;;;;-1:-1:-1;46032:7:0;;-1:-1:-1;;;46032:7:0;;;;45961:86;;28938:125;;;;;;;;;;-1:-1:-1;28938:125:0;;;;;:::i;:::-;;:::i;49878:21::-;;;;;;;;;;;;;:::i;26384:206::-;;;;;;;;;;-1:-1:-1;26384:206:0;;;;;:::i;:::-;;:::i;48860:103::-;;;;;;;;;;;;;:::i;50186:34::-;;;;;;;;;;-1:-1:-1;50186:34:0;;;;;;;;;;;53428:63;;;;;;;;;;;;;:::i;53018:192::-;;;;;;;;;;-1:-1:-1;53018:192:0;;;;;:::i;:::-;;:::i;48209:87::-;;;;;;;;;;-1:-1:-1;48282:6:0;;-1:-1:-1;;;;;48282:6:0;48209:87;;29299:104;;;;;;;;;;;;;:::i;50593:1466::-;;;;;;:::i;:::-;;:::i;30910:287::-;;;;;;;;;;-1:-1:-1;30910:287:0;;;;;:::i;:::-;;:::i;31996:370::-;;;;;;;;;;-1:-1:-1;31996:370:0;;;;;:::i;:::-;;:::i;52168:320::-;;;;;;;;;;-1:-1:-1;52168:320:0;;;;;:::i;:::-;;:::i;49906:35::-;;;;;;;;;;;;;;;;52530:127;;;;;;;;;;-1:-1:-1;52530:127:0;;;;;:::i;:::-;;:::i;31268:164::-;;;;;;;;;;-1:-1:-1;31268:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31389:25:0;;;31365:4;31389:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31268:164;53218:202;;;;;;;;;;-1:-1:-1;53218:202:0;;;;;:::i;:::-;;:::i;49987:42::-;;;;;;;;;;;;;;;;49118:201;;;;;;;;;;-1:-1:-1;49118:201:0;;;;;:::i;:::-;;:::i;26015:305::-;26117:4;-1:-1:-1;;;;;;26154:40:0;;-1:-1:-1;;;26154:40:0;;:105;;-1:-1:-1;;;;;;;26211:48:0;;-1:-1:-1;;;26211:48:0;26154:105;:158;;;-1:-1:-1;;;;;;;;;;13572:40:0;;;26276:36;26134:178;26015:305;-1:-1:-1;;26015:305:0:o;29130:100::-;29184:13;29217:5;29210:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29130:100;:::o;30634:204::-;30702:7;30727:16;30735:7;30727;:16::i;:::-;30722:64;;30752:34;;-1:-1:-1;;;30752:34:0;;;;;;;;;;;30722:64;-1:-1:-1;30806:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30806:24:0;;30634:204::o;30196:372::-;30269:13;30285:24;30301:7;30285:15;:24::i;:::-;30269:40;;30330:5;-1:-1:-1;;;;;30324:11:0;:2;-1:-1:-1;;;;;30324:11:0;;30320:48;;;30344:24;;-1:-1:-1;;;30344:24:0;;;;;;;;;;;30320:48;23032:10;-1:-1:-1;;;;;30385:21:0;;;30381:139;;30412:37;30429:5;23032:10;31268:164;:::i;30412:37::-;30408:112;;30473:35;;-1:-1:-1;;;30473:35:0;;;;;;;;;;;30408:112;30532:28;30541:2;30545:7;30554:5;30532:8;:28::i;:::-;30258:310;30196:372;;:::o;52810:91::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;;;;;;;;;52875:10:::1;:18:::0;;-1:-1:-1;;52875:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52810:91::o;31499:170::-;31633:28;31643:4;31649:2;31653:7;31633:9;:28::i;53796:193::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53861:21:::1;53903:11:::0;53895:36:::1;;;::::0;-1:-1:-1;;;53895:36:0;;9791:2:1;53895:36:0::1;::::0;::::1;9773:21:1::0;9830:2;9810:18;;;9803:30;-1:-1:-1;;;9849:18:1;;;9842:42;9901:18;;53895:36:0::1;9589:336:1::0;53895:36:0::1;53944:37;::::0;53952:10:::1;::::0;53944:37;::::1;;;::::0;53973:7;;53944:37:::1;::::0;;;53973:7;53952:10;53944:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;53835:154;53796:193::o:0;53499:67::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53548:10:::1;:8;:10::i;:::-;53499:67::o:0;31740:185::-;31878:39;31895:4;31901:2;31905:7;31878:39;;;;;;;;;;;;:16;:39::i;52665:137::-;48282:6;;52743:4;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;52767:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;::::1;;48500:1;52665:137:::0;;;:::o;53574:100::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53643:8:::1;:23:::0;53574:100::o;52909:101::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;52979:15:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;52979:23:0;;::::1;::::0;;;::::1;::::0;;52909:101::o;53682:106::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53759:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;28938:125::-:0;29002:7;29029:21;29042:7;29029:12;:21::i;:::-;:26;;28938:125;-1:-1:-1;;28938:125:0:o;49878:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26384:206::-;26448:7;-1:-1:-1;;;;;26472:19:0;;26468:60;;26500:28;;-1:-1:-1;;;26500:28:0;;;;;;;;;;;26468:60;-1:-1:-1;;;;;;26554:19:0;;;;;:12;:19;;;;;:27;;;;26384:206::o;48860:103::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;48925:30:::1;48952:1;48925:18;:30::i;53428:63::-:0;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53475:8:::1;:6;:8::i;53018:192::-:0;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53105:9:::1;53100:103;53120:9;:16;53116:1;:20;53100:103;;;53187:4;53158:12;:26;53171:9;53181:1;53171:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;53158:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;53158:26:0;:33;;-1:-1:-1;;53158:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53138:3;::::1;::::0;::::1;:::i;:::-;;;;53100:103;;29299:104:::0;29355:13;29388:7;29381:14;;;;;:::i;50593:1466::-;46032:7;;-1:-1:-1;;;46032:7:0;;;;46286:9;46278:38;;;;-1:-1:-1;;;46278:38:0;;9092:2:1;46278:38:0;;;9074:21:1;9131:2;9111:18;;;9104:30;-1:-1:-1;;;9150:18:1;;;9143:46;9206:18;;46278:38:0;8890:340:1;46278:38:0;50686:1:::1;50675:8;:12;50667:48;;;::::0;-1:-1:-1;;;50667:48:0;;8740:2:1;50667:48:0::1;::::0;::::1;8722:21:1::0;8779:2;8759:18;;;8752:30;8818:25;8798:18;;;8791:53;8861:18;;50667:48:0::1;8538:347:1::0;50667:48:0::1;50722:19;50744:13;52151:1:::0;25518:12;25308:7;25502:13;-1:-1:-1;;25502:28:0;;;:46;;25255:312;50744:13:::1;50774:10;::::0;50722:35;;-1:-1:-1;50774:10:0::1;;:18;;:10:::0;:18:::1;50770:1272;;;50846:10;::::0;50820:22:::1;50834:8:::0;50820:11;:22:::1;:::i;:::-;:36;;50812:77;;;::::0;-1:-1:-1;;;50812:77:0;;8383:2:1;50812:77:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;8461;8441:18;;;8434:58;8509:18;;50812:77:0::1;8181:352:1::0;50812:77:0::1;48282:6:::0;;-1:-1:-1;;;;;48282:6:0;50923:10:::1;:21;50919:130;;50997:8;50986;;:19;;;;:::i;:::-;50973:9;:32;;50965:68;;;::::0;-1:-1:-1;;;50965:68:0;;10909:2:1;50965:68:0::1;::::0;::::1;10891:21:1::0;10948:2;10928:18;;;10921:30;10987:25;10967:18;;;10960:53;11030:18;;50965:68:0::1;10707:347:1::0;50965:68:0::1;51065:31;51075:10;51087:8;51065:9;:31::i;50770:1272::-;51135:15;::::0;::::1;;::::0;;::::1;;:23;;:15;:23;51131:900;;;51200:10;51187:24;::::0;;;:12:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32:::1;51179:70;;;::::0;-1:-1:-1;;;51179:70:0;;9437:2:1;51179:70:0::1;::::0;::::1;9419:21:1::0;9476:2;9456:18;;;9449:30;-1:-1:-1;;;9495:18:1;;;9488:55;9560:18;;51179:70:0::1;9235:349:1::0;51179:70:0::1;51301:22;;51276:21;51286:10;51276:9;:21::i;:::-;:47;;51268:92;;;::::0;-1:-1:-1;;;51268:92:0;;7266:2:1;51268:92:0::1;::::0;::::1;7248:21:1::0;;;7285:18;;;7278:30;7344:34;7324:18;;;7317:62;7396:18;;51268:92:0::1;7064:356:1::0;51268:92:0::1;51424:21;51434:10;51424:9;:21::i;:::-;51399:22;;:46;;;;:::i;:::-;51387:8;:58;;51379:103;;;::::0;-1:-1:-1;;;51379:103:0;;7266:2:1;51379:103:0::1;::::0;::::1;7248:21:1::0;;;7285:18;;;7278:30;7344:34;7324:18;;;7317:62;7396:18;;51379:103:0::1;7064:356:1::0;51379:103:0::1;51535:8;51524;;:19;;;;:::i;51131:900::-;51731:10;51713:29;::::0;;;:17:::1;:29;::::0;;;;;::::1;;:37;;:29:::0;:37:::1;51705:75;;;::::0;-1:-1:-1;;;51705:75:0;;9437:2:1;51705:75:0::1;::::0;::::1;9419:21:1::0;9476:2;9456:18;;;9449:30;-1:-1:-1;;;9495:18:1;;;9488:55;9560:18;;51705:75:0::1;9235:349:1::0;51705:75:0::1;51833:10;::::0;51807:22:::1;51821:8:::0;51807:11;:22:::1;:::i;:::-;:36;;51799:77;;;::::0;-1:-1:-1;;;51799:77:0;;8383:2:1;51799:77:0::1;::::0;::::1;8365:21:1::0;8422:2;8402:18;;;8395:30;8461;8441:18;;;8434:58;8509:18;;51799:77:0::1;8181:352:1::0;30910:287:0;-1:-1:-1;;;;;31009:24:0;;23032:10;31009:24;31005:54;;;31042:17;;-1:-1:-1;;;31042:17:0;;;;;;;;;;;31005:54;23032:10;31072:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31072:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31072:53:0;;;;;;;;;;31141:48;;6788:41:1;;;31072:42:0;;23032:10;31141:48;;6761:18:1;31141:48:0;;;;;;;30910:287;;:::o;31996:370::-;32163:28;32173:4;32179:2;32183:7;32163:9;:28::i;:::-;-1:-1:-1;;;;;32206:13:0;;3652:19;:23;32202:157;;32227:56;32258:4;32264:2;32268:7;32277:5;32227:30;:56::i;:::-;32223:136;;32307:40;;-1:-1:-1;;;32307:40:0;;;;;;;;;;;32223:136;31996:370;;;;:::o;52168:320::-;52233:13;52267:16;52275:7;52267;:16::i;:::-;52259:76;;;;-1:-1:-1;;;52259:76:0;;10493:2:1;52259:76:0;;;10475:21:1;10532:2;10512:18;;;10505:30;10571:34;10551:18;;;10544:62;-1:-1:-1;;;10622:18:1;;;10615:45;10677:19;;52259:76:0;10291:411:1;52259:76:0;52348:28;52379:10;:8;:10::i;:::-;52348:41;;52433:14;52449:18;:7;:16;:18::i;:::-;52416:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52402:76;;;52168:320;;;:::o;52530:127::-;48282:6;;52603:4;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;52627:22:0::1;;::::0;;;:12:::1;:22;::::0;;;;;::::1;;::::0;52530:127::o;53218:202::-;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;53310:9:::1;53305:108;53325:9;:16;53321:1;:20;53305:108;;;53397:4;53363:17;:31;53381:9;53391:1;53381:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;53363:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;53363:31:0;:38;;-1:-1:-1;;53363:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53343:3;::::1;::::0;::::1;:::i;:::-;;;;53305:108;;49118:201:::0;48282:6;;-1:-1:-1;;;;;48282:6:0;23032:10;48429:23;48421:68;;;;-1:-1:-1;;;48421:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49207:22:0;::::1;49199:73;;;::::0;-1:-1:-1;;;49199:73:0;;7976:2:1;49199:73:0::1;::::0;::::1;7958:21:1::0;8015:2;7995:18;;;7988:30;8054:34;8034:18;;;8027:62;-1:-1:-1;;;8105:18:1;;;8098:36;8151:19;;49199:73:0::1;7774:402:1::0;49199:73:0::1;49283:28;49302:8;49283:18;:28::i;:::-;49118:201:::0;:::o;32621:174::-;32678:4;32721:7;52151:1;32702:26;;:53;;;;;32742:13;;32732:7;:23;32702:53;:85;;;;-1:-1:-1;;32760:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;32760:27:0;;;;32759:28;;32621:174::o;41843:196::-;41958:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41958:29:0;-1:-1:-1;;;;;41958:29:0;;;;;;;;;42003:28;;41958:24;;42003:28;;;;;;;41843:196;;;:::o;36791:2130::-;36906:35;36944:21;36957:7;36944:12;:21::i;:::-;36906:59;;37004:4;-1:-1:-1;;;;;36982:26:0;:13;:18;;;-1:-1:-1;;;;;36982:26:0;;36978:67;;37017:28;;-1:-1:-1;;;37017:28:0;;;;;;;;;;;36978:67;37058:22;23032:10;-1:-1:-1;;;;;37084:20:0;;;;:73;;-1:-1:-1;37121:36:0;37138:4;23032:10;31268:164;:::i;37121:36::-;37084:126;;;-1:-1:-1;23032:10:0;37174:20;37186:7;37174:11;:20::i;:::-;-1:-1:-1;;;;;37174:36:0;;37084:126;37058:153;;37229:17;37224:66;;37255:35;;-1:-1:-1;;;37255:35:0;;;;;;;;;;;37224:66;-1:-1:-1;;;;;37305:16:0;;37301:52;;37330:23;;-1:-1:-1;;;37330:23:0;;;;;;;;;;;37301:52;37474:35;37491:1;37495:7;37504:4;37474:8;:35::i;:::-;-1:-1:-1;;;;;37805:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;37805:31:0;;;;;;;-1:-1:-1;;37805:31:0;;;;;;;37851:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37851:29:0;;;;;;;;;;;37931:20;;;:11;:20;;;;;;37966:18;;-1:-1:-1;;;;;;37999:49:0;;;;-1:-1:-1;;;38032:15:0;37999:49;;;;;;;;;;38322:11;;38382:24;;;;;38425:13;;37931:20;;38382:24;;38425:13;38421:384;;38635:13;;38620:11;:28;38616:174;;38673:20;;38742:28;;;;38716:54;;-1:-1:-1;;;38716:54:0;-1:-1:-1;;;;;;38716:54:0;;;-1:-1:-1;;;;;38673:20:0;;38716:54;;;;38616:174;37780:1036;;;38852:7;38848:2;-1:-1:-1;;;;;38833:27:0;38842:4;-1:-1:-1;;;;;38833:27:0;;;;;;;;;;;36895:2026;;36791:2130;;;:::o;47020:120::-;46032:7;;-1:-1:-1;;;46032:7:0;;;;46556:41;;;;-1:-1:-1;;;46556:41:0;;7627:2:1;46556:41:0;;;7609:21:1;7666:2;7646:18;;;7639:30;-1:-1:-1;;;7685:18:1;;;7678:50;7745:18;;46556:41:0;7425:344:1;46556:41:0;47079:7:::1;:15:::0;;-1:-1:-1;;;;47079:15:0::1;::::0;;47110:22:::1;23032:10:::0;47119:12:::1;47110:22;::::0;-1:-1:-1;;;;;6111:32:1;;;6093:51;;6081:2;6066:18;47110:22:0::1;;;;;;;47020:120::o:0;27765:1111::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;27876:7:0;;52151:1;27925:23;27921:888;;27961:13;;27954:4;:20;27950:859;;;27995:31;28029:17;;;:11;:17;;;;;;;;;27995:51;;;;;;;;;-1:-1:-1;;;;;27995:51:0;;;;-1:-1:-1;;;27995:51:0;;;;;;;;;;;-1:-1:-1;;;27995:51:0;;;;;;;;;;;;;;28065:729;;28115:14;;-1:-1:-1;;;;;28115:28:0;;28111:101;;28179:9;27765:1111;-1:-1:-1;;;27765:1111:0:o;28111:101::-;-1:-1:-1;;;28554:6:0;28599:17;;;;:11;:17;;;;;;;;;28587:29;;;;;;;;;-1:-1:-1;;;;;28587:29:0;;;;;-1:-1:-1;;;28587:29:0;;;;;;;;;;;-1:-1:-1;;;28587:29:0;;;;;;;;;;;;;28647:28;28643:109;;28715:9;27765:1111;-1:-1:-1;;;27765:1111:0:o;28643:109::-;28514:261;;;27976:833;27950:859;28837:31;;-1:-1:-1;;;28837:31:0;;;;;;;;;;;49479:191;49572:6;;;-1:-1:-1;;;;;49589:17:0;;;-1:-1:-1;;;;;;49589:17:0;;;;;;;49622:40;;49572:6;;;49589:17;49572:6;;49622:40;;49553:16;;49622:40;49542:128;49479:191;:::o;46761:118::-;46032:7;;-1:-1:-1;;;46032:7:0;;;;46286:9;46278:38;;;;-1:-1:-1;;;46278:38:0;;9092:2:1;46278:38:0;;;9074:21:1;9131:2;9111:18;;;9104:30;-1:-1:-1;;;9150:18:1;;;9143:46;9206:18;;46278:38:0;8890:340:1;46278:38:0;46821:7:::1;:14:::0;;-1:-1:-1;;;;46821:14:0::1;-1:-1:-1::0;;;46821:14:0::1;::::0;;46851:20:::1;46858:12;23032:10:::0;;22952:98;32879:104;32948:27;32958:2;32962:8;32948:27;;;;;;;;;;;;:9;:27::i;42531:667::-;42715:72;;-1:-1:-1;;;42715:72:0;;42694:4;;-1:-1:-1;;;;;42715:36:0;;;;;:72;;23032:10;;42766:4;;42772:7;;42781:5;;42715:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42715:72:0;;;;;;;;-1:-1:-1;;42715:72:0;;;;;;;;;;;;:::i;:::-;;;42711:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42949:13:0;;42945:235;;42995:40;;-1:-1:-1;;;42995:40:0;;;;;;;;;;;42945:235;43138:6;43132:13;43123:6;43119:2;43115:15;43108:38;42711:480;-1:-1:-1;;;;;;42834:55:0;-1:-1:-1;;;42834:55:0;;-1:-1:-1;42711:480:0;42531:667;;;;;;:::o;50483:100::-;50535:13;50568:7;50561:14;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;33356:1749;33479:20;33502:13;-1:-1:-1;;;;;33530:16:0;;33526:48;;33555:19;;-1:-1:-1;;;33555:19:0;;;;;;;;;;;33526:48;33589:13;33585:44;;33611:18;;-1:-1:-1;;;33611:18:0;;;;;;;;;;;33585:44;-1:-1:-1;;;;;33980:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;34039:49:0;;33980:44;;;;;;;;34039:49;;;;-1:-1:-1;;33980:44:0;;;;;;34039:49;;;;;;;;;;;;;;;;34105:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;34155:66:0;;;-1:-1:-1;;;34205:15:0;34155:66;;;;;;;;;;;;;34105:25;;34302:23;;;;3652:19;:23;34342:631;;34382:313;34413:38;;34438:12;;-1:-1:-1;;;;;34413:38:0;;;34430:1;;34413:38;;34430:1;;34413:38;34479:69;34518:1;34522:2;34526:14;;;;;;34542:5;34479:30;:69::i;:::-;34474:174;;34584:40;;-1:-1:-1;;;34584:40:0;;;;;;;;;;;34474:174;34690:3;34675:12;:18;34382:313;;34776:12;34759:13;;:29;34755:43;;34790:8;;;34755:43;34342:631;;;34839:119;34870:40;;34895:14;;;;;-1:-1:-1;;;;;34870:40:0;;;34887:1;;34870:40;;34887:1;;34870:40;34953:3;34938:12;:18;34839:119;;34342:631;-1:-1:-1;34987:13:0;:28;;;35037:60;;35070:2;35074:12;35088:8;35037:60;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;603:160;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:186;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;919:29;938:9;919:29;:::i;:::-;909:39;768:186;-1:-1:-1;;;768:186:1:o;959:260::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:52;;;1104:1;1101;1094:12;1056:52;1127:29;1146:9;1127:29;:::i;:::-;1117:39;;1175:38;1209:2;1198:9;1194:18;1175:38;:::i;:::-;1165:48;;959:260;;;;;:::o;1224:328::-;1301:6;1309;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;;1457:38;1491:2;1480:9;1476:18;1457:38;:::i;:::-;1447:48;;1542:2;1531:9;1527:18;1514:32;1504:42;;1224:328;;;;;:::o;1557:666::-;1652:6;1660;1668;1676;1729:3;1717:9;1708:7;1704:23;1700:33;1697:53;;;1746:1;1743;1736:12;1697:53;1769:29;1788:9;1769:29;:::i;:::-;1759:39;;1817:38;1851:2;1840:9;1836:18;1817:38;:::i;:::-;1807:48;;1902:2;1891:9;1887:18;1874:32;1864:42;;1957:2;1946:9;1942:18;1929:32;1984:18;1976:6;1973:30;1970:50;;;2016:1;2013;2006:12;1970:50;2039:22;;2092:4;2084:13;;2080:27;-1:-1:-1;2070:55:1;;2121:1;2118;2111:12;2070:55;2144:73;2209:7;2204:2;2191:16;2186:2;2182;2178:11;2144:73;:::i;:::-;2134:83;;;1557:666;;;;;;;:::o;2228:254::-;2293:6;2301;2354:2;2342:9;2333:7;2329:23;2325:32;2322:52;;;2370:1;2367;2360:12;2322:52;2393:29;2412:9;2393:29;:::i;:::-;2383:39;;2441:35;2472:2;2461:9;2457:18;2441:35;:::i;2487:254::-;2555:6;2563;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2655:29;2674:9;2655:29;:::i;:::-;2645:39;2731:2;2716:18;;;;2703:32;;-1:-1:-1;;;2487:254:1:o;2746:963::-;2830:6;2861:2;2904;2892:9;2883:7;2879:23;2875:32;2872:52;;;2920:1;2917;2910:12;2872:52;2960:9;2947:23;2989:18;3030:2;3022:6;3019:14;3016:34;;;3046:1;3043;3036:12;3016:34;3084:6;3073:9;3069:22;3059:32;;3129:7;3122:4;3118:2;3114:13;3110:27;3100:55;;3151:1;3148;3141:12;3100:55;3187:2;3174:16;3209:2;3205;3202:10;3199:36;;;3215:18;;:::i;:::-;3261:2;3258:1;3254:10;3244:20;;3284:28;3308:2;3304;3300:11;3284:28;:::i;:::-;3346:15;;;3377:12;;;;3409:11;;;3439;;;3435:20;;3432:33;-1:-1:-1;3429:53:1;;;3478:1;3475;3468:12;3429:53;3500:1;3491:10;;3510:169;3524:2;3521:1;3518:9;3510:169;;;3581:23;3600:3;3581:23;:::i;:::-;3569:36;;3542:1;3535:9;;;;;3625:12;;;;3657;;3510:169;;;-1:-1:-1;3698:5:1;2746:963;-1:-1:-1;;;;;;;;2746:963:1:o;3714:180::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3862:26;3878:9;3862:26;:::i;3899:245::-;3957:6;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4065:9;4052:23;4084:30;4108:5;4084:30;:::i;4149:249::-;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4319:9;4313:16;4338:30;4362:5;4338:30;:::i;4403:450::-;4472:6;4525:2;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;4614:18;4606:6;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:22;;4722:4;4714:13;;4710:27;-1:-1:-1;4700:55:1;;4751:1;4748;4741:12;4700:55;4774:73;4839:7;4834:2;4821:16;4816:2;4812;4808:11;4774:73;:::i;4858:180::-;4917:6;4970:2;4958:9;4949:7;4945:23;4941:32;4938:52;;;4986:1;4983;4976:12;4938:52;-1:-1:-1;5009:23:1;;4858:180;-1:-1:-1;4858:180:1:o;5043:257::-;5084:3;5122:5;5116:12;5149:6;5144:3;5137:19;5165:63;5221:6;5214:4;5209:3;5205:14;5198:4;5191:5;5187:16;5165:63;:::i;:::-;5282:2;5261:15;-1:-1:-1;;5257:29:1;5248:39;;;;5289:4;5244:50;;5043:257;-1:-1:-1;;5043:257:1:o;5305:637::-;5585:3;5623:6;5617:13;5639:53;5685:6;5680:3;5673:4;5665:6;5661:17;5639:53;:::i;:::-;5755:13;;5714:16;;;;5777:57;5755:13;5714:16;5811:4;5799:17;;5777:57;:::i;:::-;-1:-1:-1;;;5856:20:1;;5885:22;;;5934:1;5923:13;;5305:637;-1:-1:-1;;;;5305:637:1:o;6155:488::-;-1:-1:-1;;;;;6424:15:1;;;6406:34;;6476:15;;6471:2;6456:18;;6449:43;6523:2;6508:18;;6501:34;;;6571:3;6566:2;6551:18;;6544:31;;;6349:4;;6592:45;;6617:19;;6609:6;6592:45;:::i;:::-;6584:53;6155:488;-1:-1:-1;;;;;;6155:488:1:o;6840:219::-;6989:2;6978:9;6971:21;6952:4;7009:44;7049:2;7038:9;7034:18;7026:6;7009:44;:::i;9930:356::-;10132:2;10114:21;;;10151:18;;;10144:30;10210:34;10205:2;10190:18;;10183:62;10277:2;10262:18;;9930:356::o;11241:275::-;11312:2;11306:9;11377:2;11358:13;;-1:-1:-1;;11354:27:1;11342:40;;11412:18;11397:34;;11433:22;;;11394:62;11391:88;;;11459:18;;:::i;:::-;11495:2;11488:22;11241:275;;-1:-1:-1;11241:275:1:o;11521:128::-;11561:3;11592:1;11588:6;11585:1;11582:13;11579:39;;;11598:18;;:::i;:::-;-1:-1:-1;11634:9:1;;11521:128::o;11654:120::-;11694:1;11720;11710:35;;11725:18;;:::i;:::-;-1:-1:-1;11759:9:1;;11654:120::o;11779:168::-;11819:7;11885:1;11881;11877:6;11873:14;11870:1;11867:21;11862:1;11855:9;11848:17;11844:45;11841:71;;;11892:18;;:::i;:::-;-1:-1:-1;11932:9:1;;11779:168::o;11952:125::-;11992:4;12020:1;12017;12014:8;12011:34;;;12025:18;;:::i;:::-;-1:-1:-1;12062:9:1;;11952:125::o;12082:258::-;12154:1;12164:113;12178:6;12175:1;12172:13;12164:113;;;12254:11;;;12248:18;12235:11;;;12228:39;12200:2;12193:10;12164:113;;;12295:6;12292:1;12289:13;12286:48;;;-1:-1:-1;;12330:1:1;12312:16;;12305:27;12082:258::o;12345:380::-;12424:1;12420:12;;;;12467;;;12488:61;;12542:4;12534:6;12530:17;12520:27;;12488:61;12595:2;12587:6;12584:14;12564:18;12561:38;12558:161;;;12641:10;12636:3;12632:20;12629:1;12622:31;12676:4;12673:1;12666:15;12704:4;12701:1;12694:15;12558:161;;12345:380;;;:::o;12730:135::-;12769:3;-1:-1:-1;;12790:17:1;;12787:43;;;12810:18;;:::i;:::-;-1:-1:-1;12857:1:1;12846:13;;12730:135::o;12870:112::-;12902:1;12928;12918:35;;12933:18;;:::i;:::-;-1:-1:-1;12967:9:1;;12870:112::o;12987:127::-;13048:10;13043:3;13039:20;13036:1;13029:31;13079:4;13076:1;13069:15;13103:4;13100:1;13093:15;13119:127;13180:10;13175:3;13171:20;13168:1;13161:31;13211:4;13208:1;13201:15;13235:4;13232:1;13225:15;13251:127;13312:10;13307:3;13303:20;13300:1;13293:31;13343:4;13340:1;13333:15;13367:4;13364:1;13357:15;13383:127;13444:10;13439:3;13435:20;13432:1;13425:31;13475:4;13472:1;13465:15;13499:4;13496:1;13489:15;13515:131;-1:-1:-1;;;;;;13589:32:1;;13579:43;;13569:71;;13636:1;13633;13626:12

Swarm Source

ipfs://3a682f5351c2482a1a05785c730c95c056543b98ce8c262ad84177e434660c72
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.