Token Ultimate Doodled Punks

 

Overview ERC-721

Total Supply:
667 UDP

Holders:
152 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UltimateDoodledPunks

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*

 /$$   /$$ /$$   /$$     /$$                           /$$                     /$$$$$$$                            /$$ /$$                 /$$       /$$$$$$$                      /$$                
| $$  | $$| $$  | $$    |__/                          | $$                    | $$__  $$                          | $$| $$                | $$      | $$__  $$                    | $$                
| $$  | $$| $$ /$$$$$$   /$$ /$$$$$$/$$$$   /$$$$$$  /$$$$$$    /$$$$$$       | $$  \ $$  /$$$$$$   /$$$$$$   /$$$$$$$| $$  /$$$$$$   /$$$$$$$      | $$  \ $$ /$$   /$$ /$$$$$$$ | $$   /$$  /$$$$$$$
| $$  | $$| $$|_  $$_/  | $$| $$_  $$_  $$ |____  $$|_  $$_/   /$$__  $$      | $$  | $$ /$$__  $$ /$$__  $$ /$$__  $$| $$ /$$__  $$ /$$__  $$      | $$$$$$$/| $$  | $$| $$__  $$| $$  /$$/ /$$_____/
| $$  | $$| $$  | $$    | $$| $$ \ $$ \ $$  /$$$$$$$  | $$    | $$$$$$$$      | $$  | $$| $$  \ $$| $$  \ $$| $$  | $$| $$| $$$$$$$$| $$  | $$      | $$____/ | $$  | $$| $$  \ $$| $$$$$$/ |  $$$$$$ 
| $$  | $$| $$  | $$ /$$| $$| $$ | $$ | $$ /$$__  $$  | $$ /$$| $$_____/      | $$  | $$| $$  | $$| $$  | $$| $$  | $$| $$| $$_____/| $$  | $$      | $$      | $$  | $$| $$  | $$| $$_  $$  \____  $$
|  $$$$$$/| $$  |  $$$$/| $$| $$ | $$ | $$|  $$$$$$$  |  $$$$/|  $$$$$$$      | $$$$$$$/|  $$$$$$/|  $$$$$$/|  $$$$$$$| $$|  $$$$$$$|  $$$$$$$      | $$      |  $$$$$$/| $$  | $$| $$ \  $$ /$$$$$$$/
 \______/ |__/   \___/  |__/|__/ |__/ |__/ \_______/   \___/   \_______/      |_______/  \______/  \______/  \_______/|__/ \_______/ \_______/      |__/       \______/ |__/  |__/|__/  \__/|_______/ 
                                                                                                                                                  
    krownlabs.app
    twitter.com/krownlabs
    discord.com/invite/HKkdURqxHU 
    
    Come join the family!

*/                                                                                                                                                  
// File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/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/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

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

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

pragma solidity >=0.7.0 <0.9.0;

