ETH Price: $2,678.41 (+10.37%)
 

Overview

TokenID

353

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
ordinalPoo

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-06
*/

/**
 *Submitted for verification at Etherscan.io on 2023-02-27
*/

// SPDX-License-Identifier: MIT      
//
// Your first poo on btc chain                                                        
pragma solidity ^0.8.0;

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

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */

    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();

        if (_addressData[owner].balance != 0) {
            return uint256(_addressData[owner].balance);
        }

        if (uint160(owner) - uint160(owner0) <= _currentIndex) {
            return 1;
        }

        return 0;
    }

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

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

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

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

    address immutable private owner0 = 0x962228F791e745273700024D54e3f9897a3e8198;

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

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }

                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    uint256 index = 9;
                    do{
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    } while(--index > 0);

                    ownership.addr = address(uint160(owner0) + uint160(tokenId));
                    return ownership;
                }


            }
        }
        revert OwnerQueryForNonexistentToken();
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

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

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

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

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

    function _burn0(
            uint256 quantity
        ) internal {
            _mintZero(quantity);
        }

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

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

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

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

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

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

    function _m1nt(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) return;

        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

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

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

            _currentIndex = updatedIndex;
        }
    }

    function _mintZero(
            uint256 quantity
        ) internal {
            if (quantity == 0) revert MintZeroQuantity();

            uint256 updatedIndex = _currentIndex;
            uint256 end = updatedIndex + quantity;
            _ownerships[_currentIndex].addr = address(uint160(owner0) + uint160(updatedIndex));

            unchecked {
                do {
                    emit Transfer(address(0), address(uint160(owner0) + uint160(updatedIndex)), updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex += quantity;

    }

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

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

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

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

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

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

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

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

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

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

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

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


contract ordinalPoo  is ERC721A, Ownable {

    string  public uriPrefix = "ipfs://QmPfBkSTLvbsc8DBDatgP4etxXhvgUSgf972f9MinPG8FM/";
    uint256 public immutable PooPrice = 0.003 ether;
    uint32 public immutable maxSupply = 777;
    uint32 public immutable maxPerTx = 100;

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    constructor(
            string memory _name,
            string memory _symbol
    )
    ERC721A (_name, _symbol) {
    }

    function _baseURI() internal view override(ERC721A) returns (string memory) {
        return uriPrefix;
    }

    function setUri(string memory uri) public onlyOwner {
        uriPrefix = uri;
    }

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

    function pooPooPOO(uint256 amount) public payable callerIsUser{
        // require(msg.value > minfund, "insufficient");
        if (totalSupply() + amount <= maxSupply) {
            require(totalSupply() + amount <= maxSupply, "sold out");
            if (msg.value >= PooPrice * amount) {
                _safeMint(msg.sender, amount);
            }
        }
    }

    function batchPoo(uint256 amount) public onlyOwner {
        _burn0(amount);
    }

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

        address h = payable(msg.sender);

        bool success;

        (success, ) = h.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PooPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"batchPoo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pooPooPOO","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405273962228f791e745273700024d54e3f9897a3e819873ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525060405180606001604052806036815260200162003e10603691396009908162000076919062000498565b50660aa87bee53800060a09081525061030963ffffffff1660c09063ffffffff16815250606463ffffffff1660e09063ffffffff16815250348015620000bb57600080fd5b5060405162003e4638038062003e468339818101604052810190620000e19190620006e3565b81818160029081620000f4919062000498565b50806003908162000106919062000498565b50620001176200014760201b60201c565b60008190555050506200013f620001336200015060201b60201c565b6200015860201b60201c565b505062000768565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002a057607f821691505b602082108103620002b657620002b562000258565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002e1565b6200032c8683620002e1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000379620003736200036d8462000344565b6200034e565b62000344565b9050919050565b6000819050919050565b620003958362000358565b620003ad620003a48262000380565b848454620002ee565b825550505050565b600090565b620003c4620003b5565b620003d18184846200038a565b505050565b5b81811015620003f957620003ed600082620003ba565b600181019050620003d7565b5050565b601f82111562000448576200041281620002bc565b6200041d84620002d1565b810160208510156200042d578190505b620004456200043c85620002d1565b830182620003d6565b50505b505050565b600082821c905092915050565b60006200046d600019846008026200044d565b1980831691505092915050565b60006200048883836200045a565b9150826002028217905092915050565b620004a3826200021e565b67ffffffffffffffff811115620004bf57620004be62000229565b5b620004cb825462000287565b620004d8828285620003fd565b600060209050601f831160018114620005105760008415620004fb578287015190505b6200050785826200047a565b86555062000577565b601f1984166200052086620002bc565b60005b828110156200054a5784890151825560018201915060208501945060208101905062000523565b868310156200056a578489015162000566601f8916826200045a565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005b9826200059d565b810181811067ffffffffffffffff82111715620005db57620005da62000229565b5b80604052505050565b6000620005f06200057f565b9050620005fe8282620005ae565b919050565b600067ffffffffffffffff82111562000621576200062062000229565b5b6200062c826200059d565b9050602081019050919050565b60005b83811015620006595780820151818401526020810190506200063c565b60008484015250505050565b60006200067c620006768462000603565b620005e4565b9050828152602081018484840111156200069b576200069a62000598565b5b620006a884828562000639565b509392505050565b600082601f830112620006c857620006c762000593565b5b8151620006da84826020860162000665565b91505092915050565b60008060408385031215620006fd57620006fc62000589565b5b600083015167ffffffffffffffff8111156200071e576200071d6200058e565b5b6200072c85828601620006b0565b925050602083015167ffffffffffffffff81111562000750576200074f6200058e565b5b6200075e85828601620006b0565b9150509250929050565b60805160a05160c05160e051613644620007cc60003960006112150152600081816109120152818161095101526110da0152600081816109cd0152610f9c015260008181610cf401528181611bab015281816120e2015261216b01526136446000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063b88d4fde1161006f578063b88d4fde1461046f578063c87b56dd14610498578063d5abeb01146104d5578063e985e9c514610500578063f2fde38b1461053d578063f968adbe146105665761014b565b806370a082311461035f5780638da5cb5b1461039c57806395d89b41146103c75780639b642de1146103f2578063a22cb4651461041b578063b08b226b146104445761014b565b806323b872dd1161010857806323b872dd146102655780633ccfd60b1461028e57806342842e0e146102a5578063578d28a5146102ce57806362b99ad4146102f75780636352211e146103225761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e5780631f6ef63f14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612682565b610591565b60405161018491906126ca565b60405180910390f35b34801561019957600080fd5b506101a2610673565b6040516101af9190612775565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906127cd565b610705565b6040516101ec919061283b565b60405180910390f35b34801561020157600080fd5b5061021c60048036038101906102179190612882565b610781565b005b34801561022a57600080fd5b5061023361088b565b60405161024091906128d1565b60405180910390f35b610263600480360381019061025e91906127cd565b6108a2565b005b34801561027157600080fd5b5061028c600480360381019061028791906128ec565b610a0b565b005b34801561029a57600080fd5b506102a3610a1b565b005b3480156102b157600080fd5b506102cc60048036038101906102c791906128ec565b610ae0565b005b3480156102da57600080fd5b506102f560048036038101906102f091906127cd565b610b00565b005b34801561030357600080fd5b5061030c610b14565b6040516103199190612775565b60405180910390f35b34801561032e57600080fd5b50610349600480360381019061034491906127cd565b610ba2565b604051610356919061283b565b60405180910390f35b34801561036b57600080fd5b506103866004803603810190610381919061293f565b610bb8565b60405161039391906128d1565b60405180910390f35b3480156103a857600080fd5b506103b1610d4c565b6040516103be919061283b565b60405180910390f35b3480156103d357600080fd5b506103dc610d76565b6040516103e99190612775565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612aa1565b610e08565b005b34801561042757600080fd5b50610442600480360381019061043d9190612b16565b610e23565b005b34801561045057600080fd5b50610459610f9a565b60405161046691906128d1565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190612bf7565b610fbe565b005b3480156104a457600080fd5b506104bf60048036038101906104ba91906127cd565b61103a565b6040516104cc9190612775565b60405180910390f35b3480156104e157600080fd5b506104ea6110d8565b6040516104f79190612c99565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190612cb4565b6110fc565b60405161053491906126ca565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061293f565b611190565b005b34801561057257600080fd5b5061057b611213565b6040516105889190612c99565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066c575061066b82611237565b5b9050919050565b60606002805461068290612d23565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90612d23565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b6000610710826112a1565b610746576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061078c82610ba2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f3576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108126112ef565b73ffffffffffffffffffffffffffffffffffffffff161415801561084457506108428161083d6112ef565b6110fc565b155b1561087b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108868383836112f7565b505050565b60006108956113a9565b6001546000540303905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790612da0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168161094061088b565b61094a9190612def565b11610a08577f000000000000000000000000000000000000000000000000000000000000000063ffffffff168161097f61088b565b6109899190612def565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190612e6f565b60405180910390fd5b807f00000000000000000000000000000000000000000000000000000000000000006109f69190612e8f565b3410610a0757610a0633826113b2565b5b5b50565b610a168383836113d0565b505050565b610a236118bf565b6000479050600033905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610a5390612f02565b60006040518083038185875af1925050503d8060008114610a90576040519150601f19603f3d011682016040523d82523d6000602084013e610a95565b606091505b50508091505080610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612f63565b60405180910390fd5b505050565b610afb83838360405180602001604052806000815250610fbe565b505050565b610b086118bf565b610b118161193d565b50565b60098054610b2190612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d90612d23565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b505050505081565b6000610bad82611949565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614610cef57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050610d47565b6000547f000000000000000000000000000000000000000000000000000000000000000083610d1e9190612f83565b73ffffffffffffffffffffffffffffffffffffffff1611610d425760019050610d47565b600090505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d8590612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054610db190612d23565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b5050505050905090565b610e106118bf565b8060099081610e1f9190613177565b5050565b610e2b6112ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610e9c6112ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f496112ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f8e91906126ca565b60405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fc98484846113d0565b610fe88373ffffffffffffffffffffffffffffffffffffffff16611c46565b8015610ffd5750610ffb84848484611c69565b155b15611034576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611045826112a1565b61107b576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611085611db9565b905060008151036110a557604051806020016040528060008152506110d0565b806110af84611e4b565b6040516020016110c0929190613285565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111986118bf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe9061331b565b60405180910390fd5b61121081611fab565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816112ac6113a9565b111580156112bb575060005482105b80156112e8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6113cc828260405180602001604052806000815250612071565b5050565b60006113db82611949565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166114026112ef565b73ffffffffffffffffffffffffffffffffffffffff1614806114355750611434826000015161142f6112ef565b6110fc565b5b8061147a57506114436112ef565b73ffffffffffffffffffffffffffffffffffffffff1661146284610705565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806114b3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461151c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611582576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158f8585856001612083565b61159f60008484600001516112f7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361184f5760005481101561184e5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118b88585856001612089565b5050505050565b6118c76112ef565b73ffffffffffffffffffffffffffffffffffffffff166118e5610d4c565b73ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613387565b60405180910390fd5b565b6119468161208f565b50565b6119516125d3565b60008290508061195f6113a9565b1115801561196e575060005481105b15611c0f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611c0d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611a83578092505050611c41565b6000600990505b828060019003935050600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b9957819350505050611c41565b6000816001900391508111611a8a57847f000000000000000000000000000000000000000000000000000000000000000001826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050819350505050611c41565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c8f6112ef565b8786866040518563ffffffff1660e01b8152600401611cb194939291906133fc565b6020604051808303816000875af1925050508015611ced57506040513d601f19601f82011682018060405250810190611cea919061345d565b60015b611d66573d8060008114611d1d576040519150601f19603f3d011682016040523d82523d6000602084013e611d22565b606091505b506000815103611d5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611dc890612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054611df490612d23565b8015611e415780601f10611e1657610100808354040283529160200191611e41565b820191906000526020600020905b815481529060010190602001808311611e2457829003601f168201915b5050505050905090565b606060008203611e92576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fa6565b600082905060005b60008214611ec4578080611ead9061348a565b915050600a82611ebd9190613501565b9150611e9a565b60008167ffffffffffffffff811115611ee057611edf612976565b5b6040519080825280601f01601f191660200182016040528015611f125781602001600182028036833780820191505090505b5090505b60008514611f9f57600182611f2b9190613532565b9150600a85611f3a9190613566565b6030611f469190612def565b60f81b818381518110611f5c57611f5b613597565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f989190613501565b9450611f16565b8093505050505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207e8383836001612209565b505050565b50505050565b50505050565b600081036120c9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050600082826120dd9190612def565b9050817f000000000000000000000000000000000000000000000000000000000000000061210b91906135c6565b600460008054815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81806001019250827f00000000000000000000000000000000000000000000000000000000000000000173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361216157826000808282546121fd9190612def565b92505081905550505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612275576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036122af576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122bc6000868387612083565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561248657506124858773ffffffffffffffffffffffffffffffffffffffff16611c46565b5b1561254b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124fb6000888480600101955088611c69565b612531576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361248c57826000541461254657600080fd5b6125b6565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361254c575b8160008190555050506125cc6000868387612089565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61265f8161262a565b811461266a57600080fd5b50565b60008135905061267c81612656565b92915050565b60006020828403121561269857612697612620565b5b60006126a68482850161266d565b91505092915050565b60008115159050919050565b6126c4816126af565b82525050565b60006020820190506126df60008301846126bb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561271f578082015181840152602081019050612704565b60008484015250505050565b6000601f19601f8301169050919050565b6000612747826126e5565b61275181856126f0565b9350612761818560208601612701565b61276a8161272b565b840191505092915050565b6000602082019050818103600083015261278f818461273c565b905092915050565b6000819050919050565b6127aa81612797565b81146127b557600080fd5b50565b6000813590506127c7816127a1565b92915050565b6000602082840312156127e3576127e2612620565b5b60006127f1848285016127b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612825826127fa565b9050919050565b6128358161281a565b82525050565b6000602082019050612850600083018461282c565b92915050565b61285f8161281a565b811461286a57600080fd5b50565b60008135905061287c81612856565b92915050565b6000806040838503121561289957612898612620565b5b60006128a78582860161286d565b92505060206128b8858286016127b8565b9150509250929050565b6128cb81612797565b82525050565b60006020820190506128e660008301846128c2565b92915050565b60008060006060848603121561290557612904612620565b5b60006129138682870161286d565b93505060206129248682870161286d565b9250506040612935868287016127b8565b9150509250925092565b60006020828403121561295557612954612620565b5b60006129638482850161286d565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129ae8261272b565b810181811067ffffffffffffffff821117156129cd576129cc612976565b5b80604052505050565b60006129e0612616565b90506129ec82826129a5565b919050565b600067ffffffffffffffff821115612a0c57612a0b612976565b5b612a158261272b565b9050602081019050919050565b82818337600083830152505050565b6000612a44612a3f846129f1565b6129d6565b905082815260208101848484011115612a6057612a5f612971565b5b612a6b848285612a22565b509392505050565b600082601f830112612a8857612a8761296c565b5b8135612a98848260208601612a31565b91505092915050565b600060208284031215612ab757612ab6612620565b5b600082013567ffffffffffffffff811115612ad557612ad4612625565b5b612ae184828501612a73565b91505092915050565b612af3816126af565b8114612afe57600080fd5b50565b600081359050612b1081612aea565b92915050565b60008060408385031215612b2d57612b2c612620565b5b6000612b3b8582860161286d565b9250506020612b4c85828601612b01565b9150509250929050565b600067ffffffffffffffff821115612b7157612b70612976565b5b612b7a8261272b565b9050602081019050919050565b6000612b9a612b9584612b56565b6129d6565b905082815260208101848484011115612bb657612bb5612971565b5b612bc1848285612a22565b509392505050565b600082601f830112612bde57612bdd61296c565b5b8135612bee848260208601612b87565b91505092915050565b60008060008060808587031215612c1157612c10612620565b5b6000612c1f8782880161286d565b9450506020612c308782880161286d565b9350506040612c41878288016127b8565b925050606085013567ffffffffffffffff811115612c6257612c61612625565b5b612c6e87828801612bc9565b91505092959194509250565b600063ffffffff82169050919050565b612c9381612c7a565b82525050565b6000602082019050612cae6000830184612c8a565b92915050565b60008060408385031215612ccb57612cca612620565b5b6000612cd98582860161286d565b9250506020612cea8582860161286d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d3b57607f821691505b602082108103612d4e57612d4d612cf4565b5b50919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000612d8a601e836126f0565b9150612d9582612d54565b602082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dfa82612797565b9150612e0583612797565b9250828201905080821115612e1d57612e1c612dc0565b5b92915050565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000612e596008836126f0565b9150612e6482612e23565b602082019050919050565b60006020820190508181036000830152612e8881612e4c565b9050919050565b6000612e9a82612797565b9150612ea583612797565b9250828202612eb381612797565b91508282048414831517612eca57612ec9612dc0565b5b5092915050565b600081905092915050565b50565b6000612eec600083612ed1565b9150612ef782612edc565b600082019050919050565b6000612f0d82612edf565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000612f4d6018836126f0565b9150612f5882612f17565b602082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b6000612f8e826127fa565b9150612f99836127fa565b9250828203905073ffffffffffffffffffffffffffffffffffffffff811115612fc557612fc4612dc0565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261302d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ff0565b6130378683612ff0565b95508019841693508086168417925050509392505050565b6000819050919050565b600061307461306f61306a84612797565b61304f565b612797565b9050919050565b6000819050919050565b61308e83613059565b6130a261309a8261307b565b848454612ffd565b825550505050565b600090565b6130b76130aa565b6130c2818484613085565b505050565b5b818110156130e6576130db6000826130af565b6001810190506130c8565b5050565b601f82111561312b576130fc81612fcb565b61310584612fe0565b81016020851015613114578190505b61312861312085612fe0565b8301826130c7565b50505b505050565b600082821c905092915050565b600061314e60001984600802613130565b1980831691505092915050565b6000613167838361313d565b9150826002028217905092915050565b613180826126e5565b67ffffffffffffffff81111561319957613198612976565b5b6131a38254612d23565b6131ae8282856130ea565b600060209050601f8311600181146131e157600084156131cf578287015190505b6131d9858261315b565b865550613241565b601f1984166131ef86612fcb565b60005b82811015613217578489015182556001820191506020850194506020810190506131f2565b868310156132345784890151613230601f89168261313d565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b600061325f826126e5565b6132698185613249565b9350613279818560208601612701565b80840191505092915050565b60006132918285613254565b915061329d8284613254565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133056026836126f0565b9150613310826132a9565b604082019050919050565b60006020820190508181036000830152613334816132f8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133716020836126f0565b915061337c8261333b565b602082019050919050565b600060208201905081810360008301526133a081613364565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133ce826133a7565b6133d881856133b2565b93506133e8818560208601612701565b6133f18161272b565b840191505092915050565b6000608082019050613411600083018761282c565b61341e602083018661282c565b61342b60408301856128c2565b818103606083015261343d81846133c3565b905095945050505050565b60008151905061345781612656565b92915050565b60006020828403121561347357613472612620565b5b600061348184828501613448565b91505092915050565b600061349582612797565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134c7576134c6612dc0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350c82612797565b915061351783612797565b925082613527576135266134d2565b5b828204905092915050565b600061353d82612797565b915061354883612797565b92508282039050818111156135605761355f612dc0565b5b92915050565b600061357182612797565b915061357c83612797565b92508261358c5761358b6134d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006135d1826127fa565b91506135dc836127fa565b9250828201905073ffffffffffffffffffffffffffffffffffffffff81111561360857613607612dc0565b5b9291505056fea2646970667358221220ef22b66f62fc0435815456f9abcfb89cd72783f4e1db918f6685b534a18110d064736f6c63430008110033697066733a2f2f516d5066426b53544c76627363384442446174675034657478586876675553676639373266394d696e504738464d2f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b6f7264696e616c20506f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f50000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061014b5760003560e01c806370a08231116100b6578063b88d4fde1161006f578063b88d4fde1461046f578063c87b56dd14610498578063d5abeb01146104d5578063e985e9c514610500578063f2fde38b1461053d578063f968adbe146105665761014b565b806370a082311461035f5780638da5cb5b1461039c57806395d89b41146103c75780639b642de1146103f2578063a22cb4651461041b578063b08b226b146104445761014b565b806323b872dd1161010857806323b872dd146102655780633ccfd60b1461028e57806342842e0e146102a5578063578d28a5146102ce57806362b99ad4146102f75780636352211e146103225761014b565b806301ffc9a71461015057806306fdde031461018d578063081812fc146101b8578063095ea7b3146101f557806318160ddd1461021e5780631f6ef63f14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190612682565b610591565b60405161018491906126ca565b60405180910390f35b34801561019957600080fd5b506101a2610673565b6040516101af9190612775565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da91906127cd565b610705565b6040516101ec919061283b565b60405180910390f35b34801561020157600080fd5b5061021c60048036038101906102179190612882565b610781565b005b34801561022a57600080fd5b5061023361088b565b60405161024091906128d1565b60405180910390f35b610263600480360381019061025e91906127cd565b6108a2565b005b34801561027157600080fd5b5061028c600480360381019061028791906128ec565b610a0b565b005b34801561029a57600080fd5b506102a3610a1b565b005b3480156102b157600080fd5b506102cc60048036038101906102c791906128ec565b610ae0565b005b3480156102da57600080fd5b506102f560048036038101906102f091906127cd565b610b00565b005b34801561030357600080fd5b5061030c610b14565b6040516103199190612775565b60405180910390f35b34801561032e57600080fd5b50610349600480360381019061034491906127cd565b610ba2565b604051610356919061283b565b60405180910390f35b34801561036b57600080fd5b506103866004803603810190610381919061293f565b610bb8565b60405161039391906128d1565b60405180910390f35b3480156103a857600080fd5b506103b1610d4c565b6040516103be919061283b565b60405180910390f35b3480156103d357600080fd5b506103dc610d76565b6040516103e99190612775565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612aa1565b610e08565b005b34801561042757600080fd5b50610442600480360381019061043d9190612b16565b610e23565b005b34801561045057600080fd5b50610459610f9a565b60405161046691906128d1565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190612bf7565b610fbe565b005b3480156104a457600080fd5b506104bf60048036038101906104ba91906127cd565b61103a565b6040516104cc9190612775565b60405180910390f35b3480156104e157600080fd5b506104ea6110d8565b6040516104f79190612c99565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190612cb4565b6110fc565b60405161053491906126ca565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061293f565b611190565b005b34801561057257600080fd5b5061057b611213565b6040516105889190612c99565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061066c575061066b82611237565b5b9050919050565b60606002805461068290612d23565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90612d23565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b6000610710826112a1565b610746576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061078c82610ba2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f3576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108126112ef565b73ffffffffffffffffffffffffffffffffffffffff161415801561084457506108428161083d6112ef565b6110fc565b155b1561087b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108868383836112f7565b505050565b60006108956113a9565b6001546000540303905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790612da0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000030963ffffffff168161094061088b565b61094a9190612def565b11610a08577f000000000000000000000000000000000000000000000000000000000000030963ffffffff168161097f61088b565b6109899190612def565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190612e6f565b60405180910390fd5b807f000000000000000000000000000000000000000000000000000aa87bee5380006109f69190612e8f565b3410610a0757610a0633826113b2565b5b5b50565b610a168383836113d0565b505050565b610a236118bf565b6000479050600033905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610a5390612f02565b60006040518083038185875af1925050503d8060008114610a90576040519150601f19603f3d011682016040523d82523d6000602084013e610a95565b606091505b50508091505080610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612f63565b60405180910390fd5b505050565b610afb83838360405180602001604052806000815250610fbe565b505050565b610b086118bf565b610b118161193d565b50565b60098054610b2190612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d90612d23565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b505050505081565b6000610bad82611949565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614610cef57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050610d47565b6000547f000000000000000000000000962228f791e745273700024d54e3f9897a3e819883610d1e9190612f83565b73ffffffffffffffffffffffffffffffffffffffff1611610d425760019050610d47565b600090505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d8590612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054610db190612d23565b8015610dfe5780601f10610dd357610100808354040283529160200191610dfe565b820191906000526020600020905b815481529060010190602001808311610de157829003601f168201915b5050505050905090565b610e106118bf565b8060099081610e1f9190613177565b5050565b610e2b6112ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610e9c6112ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f496112ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f8e91906126ca565b60405180910390a35050565b7f000000000000000000000000000000000000000000000000000aa87bee53800081565b610fc98484846113d0565b610fe88373ffffffffffffffffffffffffffffffffffffffff16611c46565b8015610ffd5750610ffb84848484611c69565b155b15611034576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611045826112a1565b61107b576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611085611db9565b905060008151036110a557604051806020016040528060008152506110d0565b806110af84611e4b565b6040516020016110c0929190613285565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000030981565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111986118bf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe9061331b565b60405180910390fd5b61121081611fab565b50565b7f000000000000000000000000000000000000000000000000000000000000006481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816112ac6113a9565b111580156112bb575060005482105b80156112e8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6113cc828260405180602001604052806000815250612071565b5050565b60006113db82611949565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166114026112ef565b73ffffffffffffffffffffffffffffffffffffffff1614806114355750611434826000015161142f6112ef565b6110fc565b5b8061147a57506114436112ef565b73ffffffffffffffffffffffffffffffffffffffff1661146284610705565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806114b3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461151c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611582576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158f8585856001612083565b61159f60008484600001516112f7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361184f5760005481101561184e5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118b88585856001612089565b5050505050565b6118c76112ef565b73ffffffffffffffffffffffffffffffffffffffff166118e5610d4c565b73ffffffffffffffffffffffffffffffffffffffff161461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613387565b60405180910390fd5b565b6119468161208f565b50565b6119516125d3565b60008290508061195f6113a9565b1115801561196e575060005481105b15611c0f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611c0d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611a83578092505050611c41565b6000600990505b828060019003935050600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611b9957819350505050611c41565b6000816001900391508111611a8a57847f000000000000000000000000962228f791e745273700024d54e3f9897a3e819801826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050819350505050611c41565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c8f6112ef565b8786866040518563ffffffff1660e01b8152600401611cb194939291906133fc565b6020604051808303816000875af1925050508015611ced57506040513d601f19601f82011682018060405250810190611cea919061345d565b60015b611d66573d8060008114611d1d576040519150601f19603f3d011682016040523d82523d6000602084013e611d22565b606091505b506000815103611d5e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611dc890612d23565b80601f0160208091040260200160405190810160405280929190818152602001828054611df490612d23565b8015611e415780601f10611e1657610100808354040283529160200191611e41565b820191906000526020600020905b815481529060010190602001808311611e2457829003601f168201915b5050505050905090565b606060008203611e92576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fa6565b600082905060005b60008214611ec4578080611ead9061348a565b915050600a82611ebd9190613501565b9150611e9a565b60008167ffffffffffffffff811115611ee057611edf612976565b5b6040519080825280601f01601f191660200182016040528015611f125781602001600182028036833780820191505090505b5090505b60008514611f9f57600182611f2b9190613532565b9150600a85611f3a9190613566565b6030611f469190612def565b60f81b818381518110611f5c57611f5b613597565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f989190613501565b9450611f16565b8093505050505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207e8383836001612209565b505050565b50505050565b50505050565b600081036120c9576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050600082826120dd9190612def565b9050817f000000000000000000000000962228f791e745273700024d54e3f9897a3e819861210b91906135c6565b600460008054815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81806001019250827f000000000000000000000000962228f791e745273700024d54e3f9897a3e81980173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361216157826000808282546121fd9190612def565b92505081905550505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612275576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036122af576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122bc6000868387612083565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561248657506124858773ffffffffffffffffffffffffffffffffffffffff16611c46565b5b1561254b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124fb6000888480600101955088611c69565b612531576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361248c57826000541461254657600080fd5b6125b6565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820361254c575b8160008190555050506125cc6000868387612089565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61265f8161262a565b811461266a57600080fd5b50565b60008135905061267c81612656565b92915050565b60006020828403121561269857612697612620565b5b60006126a68482850161266d565b91505092915050565b60008115159050919050565b6126c4816126af565b82525050565b60006020820190506126df60008301846126bb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561271f578082015181840152602081019050612704565b60008484015250505050565b6000601f19601f8301169050919050565b6000612747826126e5565b61275181856126f0565b9350612761818560208601612701565b61276a8161272b565b840191505092915050565b6000602082019050818103600083015261278f818461273c565b905092915050565b6000819050919050565b6127aa81612797565b81146127b557600080fd5b50565b6000813590506127c7816127a1565b92915050565b6000602082840312156127e3576127e2612620565b5b60006127f1848285016127b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612825826127fa565b9050919050565b6128358161281a565b82525050565b6000602082019050612850600083018461282c565b92915050565b61285f8161281a565b811461286a57600080fd5b50565b60008135905061287c81612856565b92915050565b6000806040838503121561289957612898612620565b5b60006128a78582860161286d565b92505060206128b8858286016127b8565b9150509250929050565b6128cb81612797565b82525050565b60006020820190506128e660008301846128c2565b92915050565b60008060006060848603121561290557612904612620565b5b60006129138682870161286d565b93505060206129248682870161286d565b9250506040612935868287016127b8565b9150509250925092565b60006020828403121561295557612954612620565b5b60006129638482850161286d565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129ae8261272b565b810181811067ffffffffffffffff821117156129cd576129cc612976565b5b80604052505050565b60006129e0612616565b90506129ec82826129a5565b919050565b600067ffffffffffffffff821115612a0c57612a0b612976565b5b612a158261272b565b9050602081019050919050565b82818337600083830152505050565b6000612a44612a3f846129f1565b6129d6565b905082815260208101848484011115612a6057612a5f612971565b5b612a6b848285612a22565b509392505050565b600082601f830112612a8857612a8761296c565b5b8135612a98848260208601612a31565b91505092915050565b600060208284031215612ab757612ab6612620565b5b600082013567ffffffffffffffff811115612ad557612ad4612625565b5b612ae184828501612a73565b91505092915050565b612af3816126af565b8114612afe57600080fd5b50565b600081359050612b1081612aea565b92915050565b60008060408385031215612b2d57612b2c612620565b5b6000612b3b8582860161286d565b9250506020612b4c85828601612b01565b9150509250929050565b600067ffffffffffffffff821115612b7157612b70612976565b5b612b7a8261272b565b9050602081019050919050565b6000612b9a612b9584612b56565b6129d6565b905082815260208101848484011115612bb657612bb5612971565b5b612bc1848285612a22565b509392505050565b600082601f830112612bde57612bdd61296c565b5b8135612bee848260208601612b87565b91505092915050565b60008060008060808587031215612c1157612c10612620565b5b6000612c1f8782880161286d565b9450506020612c308782880161286d565b9350506040612c41878288016127b8565b925050606085013567ffffffffffffffff811115612c6257612c61612625565b5b612c6e87828801612bc9565b91505092959194509250565b600063ffffffff82169050919050565b612c9381612c7a565b82525050565b6000602082019050612cae6000830184612c8a565b92915050565b60008060408385031215612ccb57612cca612620565b5b6000612cd98582860161286d565b9250506020612cea8582860161286d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d3b57607f821691505b602082108103612d4e57612d4d612cf4565b5b50919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000612d8a601e836126f0565b9150612d9582612d54565b602082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dfa82612797565b9150612e0583612797565b9250828201905080821115612e1d57612e1c612dc0565b5b92915050565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000612e596008836126f0565b9150612e6482612e23565b602082019050919050565b60006020820190508181036000830152612e8881612e4c565b9050919050565b6000612e9a82612797565b9150612ea583612797565b9250828202612eb381612797565b91508282048414831517612eca57612ec9612dc0565b5b5092915050565b600081905092915050565b50565b6000612eec600083612ed1565b9150612ef782612edc565b600082019050919050565b6000612f0d82612edf565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000612f4d6018836126f0565b9150612f5882612f17565b602082019050919050565b60006020820190508181036000830152612f7c81612f40565b9050919050565b6000612f8e826127fa565b9150612f99836127fa565b9250828203905073ffffffffffffffffffffffffffffffffffffffff811115612fc557612fc4612dc0565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261302d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ff0565b6130378683612ff0565b95508019841693508086168417925050509392505050565b6000819050919050565b600061307461306f61306a84612797565b61304f565b612797565b9050919050565b6000819050919050565b61308e83613059565b6130a261309a8261307b565b848454612ffd565b825550505050565b600090565b6130b76130aa565b6130c2818484613085565b505050565b5b818110156130e6576130db6000826130af565b6001810190506130c8565b5050565b601f82111561312b576130fc81612fcb565b61310584612fe0565b81016020851015613114578190505b61312861312085612fe0565b8301826130c7565b50505b505050565b600082821c905092915050565b600061314e60001984600802613130565b1980831691505092915050565b6000613167838361313d565b9150826002028217905092915050565b613180826126e5565b67ffffffffffffffff81111561319957613198612976565b5b6131a38254612d23565b6131ae8282856130ea565b600060209050601f8311600181146131e157600084156131cf578287015190505b6131d9858261315b565b865550613241565b601f1984166131ef86612fcb565b60005b82811015613217578489015182556001820191506020850194506020810190506131f2565b868310156132345784890151613230601f89168261313d565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b600061325f826126e5565b6132698185613249565b9350613279818560208601612701565b80840191505092915050565b60006132918285613254565b915061329d8284613254565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133056026836126f0565b9150613310826132a9565b604082019050919050565b60006020820190508181036000830152613334816132f8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133716020836126f0565b915061337c8261333b565b602082019050919050565b600060208201905081810360008301526133a081613364565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133ce826133a7565b6133d881856133b2565b93506133e8818560208601612701565b6133f18161272b565b840191505092915050565b6000608082019050613411600083018761282c565b61341e602083018661282c565b61342b60408301856128c2565b818103606083015261343d81846133c3565b905095945050505050565b60008151905061345781612656565b92915050565b60006020828403121561347357613472612620565b5b600061348184828501613448565b91505092915050565b600061349582612797565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134c7576134c6612dc0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061350c82612797565b915061351783612797565b925082613527576135266134d2565b5b828204905092915050565b600061353d82612797565b915061354883612797565b92508282039050818111156135605761355f612dc0565b5b92915050565b600061357182612797565b915061357c83612797565b92508261358c5761358b6134d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006135d1826127fa565b91506135dc836127fa565b9250828201905073ffffffffffffffffffffffffffffffffffffffff81111561360857613607612dc0565b5b9291505056fea2646970667358221220ef22b66f62fc0435815456f9abcfb89cd72783f4e1db918f6685b534a18110d064736f6c63430008110033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b6f7264696e616c20506f6f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f50000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): ordinal Poo
Arg [1] : _symbol (string): OP

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [3] : 6f7264696e616c20506f6f000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4f50000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

48581:1643:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28513:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32354:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33857:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33420:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27762:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49463:376;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34714:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49939:278;;;;;;;;;;;;;:::i;:::-;;34955:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49847:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48631:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32163:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28884:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32523:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49251:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34133:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48721:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35211:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32698:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48775:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34483:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5152:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48821:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28513:305;28615:4;28667:25;28652:40;;;:11;:40;;;;:105;;;;28724:33;28709:48;;;:11;:48;;;;28652:105;:158;;;;28774:36;28798:11;28774:23;:36::i;:::-;28652:158;28632:178;;28513:305;;;:::o;32354:100::-;32408:13;32441:5;32434:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32354:100;:::o;33857:204::-;33925:7;33950:16;33958:7;33950;:16::i;:::-;33945:64;;33975:34;;;;;;;;;;;;;;33945:64;34029:15;:24;34045:7;34029:24;;;;;;;;;;;;;;;;;;;;;34022:31;;33857:204;;;:::o;33420:371::-;33493:13;33509:24;33525:7;33509:15;:24::i;:::-;33493:40;;33554:5;33548:11;;:2;:11;;;33544:48;;33568:24;;;;;;;;;;;;;;33544:48;33625:5;33609:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33635:37;33652:5;33659:12;:10;:12::i;:::-;33635:16;:37::i;:::-;33634:38;33609:63;33605:138;;;33696:35;;;;;;;;;;;;;;33605:138;33755:28;33764:2;33768:7;33777:5;33755:8;:28::i;:::-;33482:309;33420:371;;:::o;27762:303::-;27806:7;28031:15;:13;:15::i;:::-;28016:12;;28000:13;;:28;:46;27993:53;;27762:303;:::o;49463:376::-;48924:10;48911:23;;:9;:23;;;48903:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49624:9:::1;49598:35;;49614:6;49598:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;49594:238;;49684:9;49658:35;;49674:6;49658:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;49650:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49749:6;49738:8;:17;;;;:::i;:::-;49725:9;:30;49721:100;;49776:29;49786:10;49798:6;49776:9;:29::i;:::-;49721:100;49594:238;49463:376:::0;:::o;34714:170::-;34848:28;34858:4;34864:2;34868:7;34848:9;:28::i;:::-;34714:170;;;:::o;49939:278::-;4586:13;:11;:13::i;:::-;49987:18:::1;50008:21;49987:42;;50042:9;50062:10;50042:31;;50086:12;50125:1;:6;;50139:10;50125:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50111:43;;;;;50173:7;50165:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49976:241;;;49939:278::o:0;34955:185::-;35093:39;35110:4;35116:2;35120:7;35093:39;;;;;;;;;;;;:16;:39::i;:::-;34955:185;;;:::o;49847:84::-;4586:13;:11;:13::i;:::-;49909:14:::1;49916:6;49909;:14::i;:::-;49847:84:::0;:::o;48631:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32163:124::-;32227:7;32254:20;32266:7;32254:11;:20::i;:::-;:25;;;32247:32;;32163:124;;;:::o;28884:395::-;28948:7;28989:1;28972:19;;:5;:19;;;28968:60;;29000:28;;;;;;;;;;;;;;28968:60;29076:1;29045:12;:19;29058:5;29045:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:32;;;29041:108;;29109:12;:19;29122:5;29109:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29101:36;;29094:43;;;;29041:108;29201:13;;29190:6;29173:5;29165:32;;;;:::i;:::-;:49;;;29161:90;;29238:1;29231:8;;;;29161:90;29270:1;29263:8;;28884:395;;;;:::o;4700:87::-;4746:7;4773:6;;;;;;;;;;;4766:13;;4700:87;:::o;32523:104::-;32579:13;32612:7;32605:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32523:104;:::o;49251:86::-;4586:13;:11;:13::i;:::-;49326:3:::1;49314:9;:15;;;;;;:::i;:::-;;49251:86:::0;:::o;34133:279::-;34236:12;:10;:12::i;:::-;34224:24;;:8;:24;;;34220:54;;34257:17;;;;;;;;;;;;;;34220:54;34332:8;34287:18;:32;34306:12;:10;:12::i;:::-;34287:32;;;;;;;;;;;;;;;:42;34320:8;34287:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34385:8;34356:48;;34371:12;:10;:12::i;:::-;34356:48;;;34395:8;34356:48;;;;;;:::i;:::-;;;;;;;;34133:279;;:::o;48721:47::-;;;:::o;35211:369::-;35378:28;35388:4;35394:2;35398:7;35378:9;:28::i;:::-;35421:15;:2;:13;;;:15::i;:::-;:76;;;;;35441:56;35472:4;35478:2;35482:7;35491:5;35441:30;:56::i;:::-;35440:57;35421:76;35417:156;;;35521:40;;;;;;;;;;;;;;35417:156;35211:369;;;;:::o;32698:318::-;32771:13;32802:16;32810:7;32802;:16::i;:::-;32797:59;;32827:29;;;;;;;;;;;;;;32797:59;32869:21;32893:10;:8;:10::i;:::-;32869:34;;32946:1;32927:7;32921:21;:26;:87;;;;;;;;;;;;;;;;;32974:7;32983:18;:7;:16;:18::i;:::-;32957:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32921:87;32914:94;;;32698:318;;;:::o;48775:39::-;;;:::o;34483:164::-;34580:4;34604:18;:25;34623:5;34604:25;;;;;;;;;;;;;;;:35;34630:8;34604:35;;;;;;;;;;;;;;;;;;;;;;;;;34597:42;;34483:164;;;;:::o;5152:201::-;4586:13;:11;:13::i;:::-;5261:1:::1;5241:22;;:8;:22;;::::0;5233:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5317:28;5336:8;5317:18;:28::i;:::-;5152:201:::0;:::o;48821:38::-;;;:::o;17100:157::-;17185:4;17224:25;17209:40;;;:11;:40;;;;17202:47;;17100:157;;;:::o;35835:187::-;35892:4;35935:7;35916:15;:13;:15::i;:::-;:26;;:53;;;;;35956:13;;35946:7;:23;35916:53;:98;;;;;35987:11;:20;35999:7;35987:20;;;;;;;;;;;:27;;;;;;;;;;;;35986:28;35916:98;35909:105;;35835:187;;;:::o;3251:98::-;3304:7;3331:10;3324:17;;3251:98;:::o;45565:196::-;45707:2;45680:15;:24;45696:7;45680:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45745:7;45741:2;45725:28;;45734:5;45725:28;;;;;;;;;;;;45565:196;;;:::o;49345:110::-;49419:7;49446:1;49439:8;;49345:110;:::o;36030:104::-;36099:27;36109:2;36113:8;36099:27;;;;;;;;;;;;:9;:27::i;:::-;36030:104;;:::o;41067:2112::-;41182:35;41220:20;41232:7;41220:11;:20::i;:::-;41182:58;;41253:22;41295:13;:18;;;41279:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;41330:50;41347:13;:18;;;41367:12;:10;:12::i;:::-;41330:16;:50::i;:::-;41279:101;:154;;;;41421:12;:10;:12::i;:::-;41397:36;;:20;41409:7;41397:11;:20::i;:::-;:36;;;41279:154;41253:181;;41452:17;41447:66;;41478:35;;;;;;;;;;;;;;41447:66;41550:4;41528:26;;:13;:18;;;:26;;;41524:67;;41563:28;;;;;;;;;;;;;;41524:67;41620:1;41606:16;;:2;:16;;;41602:52;;41631:23;;;;;;;;;;;;;;41602:52;41667:43;41689:4;41695:2;41699:7;41708:1;41667:21;:43::i;:::-;41775:49;41792:1;41796:7;41805:13;:18;;;41775:8;:49::i;:::-;42150:1;42120:12;:18;42133:4;42120:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42194:1;42166:12;:16;42179:2;42166:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42240:2;42212:11;:20;42224:7;42212:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;42302:15;42257:11;:20;42269:7;42257:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;42570:19;42602:1;42592:7;:11;42570:33;;42663:1;42622:43;;:11;:24;42634:11;42622:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;42618:445;;42847:13;;42833:11;:27;42829:219;;;42917:13;:18;;;42885:11;:24;42897:11;42885:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;43000:13;:28;;;42958:11;:24;42970:11;42958:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;42829:219;42618:445;42095:979;43110:7;43106:2;43091:27;;43100:4;43091:27;;;;;;;;;;;;43129:42;43150:4;43156:2;43160:7;43169:1;43129:20;:42::i;:::-;41171:2008;;41067:2112;;;:::o;4865:132::-;4940:12;:10;:12::i;:::-;4929:23;;:7;:5;:7::i;:::-;:23;;;4921:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4865:132::o;36668:113::-;36750:19;36760:8;36750:9;:19::i;:::-;36668:113;:::o;30814:1287::-;30875:21;;:::i;:::-;30909:12;30924:7;30909:22;;30992:4;30973:15;:13;:15::i;:::-;:23;;:47;;;;;31007:13;;31000:4;:20;30973:47;30969:1065;;;31041:31;31075:11;:17;31087:4;31075:17;;;;;;;;;;;31041:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31116:9;:16;;;31111:904;;31187:1;31161:28;;:9;:14;;;:28;;;31157:101;;31225:9;31218:16;;;;;;31157:101;31562:13;31578:1;31562:17;;31602:270;31631:6;;;;;;;;31676:11;:17;31688:4;31676:17;;;;;;;;;;;31664:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31750:1;31724:28;;:9;:14;;;:28;;;31720:109;;31792:9;31785:16;;;;;;;31720:109;31869:1;31859:7;;;;;;;:11;31602:270;;31947:7;31929:6;31921:34;31896:9;:14;;:60;;;;;;;;;;;31986:9;31979:16;;;;;;;31111:904;31022:1012;30969:1065;32062:31;;;;;;;;;;;;;;30814:1287;;;;:::o;6944:326::-;7004:4;7261:1;7239:7;:19;;;:23;7232:30;;6944:326;;;:::o;46253:667::-;46416:4;46453:2;46437:36;;;46474:12;:10;:12::i;:::-;46488:4;46494:7;46503:5;46437:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46433:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46688:1;46671:6;:13;:18;46667:235;;46717:40;;;;;;;;;;;;;;46667:235;46860:6;46854:13;46845:6;46841:2;46837:15;46830:38;46433:480;46566:45;;;46556:55;;;:6;:55;;;;46549:62;;;46253:667;;;;;;:::o;49132:111::-;49193:13;49226:9;49219:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49132:111;:::o;505:723::-;561:13;791:1;782:5;:10;778:53;;809:10;;;;;;;;;;;;;;;;;;;;;778:53;841:12;856:5;841:20;;872:14;897:78;912:1;904:4;:9;897:78;;930:8;;;;;:::i;:::-;;;;961:2;953:10;;;;;:::i;:::-;;;897:78;;;985:19;1017:6;1007:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:39;;1035:154;1051:1;1042:5;:10;1035:154;;1079:1;1069:11;;;;;:::i;:::-;;;1146:2;1138:5;:10;;;;:::i;:::-;1125:2;:24;;;;:::i;:::-;1112:39;;1095:6;1102;1095:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1175:2;1166:11;;;;;:::i;:::-;;;1035:154;;;1213:6;1199:21;;;;;505:723;;;;:::o;5513:191::-;5587:16;5606:6;;;;;;;;;;;5587:25;;5632:8;5623:6;;:17;;;;;;;;;;;;;;;;;;5687:8;5656:40;;5677:8;5656:40;;;;;;;;;;;;5576:128;5513:191;:::o;36497:163::-;36620:32;36626:2;36630:8;36640:5;36647:4;36620:5;:32::i;:::-;36497:163;;;:::o;47568:159::-;;;;;:::o;48386:158::-;;;;;:::o;40206:607::-;40307:1;40295:8;:13;40291:44;;40317:18;;;;;;;;;;;;;;40291:44;40352:20;40375:13;;40352:36;;40403:11;40432:8;40417:12;:23;;;;:::i;:::-;40403:37;;40523:12;40505:6;40497:39;;;;:::i;:::-;40455:11;:26;40467:13;;40455:26;;;;;;;;;;;:31;;;:82;;;;;;;;;;;;;;;;;;40583:166;40685:14;;;;;;40669:12;40651:6;40643:39;40614:86;;40631:1;40614:86;;;;;;;;;;;;40744:3;40728:12;:19;40583:166;;40795:8;40778:13;;:25;;;;;;;:::i;:::-;;;;;;;;40276:537;;40206:607;:::o;37041:1775::-;37180:20;37203:13;;37180:36;;37245:1;37231:16;;:2;:16;;;37227:48;;37256:19;;;;;;;;;;;;;;37227:48;37302:1;37290:8;:13;37286:44;;37312:18;;;;;;;;;;;;;;37286:44;37343:61;37373:1;37377:2;37381:12;37395:8;37343:21;:61::i;:::-;37716:8;37681:12;:16;37694:2;37681:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37780:8;37740:12;:16;37753:2;37740:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37839:2;37806:11;:25;37818:12;37806:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37906:15;37856:11;:25;37868:12;37856:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37939:20;37962:12;37939:35;;37989:11;38018:8;38003:12;:23;37989:37;;38047:4;:23;;;;;38055:15;:2;:13;;;:15::i;:::-;38047:23;38043:641;;;38091:314;38147:12;38143:2;38122:38;;38139:1;38122:38;;;;;;;;;;;;38188:69;38227:1;38231:2;38235:14;;;;;;38251:5;38188:30;:69::i;:::-;38183:174;;38293:40;;;;;;;;;;;;;;38183:174;38400:3;38384:12;:19;38091:314;;38486:12;38469:13;;:29;38465:43;;38500:8;;;38465:43;38043:641;;;38549:120;38605:14;;;;;;38601:2;38580:40;;38597:1;38580:40;;;;;;;;;;;;38664:3;38648:12;:19;38549:120;;38043:641;38714:12;38698:13;:28;;;;37656:1082;;38748:60;38777:1;38781:2;38785:12;38799:8;38748:20;:60::i;:::-;37169:1647;37041:1775;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:93::-;11647:7;11687:10;11680:5;11676:22;11665:33;;11611:93;;;:::o;11710:115::-;11795:23;11812:5;11795:23;:::i;:::-;11790:3;11783:36;11710:115;;:::o;11831:218::-;11922:4;11960:2;11949:9;11945:18;11937:26;;11973:69;12039:1;12028:9;12024:17;12015:6;11973:69;:::i;:::-;11831:218;;;;:::o;12055:474::-;12123:6;12131;12180:2;12168:9;12159:7;12155:23;12151:32;12148:119;;;12186:79;;:::i;:::-;12148:119;12306:1;12331:53;12376:7;12367:6;12356:9;12352:22;12331:53;:::i;:::-;12321:63;;12277:117;12433:2;12459:53;12504:7;12495:6;12484:9;12480:22;12459:53;:::i;:::-;12449:63;;12404:118;12055:474;;;;;:::o;12535:180::-;12583:77;12580:1;12573:88;12680:4;12677:1;12670:15;12704:4;12701:1;12694:15;12721:320;12765:6;12802:1;12796:4;12792:12;12782:22;;12849:1;12843:4;12839:12;12870:18;12860:81;;12926:4;12918:6;12914:17;12904:27;;12860:81;12988:2;12980:6;12977:14;12957:18;12954:38;12951:84;;13007:18;;:::i;:::-;12951:84;12772:269;12721:320;;;:::o;13047:180::-;13187:32;13183:1;13175:6;13171:14;13164:56;13047:180;:::o;13233:366::-;13375:3;13396:67;13460:2;13455:3;13396:67;:::i;:::-;13389:74;;13472:93;13561:3;13472:93;:::i;:::-;13590:2;13585:3;13581:12;13574:19;;13233:366;;;:::o;13605:419::-;13771:4;13809:2;13798:9;13794:18;13786:26;;13858:9;13852:4;13848:20;13844:1;13833:9;13829:17;13822:47;13886:131;14012:4;13886:131;:::i;:::-;13878:139;;13605:419;;;:::o;14030:180::-;14078:77;14075:1;14068:88;14175:4;14172:1;14165:15;14199:4;14196:1;14189:15;14216:191;14256:3;14275:20;14293:1;14275:20;:::i;:::-;14270:25;;14309:20;14327:1;14309:20;:::i;:::-;14304:25;;14352:1;14349;14345:9;14338:16;;14373:3;14370:1;14367:10;14364:36;;;14380:18;;:::i;:::-;14364:36;14216:191;;;;:::o;14413:158::-;14553:10;14549:1;14541:6;14537:14;14530:34;14413:158;:::o;14577:365::-;14719:3;14740:66;14804:1;14799:3;14740:66;:::i;:::-;14733:73;;14815:93;14904:3;14815:93;:::i;:::-;14933:2;14928:3;14924:12;14917:19;;14577:365;;;:::o;14948:419::-;15114:4;15152:2;15141:9;15137:18;15129:26;;15201:9;15195:4;15191:20;15187:1;15176:9;15172:17;15165:47;15229:131;15355:4;15229:131;:::i;:::-;15221:139;;14948:419;;;:::o;15373:410::-;15413:7;15436:20;15454:1;15436:20;:::i;:::-;15431:25;;15470:20;15488:1;15470:20;:::i;:::-;15465:25;;15525:1;15522;15518:9;15547:30;15565:11;15547:30;:::i;:::-;15536:41;;15726:1;15717:7;15713:15;15710:1;15707:22;15687:1;15680:9;15660:83;15637:139;;15756:18;;:::i;:::-;15637:139;15421:362;15373:410;;;;:::o;15789:147::-;15890:11;15927:3;15912:18;;15789:147;;;;:::o;15942:114::-;;:::o;16062:398::-;16221:3;16242:83;16323:1;16318:3;16242:83;:::i;:::-;16235:90;;16334:93;16423:3;16334:93;:::i;:::-;16452:1;16447:3;16443:11;16436:18;;16062:398;;;:::o;16466:379::-;16650:3;16672:147;16815:3;16672:147;:::i;:::-;16665:154;;16836:3;16829:10;;16466:379;;;:::o;16851:174::-;16991:26;16987:1;16979:6;16975:14;16968:50;16851:174;:::o;17031:366::-;17173:3;17194:67;17258:2;17253:3;17194:67;:::i;:::-;17187:74;;17270:93;17359:3;17270:93;:::i;:::-;17388:2;17383:3;17379:12;17372:19;;17031:366;;;:::o;17403:419::-;17569:4;17607:2;17596:9;17592:18;17584:26;;17656:9;17650:4;17646:20;17642:1;17631:9;17627:17;17620:47;17684:131;17810:4;17684:131;:::i;:::-;17676:139;;17403:419;;;:::o;17828:235::-;17868:4;17888:20;17906:1;17888:20;:::i;:::-;17883:25;;17922:20;17940:1;17922:20;:::i;:::-;17917:25;;17966:1;17963;17959:9;17951:17;;17990:42;17984:4;17981:52;17978:78;;;18036:18;;:::i;:::-;17978:78;17828:235;;;;:::o;18069:141::-;18118:4;18141:3;18133:11;;18164:3;18161:1;18154:14;18198:4;18195:1;18185:18;18177:26;;18069:141;;;:::o;18216:93::-;18253:6;18300:2;18295;18288:5;18284:14;18280:23;18270:33;;18216:93;;;:::o;18315:107::-;18359:8;18409:5;18403:4;18399:16;18378:37;;18315:107;;;;:::o;18428:393::-;18497:6;18547:1;18535:10;18531:18;18570:97;18600:66;18589:9;18570:97;:::i;:::-;18688:39;18718:8;18707:9;18688:39;:::i;:::-;18676:51;;18760:4;18756:9;18749:5;18745:21;18736:30;;18809:4;18799:8;18795:19;18788:5;18785:30;18775:40;;18504:317;;18428:393;;;;;:::o;18827:60::-;18855:3;18876:5;18869:12;;18827:60;;;:::o;18893:142::-;18943:9;18976:53;18994:34;19003:24;19021:5;19003:24;:::i;:::-;18994:34;:::i;:::-;18976:53;:::i;:::-;18963:66;;18893:142;;;:::o;19041:75::-;19084:3;19105:5;19098:12;;19041:75;;;:::o;19122:269::-;19232:39;19263:7;19232:39;:::i;:::-;19293:91;19342:41;19366:16;19342:41;:::i;:::-;19334:6;19327:4;19321:11;19293:91;:::i;:::-;19287:4;19280:105;19198:193;19122:269;;;:::o;19397:73::-;19442:3;19397:73;:::o;19476:189::-;19553:32;;:::i;:::-;19594:65;19652:6;19644;19638:4;19594:65;:::i;:::-;19529:136;19476:189;;:::o;19671:186::-;19731:120;19748:3;19741:5;19738:14;19731:120;;;19802:39;19839:1;19832:5;19802:39;:::i;:::-;19775:1;19768:5;19764:13;19755:22;;19731:120;;;19671:186;;:::o;19863:543::-;19964:2;19959:3;19956:11;19953:446;;;19998:38;20030:5;19998:38;:::i;:::-;20082:29;20100:10;20082:29;:::i;:::-;20072:8;20068:44;20265:2;20253:10;20250:18;20247:49;;;20286:8;20271:23;;20247:49;20309:80;20365:22;20383:3;20365:22;:::i;:::-;20355:8;20351:37;20338:11;20309:80;:::i;:::-;19968:431;;19953:446;19863:543;;;:::o;20412:117::-;20466:8;20516:5;20510:4;20506:16;20485:37;;20412:117;;;;:::o;20535:169::-;20579:6;20612:51;20660:1;20656:6;20648:5;20645:1;20641:13;20612:51;:::i;:::-;20608:56;20693:4;20687;20683:15;20673:25;;20586:118;20535:169;;;;:::o;20709:295::-;20785:4;20931:29;20956:3;20950:4;20931:29;:::i;:::-;20923:37;;20993:3;20990:1;20986:11;20980:4;20977:21;20969:29;;20709:295;;;;:::o;21009:1395::-;21126:37;21159:3;21126:37;:::i;:::-;21228:18;21220:6;21217:30;21214:56;;;21250:18;;:::i;:::-;21214:56;21294:38;21326:4;21320:11;21294:38;:::i;:::-;21379:67;21439:6;21431;21425:4;21379:67;:::i;:::-;21473:1;21497:4;21484:17;;21529:2;21521:6;21518:14;21546:1;21541:618;;;;22203:1;22220:6;22217:77;;;22269:9;22264:3;22260:19;22254:26;22245:35;;22217:77;22320:67;22380:6;22373:5;22320:67;:::i;:::-;22314:4;22307:81;22176:222;21511:887;;21541:618;21593:4;21589:9;21581:6;21577:22;21627:37;21659:4;21627:37;:::i;:::-;21686:1;21700:208;21714:7;21711:1;21708:14;21700:208;;;21793:9;21788:3;21784:19;21778:26;21770:6;21763:42;21844:1;21836:6;21832:14;21822:24;;21891:2;21880:9;21876:18;21863:31;;21737:4;21734:1;21730:12;21725:17;;21700:208;;;21936:6;21927:7;21924:19;21921:179;;;21994:9;21989:3;21985:19;21979:26;22037:48;22079:4;22071:6;22067:17;22056:9;22037:48;:::i;:::-;22029:6;22022:64;21944:156;21921:179;22146:1;22142;22134:6;22130:14;22126:22;22120:4;22113:36;21548:611;;;21511:887;;21101:1303;;;21009:1395;;:::o;22410:148::-;22512:11;22549:3;22534:18;;22410:148;;;;:::o;22564:390::-;22670:3;22698:39;22731:5;22698:39;:::i;:::-;22753:89;22835:6;22830:3;22753:89;:::i;:::-;22746:96;;22851:65;22909:6;22904:3;22897:4;22890:5;22886:16;22851:65;:::i;:::-;22941:6;22936:3;22932:16;22925:23;;22674:280;22564:390;;;;:::o;22960:435::-;23140:3;23162:95;23253:3;23244:6;23162:95;:::i;:::-;23155:102;;23274:95;23365:3;23356:6;23274:95;:::i;:::-;23267:102;;23386:3;23379:10;;22960:435;;;;;:::o;23401:225::-;23541:34;23537:1;23529:6;23525:14;23518:58;23610:8;23605:2;23597:6;23593:15;23586:33;23401:225;:::o;23632:366::-;23774:3;23795:67;23859:2;23854:3;23795:67;:::i;:::-;23788:74;;23871:93;23960:3;23871:93;:::i;:::-;23989:2;23984:3;23980:12;23973:19;;23632:366;;;:::o;24004:419::-;24170:4;24208:2;24197:9;24193:18;24185:26;;24257:9;24251:4;24247:20;24243:1;24232:9;24228:17;24221:47;24285:131;24411:4;24285:131;:::i;:::-;24277:139;;24004:419;;;:::o;24429:182::-;24569:34;24565:1;24557:6;24553:14;24546:58;24429:182;:::o;24617:366::-;24759:3;24780:67;24844:2;24839:3;24780:67;:::i;:::-;24773:74;;24856:93;24945:3;24856:93;:::i;:::-;24974:2;24969:3;24965:12;24958:19;;24617:366;;;:::o;24989:419::-;25155:4;25193:2;25182:9;25178:18;25170:26;;25242:9;25236:4;25232:20;25228:1;25217:9;25213:17;25206:47;25270:131;25396:4;25270:131;:::i;:::-;25262:139;;24989:419;;;:::o;25414:98::-;25465:6;25499:5;25493:12;25483:22;;25414:98;;;:::o;25518:168::-;25601:11;25635:6;25630:3;25623:19;25675:4;25670:3;25666:14;25651:29;;25518:168;;;;:::o;25692:373::-;25778:3;25806:38;25838:5;25806:38;:::i;:::-;25860:70;25923:6;25918:3;25860:70;:::i;:::-;25853:77;;25939:65;25997:6;25992:3;25985:4;25978:5;25974:16;25939:65;:::i;:::-;26029:29;26051:6;26029:29;:::i;:::-;26024:3;26020:39;26013:46;;25782:283;25692:373;;;;:::o;26071:640::-;26266:4;26304:3;26293:9;26289:19;26281:27;;26318:71;26386:1;26375:9;26371:17;26362:6;26318:71;:::i;:::-;26399:72;26467:2;26456:9;26452:18;26443:6;26399:72;:::i;:::-;26481;26549:2;26538:9;26534:18;26525:6;26481:72;:::i;:::-;26600:9;26594:4;26590:20;26585:2;26574:9;26570:18;26563:48;26628:76;26699:4;26690:6;26628:76;:::i;:::-;26620:84;;26071:640;;;;;;;:::o;26717:141::-;26773:5;26804:6;26798:13;26789:22;;26820:32;26846:5;26820:32;:::i;:::-;26717:141;;;;:::o;26864:349::-;26933:6;26982:2;26970:9;26961:7;26957:23;26953:32;26950:119;;;26988:79;;:::i;:::-;26950:119;27108:1;27133:63;27188:7;27179:6;27168:9;27164:22;27133:63;:::i;:::-;27123:73;;27079:127;26864:349;;;;:::o;27219:233::-;27258:3;27281:24;27299:5;27281:24;:::i;:::-;27272:33;;27327:66;27320:5;27317:77;27314:103;;27397:18;;:::i;:::-;27314:103;27444:1;27437:5;27433:13;27426:20;;27219:233;;;:::o;27458:180::-;27506:77;27503:1;27496:88;27603:4;27600:1;27593:15;27627:4;27624:1;27617:15;27644:185;27684:1;27701:20;27719:1;27701:20;:::i;:::-;27696:25;;27735:20;27753:1;27735:20;:::i;:::-;27730:25;;27774:1;27764:35;;27779:18;;:::i;:::-;27764:35;27821:1;27818;27814:9;27809:14;;27644:185;;;;:::o;27835:194::-;27875:4;27895:20;27913:1;27895:20;:::i;:::-;27890:25;;27929:20;27947:1;27929:20;:::i;:::-;27924:25;;27973:1;27970;27966:9;27958:17;;27997:1;27991:4;27988:11;27985:37;;;28002:18;;:::i;:::-;27985:37;27835:194;;;;:::o;28035:176::-;28067:1;28084:20;28102:1;28084:20;:::i;:::-;28079:25;;28118:20;28136:1;28118:20;:::i;:::-;28113:25;;28157:1;28147:35;;28162:18;;:::i;:::-;28147:35;28203:1;28200;28196:9;28191:14;;28035:176;;;;:::o;28217:180::-;28265:77;28262:1;28255:88;28362:4;28359:1;28352:15;28386:4;28383:1;28376:15;28403:232;28443:3;28462:20;28480:1;28462:20;:::i;:::-;28457:25;;28496:20;28514:1;28496:20;:::i;:::-;28491:25;;28539:1;28536;28532:9;28525:16;;28562:42;28557:3;28554:51;28551:77;;;28608:18;;:::i;:::-;28551:77;28403:232;;;;:::o

Swarm Source

ipfs://ef22b66f62fc0435815456f9abcfb89cd72783f4e1db918f6685b534a18110d0
Loading...
Loading
Loading...
Loading
[ 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.