ETH Price: $2,915.42 (-3.75%)
Gas: 1 Gwei

Token

Doodles Pass (DP)
 

Overview

Max Total Supply

3,333 DP

Holders

316

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
sebone.eth
Balance
10 DP
0x4ab68d88c0eebe11c0e44d98a1a24279c8c1c66c
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:
DoodlesPass

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// 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 (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/IERC721A.sol


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

pragma solidity ^0.8.4;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: erc721a/contracts/ERC721A.sol


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

pragma solidity ^0.8.4;







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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

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

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

        address from = prevOwnership.addr;

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

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

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

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

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

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

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

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

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

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

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

// File: contracts/whaleeventsbayc.sol



pragma solidity ^0.8.4;







contract DoodlesPass is ERC721A, Ownable, ReentrancyGuard {
    using Strings for uint256;
    uint256 public cost;
    uint256 public maxSupply;
    string private BASE_URI;
    uint256 public MAX_MINT_AMOUNT_PER_TX;
    bool public IS_SALE_ACTIVE;
    mapping(address => uint256) private freeMintCountMap;

    constructor(
        uint256 price,
        uint256 max_Supply,
        string memory baseUri,
        uint256 maxMintPerTx,
        bool isSaleActive
    ) ERC721A("Doodles Pass", "DP") {
        cost = price;
        maxSupply = max_Supply;
        BASE_URI = baseUri;
        MAX_MINT_AMOUNT_PER_TX = maxMintPerTx;
        IS_SALE_ACTIVE = isSaleActive;
    }

    /** FREE MINT **/

    function updateFreeMintCount(address minter, uint256 count) private {
        freeMintCountMap[minter] += count;
    }

    /** GETTERS **/

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

    /** SETTERS **/

    function setPrice(uint256 customPrice) external onlyOwner {
        cost = customPrice;
    }


    function lowerMaxSupply(uint256 newMaxSupply) external onlyOwner {
        require(newMaxSupply >= _currentIndex, "Invalid new max supply");
        maxSupply = newMaxSupply;
    }

    function setBaseURI(string memory customBaseURI_) external onlyOwner {
        BASE_URI = customBaseURI_;
    }

   

    function setMaxMintPerTx(uint256 maxMintPerTx) external onlyOwner {
        MAX_MINT_AMOUNT_PER_TX = maxMintPerTx;
    }

    function setSaleActive(bool saleIsActive) external onlyOwner {
        IS_SALE_ACTIVE = saleIsActive;
    }


    /** MINT **/

    modifier mintCompliance(uint256 _mintAmount) {
        require(
            _mintAmount > 0 && _mintAmount <= MAX_MINT_AMOUNT_PER_TX,
            "Invalid mint amount!"
        );
        require(
            _currentIndex + _mintAmount <= maxSupply,
            "Max supply exceeded!"
        );
        _;
    }

    function mint(uint256 _mintAmount)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(IS_SALE_ACTIVE, "Sale is not active!");

        uint256 price = cost * _mintAmount;

        require(msg.value >= price, "Insufficient funds!");

        _safeMint(msg.sender, _mintAmount);
    }

    function godMint(address _to, uint256 _mintAmount)
        public
        mintCompliance(_mintAmount)
        onlyOwner
    {
        _safeMint(_to, _mintAmount);
    }

    /** PAYOUT **/

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

        Address.sendValue(
            payable(0xf8b8b204bEe0d70b611f721b8A477250C6FC37c0),
            balance
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"max_Supply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT_PER_TX","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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"godMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"lowerMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"customPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive","type":"bool"}],"name":"setSaleActive","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003f3f38038062003f3f833981810160405281019062000037919062000500565b6040518060400160405280600c81526020017f446f6f646c6573205061737300000000000000000000000000000000000000008152506040518060400160405280600281526020017f44500000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb9291906200023b565b508060039080519060200190620000d49291906200023b565b50620000e56200016860201b60201c565b60008190555050506200010d620001016200016d60201b60201c565b6200017560201b60201c565b600160098190555084600a8190555083600b8190555082600c90805190602001906200013b9291906200023b565b5081600d8190555080600e60006101000a81548160ff02191690831515021790555050505050506200060b565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024990620005d6565b90600052602060002090601f0160209004810192826200026d5760008555620002b9565b82601f106200028857805160ff1916838001178555620002b9565b82800160010185558215620002b9579182015b82811115620002b85782518255916020019190600101906200029b565b5b509050620002c89190620002cc565b5090565b5b80821115620002e7576000816000905550600101620002cd565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200031481620002ff565b81146200032057600080fd5b50565b600081519050620003348162000309565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200038f8262000344565b810181811067ffffffffffffffff82111715620003b157620003b062000355565b5b80604052505050565b6000620003c6620002eb565b9050620003d4828262000384565b919050565b600067ffffffffffffffff821115620003f757620003f662000355565b5b620004028262000344565b9050602081019050919050565b60005b838110156200042f57808201518184015260208101905062000412565b838111156200043f576000848401525b50505050565b60006200045c6200045684620003d9565b620003ba565b9050828152602081018484840111156200047b576200047a6200033f565b5b620004888482856200040f565b509392505050565b600082601f830112620004a857620004a76200033a565b5b8151620004ba84826020860162000445565b91505092915050565b60008115159050919050565b620004da81620004c3565b8114620004e657600080fd5b50565b600081519050620004fa81620004cf565b92915050565b600080600080600060a086880312156200051f576200051e620002f5565b5b60006200052f8882890162000323565b9550506020620005428882890162000323565b945050604086015167ffffffffffffffff811115620005665762000565620002fa565b5b620005748882890162000490565b9350506060620005878882890162000323565b92505060806200059a88828901620004e9565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005ef57607f821691505b602082108103620006055762000604620005a7565b5b50919050565b613924806200061b6000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146105f5578063d5abeb0114610632578063e985e9c51461065d578063f2fde38b1461069a576101c2565b8063a0712d681461055e578063a22cb4651461057a578063b88d4fde146105a3578063c4e9374d146105cc576101c2565b8063841718a6116100d1578063841718a6146104b65780638da5cb5b146104df57806391b7f5ed1461050a57806395d89b4114610533576101c2565b806370a0823114610437578063715018a61461047457806376d02b711461048b576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e1461037f57806355f804b3146103a8578063616cdb1e146103d15780636352211e146103fa576101c2565b806323b872dd146103165780633ccfd60b1461033f57806341f4a21e14610356576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309ef65271461029557806313faede6146102c057806318160ddd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906129f8565b6106c3565b6040516101fb9190612a40565b60405180910390f35b34801561021057600080fd5b506102196107a5565b6040516102269190612af4565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612b4c565b610837565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612c01565b6108b3565b005b3480156102a157600080fd5b506102aa6109b7565b6040516102b79190612c50565b60405180910390f35b3480156102cc57600080fd5b506102d56109bd565b6040516102e29190612c50565b60405180910390f35b3480156102f757600080fd5b506103006109c3565b60405161030d9190612c50565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190612c6b565b6109da565b005b34801561034b57600080fd5b506103546109ea565b005b34801561036257600080fd5b5061037d60048036038101906103789190612c01565b610ae1565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612c6b565b610c10565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df3565b610c30565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612b4c565b610cc6565b005b34801561040657600080fd5b50610421600480360381019061041c9190612b4c565b610d4c565b60405161042e9190612bba565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612e3c565b610d62565b60405161046b9190612c50565b60405180910390f35b34801561048057600080fd5b50610489610e31565b005b34801561049757600080fd5b506104a0610eb9565b6040516104ad9190612a40565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612e95565b610ecc565b005b3480156104eb57600080fd5b506104f4610f65565b6040516105019190612bba565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190612b4c565b610f8f565b005b34801561053f57600080fd5b50610548611015565b6040516105559190612af4565b60405180910390f35b61057860048036038101906105739190612b4c565b6110a7565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612ec2565b6111fe565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190612fa3565b611375565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612b4c565b6113ed565b005b34801561060157600080fd5b5061061c60048036038101906106179190612b4c565b6114b8565b6040516106299190612af4565b60405180910390f35b34801561063e57600080fd5b50610647611556565b6040516106549190612c50565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613026565b61155c565b6040516106919190612a40565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612e3c565b6115f0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079e575061079d826116e7565b5b9050919050565b6060600280546107b490613095565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090613095565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b600061084282611751565b610878576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610925576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094461179f565b73ffffffffffffffffffffffffffffffffffffffff16146109a7576109708161096b61179f565b61155c565b6109a6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109b28383836117a7565b505050565b600d5481565b600a5481565b60006109cd611859565b6001546000540303905090565b6109e583838361185e565b505050565b6109f261179f565b73ffffffffffffffffffffffffffffffffffffffff16610a10610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90613112565b60405180910390fd5b600260095403610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061317e565b60405180910390fd5b60026009819055506000479050610ad673f8b8b204bee0d70b611f721b8a477250c6fc37c082611d12565b506001600981905550565b80600081118015610af45750600d548111155b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906131ea565b60405180910390fd5b600b5481600054610b449190613239565b1115610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906132db565b60405180910390fd5b610b8d61179f565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613112565b60405180910390fd5b610c0b8383611e06565b505050565b610c2b83838360405180602001604052806000815250611375565b505050565b610c3861179f565b73ffffffffffffffffffffffffffffffffffffffff16610c56610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613112565b60405180910390fd5b80600c9080519060200190610cc29291906128a6565b5050565b610cce61179f565b73ffffffffffffffffffffffffffffffffffffffff16610cec610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613112565b60405180910390fd5b80600d8190555050565b6000610d5782611e24565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e3961179f565b73ffffffffffffffffffffffffffffffffffffffff16610e57610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613112565b60405180910390fd5b610eb760006120af565b565b600e60009054906101000a900460ff1681565b610ed461179f565b73ffffffffffffffffffffffffffffffffffffffff16610ef2610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613112565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f9761179f565b73ffffffffffffffffffffffffffffffffffffffff16610fb5610f65565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613112565b60405180910390fd5b80600a8190555050565b60606003805461102490613095565b80601f016020809104026020016040519081016040528092919081815260200182805461105090613095565b801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b5050505050905090565b806000811180156110ba5750600d548111155b6110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906131ea565b60405180910390fd5b600b548160005461110a9190613239565b111561114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906132db565b60405180910390fd5b600e60009054906101000a900460ff1661119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613347565b60405180910390fd5b600082600a546111aa9190613367565b9050803410156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061340d565b60405180910390fd5b6111f93384611e06565b505050565b61120661179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061127761179f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661132461179f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113699190612a40565b60405180910390a35050565b61138084848461185e565b61139f8373ffffffffffffffffffffffffffffffffffffffff16612175565b156113e7576113b084848484612198565b6113e6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6113f561179f565b73ffffffffffffffffffffffffffffffffffffffff16611413610f65565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613112565b60405180910390fd5b6000548110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613479565b60405180910390fd5b80600b8190555050565b60606114c382611751565b6114f9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115036122e8565b90506000815103611523576040518060200160405280600081525061154e565b8061152d8461237a565b60405160200161153e9291906134d5565b6040516020818303038152906040525b915050919050565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f861179f565b73ffffffffffffffffffffffffffffffffffffffff16611616610f65565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061356b565b60405180910390fd5b6116e4816120af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161175c611859565b1115801561176b575060005482105b8015611798575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061186982611e24565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118d4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166118f561179f565b73ffffffffffffffffffffffffffffffffffffffff16148061192457506119238561191e61179f565b61155c565b5b80611969575061193261179f565b73ffffffffffffffffffffffffffffffffffffffff1661195184610837565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119a2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a08576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a1585858560016124da565b611a21600084876117a7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ca0576000548214611c9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0b85858560016124e0565b5050505050565b80471015611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906135d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90613628565b60006040518083038185875af1925050503d8060008114611db8576040519150601f19603f3d011682016040523d82523d6000602084013e611dbd565b606091505b5050905080611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906136af565b60405180910390fd5b505050565b611e208282604051806020016040528060008152506124e6565b5050565b611e2c61292c565b600082905080611e3a611859565b1161207857600054811015612077576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161207557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f595780925050506120aa565b5b60011561207457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206f5780925050506120aa565b611f5a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121be61179f565b8786866040518563ffffffff1660e01b81526004016121e09493929190613724565b6020604051808303816000875af192505050801561221c57506040513d601f19601f820116820180604052508101906122199190613785565b60015b612295573d806000811461224c576040519150601f19603f3d011682016040523d82523d6000602084013e612251565b606091505b50600081510361228d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546122f790613095565b80601f016020809104026020016040519081016040528092919081815260200182805461232390613095565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b6060600082036123c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124d5565b600082905060005b600082146123f35780806123dc906137b2565b915050600a826123ec9190613829565b91506123c9565b60008167ffffffffffffffff81111561240f5761240e612cc8565b5b6040519080825280601f01601f1916602001820160405280156124415781602001600182028036833780820191505090505b5090505b600085146124ce5760018261245a919061385a565b9150600a85612469919061388e565b60306124759190613239565b60f81b81838151811061248b5761248a6138bf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124c79190613829565b9450612445565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612552576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361258c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61259960008583866124da565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061275a8673ffffffffffffffffffffffffffffffffffffffff16612175565b1561281f575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127cf6000878480600101955087612198565b612805576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061276057826000541461281a57600080fd5b61288a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612820575b8160008190555050506128a060008583866124e0565b50505050565b8280546128b290613095565b90600052602060002090601f0160209004810192826128d4576000855561291b565b82601f106128ed57805160ff191683800117855561291b565b8280016001018555821561291b579182015b8281111561291a5782518255916020019190600101906128ff565b5b509050612928919061296f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612988576000816000905550600101612970565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d5816129a0565b81146129e057600080fd5b50565b6000813590506129f2816129cc565b92915050565b600060208284031215612a0e57612a0d612996565b5b6000612a1c848285016129e3565b91505092915050565b60008115159050919050565b612a3a81612a25565b82525050565b6000602082019050612a556000830184612a31565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a95578082015181840152602081019050612a7a565b83811115612aa4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac682612a5b565b612ad08185612a66565b9350612ae0818560208601612a77565b612ae981612aaa565b840191505092915050565b60006020820190508181036000830152612b0e8184612abb565b905092915050565b6000819050919050565b612b2981612b16565b8114612b3457600080fd5b50565b600081359050612b4681612b20565b92915050565b600060208284031215612b6257612b61612996565b5b6000612b7084828501612b37565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ba482612b79565b9050919050565b612bb481612b99565b82525050565b6000602082019050612bcf6000830184612bab565b92915050565b612bde81612b99565b8114612be957600080fd5b50565b600081359050612bfb81612bd5565b92915050565b60008060408385031215612c1857612c17612996565b5b6000612c2685828601612bec565b9250506020612c3785828601612b37565b9150509250929050565b612c4a81612b16565b82525050565b6000602082019050612c656000830184612c41565b92915050565b600080600060608486031215612c8457612c83612996565b5b6000612c9286828701612bec565b9350506020612ca386828701612bec565b9250506040612cb486828701612b37565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0082612aaa565b810181811067ffffffffffffffff82111715612d1f57612d1e612cc8565b5b80604052505050565b6000612d3261298c565b9050612d3e8282612cf7565b919050565b600067ffffffffffffffff821115612d5e57612d5d612cc8565b5b612d6782612aaa565b9050602081019050919050565b82818337600083830152505050565b6000612d96612d9184612d43565b612d28565b905082815260208101848484011115612db257612db1612cc3565b5b612dbd848285612d74565b509392505050565b600082601f830112612dda57612dd9612cbe565b5b8135612dea848260208601612d83565b91505092915050565b600060208284031215612e0957612e08612996565b5b600082013567ffffffffffffffff811115612e2757612e2661299b565b5b612e3384828501612dc5565b91505092915050565b600060208284031215612e5257612e51612996565b5b6000612e6084828501612bec565b91505092915050565b612e7281612a25565b8114612e7d57600080fd5b50565b600081359050612e8f81612e69565b92915050565b600060208284031215612eab57612eaa612996565b5b6000612eb984828501612e80565b91505092915050565b60008060408385031215612ed957612ed8612996565b5b6000612ee785828601612bec565b9250506020612ef885828601612e80565b9150509250929050565b600067ffffffffffffffff821115612f1d57612f1c612cc8565b5b612f2682612aaa565b9050602081019050919050565b6000612f46612f4184612f02565b612d28565b905082815260208101848484011115612f6257612f61612cc3565b5b612f6d848285612d74565b509392505050565b600082601f830112612f8a57612f89612cbe565b5b8135612f9a848260208601612f33565b91505092915050565b60008060008060808587031215612fbd57612fbc612996565b5b6000612fcb87828801612bec565b9450506020612fdc87828801612bec565b9350506040612fed87828801612b37565b925050606085013567ffffffffffffffff81111561300e5761300d61299b565b5b61301a87828801612f75565b91505092959194509250565b6000806040838503121561303d5761303c612996565b5b600061304b85828601612bec565b925050602061305c85828601612bec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ad57607f821691505b6020821081036130c0576130bf613066565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130fc602083612a66565b9150613107826130c6565b602082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613168601f83612a66565b915061317382613132565b602082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006131d4601483612a66565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324482612b16565b915061324f83612b16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132845761328361320a565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006132c5601483612a66565b91506132d08261328f565b602082019050919050565b600060208201905081810360008301526132f4816132b8565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b6000613331601383612a66565b915061333c826132fb565b602082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b600061337282612b16565b915061337d83612b16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b6576133b561320a565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006133f7601383612a66565b9150613402826133c1565b602082019050919050565b60006020820190508181036000830152613426816133ea565b9050919050565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b6000613463601683612a66565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b600081905092915050565b60006134af82612a5b565b6134b98185613499565b93506134c9818560208601612a77565b80840191505092915050565b60006134e182856134a4565b91506134ed82846134a4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613555602683612a66565b9150613560826134f9565b604082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006135c1601d83612a66565b91506135cc8261358b565b602082019050919050565b600060208201905081810360008301526135f0816135b4565b9050919050565b600081905092915050565b50565b60006136126000836135f7565b915061361d82613602565b600082019050919050565b600061363382613605565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613699603a83612a66565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136f6826136cf565b61370081856136da565b9350613710818560208601612a77565b61371981612aaa565b840191505092915050565b60006080820190506137396000830187612bab565b6137466020830186612bab565b6137536040830185612c41565b818103606083015261376581846136eb565b905095945050505050565b60008151905061377f816129cc565b92915050565b60006020828403121561379b5761379a612996565b5b60006137a984828501613770565b91505092915050565b60006137bd82612b16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ef576137ee61320a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383482612b16565b915061383f83612b16565b92508261384f5761384e6137fa565b5b828204905092915050565b600061386582612b16565b915061387083612b16565b9250828210156138835761388261320a565b5b828203905092915050565b600061389982612b16565b91506138a483612b16565b9250826138b4576138b36137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b442f859279bf313758240db52d3981b3c81b97604fa9f3a7299f28ebb55afcc64736f6c634300080e003300000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f446f6f646c6573506173732e6170702f6d657461646174612f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146105f5578063d5abeb0114610632578063e985e9c51461065d578063f2fde38b1461069a576101c2565b8063a0712d681461055e578063a22cb4651461057a578063b88d4fde146105a3578063c4e9374d146105cc576101c2565b8063841718a6116100d1578063841718a6146104b65780638da5cb5b146104df57806391b7f5ed1461050a57806395d89b4114610533576101c2565b806370a0823114610437578063715018a61461047457806376d02b711461048b576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e1461037f57806355f804b3146103a8578063616cdb1e146103d15780636352211e146103fa576101c2565b806323b872dd146103165780633ccfd60b1461033f57806341f4a21e14610356576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309ef65271461029557806313faede6146102c057806318160ddd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906129f8565b6106c3565b6040516101fb9190612a40565b60405180910390f35b34801561021057600080fd5b506102196107a5565b6040516102269190612af4565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612b4c565b610837565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612c01565b6108b3565b005b3480156102a157600080fd5b506102aa6109b7565b6040516102b79190612c50565b60405180910390f35b3480156102cc57600080fd5b506102d56109bd565b6040516102e29190612c50565b60405180910390f35b3480156102f757600080fd5b506103006109c3565b60405161030d9190612c50565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190612c6b565b6109da565b005b34801561034b57600080fd5b506103546109ea565b005b34801561036257600080fd5b5061037d60048036038101906103789190612c01565b610ae1565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612c6b565b610c10565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df3565b610c30565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612b4c565b610cc6565b005b34801561040657600080fd5b50610421600480360381019061041c9190612b4c565b610d4c565b60405161042e9190612bba565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612e3c565b610d62565b60405161046b9190612c50565b60405180910390f35b34801561048057600080fd5b50610489610e31565b005b34801561049757600080fd5b506104a0610eb9565b6040516104ad9190612a40565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612e95565b610ecc565b005b3480156104eb57600080fd5b506104f4610f65565b6040516105019190612bba565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190612b4c565b610f8f565b005b34801561053f57600080fd5b50610548611015565b6040516105559190612af4565b60405180910390f35b61057860048036038101906105739190612b4c565b6110a7565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612ec2565b6111fe565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190612fa3565b611375565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612b4c565b6113ed565b005b34801561060157600080fd5b5061061c60048036038101906106179190612b4c565b6114b8565b6040516106299190612af4565b60405180910390f35b34801561063e57600080fd5b50610647611556565b6040516106549190612c50565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613026565b61155c565b6040516106919190612a40565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612e3c565b6115f0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079e575061079d826116e7565b5b9050919050565b6060600280546107b490613095565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090613095565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b600061084282611751565b610878576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610925576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094461179f565b73ffffffffffffffffffffffffffffffffffffffff16146109a7576109708161096b61179f565b61155c565b6109a6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109b28383836117a7565b505050565b600d5481565b600a5481565b60006109cd611859565b6001546000540303905090565b6109e583838361185e565b505050565b6109f261179f565b73ffffffffffffffffffffffffffffffffffffffff16610a10610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90613112565b60405180910390fd5b600260095403610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061317e565b60405180910390fd5b60026009819055506000479050610ad673f8b8b204bee0d70b611f721b8a477250c6fc37c082611d12565b506001600981905550565b80600081118015610af45750600d548111155b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906131ea565b60405180910390fd5b600b5481600054610b449190613239565b1115610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906132db565b60405180910390fd5b610b8d61179f565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613112565b60405180910390fd5b610c0b8383611e06565b505050565b610c2b83838360405180602001604052806000815250611375565b505050565b610c3861179f565b73ffffffffffffffffffffffffffffffffffffffff16610c56610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613112565b60405180910390fd5b80600c9080519060200190610cc29291906128a6565b5050565b610cce61179f565b73ffffffffffffffffffffffffffffffffffffffff16610cec610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613112565b60405180910390fd5b80600d8190555050565b6000610d5782611e24565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e3961179f565b73ffffffffffffffffffffffffffffffffffffffff16610e57610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613112565b60405180910390fd5b610eb760006120af565b565b600e60009054906101000a900460ff1681565b610ed461179f565b73ffffffffffffffffffffffffffffffffffffffff16610ef2610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613112565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f9761179f565b73ffffffffffffffffffffffffffffffffffffffff16610fb5610f65565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613112565b60405180910390fd5b80600a8190555050565b60606003805461102490613095565b80601f016020809104026020016040519081016040528092919081815260200182805461105090613095565b801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b5050505050905090565b806000811180156110ba5750600d548111155b6110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906131ea565b60405180910390fd5b600b548160005461110a9190613239565b111561114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906132db565b60405180910390fd5b600e60009054906101000a900460ff1661119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613347565b60405180910390fd5b600082600a546111aa9190613367565b9050803410156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061340d565b60405180910390fd5b6111f93384611e06565b505050565b61120661179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061127761179f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661132461179f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113699190612a40565b60405180910390a35050565b61138084848461185e565b61139f8373ffffffffffffffffffffffffffffffffffffffff16612175565b156113e7576113b084848484612198565b6113e6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6113f561179f565b73ffffffffffffffffffffffffffffffffffffffff16611413610f65565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613112565b60405180910390fd5b6000548110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613479565b60405180910390fd5b80600b8190555050565b60606114c382611751565b6114f9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115036122e8565b90506000815103611523576040518060200160405280600081525061154e565b8061152d8461237a565b60405160200161153e9291906134d5565b6040516020818303038152906040525b915050919050565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f861179f565b73ffffffffffffffffffffffffffffffffffffffff16611616610f65565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061356b565b60405180910390fd5b6116e4816120af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161175c611859565b1115801561176b575060005482105b8015611798575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061186982611e24565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118d4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166118f561179f565b73ffffffffffffffffffffffffffffffffffffffff16148061192457506119238561191e61179f565b61155c565b5b80611969575061193261179f565b73ffffffffffffffffffffffffffffffffffffffff1661195184610837565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119a2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a08576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a1585858560016124da565b611a21600084876117a7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ca0576000548214611c9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0b85858560016124e0565b5050505050565b80471015611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906135d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90613628565b60006040518083038185875af1925050503d8060008114611db8576040519150601f19603f3d011682016040523d82523d6000602084013e611dbd565b606091505b5050905080611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906136af565b60405180910390fd5b505050565b611e208282604051806020016040528060008152506124e6565b5050565b611e2c61292c565b600082905080611e3a611859565b1161207857600054811015612077576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161207557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f595780925050506120aa565b5b60011561207457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206f5780925050506120aa565b611f5a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121be61179f565b8786866040518563ffffffff1660e01b81526004016121e09493929190613724565b6020604051808303816000875af192505050801561221c57506040513d601f19601f820116820180604052508101906122199190613785565b60015b612295573d806000811461224c576040519150601f19603f3d011682016040523d82523d6000602084013e612251565b606091505b50600081510361228d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546122f790613095565b80601f016020809104026020016040519081016040528092919081815260200182805461232390613095565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b6060600082036123c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124d5565b600082905060005b600082146123f35780806123dc906137b2565b915050600a826123ec9190613829565b91506123c9565b60008167ffffffffffffffff81111561240f5761240e612cc8565b5b6040519080825280601f01601f1916602001820160405280156124415781602001600182028036833780820191505090505b5090505b600085146124ce5760018261245a919061385a565b9150600a85612469919061388e565b60306124759190613239565b60f81b81838151811061248b5761248a6138bf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124c79190613829565b9450612445565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612552576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361258c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61259960008583866124da565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061275a8673ffffffffffffffffffffffffffffffffffffffff16612175565b1561281f575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127cf6000878480600101955087612198565b612805576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061276057826000541461281a57600080fd5b61288a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612820575b8160008190555050506128a060008583866124e0565b50505050565b8280546128b290613095565b90600052602060002090601f0160209004810192826128d4576000855561291b565b82601f106128ed57805160ff191683800117855561291b565b8280016001018555821561291b579182015b8281111561291a5782518255916020019190600101906128ff565b5b509050612928919061296f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612988576000816000905550600101612970565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d5816129a0565b81146129e057600080fd5b50565b6000813590506129f2816129cc565b92915050565b600060208284031215612a0e57612a0d612996565b5b6000612a1c848285016129e3565b91505092915050565b60008115159050919050565b612a3a81612a25565b82525050565b6000602082019050612a556000830184612a31565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a95578082015181840152602081019050612a7a565b83811115612aa4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac682612a5b565b612ad08185612a66565b9350612ae0818560208601612a77565b612ae981612aaa565b840191505092915050565b60006020820190508181036000830152612b0e8184612abb565b905092915050565b6000819050919050565b612b2981612b16565b8114612b3457600080fd5b50565b600081359050612b4681612b20565b92915050565b600060208284031215612b6257612b61612996565b5b6000612b7084828501612b37565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ba482612b79565b9050919050565b612bb481612b99565b82525050565b6000602082019050612bcf6000830184612bab565b92915050565b612bde81612b99565b8114612be957600080fd5b50565b600081359050612bfb81612bd5565b92915050565b60008060408385031215612c1857612c17612996565b5b6000612c2685828601612bec565b9250506020612c3785828601612b37565b9150509250929050565b612c4a81612b16565b82525050565b6000602082019050612c656000830184612c41565b92915050565b600080600060608486031215612c8457612c83612996565b5b6000612c9286828701612bec565b9350506020612ca386828701612bec565b9250506040612cb486828701612b37565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0082612aaa565b810181811067ffffffffffffffff82111715612d1f57612d1e612cc8565b5b80604052505050565b6000612d3261298c565b9050612d3e8282612cf7565b919050565b600067ffffffffffffffff821115612d5e57612d5d612cc8565b5b612d6782612aaa565b9050602081019050919050565b82818337600083830152505050565b6000612d96612d9184612d43565b612d28565b905082815260208101848484011115612db257612db1612cc3565b5b612dbd848285612d74565b509392505050565b600082601f830112612dda57612dd9612cbe565b5b8135612dea848260208601612d83565b91505092915050565b600060208284031215612e0957612e08612996565b5b600082013567ffffffffffffffff811115612e2757612e2661299b565b5b612e3384828501612dc5565b91505092915050565b600060208284031215612e5257612e51612996565b5b6000612e6084828501612bec565b91505092915050565b612e7281612a25565b8114612e7d57600080fd5b50565b600081359050612e8f81612e69565b92915050565b600060208284031215612eab57612eaa612996565b5b6000612eb984828501612e80565b91505092915050565b60008060408385031215612ed957612ed8612996565b5b6000612ee785828601612bec565b9250506020612ef885828601612e80565b9150509250929050565b600067ffffffffffffffff821115612f1d57612f1c612cc8565b5b612f2682612aaa565b9050602081019050919050565b6000612f46612f4184612f02565b612d28565b905082815260208101848484011115612f6257612f61612cc3565b5b612f6d848285612d74565b509392505050565b600082601f830112612f8a57612f89612cbe565b5b8135612f9a848260208601612f33565b91505092915050565b60008060008060808587031215612fbd57612fbc612996565b5b6000612fcb87828801612bec565b9450506020612fdc87828801612bec565b9350506040612fed87828801612b37565b925050606085013567ffffffffffffffff81111561300e5761300d61299b565b5b61301a87828801612f75565b91505092959194509250565b6000806040838503121561303d5761303c612996565b5b600061304b85828601612bec565b925050602061305c85828601612bec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ad57607f821691505b6020821081036130c0576130bf613066565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130fc602083612a66565b9150613107826130c6565b602082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613168601f83612a66565b915061317382613132565b602082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006131d4601483612a66565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324482612b16565b915061324f83612b16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132845761328361320a565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006132c5601483612a66565b91506132d08261328f565b602082019050919050565b600060208201905081810360008301526132f4816132b8565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b6000613331601383612a66565b915061333c826132fb565b602082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b600061337282612b16565b915061337d83612b16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b6576133b561320a565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006133f7601383612a66565b9150613402826133c1565b602082019050919050565b60006020820190508181036000830152613426816133ea565b9050919050565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b6000613463601683612a66565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b600081905092915050565b60006134af82612a5b565b6134b98185613499565b93506134c9818560208601612a77565b80840191505092915050565b60006134e182856134a4565b91506134ed82846134a4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613555602683612a66565b9150613560826134f9565b604082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006135c1601d83612a66565b91506135cc8261358b565b602082019050919050565b600060208201905081810360008301526135f0816135b4565b9050919050565b600081905092915050565b50565b60006136126000836135f7565b915061361d82613602565b600082019050919050565b600061363382613605565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613699603a83612a66565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136f6826136cf565b61370081856136da565b9350613710818560208601612a77565b61371981612aaa565b840191505092915050565b60006080820190506137396000830187612bab565b6137466020830186612bab565b6137536040830185612c41565b818103606083015261376581846136eb565b905095945050505050565b60008151905061377f816129cc565b92915050565b60006020828403121561379b5761379a612996565b5b60006137a984828501613770565b91505092915050565b60006137bd82612b16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ef576137ee61320a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383482612b16565b915061383f83612b16565b92508261384f5761384e6137fa565b5b828204905092915050565b600061386582612b16565b915061387083612b16565b9250828210156138835761388261320a565b5b828203905092915050565b600061389982612b16565b91506138a483612b16565b9250826138b4576138b36137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b442f859279bf313758240db52d3981b3c81b97604fa9f3a7299f28ebb55afcc64736f6c634300080e0033

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

00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f446f6f646c6573506173732e6170702f6d657461646174612f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : price (uint256): 2000000000000000
Arg [1] : max_Supply (uint256): 2500
Arg [2] : baseUri (string): https://DoodlesPass.app/metadata/
Arg [3] : maxMintPerTx (uint256): 50
Arg [4] : isSaleActive (bool): True

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000071afd498d0000
Arg [1] : 00000000000000000000000000000000000000000000000000000000000009c4
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [6] : 68747470733a2f2f446f6f646c6573506173732e6170702f6d65746164617461
Arg [7] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

50236:2828:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31337:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35956:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35518:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50420:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50333:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52824:237;;;;;;;;;;;;;:::i;:::-;;52620:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37062:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51552:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51680:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34260:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31706:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;50464:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51810:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51256:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34621:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52280:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36232:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37318:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51361:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34796:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50359:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36590:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31337:305;31439:4;31491:25;31476:40;;;:11;:40;;;;:105;;;;31548:33;31533:48;;;:11;:48;;;;31476:105;:158;;;;31598:36;31622:11;31598:23;:36::i;:::-;31476:158;31456:178;;31337:305;;;:::o;34452:100::-;34506:13;34539:5;34532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:100;:::o;35956:204::-;36024:7;36049:16;36057:7;36049;:16::i;:::-;36044:64;;36074:34;;;;;;;;;;;;;;36044:64;36128:15;:24;36144:7;36128:24;;;;;;;;;;;;;;;;;;;;;36121:31;;35956:204;;;:::o;35518:372::-;35591:13;35607:24;35623:7;35607:15;:24::i;:::-;35591:40;;35652:5;35646:11;;:2;:11;;;35642:48;;35666:24;;;;;;;;;;;;;;35642:48;35723:5;35707:21;;:12;:10;:12::i;:::-;:21;;;35703:139;;35734:37;35751:5;35758:12;:10;:12::i;:::-;35734:16;:37::i;:::-;35730:112;;35795:35;;;;;;;;;;;;;;35730:112;35703:139;35854:28;35863:2;35867:7;35876:5;35854:8;:28::i;:::-;35580:310;35518:372;;:::o;50420:37::-;;;;:::o;50333:19::-;;;;:::o;30577:312::-;30630:7;30855:15;:13;:15::i;:::-;30840:12;;30824:13;;:28;:46;30817:53;;30577:312;:::o;36821:170::-;36955:28;36965:4;36971:2;36975:7;36955:9;:28::i;:::-;36821:170;;;:::o;52824:237::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1:::1;2443:7;;:19:::0;2435:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;52885:15:::2;52903:21;52885:39;;52937:116;52977:42;53035:7;52937:17;:116::i;:::-;52874:187;1801:1:::1;2755:7;:22;;;;52824:237::o:0;52620:174::-;52711:11;52041:1;52027:11;:15;:56;;;;;52061:22;;52046:11;:37;;52027:56;52005:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52195:9;;52180:11;52164:13;;:27;;;;:::i;:::-;:40;;52142:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7102:12:::1;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52759:27:::2;52769:3;52774:11;52759:9;:27::i;:::-;52620:174:::0;;;:::o;37062:185::-;37200:39;37217:4;37223:2;37227:7;37200:39;;;;;;;;;;;;:16;:39::i;:::-;37062:185;;;:::o;51552:113::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51643:14:::1;51632:8;:25;;;;;;;;;;;;:::i;:::-;;51552:113:::0;:::o;51680:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51782:12:::1;51757:22;:37;;;;51680:122:::0;:::o;34260:125::-;34324:7;34351:21;34364:7;34351:12;:21::i;:::-;:26;;;34344:33;;34260:125;;;:::o;31706:206::-;31770:7;31811:1;31794:19;;:5;:19;;;31790:60;;31822:28;;;;;;;;;;;;;;31790:60;31876:12;:19;31889:5;31876:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31868:36;;31861:43;;31706:206;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;50464:26::-;;;;;;;;;;;;;:::o;51810:109::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51899:12:::1;51882:14;;:29;;;;;;;;;;;;;;;;;;51810:109:::0;:::o;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;51256:95::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51332:11:::1;51325:4;:18;;;;51256:95:::0;:::o;34621:104::-;34677:13;34710:7;34703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34621:104;:::o;52280:332::-;52372:11;52041:1;52027:11;:15;:56;;;;;52061:22;;52046:11;:37;;52027:56;52005:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52195:9;;52180:11;52164:13;;:27;;;;:::i;:::-;:40;;52142:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;52409:14:::1;;;;;;;;;;;52401:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52460:13;52483:11;52476:4;;:18;;;;:::i;:::-;52460:34;;52528:5;52515:9;:18;;52507:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52570:34;52580:10;52592:11;52570:9;:34::i;:::-;52390:222;52280:332:::0;;:::o;36232:287::-;36343:12;:10;:12::i;:::-;36331:24;;:8;:24;;;36327:54;;36364:17;;;;;;;;;;;;;;36327:54;36439:8;36394:18;:32;36413:12;:10;:12::i;:::-;36394:32;;;;;;;;;;;;;;;:42;36427:8;36394:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36492:8;36463:48;;36478:12;:10;:12::i;:::-;36463:48;;;36502:8;36463:48;;;;;;:::i;:::-;;;;;;;;36232:287;;:::o;37318:370::-;37485:28;37495:4;37501:2;37505:7;37485:9;:28::i;:::-;37528:15;:2;:13;;;:15::i;:::-;37524:157;;;37549:56;37580:4;37586:2;37590:7;37599:5;37549:30;:56::i;:::-;37545:136;;37629:40;;;;;;;;;;;;;;37545:136;37524:157;37318:370;;;;:::o;51361:183::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51461:13:::1;;51445:12;:29;;51437:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51524:12;51512:9;:24;;;;51361:183:::0;:::o;34796:318::-;34869:13;34900:16;34908:7;34900;:16::i;:::-;34895:59;;34925:29;;;;;;;;;;;;;;34895:59;34967:21;34991:10;:8;:10::i;:::-;34967:34;;35044:1;35025:7;35019:21;:26;:87;;;;;;;;;;;;;;;;;35072:7;35081:18;:7;:16;:18::i;:::-;35055:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35019:87;35012:94;;;34796:318;;;:::o;50359:24::-;;;;:::o;36590:164::-;36687:4;36711:18;:25;36730:5;36711:25;;;;;;;;;;;;;;;:35;36737:8;36711:35;;;;;;;;;;;;;;;;;;;;;;;;;36704:42;;36590:164;;;;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;::::0;7861:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;19678:157::-;19763:4;19802:25;19787:40;;;:11;:40;;;;19780:47;;19678:157;;;:::o;37943:174::-;38000:4;38043:7;38024:15;:13;:15::i;:::-;:26;;:53;;;;;38064:13;;38054:7;:23;38024:53;:85;;;;;38082:11;:20;38094:7;38082:20;;;;;;;;;;;:27;;;;;;;;;;;;38081:28;38024:85;38017:92;;37943:174;;;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;47165:196::-;47307:2;47280:15;:24;47296:7;47280:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47345:7;47341:2;47325:28;;47334:5;47325:28;;;;;;;;;;;;47165:196;;;:::o;30351:92::-;30407:7;30351:92;:::o;42113:2130::-;42228:35;42266:21;42279:7;42266:12;:21::i;:::-;42228:59;;42326:4;42304:26;;:13;:18;;;:26;;;42300:67;;42339:28;;;;;;;;;;;;;;42300:67;42380:22;42422:4;42406:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42443:36;42460:4;42466:12;:10;:12::i;:::-;42443:16;:36::i;:::-;42406:73;:126;;;;42520:12;:10;:12::i;:::-;42496:36;;:20;42508:7;42496:11;:20::i;:::-;:36;;;42406:126;42380:153;;42551:17;42546:66;;42577:35;;;;;;;;;;;;;;42546:66;42641:1;42627:16;;:2;:16;;;42623:52;;42652:23;;;;;;;;;;;;;;42623:52;42688:43;42710:4;42716:2;42720:7;42729:1;42688:21;:43::i;:::-;42796:35;42813:1;42817:7;42826:4;42796:8;:35::i;:::-;43157:1;43127:12;:18;43140:4;43127:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43201:1;43173:12;:16;43186:2;43173:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43219:31;43253:11;:20;43265:7;43253:20;;;;;;;;;;;43219:54;;43304:2;43288:8;:13;;;:18;;;;;;;;;;;;;;;;;;43354:15;43321:8;:23;;;:49;;;;;;;;;;;;;;;;;;43622:19;43654:1;43644:7;:11;43622:33;;43670:31;43704:11;:24;43716:11;43704:24;;;;;;;;;;;43670:58;;43772:1;43747:27;;:8;:13;;;;;;;;;;;;:27;;;43743:384;;43957:13;;43942:11;:28;43938:174;;44011:4;43995:8;:13;;;:20;;;;;;;;;;;;;;;;;;44064:13;:28;;;44038:8;:23;;;:54;;;;;;;;;;;;;;;;;;43938:174;43743:384;43102:1036;;;44174:7;44170:2;44155:27;;44164:4;44155:27;;;;;;;;;;;;44193:42;44214:4;44220:2;44224:7;44233:1;44193:20;:42::i;:::-;42217:2026;;42113:2130;;;:::o;10833:317::-;10948:6;10923:21;:31;;10915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11002:12;11020:9;:14;;11042:6;11020:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11001:52;;;11072:7;11064:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10904:246;10833:317;;:::o;38201:104::-;38270:27;38280:2;38284:8;38270:27;;;;;;;;;;;;:9;:27::i;:::-;38201:104;;:::o;33087:1111::-;33149:21;;:::i;:::-;33183:12;33198:7;33183:22;;33266:4;33247:15;:13;:15::i;:::-;:23;33243:888;;33283:13;;33276:4;:20;33272:859;;;33317:31;33351:11;:17;33363:4;33351:17;;;;;;;;;;;33317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33392:9;:16;;;33387:729;;33463:1;33437:28;;:9;:14;;;:28;;;33433:101;;33501:9;33494:16;;;;;;33433:101;33836:261;33843:4;33836:261;;;33876:6;;;;;;;;33921:11;:17;33933:4;33921:17;;;;;;;;;;;33909:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33995:1;33969:28;;:9;:14;;;:28;;;33965:109;;34037:9;34030:16;;;;;;33965:109;33836:261;;;33387:729;33298:833;33272:859;33243:888;34159:31;;;;;;;;;;;;;;33087:1111;;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;9572:326::-;9632:4;9889:1;9867:7;:19;;;:23;9860:30;;9572:326;;;:::o;47853:667::-;48016:4;48053:2;48037:36;;;48074:12;:10;:12::i;:::-;48088:4;48094:7;48103:5;48037:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48033:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48288:1;48271:6;:13;:18;48267:235;;48317:40;;;;;;;;;;;;;;48267:235;48460:6;48454:13;48445:6;48441:2;48437:15;48430:38;48033:480;48166:45;;;48156:55;;;:6;:55;;;;48149:62;;;47853:667;;;;;;:::o;51116:109::-;51176:13;51209:8;51202:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51116:109;:::o;3157:723::-;3213:13;3443:1;3434:5;:10;3430:53;;3461:10;;;;;;;;;;;;;;;;;;;;;3430:53;3493:12;3508:5;3493:20;;3524:14;3549:78;3564:1;3556:4;:9;3549:78;;3582:8;;;;;:::i;:::-;;;;3613:2;3605:10;;;;;:::i;:::-;;;3549:78;;;3637:19;3669:6;3659:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:39;;3687:154;3703:1;3694:5;:10;3687:154;;3731:1;3721:11;;;;;:::i;:::-;;;3798:2;3790:5;:10;;;;:::i;:::-;3777:2;:24;;;;:::i;:::-;3764:39;;3747:6;3754;3747:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3827:2;3818:11;;;;;:::i;:::-;;;3687:154;;;3865:6;3851:21;;;;;3157:723;;;;:::o;49168:159::-;;;;;:::o;49986:158::-;;;;;:::o;38678:1749::-;38801:20;38824:13;;38801:36;;38866:1;38852:16;;:2;:16;;;38848:48;;38877:19;;;;;;;;;;;;;;38848:48;38923:1;38911:8;:13;38907:44;;38933:18;;;;;;;;;;;;;;38907:44;38964:61;38994:1;38998:2;39002:12;39016:8;38964:21;:61::i;:::-;39337:8;39302:12;:16;39315:2;39302:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39401:8;39361:12;:16;39374:2;39361:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39460:2;39427:11;:25;39439:12;39427:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39527:15;39477:11;:25;39489:12;39477:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39560:20;39583:12;39560:35;;39610:11;39639:8;39624:12;:23;39610:37;;39668:15;:2;:13;;;:15::i;:::-;39664:631;;;39704:313;39760:12;39756:2;39735:38;;39752:1;39735:38;;;;;;;;;;;;39801:69;39840:1;39844:2;39848:14;;;;;;39864:5;39801:30;:69::i;:::-;39796:174;;39906:40;;;;;;;;;;;;;;39796:174;40012:3;39997:12;:18;39704:313;;40098:12;40081:13;;:29;40077:43;;40112:8;;;40077:43;39664:631;;;40161:119;40217:14;;;;;;40213:2;40192:40;;40209:1;40192:40;;;;;;;;;;;;40275:3;40260:12;:18;40161:119;;39664:631;40325:12;40309:13;:28;;;;39277:1072;;40359:60;40388:1;40392:2;40396:12;40410:8;40359:20;:60::i;:::-;38790:1637;38678:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:323::-;9188:6;9237:2;9225:9;9216:7;9212:23;9208:32;9205:119;;;9243:79;;:::i;:::-;9205:119;9363:1;9388:50;9430:7;9421:6;9410:9;9406:22;9388:50;:::i;:::-;9378:60;;9334:114;9132:323;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:180::-;12498:77;12495:1;12488:88;12595:4;12592:1;12585:15;12619:4;12616:1;12609:15;12636:320;12680:6;12717:1;12711:4;12707:12;12697:22;;12764:1;12758:4;12754:12;12785:18;12775:81;;12841:4;12833:6;12829:17;12819:27;;12775:81;12903:2;12895:6;12892:14;12872:18;12869:38;12866:84;;12922:18;;:::i;:::-;12866:84;12687:269;12636:320;;;:::o;12962:182::-;13102:34;13098:1;13090:6;13086:14;13079:58;12962:182;:::o;13150:366::-;13292:3;13313:67;13377:2;13372:3;13313:67;:::i;:::-;13306:74;;13389:93;13478:3;13389:93;:::i;:::-;13507:2;13502:3;13498:12;13491:19;;13150:366;;;:::o;13522:419::-;13688:4;13726:2;13715:9;13711:18;13703:26;;13775:9;13769:4;13765:20;13761:1;13750:9;13746:17;13739:47;13803:131;13929:4;13803:131;:::i;:::-;13795:139;;13522:419;;;:::o;13947:181::-;14087:33;14083:1;14075:6;14071:14;14064:57;13947:181;:::o;14134:366::-;14276:3;14297:67;14361:2;14356:3;14297:67;:::i;:::-;14290:74;;14373:93;14462:3;14373:93;:::i;:::-;14491:2;14486:3;14482:12;14475:19;;14134:366;;;:::o;14506:419::-;14672:4;14710:2;14699:9;14695:18;14687:26;;14759:9;14753:4;14749:20;14745:1;14734:9;14730:17;14723:47;14787:131;14913:4;14787:131;:::i;:::-;14779:139;;14506:419;;;:::o;14931:170::-;15071:22;15067:1;15059:6;15055:14;15048:46;14931:170;:::o;15107:366::-;15249:3;15270:67;15334:2;15329:3;15270:67;:::i;:::-;15263:74;;15346:93;15435:3;15346:93;:::i;:::-;15464:2;15459:3;15455:12;15448:19;;15107:366;;;:::o;15479:419::-;15645:4;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:131;15886:4;15760:131;:::i;:::-;15752:139;;15479:419;;;:::o;15904:180::-;15952:77;15949:1;15942:88;16049:4;16046:1;16039:15;16073:4;16070:1;16063:15;16090:305;16130:3;16149:20;16167:1;16149:20;:::i;:::-;16144:25;;16183:20;16201:1;16183:20;:::i;:::-;16178:25;;16337:1;16269:66;16265:74;16262:1;16259:81;16256:107;;;16343:18;;:::i;:::-;16256:107;16387:1;16384;16380:9;16373:16;;16090:305;;;;:::o;16401:170::-;16541:22;16537:1;16529:6;16525:14;16518:46;16401:170;:::o;16577:366::-;16719:3;16740:67;16804:2;16799:3;16740:67;:::i;:::-;16733:74;;16816:93;16905:3;16816:93;:::i;:::-;16934:2;16929:3;16925:12;16918:19;;16577:366;;;:::o;16949:419::-;17115:4;17153:2;17142:9;17138:18;17130:26;;17202:9;17196:4;17192:20;17188:1;17177:9;17173:17;17166:47;17230:131;17356:4;17230:131;:::i;:::-;17222:139;;16949:419;;;:::o;17374:169::-;17514:21;17510:1;17502:6;17498:14;17491:45;17374:169;:::o;17549:366::-;17691:3;17712:67;17776:2;17771:3;17712:67;:::i;:::-;17705:74;;17788:93;17877:3;17788:93;:::i;:::-;17906:2;17901:3;17897:12;17890:19;;17549:366;;;:::o;17921:419::-;18087:4;18125:2;18114:9;18110:18;18102:26;;18174:9;18168:4;18164:20;18160:1;18149:9;18145:17;18138:47;18202:131;18328:4;18202:131;:::i;:::-;18194:139;;17921:419;;;:::o;18346:348::-;18386:7;18409:20;18427:1;18409:20;:::i;:::-;18404:25;;18443:20;18461:1;18443:20;:::i;:::-;18438:25;;18631:1;18563:66;18559:74;18556:1;18553:81;18548:1;18541:9;18534:17;18530:105;18527:131;;;18638:18;;:::i;:::-;18527:131;18686:1;18683;18679:9;18668:20;;18346:348;;;;:::o;18700:169::-;18840:21;18836:1;18828:6;18824:14;18817:45;18700:169;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:172::-;19812:24;19808:1;19800:6;19796:14;19789:48;19672:172;:::o;19850:366::-;19992:3;20013:67;20077:2;20072:3;20013:67;:::i;:::-;20006:74;;20089:93;20178:3;20089:93;:::i;:::-;20207:2;20202:3;20198:12;20191:19;;19850:366;;;:::o;20222:419::-;20388:4;20426:2;20415:9;20411:18;20403:26;;20475:9;20469:4;20465:20;20461:1;20450:9;20446:17;20439:47;20503:131;20629:4;20503:131;:::i;:::-;20495:139;;20222:419;;;:::o;20647:148::-;20749:11;20786:3;20771:18;;20647:148;;;;:::o;20801:377::-;20907:3;20935:39;20968:5;20935:39;:::i;:::-;20990:89;21072:6;21067:3;20990:89;:::i;:::-;20983:96;;21088:52;21133:6;21128:3;21121:4;21114:5;21110:16;21088:52;:::i;:::-;21165:6;21160:3;21156:16;21149:23;;20911:267;20801:377;;;;:::o;21184:435::-;21364:3;21386:95;21477:3;21468:6;21386:95;:::i;:::-;21379:102;;21498:95;21589:3;21580:6;21498:95;:::i;:::-;21491:102;;21610:3;21603:10;;21184:435;;;;;:::o;21625:225::-;21765:34;21761:1;21753:6;21749:14;21742:58;21834:8;21829:2;21821:6;21817:15;21810:33;21625:225;:::o;21856:366::-;21998:3;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22095:93;22184:3;22095:93;:::i;:::-;22213:2;22208:3;22204:12;22197:19;;21856:366;;;:::o;22228:419::-;22394:4;22432:2;22421:9;22417:18;22409:26;;22481:9;22475:4;22471:20;22467:1;22456:9;22452:17;22445:47;22509:131;22635:4;22509:131;:::i;:::-;22501:139;;22228:419;;;:::o;22653:179::-;22793:31;22789:1;22781:6;22777:14;22770:55;22653:179;:::o;22838:366::-;22980:3;23001:67;23065:2;23060:3;23001:67;:::i;:::-;22994:74;;23077:93;23166:3;23077:93;:::i;:::-;23195:2;23190:3;23186:12;23179:19;;22838:366;;;:::o;23210:419::-;23376:4;23414:2;23403:9;23399:18;23391:26;;23463:9;23457:4;23453:20;23449:1;23438:9;23434:17;23427:47;23491:131;23617:4;23491:131;:::i;:::-;23483:139;;23210:419;;;:::o;23635:147::-;23736:11;23773:3;23758:18;;23635:147;;;;:::o;23788:114::-;;:::o;23908:398::-;24067:3;24088:83;24169:1;24164:3;24088:83;:::i;:::-;24081:90;;24180:93;24269:3;24180:93;:::i;:::-;24298:1;24293:3;24289:11;24282:18;;23908:398;;;:::o;24312:379::-;24496:3;24518:147;24661:3;24518:147;:::i;:::-;24511:154;;24682:3;24675:10;;24312:379;;;:::o;24697:245::-;24837:34;24833:1;24825:6;24821:14;24814:58;24906:28;24901:2;24893:6;24889:15;24882:53;24697:245;:::o;24948:366::-;25090:3;25111:67;25175:2;25170:3;25111:67;:::i;:::-;25104:74;;25187:93;25276:3;25187:93;:::i;:::-;25305:2;25300:3;25296:12;25289:19;;24948:366;;;:::o;25320:419::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:98::-;25796:6;25830:5;25824:12;25814:22;;25745:98;;;:::o;25849:168::-;25932:11;25966:6;25961:3;25954:19;26006:4;26001:3;25997:14;25982:29;;25849:168;;;;:::o;26023:360::-;26109:3;26137:38;26169:5;26137:38;:::i;:::-;26191:70;26254:6;26249:3;26191:70;:::i;:::-;26184:77;;26270:52;26315:6;26310:3;26303:4;26296:5;26292:16;26270:52;:::i;:::-;26347:29;26369:6;26347:29;:::i;:::-;26342:3;26338:39;26331:46;;26113:270;26023:360;;;;:::o;26389:640::-;26584:4;26622:3;26611:9;26607:19;26599:27;;26636:71;26704:1;26693:9;26689:17;26680:6;26636:71;:::i;:::-;26717:72;26785:2;26774:9;26770:18;26761:6;26717:72;:::i;:::-;26799;26867:2;26856:9;26852:18;26843:6;26799:72;:::i;:::-;26918:9;26912:4;26908:20;26903:2;26892:9;26888:18;26881:48;26946:76;27017:4;27008:6;26946:76;:::i;:::-;26938:84;;26389:640;;;;;;;:::o;27035:141::-;27091:5;27122:6;27116:13;27107:22;;27138:32;27164:5;27138:32;:::i;:::-;27035:141;;;;:::o;27182:349::-;27251:6;27300:2;27288:9;27279:7;27275:23;27271:32;27268:119;;;27306:79;;:::i;:::-;27268:119;27426:1;27451:63;27506:7;27497:6;27486:9;27482:22;27451:63;:::i;:::-;27441:73;;27397:127;27182:349;;;;:::o;27537:233::-;27576:3;27599:24;27617:5;27599:24;:::i;:::-;27590:33;;27645:66;27638:5;27635:77;27632:103;;27715:18;;:::i;:::-;27632:103;27762:1;27755:5;27751:13;27744:20;;27537:233;;;:::o;27776:180::-;27824:77;27821:1;27814:88;27921:4;27918:1;27911:15;27945:4;27942:1;27935:15;27962:185;28002:1;28019:20;28037:1;28019:20;:::i;:::-;28014:25;;28053:20;28071:1;28053:20;:::i;:::-;28048:25;;28092:1;28082:35;;28097:18;;:::i;:::-;28082:35;28139:1;28136;28132:9;28127:14;;27962:185;;;;:::o;28153:191::-;28193:4;28213:20;28231:1;28213:20;:::i;:::-;28208:25;;28247:20;28265:1;28247:20;:::i;:::-;28242:25;;28286:1;28283;28280:8;28277:34;;;28291:18;;:::i;:::-;28277:34;28336:1;28333;28329:9;28321:17;;28153:191;;;;:::o;28350:176::-;28382:1;28399:20;28417:1;28399:20;:::i;:::-;28394:25;;28433:20;28451:1;28433:20;:::i;:::-;28428:25;;28472:1;28462:35;;28477:18;;:::i;:::-;28462:35;28518:1;28515;28511:9;28506:14;;28350:176;;;;:::o;28532:180::-;28580:77;28577:1;28570:88;28677:4;28674:1;28667:15;28701:4;28698:1;28691:15

Swarm Source

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