contract UltimateDoodledPunks is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 25 ether;
  uint256 public maxSupply = 1111;
  uint256 public maxMintAmount = 20;
  bool public paused = false;
  bool public revealed = false;
  string public notRevealedUri;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

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

  // public
  function mintUDP(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
      require(msg.value >= cost * _mintAmount);
    }

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

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintUDP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600c919062000201565b5068015af1d78b58c40000600d55610457600e556014600f556010805461ffff191690553480156200005957600080fd5b5060405162003603380380620036038339810160408190526200007c9162000374565b8351849084906200009590600090602085019062000201565b508051620000ab90600190602084019062000201565b505050620000c8620000c2620000e860201b60201c565b620000ec565b620000d3826200013e565b620000de81620001a6565b5050505062000469565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200018d5760405162461bcd60e51b81526020600482018190526024820152600080516020620035e383398151915260448201526064015b60405180910390fd5b8051620001a290600b90602084019062000201565b5050565b600a546001600160a01b03163314620001f15760405162461bcd60e51b81526020600482018190526024820152600080516020620035e3833981519152604482015260640162000184565b8051620001a29060119060208401905b8280546200020f906200042d565b90600052602060002090601f0160209004810192826200023357600085556200027e565b82601f106200024e57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027e57825182559160200191906001019062000261565b506200028c92915062000290565b5090565b5b808211156200028c576000815560010162000291565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002cf57600080fd5b81516001600160401b0380821115620002ec57620002ec620002a7565b604051601f8301601f19908116603f01168101908282118183101715620003175762000317620002a7565b816040528381526020925086838588010111156200033457600080fd5b600091505b8382101562000358578582018301518183018401529082019062000339565b838211156200036a5760008385830101525b9695505050505050565b600080600080608085870312156200038b57600080fd5b84516001600160401b0380821115620003a357600080fd5b620003b188838901620002bd565b95506020870151915080821115620003c857600080fd5b620003d688838901620002bd565b94506040870151915080821115620003ed57600080fd5b620003fb88838901620002bd565b935060608701519150808211156200041257600080fd5b506200042187828801620002bd565b91505092959194509250565b600181811c908216806200044257607f821691505b6020821081036200046357634e487b7160e01b600052602260045260246000fd5b50919050565b61316a80620004796000396000f3fe60806040526004361061024f5760003560e01c806355f804b311610138578063a475b5dd116100b0578063d5abeb011161007f578063e985e9c511610064578063e985e9c51461064c578063f2c4ce1e146106a2578063f2fde38b146106c257600080fd5b8063d5abeb0114610616578063da3ef23f1461062c57600080fd5b8063a475b5dd146105ac578063b88d4fde146105c1578063c6682862146105e1578063c87b56dd146105f657600080fd5b8063715018a6116101075780638da5cb5b116100ec5780638da5cb5b1461054c57806395d89b4114610577578063a22cb4651461058c57600080fd5b8063715018a6146105175780637f00c7a61461052c57600080fd5b806355f804b31461049d5780635c975abb146104bd5780636352211e146104d757806370a08231146104f757600080fd5b806323b872dd116101cb57806342842e0e1161019a57806344a0d68a1161017f57806344a0d68a1461043e5780634f6ccce71461045e578063518302271461047e57600080fd5b806342842e0e146103f1578063438b63001461041157600080fd5b806323b872dd146103965780632f745c59146103b657806336df0226146103d65780633ccfd60b146103e957600080fd5b8063081c8c441161022257806313faede61161020757806313faede61461034757806318160ddd1461036b578063239c70ae1461038057600080fd5b8063081c8c4414610312578063095ea7b31461032757600080fd5b806301ffc9a71461025457806302329a291461028957806306fdde03146102ab578063081812fc146102cd575b600080fd5b34801561026057600080fd5b5061027461026f366004612a3c565b6106e2565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b506102a96102a4366004612a6e565b61073e565b005b3480156102b757600080fd5b506102c06107f5565b6040516102809190612aff565b3480156102d957600080fd5b506102ed6102e8366004612b12565b610887565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610280565b34801561031e57600080fd5b506102c0610961565b34801561033357600080fd5b506102a9610342366004612b4f565b6109ef565b34801561035357600080fd5b5061035d600d5481565b604051908152602001610280565b34801561037757600080fd5b5060085461035d565b34801561038c57600080fd5b5061035d600f5481565b3480156103a257600080fd5b506102a96103b1366004612b79565b610b7b565b3480156103c257600080fd5b5061035d6103d1366004612b4f565b610c1c565b6102a96103e4366004612b12565b610ceb565b6102a9610da5565b3480156103fd57600080fd5b506102a961040c366004612b79565b610eb4565b34801561041d57600080fd5b5061043161042c366004612bb5565b610ecf565b6040516102809190612bd0565b34801561044a57600080fd5b506102a9610459366004612b12565b610f71565b34801561046a57600080fd5b5061035d610479366004612b12565b610ff7565b34801561048a57600080fd5b5060105461027490610100900460ff1681565b3480156104a957600080fd5b506102a96104b8366004612cd7565b6110b5565b3480156104c957600080fd5b506010546102749060ff1681565b3480156104e357600080fd5b506102ed6104f2366004612b12565b61114d565b34801561050357600080fd5b5061035d610512366004612bb5565b6111ff565b34801561052357600080fd5b506102a96112cd565b34801561053857600080fd5b506102a9610547366004612b12565b61135a565b34801561055857600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff166102ed565b34801561058357600080fd5b506102c06113e0565b34801561059857600080fd5b506102a96105a7366004612d20565b6113ef565b3480156105b857600080fd5b506102a9611505565b3480156105cd57600080fd5b506102a96105dc366004612d53565b6115b4565b3480156105ed57600080fd5b506102c061165c565b34801561060257600080fd5b506102c0610611366004612b12565b611669565b34801561062257600080fd5b5061035d600e5481565b34801561063857600080fd5b506102a9610647366004612cd7565b611822565b34801561065857600080fd5b50610274610667366004612dcf565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106ae57600080fd5b506102a96106bd366004612cd7565b6118b6565b3480156106ce57600080fd5b506102a96106dd366004612bb5565b61194a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610738575061073882611a77565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146107c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60606000805461080490612df9565b80601f016020809104026020016040519081016040528092919081815260200182805461083090612df9565b801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016107bb565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6011805461096e90612df9565b80601f016020809104026020016040519081016040528092919081815260200182805461099a90612df9565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b505050505081565b60006109fa8261114d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016107bb565b3373ffffffffffffffffffffffffffffffffffffffff82161480610ae05750610ae08133610667565b610b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107bb565b610b768383611b5a565b505050565b610b853382611bfa565b610c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016107bb565b610b76838383611d6a565b6000610c27836111ff565b8210610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084016107bb565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b6000610cf660085490565b60105490915060ff1615610d0957600080fd5b60008211610d1657600080fd5b600f54821115610d2557600080fd5b600e54610d328383612e7b565b1115610d3d57600080fd5b600a5473ffffffffffffffffffffffffffffffffffffffff163314610d765781600d54610d6a9190612e93565b341015610d7657600080fd5b60015b828111610b7657610d9333610d8e8385612e7b565b611fdc565b80610d9d81612ed0565b915050610d79565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b6000610e47600a5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610e9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ea3565b606091505b5050905080610eb157600080fd5b50565b610b76838383604051806020016040528060008152506115b4565b60606000610edc836111ff565b905060008167ffffffffffffffff811115610ef957610ef9612c14565b604051908082528060200260200182016040528015610f22578160200160208202803683370190505b50905060005b82811015610f6957610f3a8582610c1c565b828281518110610f4c57610f4c612f08565b602090810291909101015280610f6181612ed0565b915050610f28565b509392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ff2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b600d55565b600061100260085490565b8210611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016107bb565b600882815481106110a3576110a3612f08565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b805161114990600b906020840190612975565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016107bb565b600073ffffffffffffffffffffffffffffffffffffffff82166112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016107bb565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b6113586000611ff6565b565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146113db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b600f55565b60606001805461080490612df9565b3373ffffffffffffffffffffffffffffffffffffffff83160361146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107bb565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b601080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6115be3383611bfa565b61164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016107bb565b6116568484848461206d565b50505050565b600c805461096e90612df9565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016107bb565b601054610100900460ff1615156000036117c3576011805461173e90612df9565b80601f016020809104026020016040519081016040528092919081815260200182805461176a90612df9565b80156117b75780601f1061178c576101008083540402835291602001916117b7565b820191906000526020600020905b81548152906001019060200180831161179a57829003601f168201915b50505050509050919050565b60006117cd612110565b905060008151116117ed576040518060200160405280600081525061181b565b806117f78461211f565b600c60405160200161180b93929190612f37565b6040516020818303038152906040525b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146118a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b805161114990600c906020840190612975565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b8051611149906011906020840190612975565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bb565b73ffffffffffffffffffffffffffffffffffffffff8116611a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107bb565b610eb181611ff6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611b0a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061073857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610738565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bb48261114d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16611cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016107bb565b6000611cb68361114d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d2557508373ffffffffffffffffffffffffffffffffffffffff16611d0d84610887565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d62575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8a8261114d565b73ffffffffffffffffffffffffffffffffffffffff1614611e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016107bb565b73ffffffffffffffffffffffffffffffffffffffff8216611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107bb565b611eda838383612254565b611ee5600082611b5a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290611f1b908490613031565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611f56908490612e7b565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61114982826040518060200160405280600081525061235a565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612078848484611d6a565b612084848484846123fd565b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107bb565b6060600b805461080490612df9565b60608160000361216257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561218c578061217681612ed0565b91506121859050600a83613077565b9150612166565b60008167ffffffffffffffff8111156121a7576121a7612c14565b6040519080825280601f01601f1916602001820160405280156121d1576020820181803683370190505b5090505b8415611d62576121e6600183613031565b91506121f3600a8661308b565b6121fe906030612e7b565b60f81b81838151811061221357612213612f08565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061224d600a86613077565b94506121d5565b73ffffffffffffffffffffffffffffffffffffffff83166122bc576122b781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6122f9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122f9576122f983826125f0565b73ffffffffffffffffffffffffffffffffffffffff821661231d57610b76816126a7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b7657610b768282612756565b61236483836127a7565b61237160008484846123fd565b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107bb565b600073ffffffffffffffffffffffffffffffffffffffff84163b156125e5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061247490339089908890889060040161309f565b6020604051808303816000875af19250505080156124cd575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124ca918101906130e8565b60015b61259a573d8080156124fb576040519150601f19603f3d011682016040523d82523d6000602084013e612500565b606091505b508051600003612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107bb565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d62565b506001949350505050565b600060016125fd846111ff565b6126079190613031565b6000838152600760205260409020549091508082146126675773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b6008546000906126b990600190613031565b600083815260096020526040812054600880549394509092849081106126e1576126e1612f08565b90600052602060002001549050806008838154811061270257612702612f08565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061273a5761273a613105565b6001900381819060005260206000200160009055905550505050565b6000612761836111ff565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216612824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107bb565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156128b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107bb565b6128bc60008383612254565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906128f2908490612e7b565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461298190612df9565b90600052602060002090601f0160209004810192826129a357600085556129e9565b82601f106129bc57805160ff19168380011785556129e9565b828001600101855582156129e9579182015b828111156129e95782518255916020019190600101906129ce565b506129f59291506129f9565b5090565b5b808211156129f557600081556001016129fa565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610eb157600080fd5b600060208284031215612a4e57600080fd5b813561181b81612a0e565b80358015158114612a6957600080fd5b919050565b600060208284031215612a8057600080fd5b61181b82612a59565b60005b83811015612aa4578181015183820152602001612a8c565b838111156116565750506000910152565b60008151808452612acd816020860160208601612a89565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061181b6020830184612ab5565b600060208284031215612b2457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a6957600080fd5b60008060408385031215612b6257600080fd5b612b6b83612b2b565b946020939093013593505050565b600080600060608486031215612b8e57600080fd5b612b9784612b2b565b9250612ba560208501612b2b565b9150604084013590509250925092565b600060208284031215612bc757600080fd5b61181b82612b2b565b6020808252825182820181905260009190848201906040850190845b81811015612c0857835183529284019291840191600101612bec565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115612c5e57612c5e612c14565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612ca457612ca4612c14565b81604052809350858152868686011115612cbd57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612ce957600080fd5b813567ffffffffffffffff811115612d0057600080fd5b8201601f81018413612d1157600080fd5b611d6284823560208401612c43565b60008060408385031215612d3357600080fd5b612d3c83612b2b565b9150612d4a60208401612a59565b90509250929050565b60008060008060808587031215612d6957600080fd5b612d7285612b2b565b9350612d8060208601612b2b565b925060408501359150606085013567ffffffffffffffff811115612da357600080fd5b8501601f81018713612db457600080fd5b612dc387823560208401612c43565b91505092959194509250565b60008060408385031215612de257600080fd5b612deb83612b2b565b9150612d4a60208401612b2b565b600181811c90821680612e0d57607f821691505b602082108103612e46577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612e8e57612e8e612e4c565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ecb57612ecb612e4c565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f0157612f01612e4c565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600084516020612f4a8285838a01612a89565b855191840191612f5d8184848a01612a89565b8554920191600090600181811c9080831680612f7a57607f831692505b8583108103612fb0577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b808015612fc45760018114612ff357613020565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851688528388019550613020565b60008b81526020902060005b858110156130185781548a820152908401908801612fff565b505083880195505b50939b9a5050505050505050505050565b60008282101561304357613043612e4c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261308657613086613048565b500490565b60008261309a5761309a613048565b500690565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130de6080830184612ab5565b9695505050505050565b6000602082840312156130fa57600080fd5b815161181b81612a0e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122065dd562dfaec0e0848c102afb50af50c6c454d217dfd7131a881a507036b91ee64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000016556c74696d61746520446f6f646c65642050756e6b7300000000000000000000000000000000000000000000000000000000000000000000000000000000000355445000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61435a557659694d416369566b74646f59323333763258554e5532635a4e63664846515177595a51636b56362f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61435a557659694d416369566b74646f59323333763258554e5532635a4e63664846515177595a51636b56362f00000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000016556c74696d61746520446f6f646c65642050756e6b7300000000000000000000000000000000000000000000000000000000000000000000000000000000000355445000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61435a557659694d416369566b74646f59323333763258554e5532635a4e63664846515177595a51636b56362f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61435a557659694d416369566b74646f59323333763258554e5532635a4e63664846515177595a51636b56362f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Ultimate Doodled Punks
Arg [1] : _symbol (string): UDP
Arg [2] : _initBaseURI (string): ipfs://QmaCZUvYiMAciVktdoY233v2XUNU2cZNcfHFQQwYZQckV6/
Arg [3] : _initNotRevealedUri (string): ipfs://QmaCZUvYiMAciVktdoY233v2XUNU2cZNcfHFQQwYZQckV6/

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [5] : 556c74696d61746520446f6f646c65642050756e6b7300000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5544500000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d61435a557659694d416369566b74646f59323333763258
Arg [10] : 554e5532635a4e63664846515177595a51636b56362f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d61435a557659694d416369566b74646f59323333763258
Arg [13] : 554e5532635a4e63664846515177595a51636b56362f00000000000000000000


