ETH Price: $3,515.47 (+0.82%)
Gas: 2 Gwei

Token

 

Overview

Max Total Supply

1,088

Holders

232

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x3fc5b7d16ea69b00819d7873fdff70f6712fd0fe
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DickDoods

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-17
*/

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


// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.9;

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

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

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

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

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

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


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

pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.9;

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

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


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

pragma solidity ^0.8.9;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.9;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.9;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.9;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


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

pragma solidity ^0.8.9;

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

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

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.9;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

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


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

pragma solidity ^0.8.9;


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

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

    bool private _paused;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.9;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/DickDoods.sol

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





contract DickDoods is ERC1155, Ownable, Pausable {
    uint private constant MAX_SUPPLY = 6969;
    uint private constant MAX_PER_TX = 20;
    
    // Metadata
    uint private counter;

    // Price
    uint256 public price = 0.03 ether;

    constructor (
        string memory _tokenURI
    ) ERC1155(_tokenURI) {
        counter = 0;
    }

    function setPause(bool pause) external onlyOwner {
        if(pause) {
            _pause();
        } else {
            _unpause();
        }
    }

    function totalSupply() external view returns (uint) {
        return counter;
    }

    function mint(uint amount) external payable whenNotPaused {
        require(amount < MAX_PER_TX + 1, "amount can't exceed 20");
        require(amount > 0, "amount too little");
        require(counter + amount < MAX_SUPPLY, "no more left to mint");

        if (msg.sender != owner()) {
            require(msg.value >= price * amount, "insufficient funds");
        }

        mintBatch(msg.sender, amount);
    }

    function mintBatch(address to, uint amount) private {
        uint256[] memory ids = new uint256[](amount);
        uint256[] memory amounts = new uint256[](amount);
        uint c = 0;
        for(uint i = counter; i < counter + amount; i++) {
            ids[c] = i+1; // token starts from 1
            amounts[c] = 1;
            c++;
        }
        counter += amount;
        _mintBatch(to, ids, amounts, "");
    }

    function airdrop(address[] calldata target, uint[] calldata amount) external onlyOwner {
        require(target.length > 0, "no target");
        require(amount.length > 0, "no amount");
        require(target.length == amount.length, "amount and target mismatch");
        uint totalAmount = 0;
        for(uint i; i < amount.length; i++){
            totalAmount += amount[i];
        }
        require(counter + totalAmount < MAX_SUPPLY, "no more left to mint");
        for(uint i; i < target.length; i++) {
            mintBatch(target[i], amount[i]);
        }
    }

    // Minting fee
    function setPrice(uint amount) external onlyOwner {
        price = amount;
    }

    // Metadata
    function setTokenURI(string calldata _uri) external onlyOwner {
        _setURI(_uri);
    }

    function uri(uint256 _tokenId) public view virtual override returns (string memory) {
        require(counter >= _tokenId, "URI query for nonexistent token");

        return string(abi.encodePacked(
            super.uri(_tokenId),
            "/",
            Strings.toString(_tokenId),
            ".json"
        ));
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"bool","name":"pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setTokenURI","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052666a94d74f4300006005553480156200001c57600080fd5b5060405162002795380380620027958339810160408190526200003f9162000197565b806200004b8162000070565b50620000573362000089565b506003805460ff60a01b191690556000600455620002b0565b805162000085906002906020840190620000db565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000e99062000273565b90600052602060002090601f0160209004810192826200010d576000855562000158565b82601f106200012857805160ff191683800117855562000158565b8280016001018555821562000158579182015b82811115620001585782518255916020019190600101906200013b565b50620001669291506200016a565b5090565b5b808211156200016657600081556001016200016b565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620001ab57600080fd5b82516001600160401b0380821115620001c357600080fd5b818501915085601f830112620001d857600080fd5b815181811115620001ed57620001ed62000181565b604051601f8201601f19908116603f0116810190838211818310171562000218576200021862000181565b8160405282815288868487010111156200023157600080fd5b600093505b8284101562000255578484018601518185018701529285019262000236565b82841115620002675760008684830101525b98975050505050505050565b600181811c908216806200028857607f821691505b60208210811415620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b6124d580620002c06000396000f3fe60806040526004361061011e5760003560e01c80638da5cb5b116100a0578063bedb86fb11610064578063bedb86fb14610304578063e0df5b6f14610324578063e985e9c514610344578063f242432a1461038d578063f2fde38b146103ad57600080fd5b80638da5cb5b1461027357806391b7f5ed1461029b578063a035b1fe146102bb578063a0712d68146102d1578063a22cb465146102e457600080fd5b80633ccfd60b116100e75780633ccfd60b146101ea5780634e1273f4146101f25780635c975abb1461021f578063672434821461023e578063715018a61461025e57600080fd5b8062fdd58e1461012357806301ffc9a7146101565780630e89341c1461018657806318160ddd146101b35780632eb2c2d6146101c8575b600080fd5b34801561012f57600080fd5b5061014361013e366004611a38565b6103cd565b6040519081526020015b60405180910390f35b34801561016257600080fd5b50610176610171366004611a78565b610464565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a1366004611a9c565b6104b6565b60405161014d9190611b11565b3480156101bf57600080fd5b50600454610143565b3480156101d457600080fd5b506101e86101e3366004611c6d565b610543565b005b6101e86105da565b3480156101fe57600080fd5b5061021261020d366004611d16565b610678565b60405161014d9190611e1b565b34801561022b57600080fd5b50600354600160a01b900460ff16610176565b34801561024a57600080fd5b506101e8610259366004611e79565b6107a1565b34801561026a57600080fd5b506101e8610993565b34801561027f57600080fd5b506003546040516001600160a01b03909116815260200161014d565b3480156102a757600080fd5b506101e86102b6366004611a9c565b6109c9565b3480156102c757600080fd5b5061014360055481565b6101e86102df366004611a9c565b6109f8565b3480156102f057600080fd5b506101e86102ff366004611ef4565b610b9f565b34801561031057600080fd5b506101e861031f366004611f27565b610bae565b34801561033057600080fd5b506101e861033f366004611f42565b610bee565b34801561035057600080fd5b5061017661035f366004611fb3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561039957600080fd5b506101e86103a8366004611fdd565b610c57565b3480156103b957600080fd5b506101e86103c8366004612041565b610cde565b60006001600160a01b03831661043e5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049557506001600160e01b031982166303a24d0760e21b145b806104b057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600454101561050a5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610435565b61051382610d76565b61051c83610e0a565b60405160200161052d92919061205c565b6040516020818303038152906040529050919050565b6001600160a01b03851633148061055f575061055f853361035f565b6105c65760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610435565b6105d38585858585610f0f565b5050505050565b6003546001600160a01b031633146106045760405162461bcd60e51b8152600401610435906120aa565b60006106186003546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610662576040519150601f19603f3d011682016040523d82523d6000602084013e610667565b606091505b505090508061067557600080fd5b50565b606081518351146106dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610435565b600083516001600160401b038111156106f8576106f8611b24565b604051908082528060200260200182016040528015610721578160200160208202803683370190505b50905060005b84518110156107995761076c858281518110610745576107456120df565b602002602001015185838151811061075f5761075f6120df565b60200260200101516103cd565b82828151811061077e5761077e6120df565b60209081029190910101526107928161210b565b9050610727565b509392505050565b6003546001600160a01b031633146107cb5760405162461bcd60e51b8152600401610435906120aa565b826108045760405162461bcd60e51b81526020600482015260096024820152681b9bc81d185c99d95d60ba1b6044820152606401610435565b8061083d5760405162461bcd60e51b81526020600482015260096024820152681b9bc8185b5bdd5b9d60ba1b6044820152606401610435565b82811461088c5760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e7420616e6420746172676574206d69736d617463680000000000006044820152606401610435565b6000805b828110156108d0578383828181106108aa576108aa6120df565b90506020020135826108bc9190612126565b9150806108c88161210b565b915050610890565b50611b39816004546108e29190612126565b106109265760405162461bcd60e51b81526020600482015260146024820152731b9bc81b5bdc99481b19599d081d1bc81b5a5b9d60621b6044820152606401610435565b60005b8481101561098b57610979868683818110610946576109466120df565b905060200201602081019061095b9190612041565b85858481811061096d5761096d6120df565b905060200201356110a3565b806109838161210b565b915050610929565b505050505050565b6003546001600160a01b031633146109bd5760405162461bcd60e51b8152600401610435906120aa565b6109c760006111e9565b565b6003546001600160a01b031633146109f35760405162461bcd60e51b8152600401610435906120aa565b600555565b600354600160a01b900460ff1615610a455760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610435565b610a5160146001612126565b8110610a985760405162461bcd60e51b81526020600482015260166024820152750616d6f756e742063616e2774206578636565642032360541b6044820152606401610435565b60008111610adc5760405162461bcd60e51b8152602060048201526011602482015270616d6f756e7420746f6f206c6974746c6560781b6044820152606401610435565b611b3981600454610aed9190612126565b10610b315760405162461bcd60e51b81526020600482015260146024820152731b9bc81b5bdc99481b19599d081d1bc81b5a5b9d60621b6044820152606401610435565b6003546001600160a01b03163314610b955780600554610b51919061213e565b341015610b955760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610435565b61067533826110a3565b610baa33838361123b565b5050565b6003546001600160a01b03163314610bd85760405162461bcd60e51b8152600401610435906120aa565b8015610be65761067561131c565b6106756113c1565b6003546001600160a01b03163314610c185760405162461bcd60e51b8152600401610435906120aa565b610baa82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061144592505050565b6001600160a01b038516331480610c735750610c73853361035f565b610cd15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610435565b6105d38585858585611458565b6003546001600160a01b03163314610d085760405162461bcd60e51b8152600401610435906120aa565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610435565b610675816111e9565b606060028054610d859061215d565b80601f0160208091040260200160405190810160405280929190818152602001828054610db19061215d565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b50505050509050919050565b606081610e2e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610e585780610e428161210b565b9150610e519050600a836121ae565b9150610e32565b6000816001600160401b03811115610e7257610e72611b24565b6040519080825280601f01601f191660200182016040528015610e9c576020820181803683370190505b5090505b8415610f0757610eb16001836121c2565b9150610ebe600a866121d9565b610ec9906030612126565b60f81b818381518110610ede57610ede6120df565b60200101906001600160f81b031916908160001a905350610f00600a866121ae565b9450610ea0565b949350505050565b8151835114610f305760405162461bcd60e51b8152600401610435906121ed565b6001600160a01b038416610f565760405162461bcd60e51b815260040161043590612235565b3360005b845181101561103d576000858281518110610f7757610f776120df565b602002602001015190506000858381518110610f9557610f956120df565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610fe55760405162461bcd60e51b81526004016104359061227a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611022908490612126565b92505081905550505050806110369061210b565b9050610f5a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161108d9291906122c4565b60405180910390a461098b81878787878761157e565b6000816001600160401b038111156110bd576110bd611b24565b6040519080825280602002602001820160405280156110e6578160200160208202803683370190505b5090506000826001600160401b0381111561110357611103611b24565b60405190808252806020026020018201604052801561112c578160200160208202803683370190505b506004549091506000905b846004546111459190612126565b8110156111b457611157816001612126565b848381518110611169576111696120df565b6020026020010181815250506001838381518110611189576111896120df565b60209081029190910101528161119e8161210b565b92505080806111ac9061210b565b915050611137565b5083600460008282546111c79190612126565b925050819055506105d3858484604051806020016040528060008152506116e9565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156112af5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610435565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600354600160a01b900460ff16156113695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610435565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113a43390565b6040516001600160a01b03909116815260200160405180910390a1565b600354600160a01b900460ff166114115760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610435565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336113a4565b8051610baa906002906020840190611983565b6001600160a01b03841661147e5760405162461bcd60e51b815260040161043590612235565b3361149781878761148e8861186e565b6105d38861186e565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156114d85760405162461bcd60e51b81526004016104359061227a565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611515908490612126565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46115758288888888886118b9565b50505050505050565b6001600160a01b0384163b1561098b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115c290899089908890889088906004016122f2565b602060405180830381600087803b1580156115dc57600080fd5b505af192505050801561160c575060408051601f3d908101601f1916820190925261160991810190612350565b60015b6116b95761161861236d565b806308c379a01415611652575061162d612389565b806116385750611654565b8060405162461bcd60e51b81526004016104359190611b11565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610435565b6001600160e01b0319811663bc197c8160e01b146115755760405162461bcd60e51b815260040161043590612412565b6001600160a01b0384166117495760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610435565b815183511461176a5760405162461bcd60e51b8152600401610435906121ed565b3360005b845181101561180657838181518110611789576117896120df565b60200260200101516000808784815181106117a6576117a66120df565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117ee9190612126565b909155508190506117fe8161210b565b91505061176e565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118579291906122c4565b60405180910390a46105d38160008787878761157e565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106118a8576118a86120df565b602090810291909101015292915050565b6001600160a01b0384163b1561098b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906118fd908990899088908890889060040161245a565b602060405180830381600087803b15801561191757600080fd5b505af1925050508015611947575060408051601f3d908101601f1916820190925261194491810190612350565b60015b6119535761161861236d565b6001600160e01b0319811663f23a6e6160e01b146115755760405162461bcd60e51b815260040161043590612412565b82805461198f9061215d565b90600052602060002090601f0160209004810192826119b157600085556119f7565b82601f106119ca57805160ff19168380011785556119f7565b828001600101855582156119f7579182015b828111156119f75782518255916020019190600101906119dc565b50611a03929150611a07565b5090565b5b80821115611a035760008155600101611a08565b80356001600160a01b0381168114611a3357600080fd5b919050565b60008060408385031215611a4b57600080fd5b611a5483611a1c565b946020939093013593505050565b6001600160e01b03198116811461067557600080fd5b600060208284031215611a8a57600080fd5b8135611a9581611a62565b9392505050565b600060208284031215611aae57600080fd5b5035919050565b60005b83811015611ad0578181015183820152602001611ab8565b83811115611adf576000848401525b50505050565b60008151808452611afd816020860160208601611ab5565b601f01601f19169290920160200192915050565b602081526000611a956020830184611ae5565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611b5f57611b5f611b24565b6040525050565b60006001600160401b03821115611b7f57611b7f611b24565b5060051b60200190565b600082601f830112611b9a57600080fd5b81356020611ba782611b66565b604051611bb48282611b3a565b83815260059390931b8501820192828101915086841115611bd457600080fd5b8286015b84811015611bef5780358352918301918301611bd8565b509695505050505050565b600082601f830112611c0b57600080fd5b81356001600160401b03811115611c2457611c24611b24565b604051611c3b601f8301601f191660200182611b3a565b818152846020838601011115611c5057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611c8557600080fd5b611c8e86611a1c565b9450611c9c60208701611a1c565b935060408601356001600160401b0380821115611cb857600080fd5b611cc489838a01611b89565b94506060880135915080821115611cda57600080fd5b611ce689838a01611b89565b93506080880135915080821115611cfc57600080fd5b50611d0988828901611bfa565b9150509295509295909350565b60008060408385031215611d2957600080fd5b82356001600160401b0380821115611d4057600080fd5b818501915085601f830112611d5457600080fd5b81356020611d6182611b66565b604051611d6e8282611b3a565b83815260059390931b8501820192828101915089841115611d8e57600080fd5b948201945b83861015611db357611da486611a1c565b82529482019490820190611d93565b96505086013592505080821115611dc957600080fd5b50611dd685828601611b89565b9150509250929050565b600081518084526020808501945080840160005b83811015611e1057815187529582019590820190600101611df4565b509495945050505050565b602081526000611a956020830184611de0565b60008083601f840112611e4057600080fd5b5081356001600160401b03811115611e5757600080fd5b6020830191508360208260051b8501011115611e7257600080fd5b9250929050565b60008060008060408587031215611e8f57600080fd5b84356001600160401b0380821115611ea657600080fd5b611eb288838901611e2e565b90965094506020870135915080821115611ecb57600080fd5b50611ed887828801611e2e565b95989497509550505050565b80358015158114611a3357600080fd5b60008060408385031215611f0757600080fd5b611f1083611a1c565b9150611f1e60208401611ee4565b90509250929050565b600060208284031215611f3957600080fd5b611a9582611ee4565b60008060208385031215611f5557600080fd5b82356001600160401b0380821115611f6c57600080fd5b818501915085601f830112611f8057600080fd5b813581811115611f8f57600080fd5b866020828501011115611fa157600080fd5b60209290920196919550909350505050565b60008060408385031215611fc657600080fd5b611fcf83611a1c565b9150611f1e60208401611a1c565b600080600080600060a08688031215611ff557600080fd5b611ffe86611a1c565b945061200c60208701611a1c565b9350604086013592506060860135915060808601356001600160401b0381111561203557600080fd5b611d0988828901611bfa565b60006020828403121561205357600080fd5b611a9582611a1c565b6000835161206e818460208801611ab5565b602f60f81b908301908152835161208c816001840160208801611ab5565b64173539b7b760d91b60019290910191820152600601949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561211f5761211f6120f5565b5060010190565b60008219821115612139576121396120f5565b500190565b6000816000190483118215151615612158576121586120f5565b500290565b600181811c9082168061217157607f821691505b6020821081141561219257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826121bd576121bd612198565b500490565b6000828210156121d4576121d46120f5565b500390565b6000826121e8576121e8612198565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122d76040830185611de0565b82810360208401526122e98185611de0565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061231e90830186611de0565b82810360608401526123308186611de0565b905082810360808401526123448185611ae5565b98975050505050505050565b60006020828403121561236257600080fd5b8151611a9581611a62565b600060033d11156123865760046000803e5060005160e01c5b90565b600060443d10156123975790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156123c657505050505090565b82850191508151818111156123de5750505050505090565b843d87010160208285010111156123f85750505050505090565b61240760208286010187611b3a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061249490830184611ae5565b97965050505050505056fea2646970667358221220bbb25b0c3ba2fd19e700d212bec7235ff5013a885508d63313b43d573fbc924664736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d536a583955596333677379694469435a476670457763533479687168345235444a68353958414a59647877450000000000000000000000

Deployed Bytecode

0x60806040526004361061011e5760003560e01c80638da5cb5b116100a0578063bedb86fb11610064578063bedb86fb14610304578063e0df5b6f14610324578063e985e9c514610344578063f242432a1461038d578063f2fde38b146103ad57600080fd5b80638da5cb5b1461027357806391b7f5ed1461029b578063a035b1fe146102bb578063a0712d68146102d1578063a22cb465146102e457600080fd5b80633ccfd60b116100e75780633ccfd60b146101ea5780634e1273f4146101f25780635c975abb1461021f578063672434821461023e578063715018a61461025e57600080fd5b8062fdd58e1461012357806301ffc9a7146101565780630e89341c1461018657806318160ddd146101b35780632eb2c2d6146101c8575b600080fd5b34801561012f57600080fd5b5061014361013e366004611a38565b6103cd565b6040519081526020015b60405180910390f35b34801561016257600080fd5b50610176610171366004611a78565b610464565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a1366004611a9c565b6104b6565b60405161014d9190611b11565b3480156101bf57600080fd5b50600454610143565b3480156101d457600080fd5b506101e86101e3366004611c6d565b610543565b005b6101e86105da565b3480156101fe57600080fd5b5061021261020d366004611d16565b610678565b60405161014d9190611e1b565b34801561022b57600080fd5b50600354600160a01b900460ff16610176565b34801561024a57600080fd5b506101e8610259366004611e79565b6107a1565b34801561026a57600080fd5b506101e8610993565b34801561027f57600080fd5b506003546040516001600160a01b03909116815260200161014d565b3480156102a757600080fd5b506101e86102b6366004611a9c565b6109c9565b3480156102c757600080fd5b5061014360055481565b6101e86102df366004611a9c565b6109f8565b3480156102f057600080fd5b506101e86102ff366004611ef4565b610b9f565b34801561031057600080fd5b506101e861031f366004611f27565b610bae565b34801561033057600080fd5b506101e861033f366004611f42565b610bee565b34801561035057600080fd5b5061017661035f366004611fb3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561039957600080fd5b506101e86103a8366004611fdd565b610c57565b3480156103b957600080fd5b506101e86103c8366004612041565b610cde565b60006001600160a01b03831661043e5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061049557506001600160e01b031982166303a24d0760e21b145b806104b057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606081600454101561050a5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610435565b61051382610d76565b61051c83610e0a565b60405160200161052d92919061205c565b6040516020818303038152906040529050919050565b6001600160a01b03851633148061055f575061055f853361035f565b6105c65760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610435565b6105d38585858585610f0f565b5050505050565b6003546001600160a01b031633146106045760405162461bcd60e51b8152600401610435906120aa565b60006106186003546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610662576040519150601f19603f3d011682016040523d82523d6000602084013e610667565b606091505b505090508061067557600080fd5b50565b606081518351146106dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610435565b600083516001600160401b038111156106f8576106f8611b24565b604051908082528060200260200182016040528015610721578160200160208202803683370190505b50905060005b84518110156107995761076c858281518110610745576107456120df565b602002602001015185838151811061075f5761075f6120df565b60200260200101516103cd565b82828151811061077e5761077e6120df565b60209081029190910101526107928161210b565b9050610727565b509392505050565b6003546001600160a01b031633146107cb5760405162461bcd60e51b8152600401610435906120aa565b826108045760405162461bcd60e51b81526020600482015260096024820152681b9bc81d185c99d95d60ba1b6044820152606401610435565b8061083d5760405162461bcd60e51b81526020600482015260096024820152681b9bc8185b5bdd5b9d60ba1b6044820152606401610435565b82811461088c5760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e7420616e6420746172676574206d69736d617463680000000000006044820152606401610435565b6000805b828110156108d0578383828181106108aa576108aa6120df565b90506020020135826108bc9190612126565b9150806108c88161210b565b915050610890565b50611b39816004546108e29190612126565b106109265760405162461bcd60e51b81526020600482015260146024820152731b9bc81b5bdc99481b19599d081d1bc81b5a5b9d60621b6044820152606401610435565b60005b8481101561098b57610979868683818110610946576109466120df565b905060200201602081019061095b9190612041565b85858481811061096d5761096d6120df565b905060200201356110a3565b806109838161210b565b915050610929565b505050505050565b6003546001600160a01b031633146109bd5760405162461bcd60e51b8152600401610435906120aa565b6109c760006111e9565b565b6003546001600160a01b031633146109f35760405162461bcd60e51b8152600401610435906120aa565b600555565b600354600160a01b900460ff1615610a455760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610435565b610a5160146001612126565b8110610a985760405162461bcd60e51b81526020600482015260166024820152750616d6f756e742063616e2774206578636565642032360541b6044820152606401610435565b60008111610adc5760405162461bcd60e51b8152602060048201526011602482015270616d6f756e7420746f6f206c6974746c6560781b6044820152606401610435565b611b3981600454610aed9190612126565b10610b315760405162461bcd60e51b81526020600482015260146024820152731b9bc81b5bdc99481b19599d081d1bc81b5a5b9d60621b6044820152606401610435565b6003546001600160a01b03163314610b955780600554610b51919061213e565b341015610b955760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610435565b61067533826110a3565b610baa33838361123b565b5050565b6003546001600160a01b03163314610bd85760405162461bcd60e51b8152600401610435906120aa565b8015610be65761067561131c565b6106756113c1565b6003546001600160a01b03163314610c185760405162461bcd60e51b8152600401610435906120aa565b610baa82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061144592505050565b6001600160a01b038516331480610c735750610c73853361035f565b610cd15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610435565b6105d38585858585611458565b6003546001600160a01b03163314610d085760405162461bcd60e51b8152600401610435906120aa565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610435565b610675816111e9565b606060028054610d859061215d565b80601f0160208091040260200160405190810160405280929190818152602001828054610db19061215d565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b50505050509050919050565b606081610e2e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610e585780610e428161210b565b9150610e519050600a836121ae565b9150610e32565b6000816001600160401b03811115610e7257610e72611b24565b6040519080825280601f01601f191660200182016040528015610e9c576020820181803683370190505b5090505b8415610f0757610eb16001836121c2565b9150610ebe600a866121d9565b610ec9906030612126565b60f81b818381518110610ede57610ede6120df565b60200101906001600160f81b031916908160001a905350610f00600a866121ae565b9450610ea0565b949350505050565b8151835114610f305760405162461bcd60e51b8152600401610435906121ed565b6001600160a01b038416610f565760405162461bcd60e51b815260040161043590612235565b3360005b845181101561103d576000858281518110610f7757610f776120df565b602002602001015190506000858381518110610f9557610f956120df565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610fe55760405162461bcd60e51b81526004016104359061227a565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611022908490612126565b92505081905550505050806110369061210b565b9050610f5a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161108d9291906122c4565b60405180910390a461098b81878787878761157e565b6000816001600160401b038111156110bd576110bd611b24565b6040519080825280602002602001820160405280156110e6578160200160208202803683370190505b5090506000826001600160401b0381111561110357611103611b24565b60405190808252806020026020018201604052801561112c578160200160208202803683370190505b506004549091506000905b846004546111459190612126565b8110156111b457611157816001612126565b848381518110611169576111696120df565b6020026020010181815250506001838381518110611189576111896120df565b60209081029190910101528161119e8161210b565b92505080806111ac9061210b565b915050611137565b5083600460008282546111c79190612126565b925050819055506105d3858484604051806020016040528060008152506116e9565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156112af5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610435565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600354600160a01b900460ff16156113695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610435565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113a43390565b6040516001600160a01b03909116815260200160405180910390a1565b600354600160a01b900460ff166114115760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610435565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336113a4565b8051610baa906002906020840190611983565b6001600160a01b03841661147e5760405162461bcd60e51b815260040161043590612235565b3361149781878761148e8861186e565b6105d38861186e565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156114d85760405162461bcd60e51b81526004016104359061227a565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611515908490612126565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46115758288888888886118b9565b50505050505050565b6001600160a01b0384163b1561098b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115c290899089908890889088906004016122f2565b602060405180830381600087803b1580156115dc57600080fd5b505af192505050801561160c575060408051601f3d908101601f1916820190925261160991810190612350565b60015b6116b95761161861236d565b806308c379a01415611652575061162d612389565b806116385750611654565b8060405162461bcd60e51b81526004016104359190611b11565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610435565b6001600160e01b0319811663bc197c8160e01b146115755760405162461bcd60e51b815260040161043590612412565b6001600160a01b0384166117495760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610435565b815183511461176a5760405162461bcd60e51b8152600401610435906121ed565b3360005b845181101561180657838181518110611789576117896120df565b60200260200101516000808784815181106117a6576117a66120df565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117ee9190612126565b909155508190506117fe8161210b565b91505061176e565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118579291906122c4565b60405180910390a46105d38160008787878761157e565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106118a8576118a86120df565b602090810291909101015292915050565b6001600160a01b0384163b1561098b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906118fd908990899088908890889060040161245a565b602060405180830381600087803b15801561191757600080fd5b505af1925050508015611947575060408051601f3d908101601f1916820190925261194491810190612350565b60015b6119535761161861236d565b6001600160e01b0319811663f23a6e6160e01b146115755760405162461bcd60e51b815260040161043590612412565b82805461198f9061215d565b90600052602060002090601f0160209004810192826119b157600085556119f7565b82601f106119ca57805160ff19168380011785556119f7565b828001600101855582156119f7579182015b828111156119f75782518255916020019190600101906119dc565b50611a03929150611a07565b5090565b5b80821115611a035760008155600101611a08565b80356001600160a01b0381168114611a3357600080fd5b919050565b60008060408385031215611a4b57600080fd5b611a5483611a1c565b946020939093013593505050565b6001600160e01b03198116811461067557600080fd5b600060208284031215611a8a57600080fd5b8135611a9581611a62565b9392505050565b600060208284031215611aae57600080fd5b5035919050565b60005b83811015611ad0578181015183820152602001611ab8565b83811115611adf576000848401525b50505050565b60008151808452611afd816020860160208601611ab5565b601f01601f19169290920160200192915050565b602081526000611a956020830184611ae5565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611b5f57611b5f611b24565b6040525050565b60006001600160401b03821115611b7f57611b7f611b24565b5060051b60200190565b600082601f830112611b9a57600080fd5b81356020611ba782611b66565b604051611bb48282611b3a565b83815260059390931b8501820192828101915086841115611bd457600080fd5b8286015b84811015611bef5780358352918301918301611bd8565b509695505050505050565b600082601f830112611c0b57600080fd5b81356001600160401b03811115611c2457611c24611b24565b604051611c3b601f8301601f191660200182611b3a565b818152846020838601011115611c5057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611c8557600080fd5b611c8e86611a1c565b9450611c9c60208701611a1c565b935060408601356001600160401b0380821115611cb857600080fd5b611cc489838a01611b89565b94506060880135915080821115611cda57600080fd5b611ce689838a01611b89565b93506080880135915080821115611cfc57600080fd5b50611d0988828901611bfa565b9150509295509295909350565b60008060408385031215611d2957600080fd5b82356001600160401b0380821115611d4057600080fd5b818501915085601f830112611d5457600080fd5b81356020611d6182611b66565b604051611d6e8282611b3a565b83815260059390931b8501820192828101915089841115611d8e57600080fd5b948201945b83861015611db357611da486611a1c565b82529482019490820190611d93565b96505086013592505080821115611dc957600080fd5b50611dd685828601611b89565b9150509250929050565b600081518084526020808501945080840160005b83811015611e1057815187529582019590820190600101611df4565b509495945050505050565b602081526000611a956020830184611de0565b60008083601f840112611e4057600080fd5b5081356001600160401b03811115611e5757600080fd5b6020830191508360208260051b8501011115611e7257600080fd5b9250929050565b60008060008060408587031215611e8f57600080fd5b84356001600160401b0380821115611ea657600080fd5b611eb288838901611e2e565b90965094506020870135915080821115611ecb57600080fd5b50611ed887828801611e2e565b95989497509550505050565b80358015158114611a3357600080fd5b60008060408385031215611f0757600080fd5b611f1083611a1c565b9150611f1e60208401611ee4565b90509250929050565b600060208284031215611f3957600080fd5b611a9582611ee4565b60008060208385031215611f5557600080fd5b82356001600160401b0380821115611f6c57600080fd5b818501915085601f830112611f8057600080fd5b813581811115611f8f57600080fd5b866020828501011115611fa157600080fd5b60209290920196919550909350505050565b60008060408385031215611fc657600080fd5b611fcf83611a1c565b9150611f1e60208401611a1c565b600080600080600060a08688031215611ff557600080fd5b611ffe86611a1c565b945061200c60208701611a1c565b9350604086013592506060860135915060808601356001600160401b0381111561203557600080fd5b611d0988828901611bfa565b60006020828403121561205357600080fd5b611a9582611a1c565b6000835161206e818460208801611ab5565b602f60f81b908301908152835161208c816001840160208801611ab5565b64173539b7b760d91b60019290910191820152600601949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561211f5761211f6120f5565b5060010190565b60008219821115612139576121396120f5565b500190565b6000816000190483118215151615612158576121586120f5565b500290565b600181811c9082168061217157607f821691505b6020821081141561219257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601260045260246000fd5b6000826121bd576121bd612198565b500490565b6000828210156121d4576121d46120f5565b500390565b6000826121e8576121e8612198565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122d76040830185611de0565b82810360208401526122e98185611de0565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061231e90830186611de0565b82810360608401526123308186611de0565b905082810360808401526123448185611ae5565b98975050505050505050565b60006020828403121561236257600080fd5b8151611a9581611a62565b600060033d11156123865760046000803e5060005160e01c5b90565b600060443d10156123975790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156123c657505050505090565b82850191508151818111156123de5750505050505090565b843d87010160208285010111156123f85750505050505090565b61240760208286010187611b3a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061249490830184611ae5565b97965050505050505056fea2646970667358221220bbb25b0c3ba2fd19e700d212bec7235ff5013a885508d63313b43d573fbc924664736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d536a583955596333677379694469435a476670457763533479687168345235444a68353958414a59647877450000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenURI (string): ipfs://QmSjX9UYc3gsyiDiCZGfpEwcS4yhqh4R5DJh59XAJYdxwE

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d536a583955596333677379694469435a47667045776353
Arg [3] : 3479687168345235444a68353958414a59647877450000000000000000000000


Deployed Bytecode Sourcemap

41027:2820:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22572:231;;;;;;;;;;-1:-1:-1;22572:231:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;22572:231:0;;;;;;;;21595:310;;;;;;;;;;-1:-1:-1;21595:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;21595:310:0;1019:187:1;43345:336:0;;;;;;;;;;-1:-1:-1;43345:336:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41555:85::-;;;;;;;;;;-1:-1:-1;41625:7:0;;41555:85;;24511:442;;;;;;;;;;-1:-1:-1;24511:442:0;;;;;:::i;:::-;;:::i;:::-;;43689:155;;;:::i;22969:524::-;;;;;;;;;;-1:-1:-1;22969:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37207:86::-;;;;;;;;;;-1:-1:-1;37278:7:0;;-1:-1:-1;;;37278:7:0;;;;37207:86;;42523:584;;;;;;;;;;-1:-1:-1;42523:584:0;;;;;:::i;:::-;;:::i;40106:103::-;;;;;;;;;;;;;:::i;39455:87::-;;;;;;;;;;-1:-1:-1;39528:6:0;;39455:87;;-1:-1:-1;;;;;39528:6:0;;;8173:51:1;;8161:2;8146:18;39455:87:0;8027:203:1;43135:83:0;;;;;;;;;;-1:-1:-1;43135:83:0;;;;;:::i;:::-;;:::i;41239:33::-;;;;;;;;;;;;;;;;41648:425;;;;;;:::i;:::-;;:::i;23566:155::-;;;;;;;;;;-1:-1:-1;23566:155:0;;;;;:::i;:::-;;:::i;41392:::-;;;;;;;;;;-1:-1:-1;41392:155:0;;;;;:::i;:::-;;:::i;43243:94::-;;;;;;;;;;-1:-1:-1;43243:94:0;;;;;:::i;:::-;;:::i;23793:168::-;;;;;;;;;;-1:-1:-1;23793:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;23916:27:0;;;23892:4;23916:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;23793:168;24033:401;;;;;;;;;;-1:-1:-1;24033:401:0;;;;;:::i;:::-;;:::i;40364:201::-;;;;;;;;;;-1:-1:-1;40364:201:0;;;;;:::i;:::-;;:::i;22572:231::-;22658:7;-1:-1:-1;;;;;22686:21:0;;22678:77;;;;-1:-1:-1;;;22678:77:0;;10710:2:1;22678:77:0;;;10692:21:1;10749:2;10729:18;;;10722:30;10788:34;10768:18;;;10761:62;-1:-1:-1;;;10839:18:1;;;10832:41;10890:19;;22678:77:0;;;;;;;;;-1:-1:-1;22773:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;22773:22:0;;;;;;;;;;;;22572:231::o;21595:310::-;21697:4;-1:-1:-1;;;;;;21734:41:0;;-1:-1:-1;;;21734:41:0;;:110;;-1:-1:-1;;;;;;;21792:52:0;;-1:-1:-1;;;21792:52:0;21734:110;:163;;;-1:-1:-1;;;;;;;;;;12166:40:0;;;21861:36;21714:183;21595:310;-1:-1:-1;;21595:310:0:o;43345:336::-;43414:13;43459:8;43448:7;;:19;;43440:63;;;;-1:-1:-1;;;43440:63:0;;11122:2:1;43440:63:0;;;11104:21:1;11161:2;11141:18;;;11134:30;11200:33;11180:18;;;11173:61;11251:18;;43440:63:0;10920:355:1;43440:63:0;43561:19;43571:8;43561:9;:19::i;:::-;43613:26;43630:8;43613:16;:26::i;:::-;43530:142;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43516:157;;43345:336;;;:::o;24511:442::-;-1:-1:-1;;;;;24744:20:0;;20384:10;24744:20;;:60;;-1:-1:-1;24768:36:0;24785:4;20384:10;23793:168;:::i;24768:36::-;24722:160;;;;-1:-1:-1;;;24722:160:0;;12259:2:1;24722:160:0;;;12241:21:1;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;-1:-1:-1;;;12388:18:1;;;12381:48;12446:19;;24722:160:0;12057:414:1;24722:160:0;24893:52;24916:4;24922:2;24926:3;24931:7;24940:4;24893:22;:52::i;:::-;24511:442;;;;;:::o;43689:155::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;43746:7:::1;43767;39528:6:::0;;-1:-1:-1;;;;;39528:6:0;;39455:87;43767:7:::1;-1:-1:-1::0;;;;;43759:21:0::1;43788;43759:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43745:69;;;43833:2;43825:11;;;::::0;::::1;;43734:110;43689:155::o:0;22969:524::-;23125:16;23186:3;:10;23167:8;:15;:29;23159:83;;;;-1:-1:-1;;;23159:83:0;;13249:2:1;23159:83:0;;;13231:21:1;13288:2;13268:18;;;13261:30;13327:34;13307:18;;;13300:62;-1:-1:-1;;;13378:18:1;;;13371:39;13427:19;;23159:83:0;13047:405:1;23159:83:0;23255:30;23302:8;:15;-1:-1:-1;;;;;23288:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23288:30:0;;23255:63;;23336:9;23331:122;23355:8;:15;23351:1;:19;23331:122;;;23411:30;23421:8;23430:1;23421:11;;;;;;;;:::i;:::-;;;;;;;23434:3;23438:1;23434:6;;;;;;;;:::i;:::-;;;;;;;23411:9;:30::i;:::-;23392:13;23406:1;23392:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23372:3;;;:::i;:::-;;;23331:122;;;-1:-1:-1;23472:13:0;22969:524;-1:-1:-1;;;22969:524:0:o;42523:584::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;42629:17;42621:39:::1;;;::::0;-1:-1:-1;;;42621:39:0;;14063:2:1;42621:39:0::1;::::0;::::1;14045:21:1::0;14102:1;14082:18;;;14075:29;-1:-1:-1;;;14120:18:1;;;14113:39;14169:18;;42621:39:0::1;13861:332:1::0;42621:39:0::1;42679:17:::0;42671:39:::1;;;::::0;-1:-1:-1;;;42671:39:0;;14400:2:1;42671:39:0::1;::::0;::::1;14382:21:1::0;14439:1;14419:18;;;14412:29;-1:-1:-1;;;14457:18:1;;;14450:39;14506:18;;42671:39:0::1;14198:332:1::0;42671:39:0::1;42729:30:::0;;::::1;42721:69;;;::::0;-1:-1:-1;;;42721:69:0;;14737:2:1;42721:69:0::1;::::0;::::1;14719:21:1::0;14776:2;14756:18;;;14749:30;14815:28;14795:18;;;14788:56;14861:18;;42721:69:0::1;14535:350:1::0;42721:69:0::1;42801:16;42836:6:::0;42832:86:::1;42844:17:::0;;::::1;42832:86;;;42897:6;;42904:1;42897:9;;;;;;;:::i;:::-;;;;;;;42882:24;;;;;:::i;:::-;::::0;-1:-1:-1;42863:3:0;::::1;::::0;::::1;:::i;:::-;;;;42832:86;;;;41118:4;42946:11;42936:7;;:21;;;;:::i;:::-;:34;42928:67;;;::::0;-1:-1:-1;;;42928:67:0;;15225:2:1;42928:67:0::1;::::0;::::1;15207:21:1::0;15264:2;15244:18;;;15237:30;-1:-1:-1;;;15283:18:1;;;15276:50;15343:18;;42928:67:0::1;15023:344:1::0;42928:67:0::1;43010:6;43006:94;43018:17:::0;;::::1;43006:94;;;43057:31;43067:6;;43074:1;43067:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43078:6;;43085:1;43078:9;;;;;;;:::i;:::-;;;;;;;43057;:31::i;:::-;43037:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43006:94;;;;42610:497;42523:584:::0;;;;:::o;40106:103::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;40171:30:::1;40198:1;40171:18;:30::i;:::-;40106:103::o:0;43135:83::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;43196:5:::1;:14:::0;43135:83::o;41648:425::-;37278:7;;-1:-1:-1;;;37278:7:0;;;;37532:9;37524:38;;;;-1:-1:-1;;;37524:38:0;;15574:2:1;37524:38:0;;;15556:21:1;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:46;15688:18;;37524:38:0;15372:340:1;37524:38:0;41734:14:::1;41164:2;41747:1;41734:14;:::i;:::-;41725:6;:23;41717:58;;;::::0;-1:-1:-1;;;41717:58:0;;15919:2:1;41717:58:0::1;::::0;::::1;15901:21:1::0;15958:2;15938:18;;;15931:30;-1:-1:-1;;;15977:18:1;;;15970:52;16039:18;;41717:58:0::1;15717:346:1::0;41717:58:0::1;41803:1;41794:6;:10;41786:40;;;::::0;-1:-1:-1;;;41786:40:0;;16270:2:1;41786:40:0::1;::::0;::::1;16252:21:1::0;16309:2;16289:18;;;16282:30;-1:-1:-1;;;16328:18:1;;;16321:47;16385:18;;41786:40:0::1;16068:341:1::0;41786:40:0::1;41118:4;41855:6;41845:7;;:16;;;;:::i;:::-;:29;41837:62;;;::::0;-1:-1:-1;;;41837:62:0;;15225:2:1;41837:62:0::1;::::0;::::1;15207:21:1::0;15264:2;15244:18;;;15237:30;-1:-1:-1;;;15283:18:1;;;15276:50;15343:18;;41837:62:0::1;15023:344:1::0;41837:62:0::1;39528:6:::0;;-1:-1:-1;;;;;39528:6:0;41916:10:::1;:21;41912:112;;41983:6;41975:5;;:14;;;;:::i;:::-;41962:9;:27;;41954:58;;;::::0;-1:-1:-1;;;41954:58:0;;16789:2:1;41954:58:0::1;::::0;::::1;16771:21:1::0;16828:2;16808:18;;;16801:30;-1:-1:-1;;;16847:18:1;;;16840:48;16905:18;;41954:58:0::1;16587:342:1::0;41954:58:0::1;42036:29;42046:10;42058:6;42036:9;:29::i;23566:155::-:0;23661:52;20384:10;23694:8;23704;23661:18;:52::i;:::-;23566:155;;:::o;41392:::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;41455:5:::1;41452:88;;;41477:8;:6;:8::i;41452:88::-;41518:10;:8;:10::i;43243:94::-:0;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;43316:13:::1;43324:4;;43316:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;43316:7:0::1;::::0;-1:-1:-1;;;43316:13:0:i:1;24033:401::-:0;-1:-1:-1;;;;;24241:20:0;;20384:10;24241:20;;:60;;-1:-1:-1;24265:36:0;24282:4;20384:10;23793:168;:::i;24265:36::-;24219:151;;;;-1:-1:-1;;;24219:151:0;;17136:2:1;24219:151:0;;;17118:21:1;17175:2;17155:18;;;17148:30;17214:34;17194:18;;;17187:62;-1:-1:-1;;;17265:18:1;;;17258:39;17314:19;;24219:151:0;16934:405:1;24219:151:0;24381:45;24399:4;24405:2;24409;24413:6;24421:4;24381:17;:45::i;40364:201::-;39528:6;;-1:-1:-1;;;;;39528:6:0;20384:10;39675:23;39667:68;;;;-1:-1:-1;;;39667:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40453:22:0;::::1;40445:73;;;::::0;-1:-1:-1;;;40445:73:0;;17546:2:1;40445:73:0::1;::::0;::::1;17528:21:1::0;17585:2;17565:18;;;17558:30;17624:34;17604:18;;;17597:62;-1:-1:-1;;;17675:18:1;;;17668:36;17721:19;;40445:73:0::1;17344:402:1::0;40445:73:0::1;40529:28;40548:8;40529:18;:28::i;22316:105::-:0;22376:13;22409:4;22402:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22316:105;;;:::o;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;-1:-1:-1;;;;;867:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;;1073:6;365:723;-1:-1:-1;;;;365:723:0:o;26595:1074::-;26822:7;:14;26808:3;:10;:28;26800:81;;;;-1:-1:-1;;;26800:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26900:16:0;;26892:66;;;;-1:-1:-1;;;26892:66:0;;;;;;;:::i;:::-;20384:10;26971:16;27088:421;27112:3;:10;27108:1;:14;27088:421;;;27144:10;27157:3;27161:1;27157:6;;;;;;;;:::i;:::-;;;;;;;27144:19;;27178:14;27195:7;27203:1;27195:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27222:19;27244:13;;;;;;;;;;-1:-1:-1;;;;;27244:19:0;;;;;;;;;;;;27195:10;;-1:-1:-1;27286:21:0;;;;27278:76;;;;-1:-1:-1;;;27278:76:0;;;;;;;:::i;:::-;27398:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27398:19:0;;;;;;;;;;27420:20;;;27398:42;;27470:17;;;;;;;:27;;27420:20;;27398:9;27470:27;;27420:20;;27470:27;:::i;:::-;;;;;;;;27129:380;;;27124:3;;;;:::i;:::-;;;27088:421;;;;27556:2;-1:-1:-1;;;;;27526:47:0;27550:4;-1:-1:-1;;;;;27526:47:0;27540:8;-1:-1:-1;;;;;27526:47:0;;27560:3;27565:7;27526:47;;;;;;;:::i;:::-;;;;;;;;27586:75;27622:8;27632:4;27638:2;27642:3;27647:7;27656:4;27586:35;:75::i;42081:434::-;42144:20;42181:6;-1:-1:-1;;;;;42167:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42167:21:0;;42144:44;;42199:24;42240:6;-1:-1:-1;;;;;42226:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42226:21:0;-1:-1:-1;42292:7:0;;42199:48;;-1:-1:-1;42258:6:0;;42279:158;42315:6;42305:7;;:16;;;;:::i;:::-;42301:1;:20;42279:158;;;42352:3;:1;42354;42352:3;:::i;:::-;42343;42347:1;42343:6;;;;;;;;:::i;:::-;;;;;;:12;;;;;42406:1;42393:7;42401:1;42393:10;;;;;;;;:::i;:::-;;;;;;;;;;:14;42422:3;;;;:::i;:::-;;;;42323;;;;;:::i;:::-;;;;42279:158;;;;42458:6;42447:7;;:17;;;;;;;:::i;:::-;;;;;;;;42475:32;42486:2;42490:3;42495:7;42475:32;;;;;;;;;;;;:10;:32::i;40725:191::-;40818:6;;;-1:-1:-1;;;;;40835:17:0;;;-1:-1:-1;;;;;;40835:17:0;;;;;;;40868:40;;40818:6;;;40835:17;40818:6;;40868:40;;40799:16;;40868:40;40788:128;40725:191;:::o;32781:331::-;32936:8;-1:-1:-1;;;;;32927:17:0;:5;-1:-1:-1;;;;;32927:17:0;;;32919:71;;;;-1:-1:-1;;;32919:71:0;;20538:2:1;32919:71:0;;;20520:21:1;20577:2;20557:18;;;20550:30;20616:34;20596:18;;;20589:62;-1:-1:-1;;;20667:18:1;;;20660:39;20716:19;;32919:71:0;20336:405:1;32919:71:0;-1:-1:-1;;;;;33001:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33001:46:0;;;;;;;;;;33063:41;;1159::1;;;33063::0;;1132:18:1;33063:41:0;;;;;;;32781:331;;;:::o;38007:118::-;37278:7;;-1:-1:-1;;;37278:7:0;;;;37532:9;37524:38;;;;-1:-1:-1;;;37524:38:0;;15574:2:1;37524:38:0;;;15556:21:1;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:46;15688:18;;37524:38:0;15372:340:1;37524:38:0;38067:7:::1;:14:::0;;-1:-1:-1;;;;38067:14:0::1;-1:-1:-1::0;;;38067:14:0::1;::::0;;38097:20:::1;38104:12;20384:10:::0;;20304:98;38104:12:::1;38097:20;::::0;-1:-1:-1;;;;;8191:32:1;;;8173:51;;8161:2;8146:18;38097:20:0::1;;;;;;;38007:118::o:0;38266:120::-;37278:7;;-1:-1:-1;;;37278:7:0;;;;37802:41;;;;-1:-1:-1;;;37802:41:0;;20948:2:1;37802:41:0;;;20930:21:1;20987:2;20967:18;;;20960:30;-1:-1:-1;;;21006:18:1;;;20999:50;21066:18;;37802:41:0;20746:344:1;37802:41:0;38325:7:::1;:15:::0;;-1:-1:-1;;;;38325:15:0::1;::::0;;38356:22:::1;20384:10:::0;38365:12:::1;20304:98:::0;28513:88;28580:13;;;;:4;;:13;;;;;:::i;25417:820::-;-1:-1:-1;;;;;25605:16:0;;25597:66;;;;-1:-1:-1;;;25597:66:0;;;;;;;:::i;:::-;20384:10;25720:96;20384:10;25751:4;25757:2;25761:21;25779:2;25761:17;:21::i;:::-;25784:25;25802:6;25784:17;:25::i;25720:96::-;25829:19;25851:13;;;;;;;;;;;-1:-1:-1;;;;;25851:19:0;;;;;;;;;;25889:21;;;;25881:76;;;;-1:-1:-1;;;25881:76:0;;;;;;;:::i;:::-;25993:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25993:19:0;;;;;;;;;;26015:20;;;25993:42;;26057:17;;;;;;;:27;;26015:20;;25993:9;26057:27;;26015:20;;26057:27;:::i;:::-;;;;-1:-1:-1;;26102:46:0;;;21269:25:1;;;21325:2;21310:18;;21303:34;;;-1:-1:-1;;;;;26102:46:0;;;;;;;;;;;;;;21242:18:1;26102:46:0;;;;;;;26161:68;26192:8;26202:4;26208:2;26212;26216:6;26224:4;26161:30;:68::i;:::-;25586:651;;25417:820;;;;;:::o;35049:813::-;-1:-1:-1;;;;;35289:13:0;;3267:20;3315:8;35285:570;;35325:79;;-1:-1:-1;;;35325:79:0;;-1:-1:-1;;;;;35325:43:0;;;;;:79;;35369:8;;35379:4;;35385:3;;35390:7;;35399:4;;35325:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35325:79:0;;;;;;;;-1:-1:-1;;35325:79:0;;;;;;;;;;;;:::i;:::-;;;35321:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35717:6;35710:14;;-1:-1:-1;;;35710:14:0;;;;;;;;:::i;35321:523::-;;;35766:62;;-1:-1:-1;;;35766:62:0;;23496:2:1;35766:62:0;;;23478:21:1;23535:2;23515:18;;;23508:30;23574:34;23554:18;;;23547:62;-1:-1:-1;;;23625:18:1;;;23618:50;23685:19;;35766:62:0;23294:416:1;35321:523:0;-1:-1:-1;;;;;;35486:60:0;;-1:-1:-1;;;35486:60:0;35482:159;;35571:50;;-1:-1:-1;;;35571:50:0;;;;;;;:::i;29912:735::-;-1:-1:-1;;;;;30090:16:0;;30082:62;;;;-1:-1:-1;;;30082:62:0;;24326:2:1;30082:62:0;;;24308:21:1;24365:2;24345:18;;;24338:30;24404:34;24384:18;;;24377:62;-1:-1:-1;;;24455:18:1;;;24448:31;24496:19;;30082:62:0;24124:397:1;30082:62:0;30177:7;:14;30163:3;:10;:28;30155:81;;;;-1:-1:-1;;;30155:81:0;;;;;;;:::i;:::-;20384:10;30249:16;30372:103;30396:3;:10;30392:1;:14;30372:103;;;30453:7;30461:1;30453:10;;;;;;;;:::i;:::-;;;;;;;30428:9;:17;30438:3;30442:1;30438:6;;;;;;;;:::i;:::-;;;;;;;30428:17;;;;;;;;;;;:21;30446:2;-1:-1:-1;;;;;30428:21:0;-1:-1:-1;;;;;30428:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30408:3:0;;-1:-1:-1;30408:3:0;;;:::i;:::-;;;;30372:103;;;;30528:2;-1:-1:-1;;;;;30492:53:0;30524:1;-1:-1:-1;;;;;30492:53:0;30506:8;-1:-1:-1;;;;;30492:53:0;;30532:3;30537:7;30492:53;;;;;;;:::i;:::-;;;;;;;;30558:81;30594:8;30612:1;30616:2;30620:3;30625:7;30634:4;30558:35;:81::i;35870:198::-;35990:16;;;36004:1;35990:16;;;;;;;;;35936;;35965:22;;35990:16;;;;;;;;;;;;-1:-1:-1;35990:16:0;35965:41;;36028:7;36017:5;36023:1;36017:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36055:5;35870:198;-1:-1:-1;;35870:198:0:o;34297:744::-;-1:-1:-1;;;;;34512:13:0;;3267:20;3315:8;34508:526;;34548:72;;-1:-1:-1;;;34548:72:0;;-1:-1:-1;;;;;34548:38:0;;;;;:72;;34587:8;;34597:4;;34603:2;;34607:6;;34615:4;;34548:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34548:72:0;;;;;;;;-1:-1:-1;;34548:72:0;;;;;;;;;;;;:::i;:::-;;;34544:479;;;;:::i;:::-;-1:-1:-1;;;;;;34670:55:0;;-1:-1:-1;;;34670:55:0;34666:154;;34750:50;;-1:-1:-1;;;34750:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:180::-;1270:6;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;-1:-1:-1;1362:23:1;;1211:180;-1:-1:-1;1211:180:1:o;1396:258::-;1468:1;1478:113;1492:6;1489:1;1486:13;1478:113;;;1568:11;;;1562:18;1549:11;;;1542:39;1514:2;1507:10;1478:113;;;1609:6;1606:1;1603:13;1600:48;;;1644:1;1635:6;1630:3;1626:16;1619:27;1600:48;;1396:258;;;:::o;1659:::-;1701:3;1739:5;1733:12;1766:6;1761:3;1754:19;1782:63;1838:6;1831:4;1826:3;1822:14;1815:4;1808:5;1804:16;1782:63;:::i;:::-;1899:2;1878:15;-1:-1:-1;;1874:29:1;1865:39;;;;1906:4;1861:50;;1659:258;-1:-1:-1;;1659:258:1:o;1922:220::-;2071:2;2060:9;2053:21;2034:4;2091:45;2132:2;2121:9;2117:18;2109:6;2091:45;:::i;2147:127::-;2208:10;2203:3;2199:20;2196:1;2189:31;2239:4;2236:1;2229:15;2263:4;2260:1;2253:15;2279:249;2389:2;2370:13;;-1:-1:-1;;2366:27:1;2354:40;;-1:-1:-1;;;;;2409:34:1;;2445:22;;;2406:62;2403:88;;;2471:18;;:::i;:::-;2507:2;2500:22;-1:-1:-1;;2279:249:1:o;2533:183::-;2593:4;-1:-1:-1;;;;;2618:6:1;2615:30;2612:56;;;2648:18;;:::i;:::-;-1:-1:-1;2693:1:1;2689:14;2705:4;2685:25;;2533:183::o;2721:724::-;2775:5;2828:3;2821:4;2813:6;2809:17;2805:27;2795:55;;2846:1;2843;2836:12;2795:55;2882:6;2869:20;2908:4;2931:43;2971:2;2931:43;:::i;:::-;3003:2;2997:9;3015:31;3043:2;3035:6;3015:31;:::i;:::-;3081:18;;;3173:1;3169:10;;;;3157:23;;3153:32;;;3115:15;;;;-1:-1:-1;3197:15:1;;;3194:35;;;3225:1;3222;3215:12;3194:35;3261:2;3253:6;3249:15;3273:142;3289:6;3284:3;3281:15;3273:142;;;3355:17;;3343:30;;3393:12;;;;3306;;3273:142;;;-1:-1:-1;3433:6:1;2721:724;-1:-1:-1;;;;;;2721:724:1:o;3450:555::-;3492:5;3545:3;3538:4;3530:6;3526:17;3522:27;3512:55;;3563:1;3560;3553:12;3512:55;3599:6;3586:20;-1:-1:-1;;;;;3621:2:1;3618:26;3615:52;;;3647:18;;:::i;:::-;3696:2;3690:9;3708:67;3763:2;3744:13;;-1:-1:-1;;3740:27:1;3769:4;3736:38;3690:9;3708:67;:::i;:::-;3799:2;3791:6;3784:18;3845:3;3838:4;3833:2;3825:6;3821:15;3817:26;3814:35;3811:55;;;3862:1;3859;3852:12;3811:55;3926:2;3919:4;3911:6;3907:17;3900:4;3892:6;3888:17;3875:54;3973:1;3949:15;;;3966:4;3945:26;3938:37;;;;3953:6;3450:555;-1:-1:-1;;;3450:555:1:o;4010:943::-;4164:6;4172;4180;4188;4196;4249:3;4237:9;4228:7;4224:23;4220:33;4217:53;;;4266:1;4263;4256:12;4217:53;4289:29;4308:9;4289:29;:::i;:::-;4279:39;;4337:38;4371:2;4360:9;4356:18;4337:38;:::i;:::-;4327:48;;4426:2;4415:9;4411:18;4398:32;-1:-1:-1;;;;;4490:2:1;4482:6;4479:14;4476:34;;;4506:1;4503;4496:12;4476:34;4529:61;4582:7;4573:6;4562:9;4558:22;4529:61;:::i;:::-;4519:71;;4643:2;4632:9;4628:18;4615:32;4599:48;;4672:2;4662:8;4659:16;4656:36;;;4688:1;4685;4678:12;4656:36;4711:63;4766:7;4755:8;4744:9;4740:24;4711:63;:::i;:::-;4701:73;;4827:3;4816:9;4812:19;4799:33;4783:49;;4857:2;4847:8;4844:16;4841:36;;;4873:1;4870;4863:12;4841:36;;4896:51;4939:7;4928:8;4917:9;4913:24;4896:51;:::i;:::-;4886:61;;;4010:943;;;;;;;;:::o;4958:1208::-;5076:6;5084;5137:2;5125:9;5116:7;5112:23;5108:32;5105:52;;;5153:1;5150;5143:12;5105:52;5193:9;5180:23;-1:-1:-1;;;;;5263:2:1;5255:6;5252:14;5249:34;;;5279:1;5276;5269:12;5249:34;5317:6;5306:9;5302:22;5292:32;;5362:7;5355:4;5351:2;5347:13;5343:27;5333:55;;5384:1;5381;5374:12;5333:55;5420:2;5407:16;5442:4;5465:43;5505:2;5465:43;:::i;:::-;5537:2;5531:9;5549:31;5577:2;5569:6;5549:31;:::i;:::-;5615:18;;;5703:1;5699:10;;;;5691:19;;5687:28;;;5649:15;;;;-1:-1:-1;5727:19:1;;;5724:39;;;5759:1;5756;5749:12;5724:39;5783:11;;;;5803:148;5819:6;5814:3;5811:15;5803:148;;;5885:23;5904:3;5885:23;:::i;:::-;5873:36;;5836:12;;;;5929;;;;5803:148;;;5970:6;-1:-1:-1;;6014:18:1;;6001:32;;-1:-1:-1;;6045:16:1;;;6042:36;;;6074:1;6071;6064:12;6042:36;;6097:63;6152:7;6141:8;6130:9;6126:24;6097:63;:::i;:::-;6087:73;;;4958:1208;;;;;:::o;6171:435::-;6224:3;6262:5;6256:12;6289:6;6284:3;6277:19;6315:4;6344:2;6339:3;6335:12;6328:19;;6381:2;6374:5;6370:14;6402:1;6412:169;6426:6;6423:1;6420:13;6412:169;;;6487:13;;6475:26;;6521:12;;;;6556:15;;;;6448:1;6441:9;6412:169;;;-1:-1:-1;6597:3:1;;6171:435;-1:-1:-1;;;;;6171:435:1:o;6611:261::-;6790:2;6779:9;6772:21;6753:4;6810:56;6862:2;6851:9;6847:18;6839:6;6810:56;:::i;6877:367::-;6940:8;6950:6;7004:3;6997:4;6989:6;6985:17;6981:27;6971:55;;7022:1;7019;7012:12;6971:55;-1:-1:-1;7045:20:1;;-1:-1:-1;;;;;7077:30:1;;7074:50;;;7120:1;7117;7110:12;7074:50;7157:4;7149:6;7145:17;7133:29;;7217:3;7210:4;7200:6;7197:1;7193:14;7185:6;7181:27;7177:38;7174:47;7171:67;;;7234:1;7231;7224:12;7171:67;6877:367;;;;;:::o;7249:773::-;7371:6;7379;7387;7395;7448:2;7436:9;7427:7;7423:23;7419:32;7416:52;;;7464:1;7461;7454:12;7416:52;7504:9;7491:23;-1:-1:-1;;;;;7574:2:1;7566:6;7563:14;7560:34;;;7590:1;7587;7580:12;7560:34;7629:70;7691:7;7682:6;7671:9;7667:22;7629:70;:::i;:::-;7718:8;;-1:-1:-1;7603:96:1;-1:-1:-1;7806:2:1;7791:18;;7778:32;;-1:-1:-1;7822:16:1;;;7819:36;;;7851:1;7848;7841:12;7819:36;;7890:72;7954:7;7943:8;7932:9;7928:24;7890:72;:::i;:::-;7249:773;;;;-1:-1:-1;7981:8:1;-1:-1:-1;;;;7249:773:1:o;8235:160::-;8300:20;;8356:13;;8349:21;8339:32;;8329:60;;8385:1;8382;8375:12;8400:254;8465:6;8473;8526:2;8514:9;8505:7;8501:23;8497:32;8494:52;;;8542:1;8539;8532:12;8494:52;8565:29;8584:9;8565:29;:::i;:::-;8555:39;;8613:35;8644:2;8633:9;8629:18;8613:35;:::i;:::-;8603:45;;8400:254;;;;;:::o;8659:180::-;8715:6;8768:2;8756:9;8747:7;8743:23;8739:32;8736:52;;;8784:1;8781;8774:12;8736:52;8807:26;8823:9;8807:26;:::i;8844:592::-;8915:6;8923;8976:2;8964:9;8955:7;8951:23;8947:32;8944:52;;;8992:1;8989;8982:12;8944:52;9032:9;9019:23;-1:-1:-1;;;;;9102:2:1;9094:6;9091:14;9088:34;;;9118:1;9115;9108:12;9088:34;9156:6;9145:9;9141:22;9131:32;;9201:7;9194:4;9190:2;9186:13;9182:27;9172:55;;9223:1;9220;9213:12;9172:55;9263:2;9250:16;9289:2;9281:6;9278:14;9275:34;;;9305:1;9302;9295:12;9275:34;9350:7;9345:2;9336:6;9332:2;9328:15;9324:24;9321:37;9318:57;;;9371:1;9368;9361:12;9318:57;9402:2;9394:11;;;;;9424:6;;-1:-1:-1;8844:592:1;;-1:-1:-1;;;;8844:592:1:o;9441:260::-;9509:6;9517;9570:2;9558:9;9549:7;9545:23;9541:32;9538:52;;;9586:1;9583;9576:12;9538:52;9609:29;9628:9;9609:29;:::i;:::-;9599:39;;9657:38;9691:2;9680:9;9676:18;9657:38;:::i;9706:606::-;9810:6;9818;9826;9834;9842;9895:3;9883:9;9874:7;9870:23;9866:33;9863:53;;;9912:1;9909;9902:12;9863:53;9935:29;9954:9;9935:29;:::i;:::-;9925:39;;9983:38;10017:2;10006:9;10002:18;9983:38;:::i;:::-;9973:48;;10068:2;10057:9;10053:18;10040:32;10030:42;;10119:2;10108:9;10104:18;10091:32;10081:42;;10174:3;10163:9;10159:19;10146:33;-1:-1:-1;;;;;10194:6:1;10191:30;10188:50;;;10234:1;10231;10224:12;10188:50;10257:49;10298:7;10289:6;10278:9;10274:22;10257:49;:::i;10317:186::-;10376:6;10429:2;10417:9;10408:7;10404:23;10400:32;10397:52;;;10445:1;10442;10435:12;10397:52;10468:29;10487:9;10468:29;:::i;11280:772::-;11661:3;11699:6;11693:13;11715:53;11761:6;11756:3;11749:4;11741:6;11737:17;11715:53;:::i;:::-;-1:-1:-1;;;11790:16:1;;;11815:18;;;11858:13;;11880:65;11858:13;11932:1;11921:13;;11914:4;11902:17;;11880:65;:::i;:::-;-1:-1:-1;;;12008:1:1;11964:20;;;;12000:10;;;11993:27;12044:1;12036:10;;11280:772;-1:-1:-1;;;;11280:772:1:o;12476:356::-;12678:2;12660:21;;;12697:18;;;12690:30;12756:34;12751:2;12736:18;;12729:62;12823:2;12808:18;;12476:356::o;13457:127::-;13518:10;13513:3;13509:20;13506:1;13499:31;13549:4;13546:1;13539:15;13573:4;13570:1;13563:15;13589:127;13650:10;13645:3;13641:20;13638:1;13631:31;13681:4;13678:1;13671:15;13705:4;13702:1;13695:15;13721:135;13760:3;-1:-1:-1;;13781:17:1;;13778:43;;;13801:18;;:::i;:::-;-1:-1:-1;13848:1:1;13837:13;;13721:135::o;14890:128::-;14930:3;14961:1;14957:6;14954:1;14951:13;14948:39;;;14967:18;;:::i;:::-;-1:-1:-1;15003:9:1;;14890:128::o;16414:168::-;16454:7;16520:1;16516;16512:6;16508:14;16505:1;16502:21;16497:1;16490:9;16483:17;16479:45;16476:71;;;16527:18;;:::i;:::-;-1:-1:-1;16567:9:1;;16414:168::o;17751:380::-;17830:1;17826:12;;;;17873;;;17894:61;;17948:4;17940:6;17936:17;17926:27;;17894:61;18001:2;17993:6;17990:14;17970:18;17967:38;17964:161;;;18047:10;18042:3;18038:20;18035:1;18028:31;18082:4;18079:1;18072:15;18110:4;18107:1;18100:15;17964:161;;17751:380;;;:::o;18136:127::-;18197:10;18192:3;18188:20;18185:1;18178:31;18228:4;18225:1;18218:15;18252:4;18249:1;18242:15;18268:120;18308:1;18334;18324:35;;18339:18;;:::i;:::-;-1:-1:-1;18373:9:1;;18268:120::o;18393:125::-;18433:4;18461:1;18458;18455:8;18452:34;;;18466:18;;:::i;:::-;-1:-1:-1;18503:9:1;;18393:125::o;18523:112::-;18555:1;18581;18571:35;;18586:18;;:::i;:::-;-1:-1:-1;18620:9:1;;18523:112::o;18640:404::-;18842:2;18824:21;;;18881:2;18861:18;;;18854:30;18920:34;18915:2;18900:18;;18893:62;-1:-1:-1;;;18986:2:1;18971:18;;18964:38;19034:3;19019:19;;18640:404::o;19049:401::-;19251:2;19233:21;;;19290:2;19270:18;;;19263:30;19329:34;19324:2;19309:18;;19302:62;-1:-1:-1;;;19395:2:1;19380:18;;19373:35;19440:3;19425:19;;19049:401::o;19455:406::-;19657:2;19639:21;;;19696:2;19676:18;;;19669:30;19735:34;19730:2;19715:18;;19708:62;-1:-1:-1;;;19801:2:1;19786:18;;19779:40;19851:3;19836:19;;19455:406::o;19866:465::-;20123:2;20112:9;20105:21;20086:4;20149:56;20201:2;20190:9;20186:18;20178:6;20149:56;:::i;:::-;20253:9;20245:6;20241:22;20236:2;20225:9;20221:18;20214:50;20281:44;20318:6;20310;20281:44;:::i;:::-;20273:52;19866:465;-1:-1:-1;;;;;19866:465:1:o;21348:827::-;-1:-1:-1;;;;;21745:15:1;;;21727:34;;21797:15;;21792:2;21777:18;;21770:43;21707:3;21844:2;21829:18;;21822:31;;;21670:4;;21876:57;;21913:19;;21905:6;21876:57;:::i;:::-;21981:9;21973:6;21969:22;21964:2;21953:9;21949:18;21942:50;22015:44;22052:6;22044;22015:44;:::i;:::-;22001:58;;22108:9;22100:6;22096:22;22090:3;22079:9;22075:19;22068:51;22136:33;22162:6;22154;22136:33;:::i;:::-;22128:41;21348:827;-1:-1:-1;;;;;;;;21348:827:1:o;22180:249::-;22249:6;22302:2;22290:9;22281:7;22277:23;22273:32;22270:52;;;22318:1;22315;22308:12;22270:52;22350:9;22344:16;22369:30;22393:5;22369:30;:::i;22434:179::-;22469:3;22511:1;22493:16;22490:23;22487:120;;;22557:1;22554;22551;22536:23;-1:-1:-1;22594:1:1;22588:8;22583:3;22579:18;22487:120;22434:179;:::o;22618:671::-;22657:3;22699:4;22681:16;22678:26;22675:39;;;22618:671;:::o;22675:39::-;22741:2;22735:9;-1:-1:-1;;22806:16:1;22802:25;;22799:1;22735:9;22778:50;22857:4;22851:11;22881:16;-1:-1:-1;;;;;22987:2:1;22980:4;22972:6;22968:17;22965:25;22960:2;22952:6;22949:14;22946:45;22943:58;;;22994:5;;;;;22618:671;:::o;22943:58::-;23031:6;23025:4;23021:17;23010:28;;23067:3;23061:10;23094:2;23086:6;23083:14;23080:27;;;23100:5;;;;;;22618:671;:::o;23080:27::-;23184:2;23165:16;23159:4;23155:27;23151:36;23144:4;23135:6;23130:3;23126:16;23122:27;23119:69;23116:82;;;23191:5;;;;;;22618:671;:::o;23116:82::-;23207:57;23258:4;23249:6;23241;23237:19;23233:30;23227:4;23207:57;:::i;:::-;-1:-1:-1;23280:3:1;;22618:671;-1:-1:-1;;;;;22618:671:1:o;23715:404::-;23917:2;23899:21;;;23956:2;23936:18;;;23929:30;23995:34;23990:2;23975:18;;23968:62;-1:-1:-1;;;24061:2:1;24046:18;;24039:38;24109:3;24094:19;;23715:404::o;24526:561::-;-1:-1:-1;;;;;24823:15:1;;;24805:34;;24875:15;;24870:2;24855:18;;24848:43;24922:2;24907:18;;24900:34;;;24965:2;24950:18;;24943:34;;;24785:3;25008;24993:19;;24986:32;;;24748:4;;25035:46;;25061:19;;25053:6;25035:46;:::i;:::-;25027:54;24526:561;-1:-1:-1;;;;;;;24526:561:1:o

Swarm Source

ipfs://bbb25b0c3ba2fd19e700d212bec7235ff5013a885508d63313b43d573fbc9246
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.