ETH Price: $3,303.80 (-3.17%)
Gas: 20 Gwei

Token

Drunken Monkey Members Club (DMMC)
 

Overview

Max Total Supply

2,207 DMMC

Holders

323

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 DMMC
0xd0313e623488775b817bf873d0f4f16e88b544dd
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:
DMMC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-10
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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 v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @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 v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/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/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @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, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

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

    // 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 See {IERC721Enumerable-totalSupply}.
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view 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) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        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) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        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) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        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 {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _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 && 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 && !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 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() && !_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;
    }

    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 {
        _mint(to, quantity, _data, true);
    }

    /**
     * @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,
        bytes memory _data,
        bool safe
    ) 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 (safe && 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 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);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].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;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // 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[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].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;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, 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: contracts/DMMC.sol



pragma solidity >=0.8.4 <0.9.0;




contract DMMC is ERC721A, Ownable {
  using Strings for uint256;
  
  string public baseURI;
  string public baseExtension = ".json";
  string public provenanceHash = "";
  bytes32 public whitelistMerkleRoot = "";

  uint256 public privateMintCost = 0.1 ether;
  uint256 public whitelistMintCost = 0.5 ether;
  uint256 public publicMintCost = 1 ether;

  uint256 public constant PRIVATE_MINT_SUPPLY = 1050;
  uint256 public constant WHITELIST_MINT_MAX_SUPPLY = 4000;
  uint256 public constant PUBLIC_MINT_MAX_SUPPLY = 9995;

  bool public isPrivateMintActive = false;
  bool public isWhitelistMintActive = false;
  bool public isPublicMintActive = false;

  uint256 public maxMintPerTx = 5;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721A(_name, _symbol) {
    setBaseURI(_initBaseURI);
  }

  modifier privatePausedCompliance() {
    require(isPrivateMintActive, "Private minting is currently paused");
    _;
  }

  modifier whitelistPausedCompliance() {
    require(isWhitelistMintActive, "Whitelist minting is currently paused");
    _;
  }

  modifier publicPausedCompliance() {
    require(isPublicMintActive, "Public minting is currently paused");
    _;
  }

  modifier privateAmountCompliance(uint256 _value, uint256 _amount) {
    require(_value >= _amount * privateMintCost, "Insufficient funds sent");
    _;
  }

  modifier whitelistAmountCompliance(uint256 _value, uint256 _amount) {
    require(_value >= _amount * whitelistMintCost, "Insufficient funds sent");
    _;
  }

  modifier publicAmountCompliance(uint256 _value, uint256 _amount) {
    require(_value >= _amount * publicMintCost, "Insufficient funds sent");
    _;
  }

  modifier maxAmountPerTxCompliance(uint256 _amount) {
    require(_amount <= maxMintPerTx, "Amount exceeds limit per transaction");
    _;
  }

  modifier isValidMerkleProof(bytes32[] calldata _merkleProof, bytes32 _root) {
    require(
      MerkleProof.verify(
        _merkleProof,
        _root,
        keccak256(abi.encodePacked(msg.sender))
      ),
      "Whitelist merkle proof is invalid"
    );
    _;
  }

  function reserve(uint256 _amount, address _address) public onlyOwner {
    uint256 supply = totalSupply();
    require(supply + _amount <= PUBLIC_MINT_MAX_SUPPLY, "Insufficient supply remaining");

    _safeMint(_address, _amount);
  }

  function privateMint(
    uint256 _amount
  )
    public
    payable
    privatePausedCompliance
    privateAmountCompliance(msg.value, _amount)
    maxAmountPerTxCompliance(_amount)
  {
    uint256 supply = totalSupply();
    require(supply + _amount <= PRIVATE_MINT_SUPPLY, "Insufficient supply remaining");
    _safeMint(msg.sender, _amount);
  }

  function whitelistMint(
    uint256 _amount,
    bytes32[] calldata _merkleProof
  )
    public
    payable
    whitelistPausedCompliance
    whitelistAmountCompliance(msg.value, _amount)
    maxAmountPerTxCompliance(_amount)
    isValidMerkleProof(_merkleProof, whitelistMerkleRoot)
  {
    uint256 supply = totalSupply();
    require(supply + _amount <= WHITELIST_MINT_MAX_SUPPLY, "Insufficient supply remaining");
    _safeMint(msg.sender, _amount);
  }

  function publicMint(
    uint256 _amount
  )
    public
    payable
    publicPausedCompliance
    publicAmountCompliance(msg.value, _amount)
    maxAmountPerTxCompliance(_amount)
  {
    uint256 supply = totalSupply();
    require(supply + _amount <= PUBLIC_MINT_MAX_SUPPLY, "Insufficient supply remaining");
    _safeMint(msg.sender, _amount);
  }

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

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

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

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

  function setIsPrivateMintActive(bool _isPrivateMintActive) public onlyOwner {
    isPrivateMintActive = _isPrivateMintActive;
  }

  function setIsWhitelistMintActive(bool _isWhitelistMintActive) public onlyOwner {
    isWhitelistMintActive = _isWhitelistMintActive;
  }

  function setIsPublicMintActive(bool _isPublicMintActive) public onlyOwner {
    isPublicMintActive = _isPublicMintActive;
  }

  function setPrivateMintCost(uint256 _privateMintCost) public onlyOwner {
    privateMintCost = _privateMintCost;
  }

  function setSeedMintCost(uint256 _whitelistMintCost) public onlyOwner {
    whitelistMintCost = _whitelistMintCost;
  }

  function setPublicMintCost(uint256 _publicMintCost) public onlyOwner {
    publicMintCost = _publicMintCost;
  }

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

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

  function setMaxMintPerTx(uint256 _maxMintPerTx) public onlyOwner {
    maxMintPerTx = _maxMintPerTx;
  }

  function setSeedMerkleRoot(bytes32 _whitelistMerkleRoot) public onlyOwner {
    whitelistMerkleRoot = _whitelistMerkleRoot;
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRIVATE_MINT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MINT_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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPrivateMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"privateMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"privateMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPrivateMintActive","type":"bool"}],"name":"setIsPrivateMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPublicMintActive","type":"bool"}],"name":"setIsPublicMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isWhitelistMintActive","type":"bool"}],"name":"setIsWhitelistMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_privateMintCost","type":"uint256"}],"name":"setPrivateMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicMintCost","type":"uint256"}],"name":"setPublicMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setSeedMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistMintCost","type":"uint256"}],"name":"setSeedMintCost","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":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000519291906200035e565b5060405180602001604052806000815250600b9080519060200190620000799291906200035e565b506000600c5567016345785d8a0000600d556706f05b59d3b20000600e55670de0b6b3a7640000600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff02191690831515021790555060056011553480156200010657600080fd5b5060405162004efb38038062004efb83398181016040528101906200012c91906200048c565b82828160029080519060200190620001469291906200035e565b5080600390805190602001906200015f9291906200035e565b5062000170620001b260201b60201c565b6000819055505050620001986200018c620001bb60201b60201c565b620001c360201b60201c565b620001a9816200028960201b60201c565b5050506200074c565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000299620001bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002bf6200033460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000318576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030f906200056c565b60405180910390fd5b8060099080519060200190620003309291906200035e565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200036c9062000634565b90600052602060002090601f016020900481019282620003905760008555620003dc565b82601f10620003ab57805160ff1916838001178555620003dc565b82800160010185558215620003dc579182015b82811115620003db578251825591602001919060010190620003be565b5b509050620003eb9190620003ef565b5090565b5b808211156200040a576000816000905550600101620003f0565b5090565b6000620004256200041f84620005b7565b6200058e565b90508281526020810184848401111562000444576200044362000703565b5b62000451848285620005fe565b509392505050565b600082601f830112620004715762000470620006fe565b5b8151620004838482602086016200040e565b91505092915050565b600080600060608486031215620004a857620004a76200070d565b5b600084015167ffffffffffffffff811115620004c957620004c862000708565b5b620004d78682870162000459565b935050602084015167ffffffffffffffff811115620004fb57620004fa62000708565b5b620005098682870162000459565b925050604084015167ffffffffffffffff8111156200052d576200052c62000708565b5b6200053b8682870162000459565b9150509250925092565b600062000554602083620005ed565b9150620005618262000723565b602082019050919050565b60006020820190508181036000830152620005878162000545565b9050919050565b60006200059a620005ad565b9050620005a882826200066a565b919050565b6000604051905090565b600067ffffffffffffffff821115620005d557620005d4620006cf565b5b620005e08262000712565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200061e57808201518184015260208101905062000601565b838111156200062e576000848401525b50505050565b600060028204905060018216806200064d57607f821691505b60208210811415620006645762000663620006a0565b5b50919050565b620006758262000712565b810181811067ffffffffffffffff82111715620006975762000696620006cf565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61479f806200075c6000396000f3fe60806040526004361061027d5760003560e01c80638c7700671161014f578063c2a73bcf116100c1578063da3ef23f1161007a578063da3ef23f14610916578063de7fcb1d1461093f578063e4ad18381461096a578063e985e9c514610993578063f2fde38b146109d0578063fabd1d2d146109f95761027d565b8063c2a73bcf14610813578063c3d44cd01461083c578063c668286214610867578063c6ab67a314610892578063c87b56dd146108bd578063d2cab056146108fa5761027d565b8063a22cb46511610113578063a22cb46514610726578063a7533f721461074f578063aa98e0c614610778578063abfe40a8146107a3578063b12dab6e146107bf578063b88d4fde146107ea5761027d565b80638c7700671461064f5780638da5cb5b1461067a57806392da18eb146106a55780639490dd4e146106d057806395d89b41146106fb5761027d565b80632db11544116101f357806362980692116101ac57806362980692146105415780636352211e1461056a5780636c0360eb146105a757806370a08231146105d2578063715018a61461060f57806380eae578146106265761027d565b80632db11544146104755780633ccfd60b1461049157806342842e0e1461049b5780634b88d489146104c457806355f804b3146104ef578063616cdb1e146105185761027d565b80630d7041c5116102455780630d7041c51461037957806318160ddd146103a257806323b872dd146103cd57806323f63123146103f657806328ad8f6a1461041f5780632d6b62241461044a5761027d565b806301ffc9a71461028257806303339bcb146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613887565b610a24565b6040516102b69190613db5565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613957565b610b06565b005b3480156102f457600080fd5b506102fd610bed565b60405161030a9190613deb565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061392a565b610c7f565b6040516103479190613d4e565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906137ed565b610cfb565b005b34801561038557600080fd5b506103a0600480360381019061039b919061392a565b610e06565b005b3480156103ae57600080fd5b506103b7610e8c565b6040516103c49190613f4d565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906136d7565b610ea3565b005b34801561040257600080fd5b5061041d6004803603810190610418919061382d565b610eb3565b005b34801561042b57600080fd5b50610434610f4c565b6040516104419190613f4d565b60405180910390f35b34801561045657600080fd5b5061045f610f52565b60405161046c9190613db5565b60405180910390f35b61048f600480360381019061048a919061392a565b610f65565b005b6104996110b9565b005b3480156104a757600080fd5b506104c260048036038101906104bd91906136d7565b6111b5565b005b3480156104d057600080fd5b506104d96111d5565b6040516104e69190613f4d565b60405180910390f35b3480156104fb57600080fd5b50610516600480360381019061051191906138e1565b6111db565b005b34801561052457600080fd5b5061053f600480360381019061053a919061392a565b611271565b005b34801561054d57600080fd5b506105686004803603810190610563919061385a565b6112f7565b005b34801561057657600080fd5b50610591600480360381019061058c919061392a565b61137d565b60405161059e9190613d4e565b60405180910390f35b3480156105b357600080fd5b506105bc611393565b6040516105c99190613deb565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f4919061366a565b611421565b6040516106069190613f4d565b60405180910390f35b34801561061b57600080fd5b506106246114f1565b005b34801561063257600080fd5b5061064d6004803603810190610648919061392a565b611579565b005b34801561065b57600080fd5b506106646115ff565b6040516106719190613f4d565b60405180910390f35b34801561068657600080fd5b5061068f611605565b60405161069c9190613d4e565b60405180910390f35b3480156106b157600080fd5b506106ba61162f565b6040516106c79190613f4d565b60405180910390f35b3480156106dc57600080fd5b506106e5611635565b6040516106f29190613f4d565b60405180910390f35b34801561070757600080fd5b5061071061163b565b60405161071d9190613deb565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906137ad565b6116cd565b005b34801561075b57600080fd5b506107766004803603810190610771919061392a565b611845565b005b34801561078457600080fd5b5061078d6118cb565b60405161079a9190613dd0565b60405180910390f35b6107bd60048036038101906107b8919061392a565b6118d1565b005b3480156107cb57600080fd5b506107d4611a25565b6040516107e19190613f4d565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c919061372a565b611a2b565b005b34801561081f57600080fd5b5061083a6004803603810190610835919061382d565b611aa7565b005b34801561084857600080fd5b50610851611b40565b60405161085e9190613db5565b60405180910390f35b34801561087357600080fd5b5061087c611b53565b6040516108899190613deb565b60405180910390f35b34801561089e57600080fd5b506108a7611be1565b6040516108b49190613deb565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df919061392a565b611c6f565b6040516108f19190613deb565b60405180910390f35b610914600480360381019061090f9190613997565b611d19565b005b34801561092257600080fd5b5061093d600480360381019061093891906138e1565b611f28565b005b34801561094b57600080fd5b50610954611fbe565b6040516109619190613f4d565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061382d565b611fc4565b005b34801561099f57600080fd5b506109ba60048036038101906109b59190613697565b61205d565b6040516109c79190613db5565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f2919061366a565b6120f1565b005b348015610a0557600080fd5b50610a0e6121e9565b604051610a1b9190613db5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aff5750610afe826121fc565b5b9050919050565b610b0e612266565b73ffffffffffffffffffffffffffffffffffffffff16610b2c611605565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613e6d565b60405180910390fd5b6000610b8c610e8c565b905061270b8382610b9d9190614052565b1115610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590613f2d565b60405180910390fd5b610be8828461226e565b505050565b606060028054610bfc90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2890614227565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b6000610c8a8261228c565b610cc0576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d068261137d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d6e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8d612266565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dbf5750610dbd81610db8612266565b61205d565b155b15610df6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e018383836122da565b505050565b610e0e612266565b73ffffffffffffffffffffffffffffffffffffffff16610e2c611605565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613e6d565b60405180910390fd5b80600e8190555050565b6000610e9661238c565b6001546000540303905090565b610eae838383612395565b505050565b610ebb612266565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611605565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613e6d565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b610fa081565b601060029054906101000a900460ff1681565b601060029054906101000a900460ff16610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613e4d565b60405180910390fd5b3481600f5481610fc491906140d9565b821015611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613f0d565b60405180910390fd5b8260115481111561104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613ecd565b60405180910390fd5b6000611056610e8c565b905061270b85826110679190614052565b11156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90613f2d565b60405180910390fd5b6110b2338661226e565b5050505050565b6110c1612266565b73ffffffffffffffffffffffffffffffffffffffff166110df611605565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90613e6d565b60405180910390fd5b600061113f611605565b73ffffffffffffffffffffffffffffffffffffffff164760405161116290613d39565b60006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b50509050806111b257600080fd5b50565b6111d083838360405180602001604052806000815250611a2b565b505050565b61270b81565b6111e3612266565b73ffffffffffffffffffffffffffffffffffffffff16611201611605565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613e6d565b60405180910390fd5b806009908051906020019061126d9291906133d0565b5050565b611279612266565b73ffffffffffffffffffffffffffffffffffffffff16611297611605565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613e6d565b60405180910390fd5b8060118190555050565b6112ff612266565b73ffffffffffffffffffffffffffffffffffffffff1661131d611605565b73ffffffffffffffffffffffffffffffffffffffff1614611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90613e6d565b60405180910390fd5b80600c8190555050565b600061138882612886565b600001519050919050565b600980546113a090614227565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc90614227565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611489576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6114f9612266565b73ffffffffffffffffffffffffffffffffffffffff16611517611605565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613e6d565b60405180910390fd5b6115776000612b15565b565b611581612266565b73ffffffffffffffffffffffffffffffffffffffff1661159f611605565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613e6d565b60405180910390fd5b80600f8190555050565b600f5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61041a81565b600d5481565b60606003805461164a90614227565b80601f016020809104026020016040519081016040528092919081815260200182805461167690614227565b80156116c35780601f10611698576101008083540402835291602001916116c3565b820191906000526020600020905b8154815290600101906020018083116116a657829003601f168201915b5050505050905090565b6116d5612266565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611747612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4612266565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190613db5565b60405180910390a35050565b61184d612266565b73ffffffffffffffffffffffffffffffffffffffff1661186b611605565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b890613e6d565b60405180910390fd5b80600d8190555050565b600c5481565b601060009054906101000a900460ff16611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613eed565b60405180910390fd5b3481600d548161193091906140d9565b821015611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613f0d565b60405180910390fd5b826011548111156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90613ecd565b60405180910390fd5b60006119c2610e8c565b905061041a85826119d39190614052565b1115611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613f2d565b60405180910390fd5b611a1e338661226e565b5050505050565b600e5481565b611a36848484612395565b611a558373ffffffffffffffffffffffffffffffffffffffff16612bdb565b8015611a6a5750611a6884848484612bee565b155b15611aa1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611aaf612266565b73ffffffffffffffffffffffffffffffffffffffff16611acd611605565b73ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90613e6d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900460ff1681565b600a8054611b6090614227565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8c90614227565b8015611bd95780601f10611bae57610100808354040283529160200191611bd9565b820191906000526020600020905b815481529060010190602001808311611bbc57829003601f168201915b505050505081565b600b8054611bee90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1a90614227565b8015611c675780601f10611c3c57610100808354040283529160200191611c67565b820191906000526020600020905b815481529060010190602001808311611c4a57829003601f168201915b505050505081565b6060611c7a8261228c565b611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613e8d565b60405180910390fd5b6000611cc3612d4e565b90506000815111611ce35760405180602001604052806000815250611d11565b80611ced84612de0565b600a604051602001611d0193929190613d08565b6040516020818303038152906040525b915050919050565b601060019054906101000a900460ff16611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613e0d565b60405180910390fd5b3483600e5481611d7891906140d9565b821015611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f0d565b60405180910390fd5b84601154811115611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790613ecd565b60405180910390fd5b8484600c54611e77838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508233604051602001611e5c9190613ced565b60405160208183030381529060405280519060200120612f41565b611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead90613ead565b60405180910390fd5b6000611ec0610e8c565b9050610fa08a82611ed19190614052565b1115611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990613f2d565b60405180910390fd5b611f1c338b61226e565b50505050505050505050565b611f30612266565b73ffffffffffffffffffffffffffffffffffffffff16611f4e611605565b73ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613e6d565b60405180910390fd5b80600a9080519060200190611fba9291906133d0565b5050565b60115481565b611fcc612266565b73ffffffffffffffffffffffffffffffffffffffff16611fea611605565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613e6d565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f9612266565b73ffffffffffffffffffffffffffffffffffffffff16612117611605565b73ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613e2d565b60405180910390fd5b6121e681612b15565b50565b601060019054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b612288828260405180602001604052806000815250612f58565b5050565b60008161229761238c565b111580156122a6575060005482105b80156122d3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006123a082612886565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123c7612266565b73ffffffffffffffffffffffffffffffffffffffff1614806123fa57506123f982600001516123f4612266565b61205d565b5b8061243f5750612408612266565b73ffffffffffffffffffffffffffffffffffffffff1661242784610c7f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612478576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612548576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125558585856001612f6a565b61256560008484600001516122da565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612816576000548110156128155782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461287f8585856001612f70565b5050505050565b61288e613456565b60008290508061289c61238c565b111580156128ab575060005481105b15612ade576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612adc57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129c0578092505050612b10565b5b600115612adb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ad6578092505050612b10565b6129c1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c14612266565b8786866040518563ffffffff1660e01b8152600401612c369493929190613d69565b602060405180830381600087803b158015612c5057600080fd5b505af1925050508015612c8157506040513d601f19601f82011682018060405250810190612c7e91906138b4565b60015b612cfb573d8060008114612cb1576040519150601f19603f3d011682016040523d82523d6000602084013e612cb6565b606091505b50600081511415612cf3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612d5d90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8990614227565b8015612dd65780601f10612dab57610100808354040283529160200191612dd6565b820191906000526020600020905b815481529060010190602001808311612db957829003601f168201915b5050505050905090565b60606000821415612e28576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f3c565b600082905060005b60008214612e5a578080612e439061428a565b915050600a82612e5391906140a8565b9150612e30565b60008167ffffffffffffffff811115612e7657612e756143e4565b5b6040519080825280601f01601f191660200182016040528015612ea85781602001600182028036833780820191505090505b5090505b60008514612f3557600182612ec19190614133565b9150600a85612ed091906142f7565b6030612edc9190614052565b60f81b818381518110612ef257612ef16143b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f2e91906140a8565b9450612eac565b8093505050505b919050565b600082612f4e8584612f76565b1490509392505050565b612f658383836001612feb565b505050565b50505050565b50505050565b60008082905060005b8451811015612fe0576000858281518110612f9d57612f9c6143b5565b5b60200260200101519050808311612fbf57612fb883826133b9565b9250612fcc565b612fc981846133b9565b92505b508080612fd89061428a565b915050612f7f565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613058576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613093576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130a06000868387612f6a565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561326a57506132698773ffffffffffffffffffffffffffffffffffffffff16612bdb565b5b15613330575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132df6000888480600101955088612bee565b613315576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561327057826000541461332b57600080fd5b61339c565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613331575b8160008190555050506133b26000868387612f70565b5050505050565b600082600052816020526040600020905092915050565b8280546133dc90614227565b90600052602060002090601f0160209004810192826133fe5760008555613445565b82601f1061341757805160ff1916838001178555613445565b82800160010185558215613445579182015b82811115613444578251825591602001919060010190613429565b5b5090506134529190613499565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134b257600081600090555060010161349a565b5090565b60006134c96134c484613f8d565b613f68565b9050828152602081018484840111156134e5576134e4614422565b5b6134f08482856141e5565b509392505050565b600061350b61350684613fbe565b613f68565b90508281526020810184848401111561352757613526614422565b5b6135328482856141e5565b509392505050565b600081359050613549816146f6565b92915050565b60008083601f84011261356557613564614418565b5b8235905067ffffffffffffffff81111561358257613581614413565b5b60208301915083602082028301111561359e5761359d61441d565b5b9250929050565b6000813590506135b48161470d565b92915050565b6000813590506135c981614724565b92915050565b6000813590506135de8161473b565b92915050565b6000815190506135f38161473b565b92915050565b600082601f83011261360e5761360d614418565b5b813561361e8482602086016134b6565b91505092915050565b600082601f83011261363c5761363b614418565b5b813561364c8482602086016134f8565b91505092915050565b60008135905061366481614752565b92915050565b6000602082840312156136805761367f61442c565b5b600061368e8482850161353a565b91505092915050565b600080604083850312156136ae576136ad61442c565b5b60006136bc8582860161353a565b92505060206136cd8582860161353a565b9150509250929050565b6000806000606084860312156136f0576136ef61442c565b5b60006136fe8682870161353a565b935050602061370f8682870161353a565b925050604061372086828701613655565b9150509250925092565b600080600080608085870312156137445761374361442c565b5b60006137528782880161353a565b94505060206137638782880161353a565b935050604061377487828801613655565b925050606085013567ffffffffffffffff81111561379557613794614427565b5b6137a1878288016135f9565b91505092959194509250565b600080604083850312156137c4576137c361442c565b5b60006137d28582860161353a565b92505060206137e3858286016135a5565b9150509250929050565b600080604083850312156138045761380361442c565b5b60006138128582860161353a565b925050602061382385828601613655565b9150509250929050565b6000602082840312156138435761384261442c565b5b6000613851848285016135a5565b91505092915050565b6000602082840312156138705761386f61442c565b5b600061387e848285016135ba565b91505092915050565b60006020828403121561389d5761389c61442c565b5b60006138ab848285016135cf565b91505092915050565b6000602082840312156138ca576138c961442c565b5b60006138d8848285016135e4565b91505092915050565b6000602082840312156138f7576138f661442c565b5b600082013567ffffffffffffffff81111561391557613914614427565b5b61392184828501613627565b91505092915050565b6000602082840312156139405761393f61442c565b5b600061394e84828501613655565b91505092915050565b6000806040838503121561396e5761396d61442c565b5b600061397c85828601613655565b925050602061398d8582860161353a565b9150509250929050565b6000806000604084860312156139b0576139af61442c565b5b60006139be86828701613655565b935050602084013567ffffffffffffffff8111156139df576139de614427565b5b6139eb8682870161354f565b92509250509250925092565b613a0081614167565b82525050565b613a17613a1282614167565b6142d3565b82525050565b613a2681614179565b82525050565b613a3581614185565b82525050565b6000613a4682614004565b613a50818561401a565b9350613a608185602086016141f4565b613a6981614431565b840191505092915050565b6000613a7f8261400f565b613a898185614036565b9350613a998185602086016141f4565b613aa281614431565b840191505092915050565b6000613ab88261400f565b613ac28185614047565b9350613ad28185602086016141f4565b80840191505092915050565b60008154613aeb81614227565b613af58186614047565b94506001821660008114613b105760018114613b2157613b54565b60ff19831686528186019350613b54565b613b2a85613fef565b60005b83811015613b4c57815481890152600182019150602081019050613b2d565b838801955050505b50505092915050565b6000613b6a602583614036565b9150613b758261444f565b604082019050919050565b6000613b8d602683614036565b9150613b988261449e565b604082019050919050565b6000613bb0602283614036565b9150613bbb826144ed565b604082019050919050565b6000613bd3602083614036565b9150613bde8261453c565b602082019050919050565b6000613bf6602f83614036565b9150613c0182614565565b604082019050919050565b6000613c19602183614036565b9150613c24826145b4565b604082019050919050565b6000613c3c602483614036565b9150613c4782614603565b604082019050919050565b6000613c5f60008361402b565b9150613c6a82614652565b600082019050919050565b6000613c82602383614036565b9150613c8d82614655565b604082019050919050565b6000613ca5601783614036565b9150613cb0826146a4565b602082019050919050565b6000613cc8601d83614036565b9150613cd3826146cd565b602082019050919050565b613ce7816141db565b82525050565b6000613cf98284613a06565b60148201915081905092915050565b6000613d148286613aad565b9150613d208285613aad565b9150613d2c8284613ade565b9150819050949350505050565b6000613d4482613c52565b9150819050919050565b6000602082019050613d6360008301846139f7565b92915050565b6000608082019050613d7e60008301876139f7565b613d8b60208301866139f7565b613d986040830185613cde565b8181036060830152613daa8184613a3b565b905095945050505050565b6000602082019050613dca6000830184613a1d565b92915050565b6000602082019050613de56000830184613a2c565b92915050565b60006020820190508181036000830152613e058184613a74565b905092915050565b60006020820190508181036000830152613e2681613b5d565b9050919050565b60006020820190508181036000830152613e4681613b80565b9050919050565b60006020820190508181036000830152613e6681613ba3565b9050919050565b60006020820190508181036000830152613e8681613bc6565b9050919050565b60006020820190508181036000830152613ea681613be9565b9050919050565b60006020820190508181036000830152613ec681613c0c565b9050919050565b60006020820190508181036000830152613ee681613c2f565b9050919050565b60006020820190508181036000830152613f0681613c75565b9050919050565b60006020820190508181036000830152613f2681613c98565b9050919050565b60006020820190508181036000830152613f4681613cbb565b9050919050565b6000602082019050613f626000830184613cde565b92915050565b6000613f72613f83565b9050613f7e8282614259565b919050565b6000604051905090565b600067ffffffffffffffff821115613fa857613fa76143e4565b5b613fb182614431565b9050602081019050919050565b600067ffffffffffffffff821115613fd957613fd86143e4565b5b613fe282614431565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061405d826141db565b9150614068836141db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561409d5761409c614328565b5b828201905092915050565b60006140b3826141db565b91506140be836141db565b9250826140ce576140cd614357565b5b828204905092915050565b60006140e4826141db565b91506140ef836141db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561412857614127614328565b5b828202905092915050565b600061413e826141db565b9150614149836141db565b92508282101561415c5761415b614328565b5b828203905092915050565b6000614172826141bb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142125780820151818401526020810190506141f7565b83811115614221576000848401525b50505050565b6000600282049050600182168061423f57607f821691505b6020821081141561425357614252614386565b5b50919050565b61426282614431565b810181811067ffffffffffffffff82111715614281576142806143e4565b5b80604052505050565b6000614295826141db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142c8576142c7614328565b5b600182019050919050565b60006142de826142e5565b9050919050565b60006142f082614442565b9050919050565b6000614302826141db565b915061430d836141db565b92508261431d5761431c614357565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206d696e74696e672069732063757272656e746c79207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e672069732063757272656e746c79207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f57686974656c697374206d65726b6c652070726f6f6620697320696e76616c6960008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e742065786365656473206c696d697420706572207472616e73616360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b50565b7f50726976617465206d696e74696e672069732063757272656e746c792070617560008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732073656e74000000000000000000600082015250565b7f496e73756666696369656e7420737570706c792072656d61696e696e67000000600082015250565b6146ff81614167565b811461470a57600080fd5b50565b61471681614179565b811461472157600080fd5b50565b61472d81614185565b811461473857600080fd5b50565b6147448161418f565b811461474f57600080fd5b50565b61475b816141db565b811461476657600080fd5b5056fea2646970667358221220940c55bd3cad67579e959755dddaf4b54e5bcf8136973576ee633c7d7a33123564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b4472756e6b656e204d6f6e6b6579204d656d6265727320436c756200000000000000000000000000000000000000000000000000000000000000000000000004444d4d4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5241576f6d313651664d4d4d464a775950764c76364b4a454864356a4866514666714e6f50504537514674422f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80638c7700671161014f578063c2a73bcf116100c1578063da3ef23f1161007a578063da3ef23f14610916578063de7fcb1d1461093f578063e4ad18381461096a578063e985e9c514610993578063f2fde38b146109d0578063fabd1d2d146109f95761027d565b8063c2a73bcf14610813578063c3d44cd01461083c578063c668286214610867578063c6ab67a314610892578063c87b56dd146108bd578063d2cab056146108fa5761027d565b8063a22cb46511610113578063a22cb46514610726578063a7533f721461074f578063aa98e0c614610778578063abfe40a8146107a3578063b12dab6e146107bf578063b88d4fde146107ea5761027d565b80638c7700671461064f5780638da5cb5b1461067a57806392da18eb146106a55780639490dd4e146106d057806395d89b41146106fb5761027d565b80632db11544116101f357806362980692116101ac57806362980692146105415780636352211e1461056a5780636c0360eb146105a757806370a08231146105d2578063715018a61461060f57806380eae578146106265761027d565b80632db11544146104755780633ccfd60b1461049157806342842e0e1461049b5780634b88d489146104c457806355f804b3146104ef578063616cdb1e146105185761027d565b80630d7041c5116102455780630d7041c51461037957806318160ddd146103a257806323b872dd146103cd57806323f63123146103f657806328ad8f6a1461041f5780632d6b62241461044a5761027d565b806301ffc9a71461028257806303339bcb146102bf57806306fdde03146102e8578063081812fc14610313578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613887565b610a24565b6040516102b69190613db5565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613957565b610b06565b005b3480156102f457600080fd5b506102fd610bed565b60405161030a9190613deb565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061392a565b610c7f565b6040516103479190613d4e565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906137ed565b610cfb565b005b34801561038557600080fd5b506103a0600480360381019061039b919061392a565b610e06565b005b3480156103ae57600080fd5b506103b7610e8c565b6040516103c49190613f4d565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906136d7565b610ea3565b005b34801561040257600080fd5b5061041d6004803603810190610418919061382d565b610eb3565b005b34801561042b57600080fd5b50610434610f4c565b6040516104419190613f4d565b60405180910390f35b34801561045657600080fd5b5061045f610f52565b60405161046c9190613db5565b60405180910390f35b61048f600480360381019061048a919061392a565b610f65565b005b6104996110b9565b005b3480156104a757600080fd5b506104c260048036038101906104bd91906136d7565b6111b5565b005b3480156104d057600080fd5b506104d96111d5565b6040516104e69190613f4d565b60405180910390f35b3480156104fb57600080fd5b50610516600480360381019061051191906138e1565b6111db565b005b34801561052457600080fd5b5061053f600480360381019061053a919061392a565b611271565b005b34801561054d57600080fd5b506105686004803603810190610563919061385a565b6112f7565b005b34801561057657600080fd5b50610591600480360381019061058c919061392a565b61137d565b60405161059e9190613d4e565b60405180910390f35b3480156105b357600080fd5b506105bc611393565b6040516105c99190613deb565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f4919061366a565b611421565b6040516106069190613f4d565b60405180910390f35b34801561061b57600080fd5b506106246114f1565b005b34801561063257600080fd5b5061064d6004803603810190610648919061392a565b611579565b005b34801561065b57600080fd5b506106646115ff565b6040516106719190613f4d565b60405180910390f35b34801561068657600080fd5b5061068f611605565b60405161069c9190613d4e565b60405180910390f35b3480156106b157600080fd5b506106ba61162f565b6040516106c79190613f4d565b60405180910390f35b3480156106dc57600080fd5b506106e5611635565b6040516106f29190613f4d565b60405180910390f35b34801561070757600080fd5b5061071061163b565b60405161071d9190613deb565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906137ad565b6116cd565b005b34801561075b57600080fd5b506107766004803603810190610771919061392a565b611845565b005b34801561078457600080fd5b5061078d6118cb565b60405161079a9190613dd0565b60405180910390f35b6107bd60048036038101906107b8919061392a565b6118d1565b005b3480156107cb57600080fd5b506107d4611a25565b6040516107e19190613f4d565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c919061372a565b611a2b565b005b34801561081f57600080fd5b5061083a6004803603810190610835919061382d565b611aa7565b005b34801561084857600080fd5b50610851611b40565b60405161085e9190613db5565b60405180910390f35b34801561087357600080fd5b5061087c611b53565b6040516108899190613deb565b60405180910390f35b34801561089e57600080fd5b506108a7611be1565b6040516108b49190613deb565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df919061392a565b611c6f565b6040516108f19190613deb565b60405180910390f35b610914600480360381019061090f9190613997565b611d19565b005b34801561092257600080fd5b5061093d600480360381019061093891906138e1565b611f28565b005b34801561094b57600080fd5b50610954611fbe565b6040516109619190613f4d565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061382d565b611fc4565b005b34801561099f57600080fd5b506109ba60048036038101906109b59190613697565b61205d565b6040516109c79190613db5565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f2919061366a565b6120f1565b005b348015610a0557600080fd5b50610a0e6121e9565b604051610a1b9190613db5565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aff5750610afe826121fc565b5b9050919050565b610b0e612266565b73ffffffffffffffffffffffffffffffffffffffff16610b2c611605565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990613e6d565b60405180910390fd5b6000610b8c610e8c565b905061270b8382610b9d9190614052565b1115610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590613f2d565b60405180910390fd5b610be8828461226e565b505050565b606060028054610bfc90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2890614227565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b5050505050905090565b6000610c8a8261228c565b610cc0576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d068261137d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d6e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8d612266565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dbf5750610dbd81610db8612266565b61205d565b155b15610df6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e018383836122da565b505050565b610e0e612266565b73ffffffffffffffffffffffffffffffffffffffff16610e2c611605565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613e6d565b60405180910390fd5b80600e8190555050565b6000610e9661238c565b6001546000540303905090565b610eae838383612395565b505050565b610ebb612266565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611605565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613e6d565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b610fa081565b601060029054906101000a900460ff1681565b601060029054906101000a900460ff16610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613e4d565b60405180910390fd5b3481600f5481610fc491906140d9565b821015611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613f0d565b60405180910390fd5b8260115481111561104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613ecd565b60405180910390fd5b6000611056610e8c565b905061270b85826110679190614052565b11156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90613f2d565b60405180910390fd5b6110b2338661226e565b5050505050565b6110c1612266565b73ffffffffffffffffffffffffffffffffffffffff166110df611605565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90613e6d565b60405180910390fd5b600061113f611605565b73ffffffffffffffffffffffffffffffffffffffff164760405161116290613d39565b60006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b50509050806111b257600080fd5b50565b6111d083838360405180602001604052806000815250611a2b565b505050565b61270b81565b6111e3612266565b73ffffffffffffffffffffffffffffffffffffffff16611201611605565b73ffffffffffffffffffffffffffffffffffffffff1614611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90613e6d565b60405180910390fd5b806009908051906020019061126d9291906133d0565b5050565b611279612266565b73ffffffffffffffffffffffffffffffffffffffff16611297611605565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613e6d565b60405180910390fd5b8060118190555050565b6112ff612266565b73ffffffffffffffffffffffffffffffffffffffff1661131d611605565b73ffffffffffffffffffffffffffffffffffffffff1614611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90613e6d565b60405180910390fd5b80600c8190555050565b600061138882612886565b600001519050919050565b600980546113a090614227565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc90614227565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611489576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6114f9612266565b73ffffffffffffffffffffffffffffffffffffffff16611517611605565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613e6d565b60405180910390fd5b6115776000612b15565b565b611581612266565b73ffffffffffffffffffffffffffffffffffffffff1661159f611605565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613e6d565b60405180910390fd5b80600f8190555050565b600f5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61041a81565b600d5481565b60606003805461164a90614227565b80601f016020809104026020016040519081016040528092919081815260200182805461167690614227565b80156116c35780601f10611698576101008083540402835291602001916116c3565b820191906000526020600020905b8154815290600101906020018083116116a657829003601f168201915b5050505050905090565b6116d5612266565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561173a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611747612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4612266565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190613db5565b60405180910390a35050565b61184d612266565b73ffffffffffffffffffffffffffffffffffffffff1661186b611605565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b890613e6d565b60405180910390fd5b80600d8190555050565b600c5481565b601060009054906101000a900460ff16611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613eed565b60405180910390fd5b3481600d548161193091906140d9565b821015611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990613f0d565b60405180910390fd5b826011548111156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90613ecd565b60405180910390fd5b60006119c2610e8c565b905061041a85826119d39190614052565b1115611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613f2d565b60405180910390fd5b611a1e338661226e565b5050505050565b600e5481565b611a36848484612395565b611a558373ffffffffffffffffffffffffffffffffffffffff16612bdb565b8015611a6a5750611a6884848484612bee565b155b15611aa1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b611aaf612266565b73ffffffffffffffffffffffffffffffffffffffff16611acd611605565b73ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90613e6d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b601060009054906101000a900460ff1681565b600a8054611b6090614227565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8c90614227565b8015611bd95780601f10611bae57610100808354040283529160200191611bd9565b820191906000526020600020905b815481529060010190602001808311611bbc57829003601f168201915b505050505081565b600b8054611bee90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1a90614227565b8015611c675780601f10611c3c57610100808354040283529160200191611c67565b820191906000526020600020905b815481529060010190602001808311611c4a57829003601f168201915b505050505081565b6060611c7a8261228c565b611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613e8d565b60405180910390fd5b6000611cc3612d4e565b90506000815111611ce35760405180602001604052806000815250611d11565b80611ced84612de0565b600a604051602001611d0193929190613d08565b6040516020818303038152906040525b915050919050565b601060019054906101000a900460ff16611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90613e0d565b60405180910390fd5b3483600e5481611d7891906140d9565b821015611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613f0d565b60405180910390fd5b84601154811115611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790613ecd565b60405180910390fd5b8484600c54611e77838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508233604051602001611e5c9190613ced565b60405160208183030381529060405280519060200120612f41565b611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead90613ead565b60405180910390fd5b6000611ec0610e8c565b9050610fa08a82611ed19190614052565b1115611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990613f2d565b60405180910390fd5b611f1c338b61226e565b50505050505050505050565b611f30612266565b73ffffffffffffffffffffffffffffffffffffffff16611f4e611605565b73ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613e6d565b60405180910390fd5b80600a9080519060200190611fba9291906133d0565b5050565b60115481565b611fcc612266565b73ffffffffffffffffffffffffffffffffffffffff16611fea611605565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613e6d565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120f9612266565b73ffffffffffffffffffffffffffffffffffffffff16612117611605565b73ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490613e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490613e2d565b60405180910390fd5b6121e681612b15565b50565b601060019054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b612288828260405180602001604052806000815250612f58565b5050565b60008161229761238c565b111580156122a6575060005482105b80156122d3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006123a082612886565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123c7612266565b73ffffffffffffffffffffffffffffffffffffffff1614806123fa57506123f982600001516123f4612266565b61205d565b5b8061243f5750612408612266565b73ffffffffffffffffffffffffffffffffffffffff1661242784610c7f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612478576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612548576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125558585856001612f6a565b61256560008484600001516122da565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612816576000548110156128155782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461287f8585856001612f70565b5050505050565b61288e613456565b60008290508061289c61238c565b111580156128ab575060005481105b15612ade576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612adc57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129c0578092505050612b10565b5b600115612adb57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ad6578092505050612b10565b6129c1565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c14612266565b8786866040518563ffffffff1660e01b8152600401612c369493929190613d69565b602060405180830381600087803b158015612c5057600080fd5b505af1925050508015612c8157506040513d601f19601f82011682018060405250810190612c7e91906138b4565b60015b612cfb573d8060008114612cb1576040519150601f19603f3d011682016040523d82523d6000602084013e612cb6565b606091505b50600081511415612cf3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612d5d90614227565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8990614227565b8015612dd65780601f10612dab57610100808354040283529160200191612dd6565b820191906000526020600020905b815481529060010190602001808311612db957829003601f168201915b5050505050905090565b60606000821415612e28576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f3c565b600082905060005b60008214612e5a578080612e439061428a565b915050600a82612e5391906140a8565b9150612e30565b60008167ffffffffffffffff811115612e7657612e756143e4565b5b6040519080825280601f01601f191660200182016040528015612ea85781602001600182028036833780820191505090505b5090505b60008514612f3557600182612ec19190614133565b9150600a85612ed091906142f7565b6030612edc9190614052565b60f81b818381518110612ef257612ef16143b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f2e91906140a8565b9450612eac565b8093505050505b919050565b600082612f4e8584612f76565b1490509392505050565b612f658383836001612feb565b505050565b50505050565b50505050565b60008082905060005b8451811015612fe0576000858281518110612f9d57612f9c6143b5565b5b60200260200101519050808311612fbf57612fb883826133b9565b9250612fcc565b612fc981846133b9565b92505b508080612fd89061428a565b915050612f7f565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613058576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613093576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130a06000868387612f6a565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561326a57506132698773ffffffffffffffffffffffffffffffffffffffff16612bdb565b5b15613330575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132df6000888480600101955088612bee565b613315576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561327057826000541461332b57600080fd5b61339c565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613331575b8160008190555050506133b26000868387612f70565b5050505050565b600082600052816020526040600020905092915050565b8280546133dc90614227565b90600052602060002090601f0160209004810192826133fe5760008555613445565b82601f1061341757805160ff1916838001178555613445565b82800160010185558215613445579182015b82811115613444578251825591602001919060010190613429565b5b5090506134529190613499565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134b257600081600090555060010161349a565b5090565b60006134c96134c484613f8d565b613f68565b9050828152602081018484840111156134e5576134e4614422565b5b6134f08482856141e5565b509392505050565b600061350b61350684613fbe565b613f68565b90508281526020810184848401111561352757613526614422565b5b6135328482856141e5565b509392505050565b600081359050613549816146f6565b92915050565b60008083601f84011261356557613564614418565b5b8235905067ffffffffffffffff81111561358257613581614413565b5b60208301915083602082028301111561359e5761359d61441d565b5b9250929050565b6000813590506135b48161470d565b92915050565b6000813590506135c981614724565b92915050565b6000813590506135de8161473b565b92915050565b6000815190506135f38161473b565b92915050565b600082601f83011261360e5761360d614418565b5b813561361e8482602086016134b6565b91505092915050565b600082601f83011261363c5761363b614418565b5b813561364c8482602086016134f8565b91505092915050565b60008135905061366481614752565b92915050565b6000602082840312156136805761367f61442c565b5b600061368e8482850161353a565b91505092915050565b600080604083850312156136ae576136ad61442c565b5b60006136bc8582860161353a565b92505060206136cd8582860161353a565b9150509250929050565b6000806000606084860312156136f0576136ef61442c565b5b60006136fe8682870161353a565b935050602061370f8682870161353a565b925050604061372086828701613655565b9150509250925092565b600080600080608085870312156137445761374361442c565b5b60006137528782880161353a565b94505060206137638782880161353a565b935050604061377487828801613655565b925050606085013567ffffffffffffffff81111561379557613794614427565b5b6137a1878288016135f9565b91505092959194509250565b600080604083850312156137c4576137c361442c565b5b60006137d28582860161353a565b92505060206137e3858286016135a5565b9150509250929050565b600080604083850312156138045761380361442c565b5b60006138128582860161353a565b925050602061382385828601613655565b9150509250929050565b6000602082840312156138435761384261442c565b5b6000613851848285016135a5565b91505092915050565b6000602082840312156138705761386f61442c565b5b600061387e848285016135ba565b91505092915050565b60006020828403121561389d5761389c61442c565b5b60006138ab848285016135cf565b91505092915050565b6000602082840312156138ca576138c961442c565b5b60006138d8848285016135e4565b91505092915050565b6000602082840312156138f7576138f661442c565b5b600082013567ffffffffffffffff81111561391557613914614427565b5b61392184828501613627565b91505092915050565b6000602082840312156139405761393f61442c565b5b600061394e84828501613655565b91505092915050565b6000806040838503121561396e5761396d61442c565b5b600061397c85828601613655565b925050602061398d8582860161353a565b9150509250929050565b6000806000604084860312156139b0576139af61442c565b5b60006139be86828701613655565b935050602084013567ffffffffffffffff8111156139df576139de614427565b5b6139eb8682870161354f565b92509250509250925092565b613a0081614167565b82525050565b613a17613a1282614167565b6142d3565b82525050565b613a2681614179565b82525050565b613a3581614185565b82525050565b6000613a4682614004565b613a50818561401a565b9350613a608185602086016141f4565b613a6981614431565b840191505092915050565b6000613a7f8261400f565b613a898185614036565b9350613a998185602086016141f4565b613aa281614431565b840191505092915050565b6000613ab88261400f565b613ac28185614047565b9350613ad28185602086016141f4565b80840191505092915050565b60008154613aeb81614227565b613af58186614047565b94506001821660008114613b105760018114613b2157613b54565b60ff19831686528186019350613b54565b613b2a85613fef565b60005b83811015613b4c57815481890152600182019150602081019050613b2d565b838801955050505b50505092915050565b6000613b6a602583614036565b9150613b758261444f565b604082019050919050565b6000613b8d602683614036565b9150613b988261449e565b604082019050919050565b6000613bb0602283614036565b9150613bbb826144ed565b604082019050919050565b6000613bd3602083614036565b9150613bde8261453c565b602082019050919050565b6000613bf6602f83614036565b9150613c0182614565565b604082019050919050565b6000613c19602183614036565b9150613c24826145b4565b604082019050919050565b6000613c3c602483614036565b9150613c4782614603565b604082019050919050565b6000613c5f60008361402b565b9150613c6a82614652565b600082019050919050565b6000613c82602383614036565b9150613c8d82614655565b604082019050919050565b6000613ca5601783614036565b9150613cb0826146a4565b602082019050919050565b6000613cc8601d83614036565b9150613cd3826146cd565b602082019050919050565b613ce7816141db565b82525050565b6000613cf98284613a06565b60148201915081905092915050565b6000613d148286613aad565b9150613d208285613aad565b9150613d2c8284613ade565b9150819050949350505050565b6000613d4482613c52565b9150819050919050565b6000602082019050613d6360008301846139f7565b92915050565b6000608082019050613d7e60008301876139f7565b613d8b60208301866139f7565b613d986040830185613cde565b8181036060830152613daa8184613a3b565b905095945050505050565b6000602082019050613dca6000830184613a1d565b92915050565b6000602082019050613de56000830184613a2c565b92915050565b60006020820190508181036000830152613e058184613a74565b905092915050565b60006020820190508181036000830152613e2681613b5d565b9050919050565b60006020820190508181036000830152613e4681613b80565b9050919050565b60006020820190508181036000830152613e6681613ba3565b9050919050565b60006020820190508181036000830152613e8681613bc6565b9050919050565b60006020820190508181036000830152613ea681613be9565b9050919050565b60006020820190508181036000830152613ec681613c0c565b9050919050565b60006020820190508181036000830152613ee681613c2f565b9050919050565b60006020820190508181036000830152613f0681613c75565b9050919050565b60006020820190508181036000830152613f2681613c98565b9050919050565b60006020820190508181036000830152613f4681613cbb565b9050919050565b6000602082019050613f626000830184613cde565b92915050565b6000613f72613f83565b9050613f7e8282614259565b919050565b6000604051905090565b600067ffffffffffffffff821115613fa857613fa76143e4565b5b613fb182614431565b9050602081019050919050565b600067ffffffffffffffff821115613fd957613fd86143e4565b5b613fe282614431565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061405d826141db565b9150614068836141db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561409d5761409c614328565b5b828201905092915050565b60006140b3826141db565b91506140be836141db565b9250826140ce576140cd614357565b5b828204905092915050565b60006140e4826141db565b91506140ef836141db565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561412857614127614328565b5b828202905092915050565b600061413e826141db565b9150614149836141db565b92508282101561415c5761415b614328565b5b828203905092915050565b6000614172826141bb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142125780820151818401526020810190506141f7565b83811115614221576000848401525b50505050565b6000600282049050600182168061423f57607f821691505b6020821081141561425357614252614386565b5b50919050565b61426282614431565b810181811067ffffffffffffffff82111715614281576142806143e4565b5b80604052505050565b6000614295826141db565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142c8576142c7614328565b5b600182019050919050565b60006142de826142e5565b9050919050565b60006142f082614442565b9050919050565b6000614302826141db565b915061430d836141db565b92508261431d5761431c614357565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206d696e74696e672069732063757272656e746c79207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e672069732063757272656e746c79207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f57686974656c697374206d65726b6c652070726f6f6620697320696e76616c6960008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e742065786365656473206c696d697420706572207472616e73616360008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b50565b7f50726976617465206d696e74696e672069732063757272656e746c792070617560008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732073656e74000000000000000000600082015250565b7f496e73756666696369656e7420737570706c792072656d61696e696e67000000600082015250565b6146ff81614167565b811461470a57600080fd5b50565b61471681614179565b811461472157600080fd5b50565b61472d81614185565b811461473857600080fd5b50565b6147448161418f565b811461474f57600080fd5b50565b61475b816141db565b811461476657600080fd5b5056fea2646970667358221220940c55bd3cad67579e959755dddaf4b54e5bcf8136973576ee633c7d7a33123564736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001b4472756e6b656e204d6f6e6b6579204d656d6265727320436c756200000000000000000000000000000000000000000000000000000000000000000000000004444d4d4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5241576f6d313651664d4d4d464a775950764c76364b4a454864356a4866514666714e6f50504537514674422f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Drunken Monkey Members Club
Arg [1] : _symbol (string): DMMC
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmRAWom16QfMMMFJwYPvLv6KJEHd5jHfQFfqNoPPE7QFtB/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [4] : 4472756e6b656e204d6f6e6b6579204d656d6265727320436c75620000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 444d4d4300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d5241576f6d313651664d4d4d464a775950764c76364b4a454864356a
Arg [10] : 4866514666714e6f50504537514674422f000000000000000000000000000000


Deployed Bytecode Sourcemap

47841:5750:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30302:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50048:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33687:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35190:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34753:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52713:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29551:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36047:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52311:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48263:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48474:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51137:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53433:155;;;:::i;:::-;;36288:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48324:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52960:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53186:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53298:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33496:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47914:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30671:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7119:103;;;;;;;;;;;;;:::i;:::-;;52840:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48162:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6468:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48208:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48066:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33856:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35466:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52589:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48020:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50294:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48113:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36544:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52174:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48384:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47940:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47982:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51504:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50661:470;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53064:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48519:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52456:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35816:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7377:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48428:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30302:305;30404:4;30456:25;30441:40;;;:11;:40;;;;:105;;;;30513:33;30498:48;;;:11;:48;;;;30441:105;:158;;;;30563:36;30587:11;30563:23;:36::i;:::-;30441:158;30421:178;;30302:305;;;:::o;50048:240::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50124:14:::1;50141:13;:11;:13::i;:::-;50124:30;;48373:4;50178:7;50169:6;:16;;;;:::i;:::-;:42;;50161:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;50254:28;50264:8;50274:7;50254:9;:28::i;:::-;50117:171;50048:240:::0;;:::o;33687:100::-;33741:13;33774:5;33767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33687:100;:::o;35190:204::-;35258:7;35283:16;35291:7;35283;:16::i;:::-;35278:64;;35308:34;;;;;;;;;;;;;;35278:64;35362:15;:24;35378:7;35362:24;;;;;;;;;;;;;;;;;;;;;35355:31;;35190:204;;;:::o;34753:371::-;34826:13;34842:24;34858:7;34842:15;:24::i;:::-;34826:40;;34887:5;34881:11;;:2;:11;;;34877:48;;;34901:24;;;;;;;;;;;;;;34877:48;34958:5;34942:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34968:37;34985:5;34992:12;:10;:12::i;:::-;34968:16;:37::i;:::-;34967:38;34942:63;34938:138;;;35029:35;;;;;;;;;;;;;;34938:138;35088:28;35097:2;35101:7;35110:5;35088:8;:28::i;:::-;34815:309;34753:371;;:::o;52713:121::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52810:18:::1;52790:17;:38;;;;52713:121:::0;:::o;29551:303::-;29595:7;29820:15;:13;:15::i;:::-;29805:12;;29789:13;;:28;:46;29782:53;;29551:303;:::o;36047:170::-;36181:28;36191:4;36197:2;36201:7;36181:9;:28::i;:::-;36047:170;;;:::o;52311:139::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52422:22:::1;52398:21;;:46;;;;;;;;;;;;;;;;;;52311:139:::0;:::o;48263:56::-;48315:4;48263:56;:::o;48474:38::-;;;;;;;;;;;;;:::o;51137:361::-;49041:18;;;;;;;;;;;49033:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51265:9:::1;51276:7;49550:14;;49540:7;:24;;;;:::i;:::-;49530:6;:34;;49522:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51315:7:::2;49689:12;;49678:7;:23;;49670:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51334:14:::3;51351:13;:11;:13::i;:::-;51334:30;;48373:4;51388:7;51379:6;:16;;;;:::i;:::-;:42;;51371:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51462:30;51472:10;51484:7;51462:9;:30::i;:::-;51327:171;49599:1:::2;49105::::1;;51137:361:::0;:::o;53433:155::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53486:12:::1;53512:7;:5;:7::i;:::-;53504:21;;53533;53504:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53485:74;;;53574:7;53566:16;;;::::0;::::1;;53478:110;53433:155::o:0;36288:185::-;36426:39;36443:4;36449:2;36453:7;36426:39;;;;;;;;;;;;:16;:39::i;:::-;36288:185;;;:::o;48324:53::-;48373:4;48324:53;:::o;52960:98::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53041:11:::1;53031:7;:21;;;;;;;;;;;;:::i;:::-;;52960:98:::0;:::o;53186:106::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53273:13:::1;53258:12;:28;;;;53186:106:::0;:::o;53298:129::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53401:20:::1;53379:19;:42;;;;53298:129:::0;:::o;33496:124::-;33560:7;33587:20;33599:7;33587:11;:20::i;:::-;:25;;;33580:32;;33496:124;;;:::o;47914:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30671:206::-;30735:7;30776:1;30759:19;;:5;:19;;;30755:60;;;30787:28;;;;;;;;;;;;;;30755:60;30841:12;:19;30854:5;30841:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30833:36;;30826:43;;30671:206;;;:::o;7119:103::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7184:30:::1;7211:1;7184:18;:30::i;:::-;7119:103::o:0;52840:114::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52933:15:::1;52916:14;:32;;;;52840:114:::0;:::o;48162:39::-;;;;:::o;6468:87::-;6514:7;6541:6;;;;;;;;;;;6534:13;;6468:87;:::o;48208:50::-;48254:4;48208:50;:::o;48066:42::-;;;;:::o;33856:104::-;33912:13;33945:7;33938:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33856:104;:::o;35466:279::-;35569:12;:10;:12::i;:::-;35557:24;;:8;:24;;;35553:54;;;35590:17;;;;;;;;;;;;;;35553:54;35665:8;35620:18;:32;35639:12;:10;:12::i;:::-;35620:32;;;;;;;;;;;;;;;:42;35653:8;35620:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35718:8;35689:48;;35704:12;:10;:12::i;:::-;35689:48;;;35728:8;35689:48;;;;;;:::i;:::-;;;;;;;;35466:279;;:::o;52589:118::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52685:16:::1;52667:15;:34;;;;52589:118:::0;:::o;48020:39::-;;;;:::o;50294:361::-;48778:19;;;;;;;;;;;48770:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50425:9:::1;50436:7;49219:15;;49209:7;:25;;;;:::i;:::-;49199:6;:35;;49191:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50475:7:::2;49689:12;;49678:7;:23;;49670:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50494:14:::3;50511:13;:11;:13::i;:::-;50494:30;;48254:4;50548:7;50539:6;:16;;;;:::i;:::-;:39;;50531:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50619:30;50629:10;50641:7;50619:9;:30::i;:::-;50487:168;49269:1:::2;48844::::1;;50294:361:::0;:::o;48113:44::-;;;;:::o;36544:369::-;36711:28;36721:4;36727:2;36731:7;36711:9;:28::i;:::-;36754:15;:2;:13;;;:15::i;:::-;:76;;;;;36774:56;36805:4;36811:2;36815:7;36824:5;36774:30;:56::i;:::-;36773:57;36754:76;36750:156;;;36854:40;;;;;;;;;;;;;;36750:156;36544:369;;;;:::o;52174:131::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52279:20:::1;52257:19;;:42;;;;;;;;;;;;;;;;;;52174:131:::0;:::o;48384:39::-;;;;;;;;;;;;;:::o;47940:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47982:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51504:455::-;51603:13;51644:17;51652:8;51644:7;:17::i;:::-;51628:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;51735:28;51766:10;:8;:10::i;:::-;51735:41;;51828:1;51803:14;51797:28;:32;:156;;;;;;;;;;;;;;;;;51877:14;51893:19;:8;:17;:19::i;:::-;51914:13;51860:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51797:156;51783:170;;;51504:455;;;:::o;50661:470::-;48909:21;;;;;;;;;;;48901:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50836:9:::1;50847:7;49385:17;;49375:7;:27;;;;:::i;:::-;49365:6;:37;;49357:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50886:7:::2;49689:12;;49678:7;:23;;49670:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50919:12:::3;;50933:19;;49861:116;49890:12;;49861:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49913:5;49956:10;49939:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49929:39;;;;;;49861:18;:116::i;:::-;49845:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;50964:14:::4;50981:13;:11;:13::i;:::-;50964:30;;48315:4;51018:7;51009:6;:16;;;;:::i;:::-;:45;;51001:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;51095:30;51105:10;51117:7;51095:9;:30::i;:::-;50957:174;49749:1:::3;;;49437::::2;48979::::1;;50661:470:::0;;;:::o;53064:116::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53160:14:::1;53144:13;:30;;;;;;;;;;;;:::i;:::-;;53064:116:::0;:::o;48519:31::-;;;;:::o;52456:127::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52558:19:::1;52537:18;;:40;;;;;;;;;;;;;;;;;;52456:127:::0;:::o;35816:164::-;35913:4;35937:18;:25;35956:5;35937:25;;;;;;;;;;;;;;;:35;35963:8;35937:35;;;;;;;;;;;;;;;;;;;;;;;;;35930:42;;35816:164;;;;:::o;7377:201::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:1:::1;7466:22;;:8;:22;;;;7458:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7542:28;7561:8;7542:18;:28::i;:::-;7377:201:::0;:::o;48428:41::-;;;;;;;;;;;;;:::o;18900:157::-;18985:4;19024:25;19009:40;;;:11;:40;;;;19002:47;;18900:157;;;:::o;5192:98::-;5245:7;5272:10;5265:17;;5192:98;:::o;37363:104::-;37432:27;37442:2;37446:8;37432:27;;;;;;;;;;;;:9;:27::i;:::-;37363:104;;:::o;37168:187::-;37225:4;37268:7;37249:15;:13;:15::i;:::-;:26;;:53;;;;;37289:13;;37279:7;:23;37249:53;:98;;;;;37320:11;:20;37332:7;37320:20;;;;;;;;;;;:27;;;;;;;;;;;;37319:28;37249:98;37242:105;;37168:187;;;:::o;44779:196::-;44921:2;44894:15;:24;44910:7;44894:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44959:7;44955:2;44939:28;;44948:5;44939:28;;;;;;;;;;;;44779:196;;;:::o;51965:95::-;52030:7;52053:1;52046:8;;51965:95;:::o;40281:2112::-;40396:35;40434:20;40446:7;40434:11;:20::i;:::-;40396:58;;40467:22;40509:13;:18;;;40493:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;40544:50;40561:13;:18;;;40581:12;:10;:12::i;:::-;40544:16;:50::i;:::-;40493:101;:154;;;;40635:12;:10;:12::i;:::-;40611:36;;:20;40623:7;40611:11;:20::i;:::-;:36;;;40493:154;40467:181;;40666:17;40661:66;;40692:35;;;;;;;;;;;;;;40661:66;40764:4;40742:26;;:13;:18;;;:26;;;40738:67;;40777:28;;;;;;;;;;;;;;40738:67;40834:1;40820:16;;:2;:16;;;40816:52;;;40845:23;;;;;;;;;;;;;;40816:52;40881:43;40903:4;40909:2;40913:7;40922:1;40881:21;:43::i;:::-;40989:49;41006:1;41010:7;41019:13;:18;;;40989:8;:49::i;:::-;41364:1;41334:12;:18;41347:4;41334:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41408:1;41380:12;:16;41393:2;41380:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41454:2;41426:11;:20;41438:7;41426:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;41516:15;41471:11;:20;41483:7;41471:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;41784:19;41816:1;41806:7;:11;41784:33;;41877:1;41836:43;;:11;:24;41848:11;41836:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;41832:445;;;42061:13;;42047:11;:27;42043:219;;;42131:13;:18;;;42099:11;:24;42111:11;42099:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;42214:13;:28;;;42172:11;:24;42184:11;42172:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;42043:219;41832:445;41309:979;42324:7;42320:2;42305:27;;42314:4;42305:27;;;;;;;;;;;;42343:42;42364:4;42370:2;42374:7;42383:1;42343:20;:42::i;:::-;40385:2008;;40281:2112;;;:::o;32326:1108::-;32387:21;;:::i;:::-;32421:12;32436:7;32421:22;;32504:4;32485:15;:13;:15::i;:::-;:23;;:47;;;;;32519:13;;32512:4;:20;32485:47;32481:886;;;32553:31;32587:11;:17;32599:4;32587:17;;;;;;;;;;;32553:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32628:9;:16;;;32623:729;;32699:1;32673:28;;:9;:14;;;:28;;;32669:101;;32737:9;32730:16;;;;;;32669:101;33072:261;33079:4;33072:261;;;33112:6;;;;;;;;33157:11;:17;33169:4;33157:17;;;;;;;;;;;33145:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33231:1;33205:28;;:9;:14;;;:28;;;33201:109;;33273:9;33266:16;;;;;;33201:109;33072:261;;;32623:729;32534:833;32481:886;33395:31;;;;;;;;;;;;;;32326:1108;;;;:::o;7738:191::-;7812:16;7831:6;;;;;;;;;;;7812:25;;7857:8;7848:6;;:17;;;;;;;;;;;;;;;;;;7912:8;7881:40;;7902:8;7881:40;;;;;;;;;;;;7801:128;7738:191;:::o;8756:387::-;8816:4;9024:12;9091:7;9079:20;9071:28;;9134:1;9127:4;:8;9120:15;;;8756:387;;;:::o;45467:667::-;45630:4;45667:2;45651:36;;;45688:12;:10;:12::i;:::-;45702:4;45708:7;45717:5;45651:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45647:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45902:1;45885:6;:13;:18;45881:235;;;45931:40;;;;;;;;;;;;;;45881:235;46074:6;46068:13;46059:6;46055:2;46051:15;46044:38;45647:480;45780:45;;;45770:55;;;:6;:55;;;;45763:62;;;45467:667;;;;;;:::o;52066:102::-;52126:13;52155:7;52148:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52066:102;:::o;2754:723::-;2810:13;3040:1;3031:5;:10;3027:53;;;3058:10;;;;;;;;;;;;;;;;;;;;;3027:53;3090:12;3105:5;3090:20;;3121:14;3146:78;3161:1;3153:4;:9;3146:78;;3179:8;;;;;:::i;:::-;;;;3210:2;3202:10;;;;;:::i;:::-;;;3146:78;;;3234:19;3266:6;3256:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:39;;3284:154;3300:1;3291:5;:10;3284:154;;3328:1;3318:11;;;;;:::i;:::-;;;3395:2;3387:5;:10;;;;:::i;:::-;3374:2;:24;;;;:::i;:::-;3361:39;;3344:6;3351;3344:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3424:2;3415:11;;;;;:::i;:::-;;;3284:154;;;3462:6;3448:21;;;;;2754:723;;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;37830:163::-;37953:32;37959:2;37963:8;37973:5;37980:4;37953:5;:32::i;:::-;37830:163;;;:::o;46782:159::-;;;;;:::o;47600:158::-;;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;38252:1775::-;38391:20;38414:13;;38391:36;;38456:1;38442:16;;:2;:16;;;38438:48;;;38467:19;;;;;;;;;;;;;;38438:48;38513:1;38501:8;:13;38497:44;;;38523:18;;;;;;;;;;;;;;38497:44;38554:61;38584:1;38588:2;38592:12;38606:8;38554:21;:61::i;:::-;38927:8;38892:12;:16;38905:2;38892:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38991:8;38951:12;:16;38964:2;38951:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39050:2;39017:11;:25;39029:12;39017:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39117:15;39067:11;:25;39079:12;39067:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39150:20;39173:12;39150:35;;39200:11;39229:8;39214:12;:23;39200:37;;39258:4;:23;;;;;39266:15;:2;:13;;;:15::i;:::-;39258:23;39254:641;;;39302:314;39358:12;39354:2;39333:38;;39350:1;39333:38;;;;;;;;;;;;39399:69;39438:1;39442:2;39446:14;;;;;;39462:5;39399:30;:69::i;:::-;39394:174;;39504:40;;;;;;;;;;;;;;39394:174;39611:3;39595:12;:19;;39302:314;;39697:12;39680:13;;:29;39676:43;;39711:8;;;39676:43;39254:641;;;39760:120;39816:14;;;;;;39812:2;39791:40;;39808:1;39791:40;;;;;;;;;;;;39875:3;39859:12;:19;;39760:120;;39254:641;39925:12;39909:13;:28;;;;38867:1082;;39959:60;39988:1;39992:2;39996:12;40010:8;39959:20;:60::i;:::-;38380:1647;38252:1775;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:323::-;6412:6;6461:2;6449:9;6440:7;6436:23;6432:32;6429:119;;;6467:79;;:::i;:::-;6429:119;6587:1;6612:50;6654:7;6645:6;6634:9;6630:22;6612:50;:::i;:::-;6602:60;;6558:114;6356:323;;;;:::o;6685:329::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;6685:329;;;;:::o;7020:327::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:52;7322:7;7313:6;7302:9;7298:22;7278:52;:::i;:::-;7268:62;;7224:116;7020:327;;;;:::o;7353:349::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7597:1;7622:63;7677:7;7668:6;7657:9;7653:22;7622:63;:::i;:::-;7612:73;;7568:127;7353:349;;;;:::o;7708:509::-;7777:6;7826:2;7814:9;7805:7;7801:23;7797:32;7794:119;;;7832:79;;:::i;:::-;7794:119;7980:1;7969:9;7965:17;7952:31;8010:18;8002:6;7999:30;7996:117;;;8032:79;;:::i;:::-;7996:117;8137:63;8192:7;8183:6;8172:9;8168:22;8137:63;:::i;:::-;8127:73;;7923:287;7708:509;;;;:::o;8223:329::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:119;;;8337:79;;:::i;:::-;8299:119;8457:1;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8428:117;8223:329;;;;:::o;8558:474::-;8626:6;8634;8683:2;8671:9;8662:7;8658:23;8654:32;8651:119;;;8689:79;;:::i;:::-;8651:119;8809:1;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8780:117;8936:2;8962:53;9007:7;8998:6;8987:9;8983:22;8962:53;:::i;:::-;8952:63;;8907:118;8558:474;;;;;:::o;9038:704::-;9133:6;9141;9149;9198:2;9186:9;9177:7;9173:23;9169:32;9166:119;;;9204:79;;:::i;:::-;9166:119;9324:1;9349:53;9394:7;9385:6;9374:9;9370:22;9349:53;:::i;:::-;9339:63;;9295:117;9479:2;9468:9;9464:18;9451:32;9510:18;9502:6;9499:30;9496:117;;;9532:79;;:::i;:::-;9496:117;9645:80;9717:7;9708:6;9697:9;9693:22;9645:80;:::i;:::-;9627:98;;;;9422:313;9038:704;;;;;:::o;9748:118::-;9835:24;9853:5;9835:24;:::i;:::-;9830:3;9823:37;9748:118;;:::o;9872:157::-;9977:45;9997:24;10015:5;9997:24;:::i;:::-;9977:45;:::i;:::-;9972:3;9965:58;9872:157;;:::o;10035:109::-;10116:21;10131:5;10116:21;:::i;:::-;10111:3;10104:34;10035:109;;:::o;10150:118::-;10237:24;10255:5;10237:24;:::i;:::-;10232:3;10225:37;10150:118;;:::o;10274:360::-;10360:3;10388:38;10420:5;10388:38;:::i;:::-;10442:70;10505:6;10500:3;10442:70;:::i;:::-;10435:77;;10521:52;10566:6;10561:3;10554:4;10547:5;10543:16;10521:52;:::i;:::-;10598:29;10620:6;10598:29;:::i;:::-;10593:3;10589:39;10582:46;;10364:270;10274:360;;;;:::o;10640:364::-;10728:3;10756:39;10789:5;10756:39;:::i;:::-;10811:71;10875:6;10870:3;10811:71;:::i;:::-;10804:78;;10891:52;10936:6;10931:3;10924:4;10917:5;10913:16;10891:52;:::i;:::-;10968:29;10990:6;10968:29;:::i;:::-;10963:3;10959:39;10952:46;;10732:272;10640:364;;;;:::o;11010:377::-;11116:3;11144:39;11177:5;11144:39;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11297:52;11342:6;11337:3;11330:4;11323:5;11319:16;11297:52;:::i;:::-;11374:6;11369:3;11365:16;11358:23;;11120:267;11010:377;;;;:::o;11417:845::-;11520:3;11557:5;11551:12;11586:36;11612:9;11586:36;:::i;:::-;11638:89;11720:6;11715:3;11638:89;:::i;:::-;11631:96;;11758:1;11747:9;11743:17;11774:1;11769:137;;;;11920:1;11915:341;;;;11736:520;;11769:137;11853:4;11849:9;11838;11834:25;11829:3;11822:38;11889:6;11884:3;11880:16;11873:23;;11769:137;;11915:341;11982:38;12014:5;11982:38;:::i;:::-;12042:1;12056:154;12070:6;12067:1;12064:13;12056:154;;;12144:7;12138:14;12134:1;12129:3;12125:11;12118:35;12194:1;12185:7;12181:15;12170:26;;12092:4;12089:1;12085:12;12080:17;;12056:154;;;12239:6;12234:3;12230:16;12223:23;;11922:334;;11736:520;;11524:738;;11417:845;;;;:::o;12268:366::-;12410:3;12431:67;12495:2;12490:3;12431:67;:::i;:::-;12424:74;;12507:93;12596:3;12507:93;:::i;:::-;12625:2;12620:3;12616:12;12609:19;;12268:366;;;:::o;12640:::-;12782:3;12803:67;12867:2;12862:3;12803:67;:::i;:::-;12796:74;;12879:93;12968:3;12879:93;:::i;:::-;12997:2;12992:3;12988:12;12981:19;;12640:366;;;:::o;13012:::-;13154:3;13175:67;13239:2;13234:3;13175:67;:::i;:::-;13168:74;;13251:93;13340:3;13251:93;:::i;:::-;13369:2;13364:3;13360:12;13353:19;;13012:366;;;:::o;13384:::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:::-;13898:3;13919:67;13983:2;13978:3;13919:67;:::i;:::-;13912:74;;13995:93;14084:3;13995:93;:::i;:::-;14113:2;14108:3;14104:12;14097:19;;13756:366;;;:::o;14128:::-;14270:3;14291:67;14355:2;14350:3;14291:67;:::i;:::-;14284:74;;14367:93;14456:3;14367:93;:::i;:::-;14485:2;14480:3;14476:12;14469:19;;14128:366;;;:::o;14500:::-;14642:3;14663:67;14727:2;14722:3;14663:67;:::i;:::-;14656:74;;14739:93;14828:3;14739:93;:::i;:::-;14857:2;14852:3;14848:12;14841:19;;14500:366;;;:::o;14872:398::-;15031:3;15052:83;15133:1;15128:3;15052:83;:::i;:::-;15045:90;;15144:93;15233:3;15144:93;:::i;:::-;15262:1;15257:3;15253:11;15246:18;;14872:398;;;:::o;15276:366::-;15418:3;15439:67;15503:2;15498:3;15439:67;:::i;:::-;15432:74;;15515:93;15604:3;15515:93;:::i;:::-;15633:2;15628:3;15624:12;15617:19;;15276:366;;;:::o;15648:::-;15790:3;15811:67;15875:2;15870:3;15811:67;:::i;:::-;15804:74;;15887:93;15976:3;15887:93;:::i;:::-;16005:2;16000:3;15996:12;15989:19;;15648:366;;;:::o;16020:::-;16162:3;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16259:93;16348:3;16259:93;:::i;:::-;16377:2;16372:3;16368:12;16361:19;;16020:366;;;:::o;16392:118::-;16479:24;16497:5;16479:24;:::i;:::-;16474:3;16467:37;16392:118;;:::o;16516:256::-;16628:3;16643:75;16714:3;16705:6;16643:75;:::i;:::-;16743:2;16738:3;16734:12;16727:19;;16763:3;16756:10;;16516:256;;;;:::o;16778:589::-;17003:3;17025:95;17116:3;17107:6;17025:95;:::i;:::-;17018:102;;17137:95;17228:3;17219:6;17137:95;:::i;:::-;17130:102;;17249:92;17337:3;17328:6;17249:92;:::i;:::-;17242:99;;17358:3;17351:10;;16778:589;;;;;;:::o;17373:379::-;17557:3;17579:147;17722:3;17579:147;:::i;:::-;17572:154;;17743:3;17736:10;;17373:379;;;:::o;17758:222::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17902:71;17970:1;17959:9;17955:17;17946:6;17902:71;:::i;:::-;17758:222;;;;:::o;17986:640::-;18181:4;18219:3;18208:9;18204:19;18196:27;;18233:71;18301:1;18290:9;18286:17;18277:6;18233:71;:::i;:::-;18314:72;18382:2;18371:9;18367:18;18358:6;18314:72;:::i;:::-;18396;18464:2;18453:9;18449:18;18440:6;18396:72;:::i;:::-;18515:9;18509:4;18505:20;18500:2;18489:9;18485:18;18478:48;18543:76;18614:4;18605:6;18543:76;:::i;:::-;18535:84;;17986:640;;;;;;;:::o;18632:210::-;18719:4;18757:2;18746:9;18742:18;18734:26;;18770:65;18832:1;18821:9;18817:17;18808:6;18770:65;:::i;:::-;18632:210;;;;:::o;18848:222::-;18941:4;18979:2;18968:9;18964:18;18956:26;;18992:71;19060:1;19049:9;19045:17;19036:6;18992:71;:::i;:::-;18848:222;;;;:::o;19076:313::-;19189:4;19227:2;19216:9;19212:18;19204:26;;19276:9;19270:4;19266:20;19262:1;19251:9;19247:17;19240:47;19304:78;19377:4;19368:6;19304:78;:::i;:::-;19296:86;;19076:313;;;;:::o;19395:419::-;19561:4;19599:2;19588:9;19584:18;19576:26;;19648:9;19642:4;19638:20;19634:1;19623:9;19619:17;19612:47;19676:131;19802:4;19676:131;:::i;:::-;19668:139;;19395:419;;;:::o;19820:::-;19986:4;20024:2;20013:9;20009:18;20001:26;;20073:9;20067:4;20063:20;20059:1;20048:9;20044:17;20037:47;20101:131;20227:4;20101:131;:::i;:::-;20093:139;;19820:419;;;:::o;20245:::-;20411:4;20449:2;20438:9;20434:18;20426:26;;20498:9;20492:4;20488:20;20484:1;20473:9;20469:17;20462:47;20526:131;20652:4;20526:131;:::i;:::-;20518:139;;20245:419;;;:::o;20670:::-;20836:4;20874:2;20863:9;20859:18;20851:26;;20923:9;20917:4;20913:20;20909:1;20898:9;20894:17;20887:47;20951:131;21077:4;20951:131;:::i;:::-;20943:139;;20670:419;;;:::o;21095:::-;21261:4;21299:2;21288:9;21284:18;21276:26;;21348:9;21342:4;21338:20;21334:1;21323:9;21319:17;21312:47;21376:131;21502:4;21376:131;:::i;:::-;21368:139;;21095:419;;;:::o;21520:::-;21686:4;21724:2;21713:9;21709:18;21701:26;;21773:9;21767:4;21763:20;21759:1;21748:9;21744:17;21737:47;21801:131;21927:4;21801:131;:::i;:::-;21793:139;;21520:419;;;:::o;21945:::-;22111:4;22149:2;22138:9;22134:18;22126:26;;22198:9;22192:4;22188:20;22184:1;22173:9;22169:17;22162:47;22226:131;22352:4;22226:131;:::i;:::-;22218:139;;21945:419;;;:::o;22370:::-;22536:4;22574:2;22563:9;22559:18;22551:26;;22623:9;22617:4;22613:20;22609:1;22598:9;22594:17;22587:47;22651:131;22777:4;22651:131;:::i;:::-;22643:139;;22370:419;;;:::o;22795:::-;22961:4;22999:2;22988:9;22984:18;22976:26;;23048:9;23042:4;23038:20;23034:1;23023:9;23019:17;23012:47;23076:131;23202:4;23076:131;:::i;:::-;23068:139;;22795:419;;;:::o;23220:::-;23386:4;23424:2;23413:9;23409:18;23401:26;;23473:9;23467:4;23463:20;23459:1;23448:9;23444:17;23437:47;23501:131;23627:4;23501:131;:::i;:::-;23493:139;;23220:419;;;:::o;23645:222::-;23738:4;23776:2;23765:9;23761:18;23753:26;;23789:71;23857:1;23846:9;23842:17;23833:6;23789:71;:::i;:::-;23645:222;;;;:::o;23873:129::-;23907:6;23934:20;;:::i;:::-;23924:30;;23963:33;23991:4;23983:6;23963:33;:::i;:::-;23873:129;;;:::o;24008:75::-;24041:6;24074:2;24068:9;24058:19;;24008:75;:::o;24089:307::-;24150:4;24240:18;24232:6;24229:30;24226:56;;;24262:18;;:::i;:::-;24226:56;24300:29;24322:6;24300:29;:::i;:::-;24292:37;;24384:4;24378;24374:15;24366:23;;24089:307;;;:::o;24402:308::-;24464:4;24554:18;24546:6;24543:30;24540:56;;;24576:18;;:::i;:::-;24540:56;24614:29;24636:6;24614:29;:::i;:::-;24606:37;;24698:4;24692;24688:15;24680:23;;24402:308;;;:::o;24716:141::-;24765:4;24788:3;24780:11;;24811:3;24808:1;24801:14;24845:4;24842:1;24832:18;24824:26;;24716:141;;;:::o;24863:98::-;24914:6;24948:5;24942:12;24932:22;;24863:98;;;:::o;24967:99::-;25019:6;25053:5;25047:12;25037:22;;24967:99;;;:::o;25072:168::-;25155:11;25189:6;25184:3;25177:19;25229:4;25224:3;25220:14;25205:29;;25072:168;;;;:::o;25246:147::-;25347:11;25384:3;25369:18;;25246:147;;;;:::o;25399:169::-;25483:11;25517:6;25512:3;25505:19;25557:4;25552:3;25548:14;25533:29;;25399:169;;;;:::o;25574:148::-;25676:11;25713:3;25698:18;;25574:148;;;;:::o;25728:305::-;25768:3;25787:20;25805:1;25787:20;:::i;:::-;25782:25;;25821:20;25839:1;25821:20;:::i;:::-;25816:25;;25975:1;25907:66;25903:74;25900:1;25897:81;25894:107;;;25981:18;;:::i;:::-;25894:107;26025:1;26022;26018:9;26011:16;;25728:305;;;;:::o;26039:185::-;26079:1;26096:20;26114:1;26096:20;:::i;:::-;26091:25;;26130:20;26148:1;26130:20;:::i;:::-;26125:25;;26169:1;26159:35;;26174:18;;:::i;:::-;26159:35;26216:1;26213;26209:9;26204:14;;26039:185;;;;:::o;26230:348::-;26270:7;26293:20;26311:1;26293:20;:::i;:::-;26288:25;;26327:20;26345:1;26327:20;:::i;:::-;26322:25;;26515:1;26447:66;26443:74;26440:1;26437:81;26432:1;26425:9;26418:17;26414:105;26411:131;;;26522:18;;:::i;:::-;26411:131;26570:1;26567;26563:9;26552:20;;26230:348;;;;:::o;26584:191::-;26624:4;26644:20;26662:1;26644:20;:::i;:::-;26639:25;;26678:20;26696:1;26678:20;:::i;:::-;26673:25;;26717:1;26714;26711:8;26708:34;;;26722:18;;:::i;:::-;26708:34;26767:1;26764;26760:9;26752:17;;26584:191;;;;:::o;26781:96::-;26818:7;26847:24;26865:5;26847:24;:::i;:::-;26836:35;;26781:96;;;:::o;26883:90::-;26917:7;26960:5;26953:13;26946:21;26935:32;;26883:90;;;:::o;26979:77::-;27016:7;27045:5;27034:16;;26979:77;;;:::o;27062:149::-;27098:7;27138:66;27131:5;27127:78;27116:89;;27062:149;;;:::o;27217:126::-;27254:7;27294:42;27287:5;27283:54;27272:65;;27217:126;;;:::o;27349:77::-;27386:7;27415:5;27404:16;;27349:77;;;:::o;27432:154::-;27516:6;27511:3;27506;27493:30;27578:1;27569:6;27564:3;27560:16;27553:27;27432:154;;;:::o;27592:307::-;27660:1;27670:113;27684:6;27681:1;27678:13;27670:113;;;27769:1;27764:3;27760:11;27754:18;27750:1;27745:3;27741:11;27734:39;27706:2;27703:1;27699:10;27694:15;;27670:113;;;27801:6;27798:1;27795:13;27792:101;;;27881:1;27872:6;27867:3;27863:16;27856:27;27792:101;27641:258;27592:307;;;:::o;27905:320::-;27949:6;27986:1;27980:4;27976:12;27966:22;;28033:1;28027:4;28023:12;28054:18;28044:81;;28110:4;28102:6;28098:17;28088:27;;28044:81;28172:2;28164:6;28161:14;28141:18;28138:38;28135:84;;;28191:18;;:::i;:::-;28135:84;27956:269;27905:320;;;:::o;28231:281::-;28314:27;28336:4;28314:27;:::i;:::-;28306:6;28302:40;28444:6;28432:10;28429:22;28408:18;28396:10;28393:34;28390:62;28387:88;;;28455:18;;:::i;:::-;28387:88;28495:10;28491:2;28484:22;28274:238;28231:281;;:::o;28518:233::-;28557:3;28580:24;28598:5;28580:24;:::i;:::-;28571:33;;28626:66;28619:5;28616:77;28613:103;;;28696:18;;:::i;:::-;28613:103;28743:1;28736:5;28732:13;28725:20;;28518:233;;;:::o;28757:100::-;28796:7;28825:26;28845:5;28825:26;:::i;:::-;28814:37;;28757:100;;;:::o;28863:94::-;28902:7;28931:20;28945:5;28931:20;:::i;:::-;28920:31;;28863:94;;;:::o;28963:176::-;28995:1;29012:20;29030:1;29012:20;:::i;:::-;29007:25;;29046:20;29064:1;29046:20;:::i;:::-;29041:25;;29085:1;29075:35;;29090:18;;:::i;:::-;29075:35;29131:1;29128;29124:9;29119:14;;28963:176;;;;:::o;29145:180::-;29193:77;29190:1;29183:88;29290:4;29287:1;29280:15;29314:4;29311:1;29304:15;29331:180;29379:77;29376:1;29369:88;29476:4;29473:1;29466:15;29500:4;29497:1;29490:15;29517:180;29565:77;29562:1;29555:88;29662:4;29659:1;29652:15;29686:4;29683:1;29676:15;29703:180;29751:77;29748:1;29741:88;29848:4;29845:1;29838:15;29872:4;29869:1;29862:15;29889:180;29937:77;29934:1;29927:88;30034:4;30031:1;30024:15;30058:4;30055:1;30048:15;30075:117;30184:1;30181;30174:12;30198:117;30307:1;30304;30297:12;30321:117;30430:1;30427;30420:12;30444:117;30553:1;30550;30543:12;30567:117;30676:1;30673;30666:12;30690:117;30799:1;30796;30789:12;30813:102;30854:6;30905:2;30901:7;30896:2;30889:5;30885:14;30881:28;30871:38;;30813:102;;;:::o;30921:94::-;30954:8;31002:5;30998:2;30994:14;30973:35;;30921:94;;;:::o;31021:224::-;31161:34;31157:1;31149:6;31145:14;31138:58;31230:7;31225:2;31217:6;31213:15;31206:32;31021:224;:::o;31251:225::-;31391:34;31387:1;31379:6;31375:14;31368:58;31460:8;31455:2;31447:6;31443:15;31436:33;31251:225;:::o;31482:221::-;31622:34;31618:1;31610:6;31606:14;31599:58;31691:4;31686:2;31678:6;31674:15;31667:29;31482:221;:::o;31709:182::-;31849:34;31845:1;31837:6;31833:14;31826:58;31709:182;:::o;31897:234::-;32037:34;32033:1;32025:6;32021:14;32014:58;32106:17;32101:2;32093:6;32089:15;32082:42;31897:234;:::o;32137:220::-;32277:34;32273:1;32265:6;32261:14;32254:58;32346:3;32341:2;32333:6;32329:15;32322:28;32137:220;:::o;32363:223::-;32503:34;32499:1;32491:6;32487:14;32480:58;32572:6;32567:2;32559:6;32555:15;32548:31;32363:223;:::o;32592:114::-;;:::o;32712:222::-;32852:34;32848:1;32840:6;32836:14;32829:58;32921:5;32916:2;32908:6;32904:15;32897:30;32712:222;:::o;32940:173::-;33080:25;33076:1;33068:6;33064:14;33057:49;32940:173;:::o;33119:179::-;33259:31;33255:1;33247:6;33243:14;33236:55;33119:179;:::o;33304:122::-;33377:24;33395:5;33377:24;:::i;:::-;33370:5;33367:35;33357:63;;33416:1;33413;33406:12;33357:63;33304:122;:::o;33432:116::-;33502:21;33517:5;33502:21;:::i;:::-;33495:5;33492:32;33482:60;;33538:1;33535;33528:12;33482:60;33432:116;:::o;33554:122::-;33627:24;33645:5;33627:24;:::i;:::-;33620:5;33617:35;33607:63;;33666:1;33663;33656:12;33607:63;33554:122;:::o;33682:120::-;33754:23;33771:5;33754:23;:::i;:::-;33747:5;33744:34;33734:62;;33792:1;33789;33782:12;33734:62;33682:120;:::o;33808:122::-;33881:24;33899:5;33881:24;:::i;:::-;33874:5;33871:35;33861:63;;33920:1;33917;33910:12;33861:63;33808:122;:::o

Swarm Source

ipfs://940c55bd3cad67579e959755dddaf4b54e5bcf8136973576ee633c7d7a331235
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.