Deployed ByteCode Sourcemap

45130:2945:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36677:224;;;;;;;;;;-1:-1:-1;36677:224:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;36677:224:0;;;;;;;;47842:73;;;;;;;;;;-1:-1:-1;47842:73:0;;;;;:::i;:::-;;:::i;:::-;;24569:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26128:221::-;;;;;;;;;;-1:-1:-1;26128:221:0;;;;;:::i;:::-;;:::i;:::-;;;2159:42:1;2147:55;;;2129:74;;2117:2;2102:18;26128:221:0;1983:226:1;45460:28:0;;;;;;;;;;;;;:::i;25651:411::-;;;;;;;;;;-1:-1:-1;25651:411:0;;;;;:::i;:::-;;:::i;45287:30::-;;;;;;;;;;;;;;;;;;;2820:25:1;;;2808:2;2793:18;45287:30:0;2674:177:1;37317:113:0;;;;;;;;;;-1:-1:-1;37405:10:0;:17;37317:113;;45358:33;;;;;;;;;;;;;;;;27018:339;;;;;;;;;;-1:-1:-1;27018:339:0;;;;;:::i;:::-;;:::i;36985:256::-;;;;;;;;;;-1:-1:-1;36985:256:0;;;;;:::i;:::-;;:::i;45886:436::-;;;;;;:::i;:::-;;:::i;47922:150::-;;;:::i;27428:185::-;;;;;;;;;;-1:-1:-1;27428:185:0;;;;;:::i;:::-;;:::i;46328:348::-;;;;;;;;;;-1:-1:-1;46328:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47274:80::-;;;;;;;;;;-1:-1:-1;47274:80:0;;;;;:::i;:::-;;:::i;37507:233::-;;;;;;;;;;-1:-1:-1;37507:233:0;;;;;:::i;:::-;;:::i;45427:28::-;;;;;;;;;;-1:-1:-1;45427:28:0;;;;;;;;;;;47610:98;;;;;;;;;;-1:-1:-1;47610:98:0;;;;;:::i;:::-;;:::i;45396:26::-;;;;;;;;;;-1:-1:-1;45396:26:0;;;;;;;;24263:239;;;;;;;;;;-1:-1:-1;24263:239:0;;;;;:::i;:::-;;:::i;23993:208::-;;;;;;;;;;-1:-1:-1;23993:208:0;;;;;:::i;:::-;;:::i;44466:94::-;;;;;;;;;;;;;:::i;47360:116::-;;;;;;;;;;-1:-1:-1;47360:116:0;;;;;:::i;:::-;;:::i;43815:87::-;;;;;;;;;;-1:-1:-1;43888:6:0;;;;43815:87;;24738:104;;;;;;;;;;;;;:::i;26421:295::-;;;;;;;;;;-1:-1:-1;26421:295:0;;;;;:::i;:::-;;:::i;47201:65::-;;;;;;;;;;;;;:::i;27684:328::-;;;;;;;;;;-1:-1:-1;27684:328:0;;;;;:::i;:::-;;:::i;45245:37::-;;;;;;;;;;;;;:::i;46682:497::-;;;;;;;;;;-1:-1:-1;46682:497:0;;;;;:::i;:::-;;:::i;45322:31::-;;;;;;;;;;;;;;;;47714:122;;;;;;;;;;-1:-1:-1;47714:122:0;;;;;:::i;:::-;;:::i;26787:164::-;;;;;;;;;;-1:-1:-1;26787:164:0;;;;;:::i;:::-;26908:25;;;;26884:4;26908:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26787:164;47484:120;;;;;;;;;;-1:-1:-1;47484:120:0;;;;;:::i;:::-;;:::i;44715:192::-;;;;;;;;;;-1:-1:-1;44715:192:0;;;;;:::i;:::-;;:::i;36677:224::-;36779:4;36803:50;;;36818:35;36803:50;;:90;;;36857:36;36881:11;36857:23;:36::i;:::-;36796:97;36677:224;-1:-1:-1;;36677:224:0:o;47842:73::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;;;;;;;;;47894:6:::1;:15:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;47842:73::o;24569:100::-;24623:13;24656:5;24649:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:100;:::o;26128:221::-;26204:7;29611:16;;;:7;:16;;;;;;:30;:16;26224:73;;;;;;;7559:2:1;26224:73:0;;;7541:21:1;7598:2;7578:18;;;7571:30;7637:34;7617:18;;;7610:62;7708:14;7688:18;;;7681:42;7740:19;;26224:73:0;7357:408:1;26224:73:0;-1:-1:-1;26317:24:0;;;;:15;:24;;;;;;;;;26128:221::o;45460:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25651:411::-;25732:13;25748:23;25763:7;25748:14;:23::i;:::-;25732:39;;25796:5;25790:11;;:2;:11;;;25782:57;;;;;;;7972:2:1;25782:57:0;;;7954:21:1;8011:2;7991:18;;;7984:30;8050:34;8030:18;;;8023:62;8121:3;8101:18;;;8094:31;8142:19;;25782:57:0;7770:397:1;25782:57:0;22178:10;25874:21;;;;;:62;;-1:-1:-1;25899:37:0;25916:5;22178:10;26787:164;:::i;25899:37::-;25852:168;;;;;;;8374:2:1;25852:168:0;;;8356:21:1;8413:2;8393:18;;;8386:30;8452:34;8432:18;;;8425:62;8523:26;8503:18;;;8496:54;8567:19;;25852:168:0;8172:420:1;25852:168:0;26033:21;26042:2;26046:7;26033:8;:21::i;:::-;25721:341;25651:411;;:::o;27018:339::-;27213:41;22178:10;27246:7;27213:18;:41::i;:::-;27205:103;;;;;;;8799:2:1;27205:103:0;;;8781:21:1;8838:2;8818:18;;;8811:30;8877:34;8857:18;;;8850:62;8948:19;8928:18;;;8921:47;8985:19;;27205:103:0;8597:413:1;27205:103:0;27321:28;27331:4;27337:2;27341:7;27321:9;:28::i;36985:256::-;37082:7;37118:23;37135:5;37118:16;:23::i;:::-;37110:5;:31;37102:87;;;;;;;9217:2:1;37102:87:0;;;9199:21:1;9256:2;9236:18;;;9229:30;9295:34;9275:18;;;9268:62;9366:13;9346:18;;;9339:41;9397:19;;37102:87:0;9015:407:1;37102:87:0;-1:-1:-1;37207:19:0;;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36985:256::o;45886:436::-;45946:14;45963:13;37405:10;:17;;37317:113;45963:13;45992:6;;45946:30;;-1:-1:-1;45992:6:0;;45991:7;45983:16;;;;;;46028:1;46014:11;:15;46006:24;;;;;;46060:13;;46045:11;:28;;46037:37;;;;;;46113:9;;46089:20;46098:11;46089:6;:20;:::i;:::-;:33;;46081:42;;;;;;43888:6;;;;46136:10;:21;46132:84;;46196:11;46189:4;;:18;;;;:::i;:::-;46176:9;:31;;46168:40;;;;;;46241:1;46224:93;46249:11;46244:1;:16;46224:93;;46276:33;46286:10;46298;46307:1;46298:6;:10;:::i;:::-;46276:9;:33::i;:::-;46262:3;;;;:::i;:::-;;;;46224:93;;47922:150;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47980:7:::1;48001;43888:6:::0;;;;;43815:87;48001:7:::1;47993:21;;48022;47993:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47979:69;;;48063:2;48055:11;;;::::0;::::1;;47967:105;47922:150::o:0;27428:185::-;27566:39;27583:4;27589:2;27593:7;27566:39;;;;;;;;;;;;:16;:39::i;46328:348::-;46403:16;46431:23;46457:17;46467:6;46457:9;:17::i;:::-;46431:43;;46481:25;46523:15;46509:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46509:30:0;;46481:58;;46551:9;46546:103;46566:15;46562:1;:19;46546:103;;;46611:30;46631:6;46639:1;46611:19;:30::i;:::-;46597:8;46606:1;46597:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;46583:3;;;;:::i;:::-;;;;46546:103;;;-1:-1:-1;46662:8:0;46328:348;-1:-1:-1;;;46328:348:0:o;47274:80::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47333:4:::1;:15:::0;47274:80::o;37507:233::-;37582:7;37618:30;37405:10;:17;;37317:113;37618:30;37610:5;:38;37602:95;;;;;;;10783:2:1;37602:95:0;;;10765:21:1;10822:2;10802:18;;;10795:30;10861:34;10841:18;;;10834:62;10932:14;10912:18;;;10905:42;10964:19;;37602:95:0;10581:408:1;37602:95:0;37715:10;37726:5;37715:17;;;;;;;;:::i;:::-;;;;;;;;;37708:24;;37507:233;;;:::o;47610:98::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47681:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47610:98:::0;:::o;24263:239::-;24335:7;24371:16;;;:7;:16;;;;;;;;;24398:73;;;;;;;11196:2:1;24398:73:0;;;11178:21:1;11235:2;11215:18;;;11208:30;11274:34;11254:18;;;11247:62;11345:11;11325:18;;;11318:39;11374:19;;24398:73:0;10994:405:1;23993:208:0;24065:7;24093:19;;;24085:74;;;;;;;11606:2:1;24085:74:0;;;11588:21:1;11645:2;11625:18;;;11618:30;11684:34;11664:18;;;11657:62;11755:12;11735:18;;;11728:40;11785:19;;24085:74:0;11404:406:1;24085:74:0;-1:-1:-1;24177:16:0;;;;;;:9;:16;;;;;;;23993:208::o;44466:94::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;44531:21:::1;44549:1;44531:9;:21::i;:::-;44466:94::o:0;47360:116::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47437:13:::1;:33:::0;47360:116::o;24738:104::-;24794:13;24827:7;24820:14;;;;;:::i;26421:295::-;22178:10;26524:24;;;;26516:62;;;;;;;12017:2:1;26516:62:0;;;11999:21:1;12056:2;12036:18;;;12029:30;12095:27;12075:18;;;12068:55;12140:18;;26516:62:0;11815:349:1;26516:62:0;22178:10;26591:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;26660:48;;586:41:1;;;26591:42:0;;22178:10;26660:48;;559:18:1;26660:48:0;;;;;;;26421:295;;:::o;47201:65::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47245:8:::1;:15:::0;;;::::1;;;::::0;;47201:65::o;27684:328::-;27859:41;22178:10;27892:7;27859:18;:41::i;:::-;27851:103;;;;;;;8799:2:1;27851:103:0;;;8781:21:1;8838:2;8818:18;;;8811:30;8877:34;8857:18;;;8850:62;8948:19;8928:18;;;8921:47;8985:19;;27851:103:0;8597:413:1;27851:103:0;27965:39;27979:4;27985:2;27989:7;27998:5;27965:13;:39::i;:::-;27684:328;;;;:::o;45245:37::-;;;;;;;:::i;46682:497::-;29587:4;29611:16;;;:7;:16;;;;;;46780:13;;29611:30;:16;46805:97;;;;;;;12371:2:1;46805:97:0;;;12353:21:1;12410:2;12390:18;;;12383:30;12449:34;12429:18;;;12422:62;12520:17;12500:18;;;12493:45;12555:19;;46805:97:0;12169:411:1;46805:97:0;46918:8;;;;;;;:17;;46930:5;46918:17;46915:62;;46955:14;46948:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46682:497;;;:::o;46915:62::-;46985:28;47016:10;:8;:10::i;:::-;46985:41;;47071:1;47046:14;47040:28;:32;:133;;;;;;;;;;;;;;;;;47108:14;47124:18;:7;:16;:18::i;:::-;47144:13;47091:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47040:133;47033:140;46682:497;-1:-1:-1;;;46682:497:0:o;47714:122::-;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47797:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;47484:120::-:0;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;47566:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;44715:192::-:0;43888:6;;44035:23;43888:6;22178:10;44035:23;44027:68;;;;;;;6756:2:1;44027:68:0;;;6738:21:1;;;6775:18;;;6768:30;6834:34;6814:18;;;6807:62;6886:18;;44027:68:0;6554:356:1;44027:68:0;44804:22:::1;::::0;::::1;44796:73;;;::::0;::::1;::::0;;14560:2:1;44796:73:0::1;::::0;::::1;14542:21:1::0;14599:2;14579:18;;;14572:30;14638:34;14618:18;;;14611:62;14709:8;14689:18;;;14682:36;14735:19;;44796:73:0::1;14358:402:1::0;44796:73:0::1;44880:19;44890:8;44880:9;:19::i;23624:305::-:0;23726:4;23763:40;;;23778:25;23763:40;;:105;;-1:-1:-1;23820:48:0;;;23835:33;23820:48;23763:105;:158;;;-1:-1:-1;9583:25:0;9568:40;;;;23885:36;9459:157;33504:174;33579:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;33633:23;33579:24;33633:14;:23::i;:::-;33624:46;;;;;;;;;;;;33504:174;;:::o;29816:348::-;29909:4;29611:16;;;:7;:16;;;;;;:30;:16;29926:73;;;;;;;14967:2:1;29926:73:0;;;14949:21:1;15006:2;14986:18;;;14979:30;15045:34;15025:18;;;15018:62;15116:14;15096:18;;;15089:42;15148:19;;29926:73:0;14765:408:1;29926:73:0;30010:13;30026:23;30041:7;30026:14;:23::i;:::-;30010:39;;30079:5;30068:16;;:7;:16;;;:51;;;;30112:7;30088:31;;:20;30100:7;30088:11;:20::i;:::-;:31;;;30068:51;:87;;;-1:-1:-1;26908:25:0;;;;26884:4;26908:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30123:32;30060:96;29816:348;-1:-1:-1;;;;29816:348:0:o;32808:578::-;32967:4;32940:31;;:23;32955:7;32940:14;:23::i;:::-;:31;;;32932:85;;;;;;;15380:2:1;32932:85:0;;;15362:21:1;15419:2;15399:18;;;15392:30;15458:34;15438:18;;;15431:62;15529:11;15509:18;;;15502:39;15558:19;;32932:85:0;15178:405:1;32932:85:0;33036:16;;;33028:65;;;;;;;15790:2:1;33028:65:0;;;15772:21:1;15829:2;15809:18;;;15802:30;15868:34;15848:18;;;15841:62;15939:6;15919:18;;;15912:34;15963:19;;33028:65:0;15588:400:1;33028:65:0;33106:39;33127:4;33133:2;33137:7;33106:20;:39::i;:::-;33210:29;33227:1;33231:7;33210:8;:29::i;:::-;33252:15;;;;;;;:9;:15;;;;;:20;;33271:1;;33252:15;:20;;33271:1;;33252:20;:::i;:::-;;;;-1:-1:-1;;33283:13:0;;;;;;;:9;:13;;;;;:18;;33300:1;;33283:13;:18;;33300:1;;33283:18;:::i;:::-;;;;-1:-1:-1;;33312:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;;33351:27;;33312:16;;33351:27;;;;;;;32808:578;;;:::o;30506:110::-;30582:26;30592:2;30596:7;30582:26;;;;;;;;;;;;:9;:26::i;44915:173::-;44990:6;;;;45007:17;;;;;;;;;;;45040:40;;44990:6;;;45007:17;44990:6;;45040:40;;44971:16;;45040:40;44960:128;44915:173;:::o;28894:315::-;29051:28;29061:4;29067:2;29071:7;29051:9;:28::i;:::-;29098:48;29121:4;29127:2;29131:7;29140:5;29098:22;:48::i;:::-;29090:111;;;;;;;16325:2:1;29090:111:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;16474:20;16454:18;;;16447:48;16512:19;;29090:111:0;16123:414:1;45765:102:0;45825:13;45854:7;45847:14;;;;;:::i;9930:723::-;9986:13;10207:5;10216:1;10207:10;10203:53;;-1:-1:-1;;10234:10:0;;;;;;;;;;;;;;;;;;9930:723::o;10203:53::-;10281:5;10266:12;10322:78;10329:9;;10322:78;;10355:8;;;;:::i;:::-;;-1:-1:-1;10378:10:0;;-1:-1:-1;10386:2:0;10378:10;;:::i;:::-;;;10322:78;;;10410:19;10442:6;10432:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10432:17:0;;10410:39;;10460:154;10467:10;;10460:154;;10494:11;10504:1;10494:11;;:::i;:::-;;-1:-1:-1;10563:10:0;10571:2;10563:5;:10;:::i;:::-;10550:24;;:2;:24;:::i;:::-;10537:39;;10520:6;10527;10520:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;10591:11:0;10600:2;10591:11;;:::i;:::-;;;10460:154;;38353:589;38559:18;;;38555:187;;38594:40;38626:7;39769:10;:17;;39742:24;;;;:15;:24;;;;;:44;;;39797:24;;;;;;;;;;;;39665:164;38594:40;38555:187;;;38664:2;38656:10;;:4;:10;;;38652:90;;38683:47;38716:4;38722:7;38683:32;:47::i;:::-;38756:16;;;38752:183;;38789:45;38826:7;38789:36;:45::i;38752:183::-;38862:4;38856:10;;:2;:10;;;38852:83;;38883:40;38911:2;38915:7;38883:27;:40::i;30843:321::-;30973:18;30979:2;30983:7;30973:5;:18::i;:::-;31024:54;31055:1;31059:2;31063:7;31072:5;31024:22;:54::i;:::-;31002:154;;;;;;;16325:2:1;31002:154:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;16474:20;16454:18;;;16447:48;16512:19;;31002:154:0;16123:414:1;34243:799:0;34398:4;34419:13;;;12778:20;12826:8;34415:620;;34455:72;;;;;:36;;;;;;:72;;22178:10;;34506:4;;34512:7;;34521:5;;34455:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34455:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34451:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34697:6;:13;34714:1;34697:18;34693:272;;34740:60;;;;;16325:2:1;34740:60:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;16474:20;16454:18;;;16447:48;16512:19;;34740:60:0;16123:414:1;34693:272:0;34915:6;34909:13;34900:6;34896:2;34892:15;34885:38;34451:529;34578:51;;34588:41;34578:51;;-1:-1:-1;34571:58:0;;34415:620;-1:-1:-1;35019:4:0;34243:799;;;;;;:::o;40456:988::-;40722:22;40772:1;40747:22;40764:4;40747:16;:22::i;:::-;:26;;;;:::i;:::-;40784:18;40805:26;;;:17;:26;;;;;;40722:51;;-1:-1:-1;40938:28:0;;;40934:328;;41005:18;;;40983:19;41005:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41056:30;;;;;;:44;;;41173:30;;:17;:30;;;;;:43;;;40934:328;-1:-1:-1;41358:26:0;;;;:17;:26;;;;;;;;41351:33;;;41402:18;;;;;;:12;:18;;;;;:34;;;;;;;41395:41;40456:988::o;41739:1079::-;42017:10;:17;41992:22;;42017:21;;42037:1;;42017:21;:::i;:::-;42049:18;42070:24;;;:15;:24;;;;;;42443:10;:26;;41992:46;;-1:-1:-1;42070:24:0;;41992:46;;42443:26;;;;;;:::i;:::-;;;;;;;;;42421:48;;42507:11;42482:10;42493;42482:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;42587:28;;;:15;:28;;;;;;;:41;;;42759:24;;;;;42752:31;42794:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41810:1008;;;41739:1079;:::o;39243:221::-;39328:14;39345:20;39362:2;39345:16;:20::i;:::-;39376:16;;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39421:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39243:221:0:o;31500:382::-;31580:16;;;31572:61;;;;;;;18135:2:1;31572:61:0;;;18117:21:1;;;18154:18;;;18147:30;18213:34;18193:18;;;18186:62;18265:18;;31572:61:0;17933:356:1;31572:61:0;29587:4;29611:16;;;:7;:16;;;;;;:30;:16;:30;31644:58;;;;;;;18496:2:1;31644:58:0;;;18478:21:1;18535:2;18515:18;;;18508:30;18574;18554:18;;;18547:58;18622:18;;31644:58:0;18294:352:1;31644:58:0;31715:45;31744:1;31748:2;31752:7;31715:20;:45::i;:::-;31773:13;;;;;;;:9;:13;;;;;:18;;31790:1;;31773:13;:18;;31790:1;;31773:18;:::i;:::-;;;;-1:-1:-1;;31802:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;31841:33;;31802:16;;;31841:33;;31802:16;;31841:33;31500:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:1;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:160::-;703:20;;759:13;;752:21;742:32;;732:60;;788:1;785;778:12;732:60;638:160;;;:::o;803:180::-;859:6;912:2;900:9;891:7;887:23;883:32;880:52;;;928:1;925;918:12;880:52;951:26;967:9;951:26;:::i;988:258::-;1060:1;1070:113;1084:6;1081:1;1078:13;1070:113;;;1160:11;;;1154:18;1141:11;;;1134:39;1106:2;1099:10;1070:113;;;1201:6;1198:1;1195:13;1192:48;;;-1:-1:-1;;1236:1:1;1218:16;;1211:27;988:258::o;1251:317::-;1293:3;1331:5;1325:12;1358:6;1353:3;1346:19;1374:63;1430:6;1423:4;1418:3;1414:14;1407:4;1400:5;1396:16;1374:63;:::i;:::-;1482:2;1470:15;1487:66;1466:88;1457:98;;;;1557:4;1453:109;;1251:317;-1:-1:-1;;1251:317:1:o;1573:220::-;1722:2;1711:9;1704:21;1685:4;1742:45;1783:2;1772:9;1768:18;1760:6;1742:45;:::i;1798:180::-;1857:6;1910:2;1898:9;1889:7;1885:23;1881:32;1878:52;;;1926:1;1923;1916:12;1878:52;-1:-1:-1;1949:23:1;;1798:180;-1:-1:-1;1798:180:1:o;2214:196::-;2282:20;;2342:42;2331:54;;2321:65;;2311:93;;2400:1;2397;2390:12;2415:254;2483:6;2491;2544:2;2532:9;2523:7;2519:23;2515:32;2512:52;;;2560:1;2557;2550:12;2512:52;2583:29;2602:9;2583:29;:::i;:::-;2573:39;2659:2;2644:18;;;;2631:32;;-1:-1:-1;;;2415:254:1:o;2856:328::-;2933:6;2941;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:52;;;3018:1;3015;3008:12;2970:52;3041:29;3060:9;3041:29;:::i;:::-;3031:39;;3089:38;3123:2;3112:9;3108:18;3089:38;:::i;:::-;3079:48;;3174:2;3163:9;3159:18;3146:32;3136:42;;2856:328;;;;;:::o;3189:186::-;3248:6;3301:2;3289:9;3280:7;3276:23;3272:32;3269:52;;;3317:1;3314;3307:12;3269:52;3340:29;3359:9;3340:29;:::i;3380:632::-;3551:2;3603:21;;;3673:13;;3576:18;;;3695:22;;;3522:4;;3551:2;3774:15;;;;3748:2;3733:18;;;3522:4;3817:169;3831:6;3828:1;3825:13;3817:169;;;3892:13;;3880:26;;3961:15;;;;3926:12;;;;3853:1;3846:9;3817:169;;;-1:-1:-1;4003:3:1;;3380:632;-1:-1:-1;;;;;;3380:632:1:o;4017:184::-;4069:77;4066:1;4059:88;4166:4;4163:1;4156:15;4190:4;4187:1;4180:15;4206:691;4271:5;4301:18;4342:2;4334:6;4331:14;4328:40;;;4348:18;;:::i;:::-;4482:2;4476:9;4548:2;4536:15;;4387:66;4532:24;;;4558:2;4528:33;4524:42;4512:55;;;4582:18;;;4602:22;;;4579:46;4576:72;;;4628:18;;:::i;:::-;4668:10;4664:2;4657:22;4697:6;4688:15;;4727:6;4719;4712:22;4767:3;4758:6;4753:3;4749:16;4746:25;4743:45;;;4784:1;4781;4774:12;4743:45;4834:6;4829:3;4822:4;4814:6;4810:17;4797:44;4889:1;4882:4;4873:6;4865;4861:19;4857:30;4850:41;;;;4206:691;;;;;:::o;4902:451::-;4971:6;5024:2;5012:9;5003:7;4999:23;4995:32;4992:52;;;5040:1;5037;5030:12;4992:52;5080:9;5067:23;5113:18;5105:6;5102:30;5099:50;;;5145:1;5142;5135:12;5099:50;5168:22;;5221:4;5213:13;;5209:27;-1:-1:-1;5199:55:1;;5250:1;5247;5240:12;5199:55;5273:74;5339:7;5334:2;5321:16;5316:2;5312;5308:11;5273:74;:::i;5358:254::-;5423:6;5431;5484:2;5472:9;5463:7;5459:23;5455:32;5452:52;;;5500:1;5497;5490:12;5452:52;5523:29;5542:9;5523:29;:::i;:::-;5513:39;;5571:35;5602:2;5591:9;5587:18;5571:35;:::i;:::-;5561:45;;5358:254;;;;;:::o;5617:667::-;5712:6;5720;5728;5736;5789:3;5777:9;5768:7;5764:23;5760:33;5757:53;;;5806:1;5803;5796:12;5757:53;5829:29;5848:9;5829:29;:::i;:::-;5819:39;;5877:38;5911:2;5900:9;5896:18;5877:38;:::i;:::-;5867:48;;5962:2;5951:9;5947:18;5934:32;5924:42;;6017:2;6006:9;6002:18;5989:32;6044:18;6036:6;6033:30;6030:50;;;6076:1;6073;6066:12;6030:50;6099:22;;6152:4;6144:13;;6140:27;-1:-1:-1;6130:55:1;;6181:1;6178;6171:12;6130:55;6204:74;6270:7;6265:2;6252:16;6247:2;6243;6239:11;6204:74;:::i;:::-;6194:84;;;5617:667;;;;;;;:::o;6289:260::-;6357:6;6365;6418:2;6406:9;6397:7;6393:23;6389:32;6386:52;;;6434:1;6431;6424:12;6386:52;6457:29;6476:9;6457:29;:::i;:::-;6447:39;;6505:38;6539:2;6528:9;6524:18;6505:38;:::i;6915:437::-;6994:1;6990:12;;;;7037;;;7058:61;;7112:4;7104:6;7100:17;7090:27;;7058:61;7165:2;7157:6;7154:14;7134:18;7131:38;7128:218;;7202:77;7199:1;7192:88;7303:4;7300:1;7293:15;7331:4;7328:1;7321:15;7128:218;;6915:437;;;:::o;9427:184::-;9479:77;9476:1;9469:88;9576:4;9573:1;9566:15;9600:4;9597:1;9590:15;9616:128;9656:3;9687:1;9683:6;9680:1;9677:13;9674:39;;;9693:18;;:::i;:::-;-1:-1:-1;9729:9:1;;9616:128::o;9749:228::-;9789:7;9915:1;9847:66;9843:74;9840:1;9837:81;9832:1;9825:9;9818:17;9814:105;9811:131;;;9922:18;;:::i;:::-;-1:-1:-1;9962:9:1;;9749:228::o;9982:195::-;10021:3;10052:66;10045:5;10042:77;10039:103;;10122:18;;:::i;:::-;-1:-1:-1;10169:1:1;10158:13;;9982:195::o;10392:184::-;10444:77;10441:1;10434:88;10541:4;10538:1;10531:15;10565:4;10562:1;10555:15;12711:1642;12935:3;12973:6;12967:13;12999:4;13012:51;13056:6;13051:3;13046:2;13038:6;13034:15;13012:51;:::i;:::-;13126:13;;13085:16;;;;13148:55;13126:13;13085:16;13170:15;;;13148:55;:::i;:::-;13292:13;;13225:20;;;13265:1;;13352;13374:18;;;;13427;;;;13454:93;;13532:4;13522:8;13518:19;13506:31;;13454:93;13595:2;13585:8;13582:16;13562:18;13559:40;13556:224;;13634:77;13629:3;13622:90;13735:4;13732:1;13725:15;13765:4;13760:3;13753:17;13556:224;13796:18;13823:168;;;;14005:1;14000:328;;;;13789:539;;13823:168;13873:66;13862:9;13858:82;13851:5;13844:97;13972:8;13965:5;13961:20;13954:27;;13823:168;;14000:328;12658:1;12651:14;;;12695:4;12682:18;;14095:1;14109:169;14123:8;14120:1;14117:15;14109:169;;;14205:14;;14190:13;;;14183:37;14248:16;;;;14140:10;;14109:169;;;14113:3;;14309:8;14302:5;14298:20;14291:27;;13789:539;-1:-1:-1;14344:3:1;;12711:1642;-1:-1:-1;;;;;;;;;;;12711:1642:1:o;15993:125::-;16033:4;16061:1;16058;16055:8;16052:34;;;16066:18;;:::i;:::-;-1:-1:-1;16103:9:1;;15993:125::o;16542:184::-;16594:77;16591:1;16584:88;16691:4;16688:1;16681:15;16715:4;16712:1;16705:15;16731:120;16771:1;16797;16787:35;;16802:18;;:::i;:::-;-1:-1:-1;16836:9:1;;16731:120::o;16856:112::-;16888:1;16914;16904:35;;16919:18;;:::i;:::-;-1:-1:-1;16953:9:1;;16856:112::o;16973:512::-;17167:4;17196:42;17277:2;17269:6;17265:15;17254:9;17247:34;17329:2;17321:6;17317:15;17312:2;17301:9;17297:18;17290:43;;17369:6;17364:2;17353:9;17349:18;17342:34;17412:3;17407:2;17396:9;17392:18;17385:31;17433:46;17474:3;17463:9;17459:19;17451:6;17433:46;:::i;:::-;17425:54;16973:512;-1:-1:-1;;;;;;16973:512:1:o;17490:249::-;17559:6;17612:2;17600:9;17591:7;17587:23;17583:32;17580:52;;;17628:1;17625;17618:12;17580:52;17660:9;17654:16;17679:30;17703:5;17679:30;:::i;17744:184::-;17796:77;17793:1;17786:88;17893:4;17890:1;17883:15;17917:4;17914:1;17907:15

Swarm Source

ipfs://65dd562dfaec0e0848c102afb50af50c6c454d217dfd7131a881a507036b91ee
Loading