Contract 0xA4bcD3b7F141Ba1f08F36033fdfCe691565561Bc 2

Token Contract 
 
 
Txn Hash
Method
Block
From
To
Value
0xa64ad2b402bfb271cdde840ac6a002d16fd4cfa87aadaafbfb64ec7c0705cb32Set Approval For...160612622022-11-27 12:15:597 hrs 57 mins ago0x6dff9d067d20dedd57f15687964c0063314f8df6 IN  Artsy Monke: ArtsyMonke Token0 Ether0.0005127 10.99259992
0xb8236dca39040ec340db656f0f9215e795f7e355e30e7dd98fd7b611acf31d9eSafe Transfer Fr...160606512022-11-27 10:13:2310 hrs ago0x0ed03029ca4fd75fc26d3b68c0e3c0701748cbd6 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00074205 11.17776382
0x8de2f4dd4e746f14900c1d4fafc60b6b854a0bf5d88aa1cf92a9b8d0e53388d9Set Approval For...160580292022-11-27 1:27:3518 hrs 46 mins ago0xbbabe80cca2aeb5372b09d99ce8f8371dec7575f IN  Artsy Monke: ArtsyMonke Token0 Ether0.0005117 10.97109005
0x5cf53aead38402107b20635f2df3439298156c4012033c23b5c6a18f8e9dd187Safe Transfer Fr...160580092022-11-27 1:23:3518 hrs 50 mins ago0x84b0b73c98e61fd988602f1ffb92b5afea0f9c85 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00128173 20.80766521
0x166bd9708b276fb8596cd1764bffb6fdc9f35e34a978525cd9f71f4f5ab8c720Set Approval For...160564472022-11-26 20:08:351 day 5 mins agoENS Name oxtomato.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00062046 13.30302629
0x98f3de9e3350a4382fbf57d50f3dd6e264177c8f067045e9d1939dc182ff5e07Set Approval For...160539642022-11-26 11:48:351 day 8 hrs ago0xae3fd230efb1000a86f1f7cdb8d65aff7c87ea82 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00057166 12.25674109
0x3a872d4c894fb5b40bb58393d6b81f25da19ab216db62764bdb549db1256d4d3Safe Transfer Fr...160494022022-11-25 20:32:111 day 23 hrs agoENS Name alphaartcurator.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00057545 11.6576177
0xc6f9bf3555916bf9a178df0bae7c2f6c947c4a08606bb3e1c90a464f43b5d716Safe Transfer Fr...160493512022-11-25 20:21:591 day 23 hrs ago0x2b163cccb96bd7f42b29266cdb383a25311631df IN  Artsy Monke: ArtsyMonke Token0 Ether0.00056132 11.38605344
0xbebae4b91d372ca94a58e45cd177432d3fb968a533bdf11548bb4a12d1a0cd5bSet Approval For...160475262022-11-25 14:13:352 days 6 hrs ago0x812faac0c8221446375e5a57d123eff45981e577 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00059876 12.83105467
0xd94a5c265db839912009fa84915d18e4954a4a4b45ed2fb833c724d3f05d08f6Safe Transfer Fr...160474312022-11-25 13:54:352 days 6 hrs ago0x302f90a581a65a8930100e1fff118e0026093a2b IN  Artsy Monke: ArtsyMonke Token0 Ether0.00050704 11.40078026
0x75007e535dfeb70f4f7fc79c463c89e2f02f822df3e1937266be4aa199175e7bSet Approval For...160472092022-11-25 13:10:112 days 7 hrs ago0x7592fc0720002f69e93e799e1e1f3c866daf058b IN  Artsy Monke: ArtsyMonke Token0 Ether0.00058289 12.47504578
0xc5c652f8ceee7e87eeb26c54540ad8b3a40559c6fcccc247a7e3889e131f822aSet Approval For...160472002022-11-25 13:08:232 days 7 hrs ago0x7592fc0720002f69e93e799e1e1f3c866daf058b IN  Artsy Monke: ArtsyMonke Token0 Ether0.00057415 12.28790881
0x579dcbaf4a04004eaefaa3c0d37c258f8571159a2543512a89c17302988fdabfSet Approval For...160469522022-11-25 12:18:352 days 7 hrs ago0x67ccc07dbb3dbd9dc9b832af63ab084f64b2d00f IN  Artsy Monke: ArtsyMonke Token0 Ether0.00026899 10.87788853
0x2d0eb322547becf7e452480570dd0a94abf1ca890be189a18f993e0fd68e8840Safe Transfer Fr...160432722022-11-24 23:58:112 days 20 hrs ago0xf74f75a87ad4be81c1eb18ffbf9ac5e4e73713bd IN  Artsy Monke: ArtsyMonke Token0 Ether0.00071948 10.83578766
0x4b0d926ab2c110d7205c93068fb4144dd7be86ae94a132339765461643b1ac08Set Approval For...160358972022-11-23 23:15:233 days 20 hrs agoENS Name tokenom.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00030048 12.1511677
0xa70d6e25ab7b23a5066a36124a001ae1ec1e1058f2c375d433d5b762da783606Safe Transfer Fr...160356082022-11-23 22:17:233 days 21 hrs ago0xbb3959778c23fc25b5f6fee7b298ddd18608e037 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00083842 12.62703695
0xde8cdb332792cd2c1fdfedc7488f366fdb31083fc4f7a9d9142f38a70ae2a66aSet Approval For...160309872022-11-23 6:44:474 days 13 hrs ago0x721235bdfe60f616b8c8448a5d425b11548673d6 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00077563 16.6298856
0x966ed21670a3f2c049c7f051c1660672f59664467248a3f792cb7c058d93088eSet Approval For...160269122022-11-22 17:03:595 days 3 hrs ago0xae3fd230efb1000a86f1f7cdb8d65aff7c87ea82 IN  Artsy Monke: ArtsyMonke Token0 Ether0.0008668 18.55110055
0x5b5f45872aceefd18be4ffcceeb93ffd099880b77f8406e766677b429dc32716Safe Transfer Fr...160245862022-11-22 9:13:595 days 10 hrs agoENS Name alienriver.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00071805 11.6568788
0x0a1fd838ebebce10b074d62207236e7436d11fbd93cbe53d60b370066c7658acSet Approval For...160235722022-11-22 5:50:235 days 14 hrs agoENS Name thisisnotajoke.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00051456 11.02680758
0x41cc9d91b5466f111ba094619789ccef39fbe9f609f9011941c1809b33c23fbaSet Approval For...160216212022-11-21 23:18:355 days 20 hrs agoENS Name huevofrito.eth IN  Artsy Monke: ArtsyMonke Token0 Ether0.00050004 10.71573871
0xc9b79eb19ee70426613f8f69ba465e0d0a6bc78665babeed8bfaf8dd982e6f23Set Approval For...160189282022-11-21 14:16:596 days 5 hrs ago0x6e3f16f5dcbb855bec47d532f4eeddf7afc429b1 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00064857 13.9056074
0xdb518e62d0edc30de2354cb86340611812c68214665c6aaf4855677b3e6e1a5aSet Approval For...160174562022-11-21 9:20:476 days 10 hrs ago0xfbbdfb9d984764aad23f3d3ef117b2c109ad4d20 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00061913 13.27438401
0x3c25d90379ddeeb5f8169a2b7ce8b91a141dc2ecbfa78d3eccfa8d1a2e21a12cSet Approval For...160174062022-11-21 9:10:476 days 11 hrs ago0x0d524a5b52737c0a02880d5e84f7d20b8d66bfba IN  Artsy Monke: ArtsyMonke Token0 Ether0.00050318 10.76898696
0xefe0d7be0385dee2e0f643405b03cd4d0eb22925304bfb624492ec2d07dca128Set Approval For...160172562022-11-21 8:40:356 days 11 hrs ago0x1dfe20313fd3706e2907c2928be9c2d9c579b2c1 IN  Artsy Monke: ArtsyMonke Token0 Ether0.00028249 11.38492691
[ Download CSV Export 

OVERVIEW

Each NFT is generated using a cloud computing AI using the traits of the OG Monke and then generated using 20 different themes. No two are alike. 10,000 completely unique Art NFTs.

Latest 6 internal transactions
Parent Txn Hash Block From To Value
0x0a6a3167ec4d884769c71e99292afa552e2431ef630bff65a2b2f262daa61413153033782022-08-08 19:16:57111 days 57 mins ago Coinbase 10 Artsy Monke: ArtsyMonke Token0.00289165 Ether
0x28602836f380f1bc4a489cf7392728e1c2f4dad79369a0690bf6ecf71dc5ee62151273442022-07-12 10:41:00138 days 9 hrs ago Artsy Monke: ArtsyMonke TokenArtsy Monke: Deployer0.77 Ether
0x31df1910251171be75f35c81fec790e3a2d8aaa8498eca5555729f4fc61c19fd150099732022-06-22 22:59:07157 days 21 hrs ago Artsy Monke: ArtsyMonke TokenArtsy Monke: Deployer0.27 Ether
0x7b133e920b6a45b0f8887204daedf46e74f9df8136d7a201afa30655d70e7121149965332022-06-20 12:20:54160 days 7 hrs ago Artsy Monke: ArtsyMonke TokenArtsy Monke: Deployer1.13 Ether
0x2a67fbdef183c52e2cba8f635589356e8678bb09c97bdd9faa01ce84597b0360149877292022-06-18 23:42:59161 days 20 hrs ago Artsy Monke: ArtsyMonke TokenArtsy Monke: Deployer1.31 Ether
0x696b1f6f2b7705702409ae61941e0e77e77dd5fa1236e0c8d386f2a7b3d78dfb149733842022-06-16 12:45:46164 days 7 hrs ago Artsy Monke: ArtsyMonke TokenArtsy Monke: Deployer1.17 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArtsyMonke

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-15
*/

/**
 *Submitted for verification at Etherscan.io on 2022-06-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;


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

library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

contract ArtsyMonke is ERC721, Ownable
{
    using Counters for Counters.Counter;
    using SafeMath for uint256;

    uint256 public price = .01 ether;
    uint256 public maxSupply = 10000;
    uint256 private maxMint = 50;

    string private customBaseURI;
    string private baseExtension;

    bool public mintOpen = false;

    Counters.Counter private _tokenSupply;

    constructor(string memory _customBaseURI) ERC721("Artsy Monke", "ArtsyMonke")  {
        customBaseURI = _customBaseURI;
    }

    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }

    function mintBulk(uint256 numberOfMints, address mintAddress) public payable onlyOwner{
        uint256 supply = _tokenSupply.current();
       for(uint256 i = 1; i <= numberOfMints; i++){
            _safeMint(mintAddress, supply + i);
            _tokenSupply.increment();
        }
    }

    function mint(uint256 numberOfMints) external payable {
        uint256 supply = _tokenSupply.current();
        require(mintOpen, "Sale Needs To Be Active");
        require(numberOfMints > 0 && numberOfMints <= maxMint, "Invalid purchase amount");
        require(supply.add(numberOfMints) <= maxSupply, "Payment exceeds total supply");

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension))
            : "";
    }

    function toggleSale() public onlyOwner {
        mintOpen = !mintOpen;
    }

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

    function setBaseURI(string calldata _newBaseURI) external onlyOwner {
        customBaseURI = _newBaseURI;
    }

    function setMaxMint(uint256 _maxMint) external onlyOwner {
        maxMint = _maxMint;
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_customBaseURI","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":[{"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"},{"internalType":"address","name":"mintAddress","type":"address"}],"name":"mintBulk","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052662386f26fc1000060075561271060085560326009556000600c60006101000a81548160ff0219169083151502179055503480156200004257600080fd5b5060405162003b3938038062003b39833981810160405281019062000068919062000338565b6040518060400160405280600b81526020017f4172747379204d6f6e6b650000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f41727473794d6f6e6b65000000000000000000000000000000000000000000008152508160009080519060200190620000ec92919062000216565b5080600190805190602001906200010592919062000216565b505050620001286200011c6200014860201b60201c565b6200015060201b60201c565b80600a90805190602001906200014092919062000216565b5050620004ed565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002249062000412565b90600052602060002090601f01602090048101928262000248576000855562000294565b82601f106200026357805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029357825182559160200191906001019062000276565b5b509050620002a39190620002a7565b5090565b5b80821115620002c2576000816000905550600101620002a8565b5090565b6000620002dd620002d784620003a6565b6200037d565b905082815260208101848484011115620002f657600080fd5b62000303848285620003dc565b509392505050565b600082601f8301126200031d57600080fd5b81516200032f848260208601620002c6565b91505092915050565b6000602082840312156200034b57600080fd5b600082015167ffffffffffffffff8111156200036657600080fd5b62000374848285016200030b565b91505092915050565b6000620003896200039c565b905062000397828262000448565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c457620003c3620004ad565b5b620003cf82620004dc565b9050602081019050919050565b60005b83811015620003fc578082015181840152602081019050620003df565b838111156200040c576000848401525b50505050565b600060028204905060018216806200042b57607f821691505b602082108114156200044257620004416200047e565b5b50919050565b6200045382620004dc565b810181811067ffffffffffffffff82111715620004755762000474620004ad565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61363c80620004fd6000396000f3fe6080604052600436106101815760003560e01c8063715018a6116100d1578063a0712d681161008a578063c87b56dd11610064578063c87b56dd14610518578063d5abeb0114610555578063e985e9c514610580578063f2fde38b146105bd57610181565b8063a0712d68146104aa578063a22cb465146104c6578063b88d4fde146104ef57610181565b8063715018a6146103df57806371e7e4fb146103f65780637d8966e4146104125780638da5cb5b1461042957806395d89b4114610454578063a035b1fe1461047f57610181565b806324bbd0491161013e578063547520fe11610118578063547520fe1461031357806355f804b31461033c5780636352211e1461036557806370a08231146103a257610181565b806324bbd049146102a85780633ccfd60b146102d357806342842e0e146102ea57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806318160ddd1461025457806323b872dd1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a891906124da565b6105e6565b6040516101ba9190612a56565b60405180910390f35b3480156101cf57600080fd5b506101d86106c8565b6040516101e59190612a71565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612571565b61075a565b60405161022291906129ef565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d919061249e565b6107df565b005b34801561026057600080fd5b506102696108f7565b6040516102769190612cf3565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190612398565b610908565b005b3480156102b457600080fd5b506102bd610968565b6040516102ca9190612a56565b60405180910390f35b3480156102df57600080fd5b506102e861097b565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612398565b610a46565b005b34801561031f57600080fd5b5061033a60048036038101906103359190612571565b610a66565b005b34801561034857600080fd5b50610363600480360381019061035e919061252c565b610aec565b005b34801561037157600080fd5b5061038c60048036038101906103879190612571565b610b7e565b60405161039991906129ef565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612333565b610c30565b6040516103d69190612cf3565b60405180910390f35b3480156103eb57600080fd5b506103f4610ce8565b005b610410600480360381019061040b919061259a565b610d70565b005b34801561041e57600080fd5b50610427610e40565b005b34801561043557600080fd5b5061043e610ee8565b60405161044b91906129ef565b60405180910390f35b34801561046057600080fd5b50610469610f12565b6040516104769190612a71565b60405180910390f35b34801561048b57600080fd5b50610494610fa4565b6040516104a19190612cf3565b60405180910390f35b6104c460048036038101906104bf9190612571565b610faa565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190612462565b6110f4565b005b3480156104fb57600080fd5b50610516600480360381019061051191906123e7565b611275565b005b34801561052457600080fd5b5061053f600480360381019061053a9190612571565b6112d7565b60405161054c9190612a71565b60405180910390f35b34801561056157600080fd5b5061056a611381565b6040516105779190612cf3565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a2919061235c565b611387565b6040516105b49190612a56565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190612333565b61141b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c157506106c082611513565b5b9050919050565b6060600080546106d790612f2d565b80601f016020809104026020016040519081016040528092919081815260200182805461070390612f2d565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b60006107658261157d565b6107a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079b90612c13565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107ea82610b7e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085290612c93565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661087a6115e9565b73ffffffffffffffffffffffffffffffffffffffff1614806108a957506108a8816108a36115e9565b611387565b5b6108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df90612b93565b60405180910390fd5b6108f283836115f1565b505050565b6000610903600d6116aa565b905090565b6109196109136115e9565b826116b8565b610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90612cb3565b60405180910390fd5b610963838383611796565b505050565b600c60009054906101000a900460ff1681565b6109836115e9565b73ffffffffffffffffffffffffffffffffffffffff166109a1610ee8565b73ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90612c33565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a42573d6000803e3d6000fd5b5050565b610a6183838360405180602001604052806000815250611275565b505050565b610a6e6115e9565b73ffffffffffffffffffffffffffffffffffffffff16610a8c610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad990612c33565b60405180910390fd5b8060098190555050565b610af46115e9565b73ffffffffffffffffffffffffffffffffffffffff16610b12610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f90612c33565b60405180910390fd5b8181600a9190610b79929190612175565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90612bd3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890612bb3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf06115e9565b73ffffffffffffffffffffffffffffffffffffffff16610d0e610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90612c33565b60405180910390fd5b610d6e60006119f2565b565b610d786115e9565b73ffffffffffffffffffffffffffffffffffffffff16610d96610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612c33565b60405180910390fd5b6000610df8600d6116aa565b90506000600190505b838111610e3a57610e1d838284610e189190612dbc565b611ab8565b610e27600d611ad6565b8080610e3290612f90565b915050610e01565b50505050565b610e486115e9565b73ffffffffffffffffffffffffffffffffffffffff16610e66610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390612c33565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f2190612f2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4d90612f2d565b8015610f9a5780601f10610f6f57610100808354040283529160200191610f9a565b820191906000526020600020905b815481529060010190602001808311610f7d57829003601f168201915b5050505050905090565b60075481565b6000610fb6600d6116aa565b9050600c60009054906101000a900460ff16611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90612af3565b60405180910390fd5b60008211801561101957506009548211155b611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90612cd3565b60405180910390fd5b60085461106e8383611aec90919063ffffffff16565b11156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a690612b53565b60405180910390fd5b6000600190505b8281116110ef576110d23382846110cd9190612dbc565b611ab8565b6110dc600d611ad6565b80806110e790612f90565b9150506110b6565b505050565b6110fc6115e9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612b33565b60405180910390fd5b80600560006111776115e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112246115e9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112699190612a56565b60405180910390a35050565b6112866112806115e9565b836116b8565b6112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612cb3565b60405180910390fd5b6112d184848484611b02565b50505050565b60606112e28261157d565b611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890612c73565b60405180910390fd5b600061132b611b5e565b9050600081511161134b5760405180602001604052806000815250611379565b8061135584611bf0565b600b604051602001611369939291906129be565b6040516020818303038152906040525b915050919050565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114236115e9565b73ffffffffffffffffffffffffffffffffffffffff16611441610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90612c33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90612ab3565b60405180910390fd5b611510816119f2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661166483610b7e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006116c38261157d565b611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612b73565b60405180910390fd5b600061170d83610b7e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061177c57508373ffffffffffffffffffffffffffffffffffffffff166117648461075a565b73ffffffffffffffffffffffffffffffffffffffff16145b8061178d575061178c8185611387565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166117b682610b7e565b73ffffffffffffffffffffffffffffffffffffffff161461180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180390612c53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612b13565b60405180910390fd5b611887838383611d9d565b6118926000826115f1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e29190612e43565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119399190612dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ad2828260405180602001604052806000815250611da2565b5050565b6001816000016000828254019250508190555050565b60008183611afa9190612dbc565b905092915050565b611b0d848484611796565b611b1984848484611dfd565b611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f90612a93565b60405180910390fd5b50505050565b6060600a8054611b6d90612f2d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9990612f2d565b8015611be65780601f10611bbb57610100808354040283529160200191611be6565b820191906000526020600020905b815481529060010190602001808311611bc957829003601f168201915b5050505050905090565b60606000821415611c38576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d98565b600082905060005b60008214611c6a578080611c5390612f90565b915050600a82611c639190612e12565b9150611c40565b60008167ffffffffffffffff811115611cac577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cde5781602001600182028036833780820191505090505b5090505b60008514611d9157600182611cf79190612e43565b9150600a85611d069190612fd9565b6030611d129190612dbc565b60f81b818381518110611d4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d8a9190612e12565b9450611ce2565b8093505050505b919050565b505050565b611dac8383611f94565b611db96000848484611dfd565b611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90612a93565b60405180910390fd5b505050565b6000611e1e8473ffffffffffffffffffffffffffffffffffffffff16612162565b15611f87578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e476115e9565b8786866040518563ffffffff1660e01b8152600401611e699493929190612a0a565b602060405180830381600087803b158015611e8357600080fd5b505af1925050508015611eb457506040513d601f19601f82011682018060405250810190611eb19190612503565b60015b611f37573d8060008114611ee4576040519150601f19603f3d011682016040523d82523d6000602084013e611ee9565b606091505b50600081511415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690612a93565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f8c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90612bf3565b60405180910390fd5b61200d8161157d565b1561204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490612ad3565b60405180910390fd5b61205960008383611d9d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a99190612dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461218190612f2d565b90600052602060002090601f0160209004810192826121a357600085556121ea565b82601f106121bc57803560ff19168380011785556121ea565b828001600101855582156121ea579182015b828111156121e95782358255916020019190600101906121ce565b5b5090506121f791906121fb565b5090565b5b808211156122145760008160009055506001016121fc565b5090565b600061222b61222684612d33565b612d0e565b90508281526020810184848401111561224357600080fd5b61224e848285612eeb565b509392505050565b600081359050612265816135aa565b92915050565b60008135905061227a816135c1565b92915050565b60008135905061228f816135d8565b92915050565b6000815190506122a4816135d8565b92915050565b600082601f8301126122bb57600080fd5b81356122cb848260208601612218565b91505092915050565b60008083601f8401126122e657600080fd5b8235905067ffffffffffffffff8111156122ff57600080fd5b60208301915083600182028301111561231757600080fd5b9250929050565b60008135905061232d816135ef565b92915050565b60006020828403121561234557600080fd5b600061235384828501612256565b91505092915050565b6000806040838503121561236f57600080fd5b600061237d85828601612256565b925050602061238e85828601612256565b9150509250929050565b6000806000606084860312156123ad57600080fd5b60006123bb86828701612256565b93505060206123cc86828701612256565b92505060406123dd8682870161231e565b9150509250925092565b600080600080608085870312156123fd57600080fd5b600061240b87828801612256565b945050602061241c87828801612256565b935050604061242d8782880161231e565b925050606085013567ffffffffffffffff81111561244a57600080fd5b612456878288016122aa565b91505092959194509250565b6000806040838503121561247557600080fd5b600061248385828601612256565b92505060206124948582860161226b565b9150509250929050565b600080604083850312156124b157600080fd5b60006124bf85828601612256565b92505060206124d08582860161231e565b9150509250929050565b6000602082840312156124ec57600080fd5b60006124fa84828501612280565b91505092915050565b60006020828403121561251557600080fd5b600061252384828501612295565b91505092915050565b6000806020838503121561253f57600080fd5b600083013567ffffffffffffffff81111561255957600080fd5b612565858286016122d4565b92509250509250929050565b60006020828403121561258357600080fd5b60006125918482850161231e565b91505092915050565b600080604083850312156125ad57600080fd5b60006125bb8582860161231e565b92505060206125cc85828601612256565b9150509250929050565b6125df81612e77565b82525050565b6125ee81612e89565b82525050565b60006125ff82612d79565b6126098185612d8f565b9350612619818560208601612efa565b612622816130c6565b840191505092915050565b600061263882612d84565b6126428185612da0565b9350612652818560208601612efa565b61265b816130c6565b840191505092915050565b600061267182612d84565b61267b8185612db1565b935061268b818560208601612efa565b80840191505092915050565b600081546126a481612f2d565b6126ae8186612db1565b945060018216600081146126c957600181146126da5761270d565b60ff1983168652818601935061270d565b6126e385612d64565b60005b83811015612705578154818901526001820191506020810190506126e6565b838801955050505b50505092915050565b6000612723603283612da0565b915061272e826130d7565b604082019050919050565b6000612746602683612da0565b915061275182613126565b604082019050919050565b6000612769601c83612da0565b915061277482613175565b602082019050919050565b600061278c601783612da0565b91506127978261319e565b602082019050919050565b60006127af602483612da0565b91506127ba826131c7565b604082019050919050565b60006127d2601983612da0565b91506127dd82613216565b602082019050919050565b60006127f5601c83612da0565b91506128008261323f565b602082019050919050565b6000612818602c83612da0565b915061282382613268565b604082019050919050565b600061283b603883612da0565b9150612846826132b7565b604082019050919050565b600061285e602a83612da0565b915061286982613306565b604082019050919050565b6000612881602983612da0565b915061288c82613355565b604082019050919050565b60006128a4602083612da0565b91506128af826133a4565b602082019050919050565b60006128c7602c83612da0565b91506128d2826133cd565b604082019050919050565b60006128ea602083612da0565b91506128f58261341c565b602082019050919050565b600061290d602983612da0565b915061291882613445565b604082019050919050565b6000612930602f83612da0565b915061293b82613494565b604082019050919050565b6000612953602183612da0565b915061295e826134e3565b604082019050919050565b6000612976603183612da0565b915061298182613532565b604082019050919050565b6000612999601783612da0565b91506129a482613581565b602082019050919050565b6129b881612ee1565b82525050565b60006129ca8286612666565b91506129d68285612666565b91506129e28284612697565b9150819050949350505050565b6000602082019050612a0460008301846125d6565b92915050565b6000608082019050612a1f60008301876125d6565b612a2c60208301866125d6565b612a3960408301856129af565b8181036060830152612a4b81846125f4565b905095945050505050565b6000602082019050612a6b60008301846125e5565b92915050565b60006020820190508181036000830152612a8b818461262d565b905092915050565b60006020820190508181036000830152612aac81612716565b9050919050565b60006020820190508181036000830152612acc81612739565b9050919050565b60006020820190508181036000830152612aec8161275c565b9050919050565b60006020820190508181036000830152612b0c8161277f565b9050919050565b60006020820190508181036000830152612b2c816127a2565b9050919050565b60006020820190508181036000830152612b4c816127c5565b9050919050565b60006020820190508181036000830152612b6c816127e8565b9050919050565b60006020820190508181036000830152612b8c8161280b565b9050919050565b60006020820190508181036000830152612bac8161282e565b9050919050565b60006020820190508181036000830152612bcc81612851565b9050919050565b60006020820190508181036000830152612bec81612874565b9050919050565b60006020820190508181036000830152612c0c81612897565b9050919050565b60006020820190508181036000830152612c2c816128ba565b9050919050565b60006020820190508181036000830152612c4c816128dd565b9050919050565b60006020820190508181036000830152612c6c81612900565b9050919050565b60006020820190508181036000830152612c8c81612923565b9050919050565b60006020820190508181036000830152612cac81612946565b9050919050565b60006020820190508181036000830152612ccc81612969565b9050919050565b60006020820190508181036000830152612cec8161298c565b9050919050565b6000602082019050612d0860008301846129af565b92915050565b6000612d18612d29565b9050612d248282612f5f565b919050565b6000604051905090565b600067ffffffffffffffff821115612d4e57612d4d613097565b5b612d57826130c6565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612dc782612ee1565b9150612dd283612ee1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e0757612e0661300a565b5b828201905092915050565b6000612e1d82612ee1565b9150612e2883612ee1565b925082612e3857612e37613039565b5b828204905092915050565b6000612e4e82612ee1565b9150612e5983612ee1565b925082821015612e6c57612e6b61300a565b5b828203905092915050565b6000612e8282612ec1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f18578082015181840152602081019050612efd565b83811115612f27576000848401525b50505050565b60006002820490506001821680612f4557607f821691505b60208210811415612f5957612f58613068565b5b50919050565b612f68826130c6565b810181811067ffffffffffffffff82111715612f8757612f86613097565b5b80604052505050565b6000612f9b82612ee1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fce57612fcd61300a565b5b600182019050919050565b6000612fe482612ee1565b9150612fef83612ee1565b925082612fff57612ffe613039565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65204e6565647320546f20426520416374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6135b381612e77565b81146135be57600080fd5b50565b6135ca81612e89565b81146135d557600080fd5b50565b6135e181612e95565b81146135ec57600080fd5b50565b6135f881612ee1565b811461360357600080fd5b5056fea2646970667358221220f9742d6efc552047dd41af48df13278d53dba6375df83bed958528eac702b3eb64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _customBaseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

39123:2442:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25317:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26262:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27821:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27344:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39653:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28711:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39434:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41417:143;;;;;;;;;;;;;:::i;:::-;;29121:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41315:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41193:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25956:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38494:94;;;;;;;;;;;;;:::i;:::-;;39762:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40985:78;;;;;;;;;;;;;:::i;:::-;;37843:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26431:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39247:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40066:502;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28114:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29377:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40576:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39286:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28480:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38743:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25317:305;25419:4;25471:25;25456:40;;;:11;:40;;;;:105;;;;25528:33;25513:48;;;:11;:48;;;;25456:105;:158;;;;25578:36;25602:11;25578:23;:36::i;:::-;25456:158;25436:178;;25317:305;;;:::o;26262:100::-;26316:13;26349:5;26342:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26262:100;:::o;27821:221::-;27897:7;27925:16;27933:7;27925;:16::i;:::-;27917:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28010:15;:24;28026:7;28010:24;;;;;;;;;;;;;;;;;;;;;28003:31;;27821:221;;;:::o;27344:411::-;27425:13;27441:23;27456:7;27441:14;:23::i;:::-;27425:39;;27489:5;27483:11;;:2;:11;;;;27475:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27583:5;27567:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27592:37;27609:5;27616:12;:10;:12::i;:::-;27592:16;:37::i;:::-;27567:62;27545:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27726:21;27735:2;27739:7;27726:8;:21::i;:::-;27344:411;;;:::o;39653:101::-;39697:7;39724:22;:12;:20;:22::i;:::-;39717:29;;39653:101;:::o;28711:339::-;28906:41;28925:12;:10;:12::i;:::-;28939:7;28906:18;:41::i;:::-;28898:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29014:28;29024:4;29030:2;29034:7;29014:9;:28::i;:::-;28711:339;;;:::o;39434:28::-;;;;;;;;;;;;;:::o;41417:143::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41465:15:::1;41483:21;41465:39;;41523:10;41515:28;;:37;41544:7;41515:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38134:1;41417:143::o:0;29121:185::-;29259:39;29276:4;29282:2;29286:7;29259:39;;;;;;;;;;;;:16;:39::i;:::-;29121:185;;;:::o;41315:94::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41393:8:::1;41383:7;:18;;;;41315:94:::0;:::o;41193:114::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41288:11:::1;;41272:13;:27;;;;;;;:::i;:::-;;41193:114:::0;;:::o;25956:239::-;26028:7;26048:13;26064:7;:16;26072:7;26064:16;;;;;;;;;;;;;;;;;;;;;26048:32;;26116:1;26099:19;;:5;:19;;;;26091:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26182:5;26175:12;;;25956:239;;;:::o;25686:208::-;25758:7;25803:1;25786:19;;:5;:19;;;;25778:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25870:9;:16;25880:5;25870:16;;;;;;;;;;;;;;;;25863:23;;25686:208;;;:::o;38494:94::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38559:21:::1;38577:1;38559:9;:21::i;:::-;38494:94::o:0;39762:296::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39859:14:::1;39876:22;:12;:20;:22::i;:::-;39859:39;;39912:9;39924:1;39912:13;;39908:143;39932:13;39927:1;:18;39908:143;;39966:34;39976:11;39998:1;39989:6;:10;;;;:::i;:::-;39966:9;:34::i;:::-;40015:24;:12;:22;:24::i;:::-;39947:3;;;;;:::i;:::-;;;;39908:143;;;;38134:1;39762:296:::0;;:::o;40985:78::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41047:8:::1;;;;;;;;;;;41046:9;41035:8;;:20;;;;;;;;;;;;;;;;;;40985:78::o:0;37843:87::-;37889:7;37916:6;;;;;;;;;;;37909:13;;37843:87;:::o;26431:104::-;26487:13;26520:7;26513:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26431:104;:::o;39247:32::-;;;;:::o;40066:502::-;40131:14;40148:22;:12;:20;:22::i;:::-;40131:39;;40189:8;;;;;;;;;;;40181:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40260:1;40244:13;:17;:45;;;;;40282:7;;40265:13;:24;;40244:45;40236:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40365:9;;40336:25;40347:13;40336:6;:10;;:25;;;;:::i;:::-;:38;;40328:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;40423:9;40435:1;40423:13;;40419:142;40443:13;40438:1;:18;40419:142;;40477:33;40487:10;40508:1;40499:6;:10;;;;:::i;:::-;40477:9;:33::i;:::-;40525:24;:12;:22;:24::i;:::-;40458:3;;;;;:::i;:::-;;;;40419:142;;;;40066:502;;:::o;28114:295::-;28229:12;:10;:12::i;:::-;28217:24;;:8;:24;;;;28209:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28329:8;28284:18;:32;28303:12;:10;:12::i;:::-;28284:32;;;;;;;;;;;;;;;:42;28317:8;28284:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28382:8;28353:48;;28368:12;:10;:12::i;:::-;28353:48;;;28392:8;28353:48;;;;;;:::i;:::-;;;;;;;;28114:295;;:::o;29377:328::-;29552:41;29571:12;:10;:12::i;:::-;29585:7;29552:18;:41::i;:::-;29544:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29658:39;29672:4;29678:2;29682:7;29691:5;29658:13;:39::i;:::-;29377:328;;;;:::o;40576:401::-;40649:13;40683:16;40691:7;40683;:16::i;:::-;40675:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40762:28;40793:10;:8;:10::i;:::-;40762:41;;40852:1;40827:14;40821:28;:32;:148;;;;;;;;;;;;;;;;;40893:14;40909:25;40926:7;40909:16;:25::i;:::-;40936:13;40876:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40821:148;40814:155;;;40576:401;;;:::o;39286:32::-;;;;:::o;28480:164::-;28577:4;28601:18;:25;28620:5;28601:25;;;;;;;;;;;;;;;:35;28627:8;28601:35;;;;;;;;;;;;;;;;;;;;;;;;;28594:42;;28480:164;;;;:::o;38743:192::-;38074:12;:10;:12::i;:::-;38063:23;;:7;:5;:7::i;:::-;:23;;;38055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38852:1:::1;38832:22;;:8;:22;;;;38824:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38908:19;38918:8;38908:9;:19::i;:::-;38743:192:::0;:::o;12544:157::-;12629:4;12668:25;12653:40;;;:11;:40;;;;12646:47;;12544:157;;;:::o;31215:127::-;31280:4;31332:1;31304:30;;:7;:16;31312:7;31304:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31297:37;;31215:127;;;:::o;3117:98::-;3170:7;3197:10;3190:17;;3117:98;:::o;35197:174::-;35299:2;35272:15;:24;35288:7;35272:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35355:7;35351:2;35317:46;;35326:23;35341:7;35326:14;:23::i;:::-;35317:46;;;;;;;;;;;;35197:174;;:::o;2491:114::-;2556:7;2583;:14;;;2576:21;;2491:114;;;:::o;31509:348::-;31602:4;31627:16;31635:7;31627;:16::i;:::-;31619:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31703:13;31719:23;31734:7;31719:14;:23::i;:::-;31703:39;;31772:5;31761:16;;:7;:16;;;:51;;;;31805:7;31781:31;;:20;31793:7;31781:11;:20::i;:::-;:31;;;31761:51;:87;;;;31816:32;31833:5;31840:7;31816:16;:32::i;:::-;31761:87;31753:96;;;31509:348;;;;:::o;34501:578::-;34660:4;34633:31;;:23;34648:7;34633:14;:23::i;:::-;:31;;;34625:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34743:1;34729:16;;:2;:16;;;;34721:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34799:39;34820:4;34826:2;34830:7;34799:20;:39::i;:::-;34903:29;34920:1;34924:7;34903:8;:29::i;:::-;34964:1;34945:9;:15;34955:4;34945:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34993:1;34976:9;:13;34986:2;34976:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35024:2;35005:7;:16;35013:7;35005:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35063:7;35059:2;35044:27;;35053:4;35044:27;;;;;;;;;;;;34501:578;;;:::o;38943:173::-;38999:16;39018:6;;;;;;;;;;;38999:25;;39044:8;39035:6;;:17;;;;;;;;;;;;;;;;;;39099:8;39068:40;;39089:8;39068:40;;;;;;;;;;;;38943:173;;:::o;32199:110::-;32275:26;32285:2;32289:7;32275:26;;;;;;;;;;;;:9;:26::i;:::-;32199:110;;:::o;2613:127::-;2720:1;2702:7;:14;;;:19;;;;;;;;;;;2613:127;:::o;20177:98::-;20235:7;20266:1;20262;:5;;;;:::i;:::-;20255:12;;20177:98;;;;:::o;30587:315::-;30744:28;30754:4;30760:2;30764:7;30744:9;:28::i;:::-;30791:48;30814:4;30820:2;30824:7;30833:5;30791:22;:48::i;:::-;30783:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30587:315;;;;:::o;41071:114::-;41131:13;41164;41157:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41071:114;:::o;321:723::-;377:13;607:1;598:5;:10;594:53;;;625:10;;;;;;;;;;;;;;;;;;;;;594:53;657:12;672:5;657:20;;688:14;713:78;728:1;720:4;:9;713:78;;746:8;;;;;:::i;:::-;;;;777:2;769:10;;;;;:::i;:::-;;;713:78;;;801:19;833:6;823:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;801:39;;851:154;867:1;858:5;:10;851:154;;895:1;885:11;;;;;:::i;:::-;;;962:2;954:5;:10;;;;:::i;:::-;941:2;:24;;;;:::i;:::-;928:39;;911:6;918;911:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;991:2;982:11;;;;;:::i;:::-;;;851:154;;;1029:6;1015:21;;;;;321:723;;;;:::o;37307:126::-;;;;:::o;32536:321::-;32666:18;32672:2;32676:7;32666:5;:18::i;:::-;32717:54;32748:1;32752:2;32756:7;32765:5;32717:22;:54::i;:::-;32695:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32536:321;;;:::o;35936:799::-;36091:4;36112:15;:2;:13;;;:15::i;:::-;36108:620;;;36164:2;36148:36;;;36185:12;:10;:12::i;:::-;36199:4;36205:7;36214:5;36148:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36144:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36407:1;36390:6;:13;:18;36386:272;;;36433:60;;;;;;;;;;:::i;:::-;;;;;;;;36386:272;36608:6;36602:13;36593:6;36589:2;36585:15;36578:38;36144:529;36281:41;;;36271:51;;;:6;:51;;;;36264:58;;;;;36108:620;36712:4;36705:11;;35936:799;;;;;;;:::o;33193:382::-;33287:1;33273:16;;:2;:16;;;;33265:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33346:16;33354:7;33346;:16::i;:::-;33345:17;33337:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33408:45;33437:1;33441:2;33445:7;33408:20;:45::i;:::-;33483:1;33466:9;:13;33476:2;33466:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33514:2;33495:7;:16;33503:7;33495:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33559:7;33555:2;33534:33;;33551:1;33534:33;;;;;;;;;;;;33193:382;;:::o;3941:387::-;4001:4;4209:12;4276:7;4264:20;4256:28;;4319:1;4312:4;:8;4305:15;;;3941:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;1292:8;1302:6;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;1638:5;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:262::-;1796:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:2;;;1861:1;1858;1851:12;1813:2;1904:1;1929:53;1974:7;1965:6;1954:9;1950:22;1929:53;:::i;:::-;1919:63;;1875:117;1803:196;;;;:::o;2005:407::-;2073:6;2081;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2146:1;2143;2136:12;2098:2;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;2088:324;;;;;:::o;2418:552::-;2495:6;2503;2511;2560:2;2548:9;2539:7;2535:23;2531:32;2528:2;;;2576:1;2573;2566:12;2528:2;2619:1;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2590:117;2746:2;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;:::i;:::-;2762:63;;2717:118;2874:2;2900:53;2945:7;2936:6;2925:9;2921:22;2900:53;:::i;:::-;2890:63;;2845:118;2518:452;;;;;:::o;2976:809::-;3071:6;3079;3087;3095;3144:3;3132:9;3123:7;3119:23;3115:33;3112:2;;;3161:1;3158;3151:12;3112:2;3204:1;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3175:117;3331:2;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3302:118;3459:2;3485:53;3530:7;3521:6;3510:9;3506:22;3485:53;:::i;:::-;3475:63;;3430:118;3615:2;3604:9;3600:18;3587:32;3646:18;3638:6;3635:30;3632:2;;;3678:1;3675;3668:12;3632:2;3706:62;3760:7;3751:6;3740:9;3736:22;3706:62;:::i;:::-;3696:72;;3558:220;3102:683;;;;;;;:::o;3791:401::-;3856:6;3864;3913:2;3901:9;3892:7;3888:23;3884:32;3881:2;;;3929:1;3926;3919:12;3881:2;3972:1;3997:53;4042:7;4033:6;4022:9;4018:22;3997:53;:::i;:::-;3987:63;;3943:117;4099:2;4125:50;4167:7;4158:6;4147:9;4143:22;4125:50;:::i;:::-;4115:60;;4070:115;3871:321;;;;;:::o;4198:407::-;4266:6;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:2;;;4339:1;4336;4329:12;4291:2;4382:1;4407:53;4452:7;4443:6;4432:9;4428:22;4407:53;:::i;:::-;4397:63;;4353:117;4509:2;4535:53;4580:7;4571:6;4560:9;4556:22;4535:53;:::i;:::-;4525:63;;4480:118;4281:324;;;;;:::o;4611:260::-;4669:6;4718:2;4706:9;4697:7;4693:23;4689:32;4686:2;;;4734:1;4731;4724:12;4686:2;4777:1;4802:52;4846:7;4837:6;4826:9;4822:22;4802:52;:::i;:::-;4792:62;;4748:116;4676:195;;;;:::o;4877:282::-;4946:6;4995:2;4983:9;4974:7;4970:23;4966:32;4963:2;;;5011:1;5008;5001:12;4963:2;5054:1;5079:63;5134:7;5125:6;5114:9;5110:22;5079:63;:::i;:::-;5069:73;;5025:127;4953:206;;;;:::o;5165:395::-;5236:6;5244;5293:2;5281:9;5272:7;5268:23;5264:32;5261:2;;;5309:1;5306;5299:12;5261:2;5380:1;5369:9;5365:17;5352:31;5410:18;5402:6;5399:30;5396:2;;;5442:1;5439;5432:12;5396:2;5478:65;5535:7;5526:6;5515:9;5511:22;5478:65;:::i;:::-;5460:83;;;;5323:230;5251:309;;;;;:::o;5566:262::-;5625:6;5674:2;5662:9;5653:7;5649:23;5645:32;5642:2;;;5690:1;5687;5680:12;5642:2;5733:1;5758:53;5803:7;5794:6;5783:9;5779:22;5758:53;:::i;:::-;5748:63;;5704:117;5632:196;;;;:::o;5834:407::-;5902:6;5910;5959:2;5947:9;5938:7;5934:23;5930:32;5927:2;;;5975:1;5972;5965:12;5927:2;6018:1;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5989:117;6145:2;6171:53;6216:7;6207:6;6196:9;6192:22;6171:53;:::i;:::-;6161:63;;6116:118;5917:324;;;;;:::o;6247:118::-;6334:24;6352:5;6334:24;:::i;:::-;6329:3;6322:37;6312:53;;:::o;6371:109::-;6452:21;6467:5;6452:21;:::i;:::-;6447:3;6440:34;6430:50;;:::o;6486:360::-;6572:3;6600:38;6632:5;6600:38;:::i;:::-;6654:70;6717:6;6712:3;6654:70;:::i;:::-;6647:77;;6733:52;6778:6;6773:3;6766:4;6759:5;6755:16;6733:52;:::i;:::-;6810:29;6832:6;6810:29;:::i;:::-;6805:3;6801:39;6794:46;;6576:270;;;;;:::o;6852:364::-;6940:3;6968:39;7001:5;6968:39;:::i;:::-;7023:71;7087:6;7082:3;7023:71;:::i;:::-;7016:78;;7103:52;7148:6;7143:3;7136:4;7129:5;7125:16;7103:52;:::i;:::-;7180:29;7202:6;7180:29;:::i;:::-;7175:3;7171:39;7164:46;;6944:272;;;;;:::o;7222:377::-;7328:3;7356:39;7389:5;7356:39;:::i;:::-;7411:89;7493:6;7488:3;7411:89;:::i;:::-;7404:96;;7509:52;7554:6;7549:3;7542:4;7535:5;7531:16;7509:52;:::i;:::-;7586:6;7581:3;7577:16;7570:23;;7332:267;;;;;:::o;7629:845::-;7732:3;7769:5;7763:12;7798:36;7824:9;7798:36;:::i;:::-;7850:89;7932:6;7927:3;7850:89;:::i;:::-;7843:96;;7970:1;7959:9;7955:17;7986:1;7981:137;;;;8132:1;8127:341;;;;7948:520;;7981:137;8065:4;8061:9;8050;8046:25;8041:3;8034:38;8101:6;8096:3;8092:16;8085:23;;7981:137;;8127:341;8194:38;8226:5;8194:38;:::i;:::-;8254:1;8268:154;8282:6;8279:1;8276:13;8268:154;;;8356:7;8350:14;8346:1;8341:3;8337:11;8330:35;8406:1;8397:7;8393:15;8382:26;;8304:4;8301:1;8297:12;8292:17;;8268:154;;;8451:6;8446:3;8442:16;8435:23;;8134:334;;7948:520;;7736:738;;;;;;:::o;8480:366::-;8622:3;8643:67;8707:2;8702:3;8643:67;:::i;:::-;8636:74;;8719:93;8808:3;8719:93;:::i;:::-;8837:2;8832:3;8828:12;8821:19;;8626:220;;;:::o;8852:366::-;8994:3;9015:67;9079:2;9074:3;9015:67;:::i;:::-;9008:74;;9091:93;9180:3;9091:93;:::i;:::-;9209:2;9204:3;9200:12;9193:19;;8998:220;;;:::o;9224:366::-;9366:3;9387:67;9451:2;9446:3;9387:67;:::i;:::-;9380:74;;9463:93;9552:3;9463:93;:::i;:::-;9581:2;9576:3;9572:12;9565:19;;9370:220;;;:::o;9596:366::-;9738:3;9759:67;9823:2;9818:3;9759:67;:::i;:::-;9752:74;;9835:93;9924:3;9835:93;:::i;:::-;9953:2;9948:3;9944:12;9937:19;;9742:220;;;:::o;9968:366::-;10110:3;10131:67;10195:2;10190:3;10131:67;:::i;:::-;10124:74;;10207:93;10296:3;10207:93;:::i;:::-;10325:2;10320:3;10316:12;10309:19;;10114:220;;;:::o;10340:366::-;10482:3;10503:67;10567:2;10562:3;10503:67;:::i;:::-;10496:74;;10579:93;10668:3;10579:93;:::i;:::-;10697:2;10692:3;10688:12;10681:19;;10486:220;;;:::o;10712:366::-;10854:3;10875:67;10939:2;10934:3;10875:67;:::i;:::-;10868:74;;10951:93;11040:3;10951:93;:::i;:::-;11069:2;11064:3;11060:12;11053:19;;10858:220;;;:::o;11084:366::-;11226:3;11247:67;11311:2;11306:3;11247:67;:::i;:::-;11240:74;;11323:93;11412:3;11323:93;:::i;:::-;11441:2;11436:3;11432:12;11425:19;;11230:220;;;:::o;11456:366::-;11598:3;11619:67;11683:2;11678:3;11619:67;:::i;:::-;11612:74;;11695:93;11784:3;11695:93;:::i;:::-;11813:2;11808:3;11804:12;11797:19;;11602:220;;;:::o;11828:366::-;11970:3;11991:67;12055:2;12050:3;11991:67;:::i;:::-;11984:74;;12067:93;12156:3;12067:93;:::i;:::-;12185:2;12180:3;12176:12;12169:19;;11974:220;;;:::o;12200:366::-;12342:3;12363:67;12427:2;12422:3;12363:67;:::i;:::-;12356:74;;12439:93;12528:3;12439:93;:::i;:::-;12557:2;12552:3;12548:12;12541:19;;12346:220;;;:::o;12572:366::-;12714:3;12735:67;12799:2;12794:3;12735:67;:::i;:::-;12728:74;;12811:93;12900:3;12811:93;:::i;:::-;12929:2;12924:3;12920:12;12913:19;;12718:220;;;:::o;12944:366::-;13086:3;13107:67;13171:2;13166:3;13107:67;:::i;:::-;13100:74;;13183:93;13272:3;13183:93;:::i;:::-;13301:2;13296:3;13292:12;13285:19;;13090:220;;;:::o;13316:366::-;13458:3;13479:67;13543:2;13538:3;13479:67;:::i;:::-;13472:74;;13555:93;13644:3;13555:93;:::i;:::-;13673:2;13668:3;13664:12;13657:19;;13462:220;;;:::o;13688:366::-;13830:3;13851:67;13915:2;13910:3;13851:67;:::i;:::-;13844:74;;13927:93;14016:3;13927:93;:::i;:::-;14045:2;14040:3;14036:12;14029:19;;13834:220;;;:::o;14060:366::-;14202:3;14223:67;14287:2;14282:3;14223:67;:::i;:::-;14216:74;;14299:93;14388:3;14299:93;:::i;:::-;14417:2;14412:3;14408:12;14401:19;;14206:220;;;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14578:220;;;:::o;14804:366::-;14946:3;14967:67;15031:2;15026:3;14967:67;:::i;:::-;14960:74;;15043:93;15132:3;15043:93;:::i;:::-;15161:2;15156:3;15152:12;15145:19;;14950:220;;;:::o;15176:366::-;15318:3;15339:67;15403:2;15398:3;15339:67;:::i;:::-;15332:74;;15415:93;15504:3;15415:93;:::i;:::-;15533:2;15528:3;15524:12;15517:19;;15322:220;;;:::o;15548:118::-;15635:24;15653:5;15635:24;:::i;:::-;15630:3;15623:37;15613:53;;:::o;15672:589::-;15897:3;15919:95;16010:3;16001:6;15919:95;:::i;:::-;15912:102;;16031:95;16122:3;16113:6;16031:95;:::i;:::-;16024:102;;16143:92;16231:3;16222:6;16143:92;:::i;:::-;16136:99;;16252:3;16245:10;;15901:360;;;;;;:::o;16267:222::-;16360:4;16398:2;16387:9;16383:18;16375:26;;16411:71;16479:1;16468:9;16464:17;16455:6;16411:71;:::i;:::-;16365:124;;;;:::o;16495:640::-;16690:4;16728:3;16717:9;16713:19;16705:27;;16742:71;16810:1;16799:9;16795:17;16786:6;16742:71;:::i;:::-;16823:72;16891:2;16880:9;16876:18;16867:6;16823:72;:::i;:::-;16905;16973:2;16962:9;16958:18;16949:6;16905:72;:::i;:::-;17024:9;17018:4;17014:20;17009:2;16998:9;16994:18;16987:48;17052:76;17123:4;17114:6;17052:76;:::i;:::-;17044:84;;16695:440;;;;;;;:::o;17141:210::-;17228:4;17266:2;17255:9;17251:18;17243:26;;17279:65;17341:1;17330:9;17326:17;17317:6;17279:65;:::i;:::-;17233:118;;;;:::o;17357:313::-;17470:4;17508:2;17497:9;17493:18;17485:26;;17557:9;17551:4;17547:20;17543:1;17532:9;17528:17;17521:47;17585:78;17658:4;17649:6;17585:78;:::i;:::-;17577:86;;17475:195;;;;:::o;17676:419::-;17842:4;17880:2;17869:9;17865:18;17857:26;;17929:9;17923:4;17919:20;17915:1;17904:9;17900:17;17893:47;17957:131;18083:4;17957:131;:::i;:::-;17949:139;;17847:248;;;:::o;18101:419::-;18267:4;18305:2;18294:9;18290:18;18282:26;;18354:9;18348:4;18344:20;18340:1;18329:9;18325:17;18318:47;18382:131;18508:4;18382:131;:::i;:::-;18374:139;;18272:248;;;:::o;18526:419::-;18692:4;18730:2;18719:9;18715:18;18707:26;;18779:9;18773:4;18769:20;18765:1;18754:9;18750:17;18743:47;18807:131;18933:4;18807:131;:::i;:::-;18799:139;;18697:248;;;:::o;18951:419::-;19117:4;19155:2;19144:9;19140:18;19132:26;;19204:9;19198:4;19194:20;19190:1;19179:9;19175:17;19168:47;19232:131;19358:4;19232:131;:::i;:::-;19224:139;;19122:248;;;:::o;19376:419::-;19542:4;19580:2;19569:9;19565:18;19557:26;;19629:9;19623:4;19619:20;19615:1;19604:9;19600:17;19593:47;19657:131;19783:4;19657:131;:::i;:::-;19649:139;;19547:248;;;:::o;19801:419::-;19967:4;20005:2;19994:9;19990:18;19982:26;;20054:9;20048:4;20044:20;20040:1;20029:9;20025:17;20018:47;20082:131;20208:4;20082:131;:::i;:::-;20074:139;;19972:248;;;:::o;20226:419::-;20392:4;20430:2;20419:9;20415:18;20407:26;;20479:9;20473:4;20469:20;20465:1;20454:9;20450:17;20443:47;20507:131;20633:4;20507:131;:::i;:::-;20499:139;;20397:248;;;:::o;20651:419::-;20817:4;20855:2;20844:9;20840:18;20832:26;;20904:9;20898:4;20894:20;20890:1;20879:9;20875:17;20868:47;20932:131;21058:4;20932:131;:::i;:::-;20924:139;;20822:248;;;:::o;21076:419::-;21242:4;21280:2;21269:9;21265:18;21257:26;;21329:9;21323:4;21319:20;21315:1;21304:9;21300:17;21293:47;21357:131;21483:4;21357:131;:::i;:::-;21349:139;;21247:248;;;:::o;21501:419::-;21667:4;21705:2;21694:9;21690:18;21682:26;;21754:9;21748:4;21744:20;21740:1;21729:9;21725:17;21718:47;21782:131;21908:4;21782:131;:::i;:::-;21774:139;;21672:248;;;:::o;21926:419::-;22092:4;22130:2;22119:9;22115:18;22107:26;;22179:9;22173:4;22169:20;22165:1;22154:9;22150:17;22143:47;22207:131;22333:4;22207:131;:::i;:::-;22199:139;;22097:248;;;:::o;22351:419::-;22517:4;22555:2;22544:9;22540:18;22532:26;;22604:9;22598:4;22594:20;22590:1;22579:9;22575:17;22568:47;22632:131;22758:4;22632:131;:::i;:::-;22624:139;;22522:248;;;:::o;22776:419::-;22942:4;22980:2;22969:9;22965:18;22957:26;;23029:9;23023:4;23019:20;23015:1;23004:9;23000:17;22993:47;23057:131;23183:4;23057:131;:::i;:::-;23049:139;;22947:248;;;:::o;23201:419::-;23367:4;23405:2;23394:9;23390:18;23382:26;;23454:9;23448:4;23444:20;23440:1;23429:9;23425:17;23418:47;23482:131;23608:4;23482:131;:::i;:::-;23474:139;;23372:248;;;:::o;23626:419::-;23792:4;23830:2;23819:9;23815:18;23807:26;;23879:9;23873:4;23869:20;23865:1;23854:9;23850:17;23843:47;23907:131;24033:4;23907:131;:::i;:::-;23899:139;;23797:248;;;:::o;24051:419::-;24217:4;24255:2;24244:9;24240:18;24232:26;;24304:9;24298:4;24294:20;24290:1;24279:9;24275:17;24268:47;24332:131;24458:4;24332:131;:::i;:::-;24324:139;;24222:248;;;:::o;24476:419::-;24642:4;24680:2;24669:9;24665:18;24657:26;;24729:9;24723:4;24719:20;24715:1;24704:9;24700:17;24693:47;24757:131;24883:4;24757:131;:::i;:::-;24749:139;;24647:248;;;:::o;24901:419::-;25067:4;25105:2;25094:9;25090:18;25082:26;;25154:9;25148:4;25144:20;25140:1;25129:9;25125:17;25118:47;25182:131;25308:4;25182:131;:::i;:::-;25174:139;;25072:248;;;:::o;25326:419::-;25492:4;25530:2;25519:9;25515:18;25507:26;;25579:9;25573:4;25569:20;25565:1;25554:9;25550:17;25543:47;25607:131;25733:4;25607:131;:::i;:::-;25599:139;;25497:248;;;:::o;25751:222::-;25844:4;25882:2;25871:9;25867:18;25859:26;;25895:71;25963:1;25952:9;25948:17;25939:6;25895:71;:::i;:::-;25849:124;;;;:::o;25979:129::-;26013:6;26040:20;;:::i;:::-;26030:30;;26069:33;26097:4;26089:6;26069:33;:::i;:::-;26020:88;;;:::o;26114:75::-;26147:6;26180:2;26174:9;26164:19;;26154:35;:::o;26195:307::-;26256:4;26346:18;26338:6;26335:30;26332:2;;;26368:18;;:::i;:::-;26332:2;26406:29;26428:6;26406:29;:::i;:::-;26398:37;;26490:4;26484;26480:15;26472:23;;26261:241;;;:::o;26508:141::-;26557:4;26580:3;26572:11;;26603:3;26600:1;26593:14;26637:4;26634:1;26624:18;26616:26;;26562:87;;;:::o;26655:98::-;26706:6;26740:5;26734:12;26724:22;;26713:40;;;:::o;26759:99::-;26811:6;26845:5;26839:12;26829:22;;26818:40;;;:::o;26864:168::-;26947:11;26981:6;26976:3;26969:19;27021:4;27016:3;27012:14;26997:29;;26959:73;;;;:::o;27038:169::-;27122:11;27156:6;27151:3;27144:19;27196:4;27191:3;27187:14;27172:29;;27134:73;;;;:::o;27213:148::-;27315:11;27352:3;27337:18;;27327:34;;;;:::o;27367:305::-;27407:3;27426:20;27444:1;27426:20;:::i;:::-;27421:25;;27460:20;27478:1;27460:20;:::i;:::-;27455:25;;27614:1;27546:66;27542:74;27539:1;27536:81;27533:2;;;27620:18;;:::i;:::-;27533:2;27664:1;27661;27657:9;27650:16;;27411:261;;;;:::o;27678:185::-;27718:1;27735:20;27753:1;27735:20;:::i;:::-;27730:25;;27769:20;27787:1;27769:20;:::i;:::-;27764:25;;27808:1;27798:2;;27813:18;;:::i;:::-;27798:2;27855:1;27852;27848:9;27843:14;;27720:143;;;;:::o;27869:191::-;27909:4;27929:20;27947:1;27929:20;:::i;:::-;27924:25;;27963:20;27981:1;27963:20;:::i;:::-;27958:25;;28002:1;27999;27996:8;27993:2;;;28007:18;;:::i;:::-;27993:2;28052:1;28049;28045:9;28037:17;;27914:146;;;;:::o;28066:96::-;28103:7;28132:24;28150:5;28132:24;:::i;:::-;28121:35;;28111:51;;;:::o;28168:90::-;28202:7;28245:5;28238:13;28231:21;28220:32;;28210:48;;;:::o;28264:149::-;28300:7;28340:66;28333:5;28329:78;28318:89;;28308:105;;;:::o;28419:126::-;28456:7;28496:42;28489:5;28485:54;28474:65;;28464:81;;;:::o;28551:77::-;28588:7;28617:5;28606:16;;28596:32;;;:::o;28634:154::-;28718:6;28713:3;28708;28695:30;28780:1;28771:6;28766:3;28762:16;28755:27;28685:103;;;:::o;28794:307::-;28862:1;28872:113;28886:6;28883:1;28880:13;28872:113;;;28971:1;28966:3;28962:11;28956:18;28952:1;28947:3;28943:11;28936:39;28908:2;28905:1;28901:10;28896:15;;28872:113;;;29003:6;29000:1;28997:13;28994:2;;;29083:1;29074:6;29069:3;29065:16;29058:27;28994:2;28843:258;;;;:::o;29107:320::-;29151:6;29188:1;29182:4;29178:12;29168:22;;29235:1;29229:4;29225:12;29256:18;29246:2;;29312:4;29304:6;29300:17;29290:27;;29246:2;29374;29366:6;29363:14;29343:18;29340:38;29337:2;;;29393:18;;:::i;:::-;29337:2;29158:269;;;;:::o;29433:281::-;29516:27;29538:4;29516:27;:::i;:::-;29508:6;29504:40;29646:6;29634:10;29631:22;29610:18;29598:10;29595:34;29592:62;29589:2;;;29657:18;;:::i;:::-;29589:2;29697:10;29693:2;29686:22;29476:238;;;:::o;29720:233::-;29759:3;29782:24;29800:5;29782:24;:::i;:::-;29773:33;;29828:66;29821:5;29818:77;29815:2;;;29898:18;;:::i;:::-;29815:2;29945:1;29938:5;29934:13;29927:20;;29763:190;;;:::o;29959:176::-;29991:1;30008:20;30026:1;30008:20;:::i;:::-;30003:25;;30042:20;30060:1;30042:20;:::i;:::-;30037:25;;30081:1;30071:2;;30086:18;;:::i;:::-;30071:2;30127:1;30124;30120:9;30115:14;;29993:142;;;;:::o;30141:180::-;30189:77;30186:1;30179:88;30286:4;30283:1;30276:15;30310:4;30307:1;30300:15;30327:180;30375:77;30372:1;30365:88;30472:4;30469:1;30462:15;30496:4;30493:1;30486:15;30513:180;30561:77;30558:1;30551:88;30658:4;30655:1;30648:15;30682:4;30679:1;30672:15;30699:180;30747:77;30744:1;30737:88;30844:4;30841:1;30834:15;30868:4;30865:1;30858:15;30885:102;30926:6;30977:2;30973:7;30968:2;30961:5;30957:14;30953:28;30943:38;;30933:54;;;:::o;30993:237::-;31133:34;31129:1;31121:6;31117:14;31110:58;31202:20;31197:2;31189:6;31185:15;31178:45;31099:131;:::o;31236:225::-;31376:34;31372:1;31364:6;31360:14;31353:58;31445:8;31440:2;31432:6;31428:15;31421:33;31342:119;:::o;31467:178::-;31607:30;31603:1;31595:6;31591:14;31584:54;31573:72;:::o;31651:173::-;31791:25;31787:1;31779:6;31775:14;31768:49;31757:67;:::o;31830:223::-;31970:34;31966:1;31958:6;31954:14;31947:58;32039:6;32034:2;32026:6;32022:15;32015:31;31936:117;:::o;32059:175::-;32199:27;32195:1;32187:6;32183:14;32176:51;32165:69;:::o;32240:178::-;32380:30;32376:1;32368:6;32364:14;32357:54;32346:72;:::o;32424:231::-;32564:34;32560:1;32552:6;32548:14;32541:58;32633:14;32628:2;32620:6;32616:15;32609:39;32530:125;:::o;32661:243::-;32801:34;32797:1;32789:6;32785:14;32778:58;32870:26;32865:2;32857:6;32853:15;32846:51;32767:137;:::o;32910:229::-;33050:34;33046:1;33038:6;33034:14;33027:58;33119:12;33114:2;33106:6;33102:15;33095:37;33016:123;:::o;33145:228::-;33285:34;33281:1;33273:6;33269:14;33262:58;33354:11;33349:2;33341:6;33337:15;33330:36;33251:122;:::o;33379:182::-;33519:34;33515:1;33507:6;33503:14;33496:58;33485:76;:::o;33567:231::-;33707:34;33703:1;33695:6;33691:14;33684:58;33776:14;33771:2;33763:6;33759:15;33752:39;33673:125;:::o;33804:182::-;33944:34;33940:1;33932:6;33928:14;33921:58;33910:76;:::o;33992:228::-;34132:34;34128:1;34120:6;34116:14;34109:58;34201:11;34196:2;34188:6;34184:15;34177:36;34098:122;:::o;34226:234::-;34366:34;34362:1;34354:6;34350:14;34343:58;34435:17;34430:2;34422:6;34418:15;34411:42;34332:128;:::o;34466:220::-;34606:34;34602:1;34594:6;34590:14;34583:58;34675:3;34670:2;34662:6;34658:15;34651:28;34572:114;:::o;34692:236::-;34832:34;34828:1;34820:6;34816:14;34809:58;34901:19;34896:2;34888:6;34884:15;34877:44;34798:130;:::o;34934:173::-;35074:25;35070:1;35062:6;35058:14;35051:49;35040:67;:::o;35113:122::-;35186:24;35204:5;35186:24;:::i;:::-;35179:5;35176:35;35166:2;;35225:1;35222;35215:12;35166:2;35156:79;:::o;35241:116::-;35311:21;35326:5;35311:21;:::i;:::-;35304:5;35301:32;35291:2;;35347:1;35344;35337:12;35291:2;35281:76;:::o;35363:120::-;35435:23;35452:5;35435:23;:::i;:::-;35428:5;35425:34;35415:2;;35473:1;35470;35463:12;35415:2;35405:78;:::o;35489:122::-;35562:24;35580:5;35562:24;:::i;:::-;35555:5;35552:35;35542:2;;35601:1;35598;35591:12;35542:2;35532:79;:::o

Swarm Source

ipfs://f9742d6efc552047dd41af48df13278d53dba6375df83bed958528eac702b3eb
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.