ETH Price: $2,493.17 (-0.44%)
Gas: 3.44 Gwei

Token

Liquid Artifacts ()
 

Overview

Max Total Supply

8,739

Holders

1,222

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xcaf6274bb07920246c851ca28ea299a14cc54d24
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:
LiquidArtifacts

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-02
*/

// SPDX-License-Identifier: MIT
/*
   .____    .__             .__    .___
   |    |   |__| ________ __|__| __| _/
   |    |   |  |/ ____/  |  \  |/ __ |
   |    |___|  < <_|  |  |  /  / /_/ |
   |_______ \__|\__   |____/|__\____ |
           \/      |__|             \/
     _____          __  .__  _____               __
    /  _  \________/  |_|__|/ ____\____    _____/  |_  ______
   /  /_\  \_  __ \   __\  \   __\\__  \ _/ ___\   __\/  ___/
  /    |    \  | \/|  | |  ||  |   / __ \\  \___|  |  \___ \
  \____|__  /__|   |__| |__||__|  (____  /\___  >__| /____  >
          \/                           \/     \/          \/

   Standing on the shoulders of giants -- Yuga Labs & MAYC
    * Written by Aleph 0ne for the ApeLiquid community *

*/

// File @openzeppelin/contracts/utils/introspection/[email protected]
// 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/token/ERC1155/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/utils/[email protected]
// 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/utils/[email protected]
// 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/utils/introspection/[email protected]
// 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/ERC1155/[email protected]

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

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

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

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

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

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

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

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

        return array;
    }
}

// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

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/access/[email protected]
// 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 Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(
                    supply >= amount,
                    "ERC1155: burn amount exceeds totalSupply"
                );
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

pragma solidity ^0.8.6;

contract LiquidArtifacts is ERC1155, Ownable {
    using Strings for uint256;

    address private evolutionContract; // = 0x0B0237aD59e1BbCb611fdf0c9Fa07350C3f41e87;
    string private baseURI = "https://apeliquid.mypinata.cloud/ipfs/QmQfjT3TGcaBjWTM5kPfKiwWQCaiqJGw1aKft63AkNd4fn/";
    string public name = "Liquid Artifacts";

    mapping(uint256 => bool) public validArtifactTypes;

    event SetBaseURI(string indexed _baseURI);

    constructor(string memory _baseURI) ERC1155(_baseURI) {
        validArtifactTypes[1] = true;
        validArtifactTypes[2] = true;
        validArtifactTypes[3] = true;
        validArtifactTypes[4] = true;
        validArtifactTypes[5] = true;
        validArtifactTypes[7] = true;
        validArtifactTypes[8] = true;
        validArtifactTypes[9] = true;
        validArtifactTypes[10] = true;
        validArtifactTypes[42] = true;  // Legendary
        emit SetBaseURI(baseURI);
    }

    /**
     * @notice Airdrop a token to multiple addresses at once.
     * No strict supply is set in the contract. All methods are ownerOnly,
     * it is up to the owner to control the supply by not minting
     * past their desired number for each token.
     * @dev Airdrop one token to each address in the calldata list,
     * setting the supply to the length of the list + previously minted (airdropped) supply. Add an addess once per
     * token you would like to send.
     * @param _dropNumber The tokenID to send
     * @param _list address[] list of wallets to send 1 token to, each.
     */
    function airdrop(uint256 _dropNumber, address[] calldata _list)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < _list.length; i++) {
            _mint(_list[i], _dropNumber, 1, "");
        }
    }

    /**
     * @notice Sends multiple tokens to a single address
     * @param _tokenID The id of the token to send
     * @param _address The address to receive the tokens
     * @param _quantity How many to send she receiver
     */
    function batchMint(
        uint256 _tokenID,
        address _address,
        uint256 _quantity
    ) external onlyOwner {
        _mint(_address, _tokenID, _quantity, "");
    }

    function setName(string memory _name) public onlyOwner {
        name = _name;
    }

    function setEvolutionContractAddress(address evolutionContractAddress)
        external
        onlyOwner
    {
        evolutionContract = evolutionContractAddress;
    }

    // Burn for legendary
    function burnforLegendary(uint256[] memory tokenIds, uint256[] memory amounts, address tokenOwner)
        external
    {
        _burnBatch(tokenOwner, tokenIds, amounts);
        //_mint(_msgSender(), 42, 1, "Burn For Legendary");
        _mint(tokenOwner, 42, 1, "Burn For Legendary");
    }

    function burnArtifacts(address tokenOwner, uint256 tokenId, uint256 totalToBurn) external {
        require(
            msg.sender == evolutionContract,
            "Invalid Evolution Contract"
        );
        _burn(tokenOwner, tokenId, totalToBurn);
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(baseURI);
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(
            validArtifactTypes[typeId],
            "URI requested for invalid artifact type"
        );
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_baseURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"_dropNumber","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalToBurn","type":"uint256"}],"name":"burnArtifacts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"burnforLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"evolutionContractAddress","type":"address"}],"name":"setEvolutionContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validArtifactTypes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405260405180608001604052806055815260200162004609605591396005908051906020019062000035929190620003e2565b506040518060400160405280601081526020017f4c697175696420417274696661637473000000000000000000000000000000008152506006908051906020019062000083929190620003e2565b503480156200009157600080fd5b506040516200465e3803806200465e8339818101604052810190620000b791906200062f565b80620000c981620002f860201b60201c565b50620000ea620000de6200031460201b60201c565b6200031c60201b60201c565b6001600760006001815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006002815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006003815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006004815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006005815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006007815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006008815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006009815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602a815260200190815260200160002060006101000a81548160ff0219169083151502179055506005604051620002bd919062000790565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250620007a9565b806002908051906020019062000310929190620003e2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003f090620006af565b90600052602060002090601f01602090048101928262000414576000855562000460565b82601f106200042f57805160ff191683800117855562000460565b8280016001018555821562000460579182015b828111156200045f57825182559160200191906001019062000442565b5b5090506200046f919062000473565b5090565b5b808211156200048e57600081600090555060010162000474565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004fb82620004b0565b810181811067ffffffffffffffff821117156200051d576200051c620004c1565b5b80604052505050565b60006200053262000492565b9050620005408282620004f0565b919050565b600067ffffffffffffffff821115620005635762000562620004c1565b5b6200056e82620004b0565b9050602081019050919050565b60005b838110156200059b5780820151818401526020810190506200057e565b83811115620005ab576000848401525b50505050565b6000620005c8620005c28462000545565b62000526565b905082815260208101848484011115620005e757620005e6620004ab565b5b620005f48482856200057b565b509392505050565b600082601f830112620006145762000613620004a6565b5b815162000626848260208601620005b1565b91505092915050565b6000602082840312156200064857620006476200049c565b5b600082015167ffffffffffffffff811115620006695762000668620004a1565b5b6200067784828501620005fc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006c857607f821691505b60208210811415620006df57620006de62000680565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546200071481620006af565b620007208186620006e5565b945060018216600081146200073e5760018114620007505762000787565b60ff1983168652818601935062000787565b6200075b85620006f0565b60005b838110156200077f578154818901526001820191506020810190506200075e565b838801955050505b50505092915050565b60006200079e828462000705565b915081905092915050565b613e5080620007b96000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80638da5cb5b116100ad578063c28329f111610071578063c28329f114610316578063c47f002714610346578063e985e9c514610362578063f242432a14610392578063f2fde38b146103ae5761012b565b80638da5cb5b1461028857806393c9095f146102a65780639c4af48b146102c2578063a22cb465146102de578063bdf7a8e6146102fa5761012b565b806334de1fdf116100f457806334de1fdf146101fa5780633567ed3b1461021657806339f7e37f146102325780634e1273f41461024e578063715018a61461027e5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae5780632eb2c2d6146101de575b600080fd5b61014a60048036038101906101459190612436565b6103ca565b6040516101579190612485565b60405180910390f35b61017a600480360381019061017591906124f8565b610493565b6040516101879190612540565b60405180910390f35b610198610575565b6040516101a591906125f4565b60405180910390f35b6101c860048036038101906101c39190612616565b610603565b6040516101d591906125f4565b60405180910390f35b6101f860048036038101906101f39190612840565b61073e565b005b610214600480360381019061020f919061290f565b6107df565b005b610230600480360381019061022b9190612962565b61087f565b005b61024c60048036038101906102479190612a56565b6108a7565b005b61026860048036038101906102639190612b62565b61090c565b6040516102759190612c98565b60405180910390f35b610286610a25565b005b610290610a39565b60405161029d9190612cc9565b60405180910390f35b6102c060048036038101906102bb9190612ce4565b610a63565b005b6102dc60048036038101906102d79190612d11565b610aaf565b005b6102f860048036038101906102f39190612dc8565b610b02565b005b610314600480360381019061030f9190612e63565b610b18565b005b610330600480360381019061032b9190612616565b610b8a565b60405161033d9190612540565b60405180910390f35b610360600480360381019061035b9190612a56565b610baa565b005b61037c60048036038101906103779190612ec3565b610bcc565b6040516103899190612540565b60405180910390f35b6103ac60048036038101906103a79190612f03565b610c60565b005b6103c860048036038101906103c39190612ce4565b610d01565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104329061300c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056e575061056d82610d85565b5b9050919050565b600680546105829061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae9061305b565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b505050505081565b60606007600083815260200190815260200160002060009054906101000a900460ff16610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c906130ff565b60405180910390fd5b6000600580546106749061305b565b90501161070b57600580546106889061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b49061305b565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050610737565b600561071683610def565b6040516020016107279291906131ef565b6040516020818303038152906040525b9050919050565b610746610f50565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078c575061078b85610786610f50565b610bcc565b5b6107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290613285565b60405180910390fd5b6107d88585858585610f58565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610866906132f1565b60405180910390fd5b61087a83838361127a565b505050565b6108876114c1565b6108a28284836040518060200160405280600081525061153f565b505050565b6108af6114c1565b80600590805190602001906108c59291906122eb565b5060056040516108d59190613311565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b60608151835114610952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109499061339a565b60405180910390fd5b6000835167ffffffffffffffff81111561096f5761096e612648565b5b60405190808252806020026020018201604052801561099d5781602001602082028036833780820191505090505b50905060005b8451811015610a1a576109ea8582815181106109c2576109c16133ba565b5b60200260200101518583815181106109dd576109dc6133ba565b5b60200260200101516103ca565b8282815181106109fd576109fc6133ba565b5b60200260200101818152505080610a1390613418565b90506109a3565b508091505092915050565b610a2d6114c1565b610a3760006116f0565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a6b6114c1565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610aba8184846117b6565b610afd81602a60016040518060400160405280601281526020017f4275726e20466f72204c6567656e64617279000000000000000000000000000081525061153f565b505050565b610b14610b0d610f50565b8383611a85565b5050565b610b206114c1565b60005b82829050811015610b8457610b71838383818110610b4457610b436133ba565b5b9050602002016020810190610b599190612ce4565b8560016040518060200160405280600081525061153f565b8080610b7c90613418565b915050610b23565b50505050565b60076020528060005260406000206000915054906101000a900460ff1681565b610bb26114c1565b8060069080519060200190610bc89291906122eb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c68610f50565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cae5750610cad85610ca8610f50565b610bcc565b5b610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613285565b60405180910390fd5b610cfa8585858585611bf2565b5050505050565b610d096114c1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906134d3565b60405180910390fd5b610d82816116f0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610e37576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f4b565b600082905060005b60008214610e69578080610e5290613418565b915050600a82610e629190613522565b9150610e3f565b60008167ffffffffffffffff811115610e8557610e84612648565b5b6040519080825280601f01601f191660200182016040528015610eb75781602001600182028036833780820191505090505b5090505b60008514610f4457600182610ed09190613553565b9150600a85610edf9190613587565b6030610eeb91906135b8565b60f81b818381518110610f0157610f006133ba565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610f3d9190613522565b9450610ebb565b8093505050505b919050565b600033905090565b8151835114610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613680565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390613712565b60405180910390fd5b6000611016610f50565b9050611026818787878787611e8e565b60005b84518110156111d7576000858281518110611047576110466133ba565b5b602002602001015190506000858381518110611066576110656133ba565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe906137a4565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111bc91906135b8565b92505081905550505050806111d090613418565b9050611029565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161124e9291906137c4565b60405180910390a4611264818787878787611e96565b611272818787878787611e9e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e19061386d565b60405180910390fd5b60006112f4610f50565b9050600061130184612076565b9050600061130e84612076565b905061132e83876000858560405180602001604052806000815250611e8e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906138ff565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161149292919061391f565b60405180910390a46114b884886000868660405180602001604052806000815250611e96565b50505050505050565b6114c9610f50565b73ffffffffffffffffffffffffffffffffffffffff166114e7610a39565b73ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613994565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a26565b60405180910390fd5b60006115b9610f50565b905060006115c685612076565b905060006115d385612076565b90506115e483600089858589611e8e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164391906135b8565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516116c192919061391f565b60405180910390a46116d883600089858589611e96565b6116e7836000898989896120f0565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d9061386d565b60405180910390fd5b805182511461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613680565b60405180910390fd5b6000611874610f50565b905061189481856000868660405180602001604052806000815250611e8e565b60005b83518110156119e15760008482815181106118b5576118b46133ba565b5b6020026020010151905060008483815181106118d4576118d36133ba565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906138ff565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806119d990613418565b915050611897565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a599291906137c4565b60405180910390a4611a7f81856000868660405180602001604052806000815250611e96565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613ab8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be59190612540565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990613712565b60405180910390fd5b6000611c6c610f50565b90506000611c7985612076565b90506000611c8685612076565b9050611c96838989858589611e8e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906137a4565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de291906135b8565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e5f92919061391f565b60405180910390a4611e75848a8a86868a611e96565b611e83848a8a8a8a8a6120f0565b505050505050505050565b505050505050565b505050505050565b611ebd8473ffffffffffffffffffffffffffffffffffffffff166122c8565b1561206e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f03959493929190613b2d565b6020604051808303816000875af1925050508015611f3f57506040513d601f19601f82011682018060405250810190611f3c9190613baa565b60015b611fe557611f4b613be4565b806308c379a01415611fa85750611f60613c06565b80611f6b5750611faa565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f91906125f4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc90613d0e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613da0565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561209557612094612648565b5b6040519080825280602002602001820160405280156120c35781602001602082028036833780820191505090505b50905082816000815181106120db576120da6133ba565b5b60200260200101818152505080915050919050565b61210f8473ffffffffffffffffffffffffffffffffffffffff166122c8565b156122c0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612155959493929190613dc0565b6020604051808303816000875af192505050801561219157506040513d601f19601f8201168201806040525081019061218e9190613baa565b60015b6122375761219d613be4565b806308c379a014156121fa57506121b2613c06565b806121bd57506121fc565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f191906125f4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d0e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613da0565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122f79061305b565b90600052602060002090601f0160209004810192826123195760008555612360565b82601f1061233257805160ff1916838001178555612360565b82800160010185558215612360579182015b8281111561235f578251825591602001919060010190612344565b5b50905061236d9190612371565b5090565b5b8082111561238a576000816000905550600101612372565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123cd826123a2565b9050919050565b6123dd816123c2565b81146123e857600080fd5b50565b6000813590506123fa816123d4565b92915050565b6000819050919050565b61241381612400565b811461241e57600080fd5b50565b6000813590506124308161240a565b92915050565b6000806040838503121561244d5761244c612398565b5b600061245b858286016123eb565b925050602061246c85828601612421565b9150509250929050565b61247f81612400565b82525050565b600060208201905061249a6000830184612476565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d5816124a0565b81146124e057600080fd5b50565b6000813590506124f2816124cc565b92915050565b60006020828403121561250e5761250d612398565b5b600061251c848285016124e3565b91505092915050565b60008115159050919050565b61253a81612525565b82525050565b60006020820190506125556000830184612531565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561259557808201518184015260208101905061257a565b838111156125a4576000848401525b50505050565b6000601f19601f8301169050919050565b60006125c68261255b565b6125d08185612566565b93506125e0818560208601612577565b6125e9816125aa565b840191505092915050565b6000602082019050818103600083015261260e81846125bb565b905092915050565b60006020828403121561262c5761262b612398565b5b600061263a84828501612421565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612680826125aa565b810181811067ffffffffffffffff8211171561269f5761269e612648565b5b80604052505050565b60006126b261238e565b90506126be8282612677565b919050565b600067ffffffffffffffff8211156126de576126dd612648565b5b602082029050602081019050919050565b600080fd5b6000612707612702846126c3565b6126a8565b9050808382526020820190506020840283018581111561272a576127296126ef565b5b835b81811015612753578061273f8882612421565b84526020840193505060208101905061272c565b5050509392505050565b600082601f83011261277257612771612643565b5b81356127828482602086016126f4565b91505092915050565b600080fd5b600067ffffffffffffffff8211156127ab576127aa612648565b5b6127b4826125aa565b9050602081019050919050565b82818337600083830152505050565b60006127e36127de84612790565b6126a8565b9050828152602081018484840111156127ff576127fe61278b565b5b61280a8482856127c1565b509392505050565b600082601f83011261282757612826612643565b5b81356128378482602086016127d0565b91505092915050565b600080600080600060a0868803121561285c5761285b612398565b5b600061286a888289016123eb565b955050602061287b888289016123eb565b945050604086013567ffffffffffffffff81111561289c5761289b61239d565b5b6128a88882890161275d565b935050606086013567ffffffffffffffff8111156128c9576128c861239d565b5b6128d58882890161275d565b925050608086013567ffffffffffffffff8111156128f6576128f561239d565b5b61290288828901612812565b9150509295509295909350565b60008060006060848603121561292857612927612398565b5b6000612936868287016123eb565b935050602061294786828701612421565b925050604061295886828701612421565b9150509250925092565b60008060006060848603121561297b5761297a612398565b5b600061298986828701612421565b935050602061299a868287016123eb565b92505060406129ab86828701612421565b9150509250925092565b600067ffffffffffffffff8211156129d0576129cf612648565b5b6129d9826125aa565b9050602081019050919050565b60006129f96129f4846129b5565b6126a8565b905082815260208101848484011115612a1557612a1461278b565b5b612a208482856127c1565b509392505050565b600082601f830112612a3d57612a3c612643565b5b8135612a4d8482602086016129e6565b91505092915050565b600060208284031215612a6c57612a6b612398565b5b600082013567ffffffffffffffff811115612a8a57612a8961239d565b5b612a9684828501612a28565b91505092915050565b600067ffffffffffffffff821115612aba57612ab9612648565b5b602082029050602081019050919050565b6000612ade612ad984612a9f565b6126a8565b90508083825260208201905060208402830185811115612b0157612b006126ef565b5b835b81811015612b2a5780612b1688826123eb565b845260208401935050602081019050612b03565b5050509392505050565b600082601f830112612b4957612b48612643565b5b8135612b59848260208601612acb565b91505092915050565b60008060408385031215612b7957612b78612398565b5b600083013567ffffffffffffffff811115612b9757612b9661239d565b5b612ba385828601612b34565b925050602083013567ffffffffffffffff811115612bc457612bc361239d565b5b612bd08582860161275d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c0f81612400565b82525050565b6000612c218383612c06565b60208301905092915050565b6000602082019050919050565b6000612c4582612bda565b612c4f8185612be5565b9350612c5a83612bf6565b8060005b83811015612c8b578151612c728882612c15565b9750612c7d83612c2d565b925050600181019050612c5e565b5085935050505092915050565b60006020820190508181036000830152612cb28184612c3a565b905092915050565b612cc3816123c2565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b600060208284031215612cfa57612cf9612398565b5b6000612d08848285016123eb565b91505092915050565b600080600060608486031215612d2a57612d29612398565b5b600084013567ffffffffffffffff811115612d4857612d4761239d565b5b612d548682870161275d565b935050602084013567ffffffffffffffff811115612d7557612d7461239d565b5b612d818682870161275d565b9250506040612d92868287016123eb565b9150509250925092565b612da581612525565b8114612db057600080fd5b50565b600081359050612dc281612d9c565b92915050565b60008060408385031215612ddf57612dde612398565b5b6000612ded858286016123eb565b9250506020612dfe85828601612db3565b9150509250929050565b600080fd5b60008083601f840112612e2357612e22612643565b5b8235905067ffffffffffffffff811115612e4057612e3f612e08565b5b602083019150836020820283011115612e5c57612e5b6126ef565b5b9250929050565b600080600060408486031215612e7c57612e7b612398565b5b6000612e8a86828701612421565b935050602084013567ffffffffffffffff811115612eab57612eaa61239d565b5b612eb786828701612e0d565b92509250509250925092565b60008060408385031215612eda57612ed9612398565b5b6000612ee8858286016123eb565b9250506020612ef9858286016123eb565b9150509250929050565b600080600080600060a08688031215612f1f57612f1e612398565b5b6000612f2d888289016123eb565b9550506020612f3e888289016123eb565b9450506040612f4f88828901612421565b9350506060612f6088828901612421565b925050608086013567ffffffffffffffff811115612f8157612f8061239d565b5b612f8d88828901612812565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612ff6602a83612566565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307357607f821691505b602082108114156130875761308661302c565b5b50919050565b7f5552492072657175657374656420666f7220696e76616c69642061727469666160008201527f6374207479706500000000000000000000000000000000000000000000000000602082015250565b60006130e9602783612566565b91506130f48261308d565b604082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461314c8161305b565b613156818661311f565b945060018216600081146131715760018114613182576131b5565b60ff198316865281860193506131b5565b61318b8561312a565b60005b838110156131ad5781548189015260018201915060208101905061318e565b838801955050505b50505092915050565b60006131c98261255b565b6131d3818561311f565b93506131e3818560208601612577565b80840191505092915050565b60006131fb828561313f565b915061320782846131be565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b600061326f602f83612566565b915061327a82613213565b604082019050919050565b6000602082019050818103600083015261329e81613262565b9050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b60006132db601a83612566565b91506132e6826132a5565b602082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b600061331d828461313f565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613384602983612566565b915061338f82613328565b604082019050919050565b600060208201905081810360008301526133b381613377565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342382612400565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613456576134556133e9565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134bd602683612566565b91506134c882613461565b604082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061352d82612400565b915061353883612400565b925082613548576135476134f3565b5b828204905092915050565b600061355e82612400565b915061356983612400565b92508282101561357c5761357b6133e9565b5b828203905092915050565b600061359282612400565b915061359d83612400565b9250826135ad576135ac6134f3565b5b828206905092915050565b60006135c382612400565b91506135ce83612400565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613603576136026133e9565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061366a602883612566565b91506136758261360e565b604082019050919050565b600060208201905081810360008301526136998161365d565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136fc602583612566565b9150613707826136a0565b604082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061378e602a83612566565b915061379982613732565b604082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b600060408201905081810360008301526137de8185612c3a565b905081810360208301526137f28184612c3a565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613857602383612566565b9150613862826137fb565b604082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006138e9602483612566565b91506138f48261388d565b604082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b60006040820190506139346000830185612476565b6139416020830184612476565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397e602083612566565b915061398982613948565b602082019050919050565b600060208201905081810360008301526139ad81613971565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a10602183612566565b9150613a1b826139b4565b604082019050919050565b60006020820190508181036000830152613a3f81613a03565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613aa2602983612566565b9150613aad82613a46565b604082019050919050565b60006020820190508181036000830152613ad181613a95565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613aff82613ad8565b613b098185613ae3565b9350613b19818560208601612577565b613b22816125aa565b840191505092915050565b600060a082019050613b426000830188612cba565b613b4f6020830187612cba565b8181036040830152613b618186612c3a565b90508181036060830152613b758185612c3a565b90508181036080830152613b898184613af4565b90509695505050505050565b600081519050613ba4816124cc565b92915050565b600060208284031215613bc057613bbf612398565b5b6000613bce84828501613b95565b91505092915050565b60008160e01c9050919050565b600060033d1115613c035760046000803e613c00600051613bd7565b90505b90565b600060443d1015613c1657613c99565b613c1e61238e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c46575050613c99565b808201805167ffffffffffffffff811115613c645750505050613c99565b80602083010160043d038501811115613c81575050505050613c99565b613c9082602001850186612677565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613cf8603483612566565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d8a602883612566565b9150613d9582613d2e565b604082019050919050565b60006020820190508181036000830152613db981613d7d565b9050919050565b600060a082019050613dd56000830188612cba565b613de26020830187612cba565b613def6040830186612476565b613dfc6060830185612476565b8181036080830152613e0e8184613af4565b9050969550505050505056fea264697066735822122086d4183c1f3d1576a4e10682aabb8c96789a9b2ece078b1657ac27678782f41364736f6c634300080a003368747470733a2f2f6170656c69717569642e6d7970696e6174612e636c6f75642f697066732f516d51666a543354476361426a57544d356b50664b69775751436169714a477731614b66743633416b4e6434666e2f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005568747470733a2f2f6170656c69717569642e6d7970696e6174612e636c6f75642f697066732f516d51666a543354476361426a57544d356b50664b69775751436169714a477731614b66743633416b4e6434666e2f0000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c80638da5cb5b116100ad578063c28329f111610071578063c28329f114610316578063c47f002714610346578063e985e9c514610362578063f242432a14610392578063f2fde38b146103ae5761012b565b80638da5cb5b1461028857806393c9095f146102a65780639c4af48b146102c2578063a22cb465146102de578063bdf7a8e6146102fa5761012b565b806334de1fdf116100f457806334de1fdf146101fa5780633567ed3b1461021657806339f7e37f146102325780634e1273f41461024e578063715018a61461027e5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae5780632eb2c2d6146101de575b600080fd5b61014a60048036038101906101459190612436565b6103ca565b6040516101579190612485565b60405180910390f35b61017a600480360381019061017591906124f8565b610493565b6040516101879190612540565b60405180910390f35b610198610575565b6040516101a591906125f4565b60405180910390f35b6101c860048036038101906101c39190612616565b610603565b6040516101d591906125f4565b60405180910390f35b6101f860048036038101906101f39190612840565b61073e565b005b610214600480360381019061020f919061290f565b6107df565b005b610230600480360381019061022b9190612962565b61087f565b005b61024c60048036038101906102479190612a56565b6108a7565b005b61026860048036038101906102639190612b62565b61090c565b6040516102759190612c98565b60405180910390f35b610286610a25565b005b610290610a39565b60405161029d9190612cc9565b60405180910390f35b6102c060048036038101906102bb9190612ce4565b610a63565b005b6102dc60048036038101906102d79190612d11565b610aaf565b005b6102f860048036038101906102f39190612dc8565b610b02565b005b610314600480360381019061030f9190612e63565b610b18565b005b610330600480360381019061032b9190612616565b610b8a565b60405161033d9190612540565b60405180910390f35b610360600480360381019061035b9190612a56565b610baa565b005b61037c60048036038101906103779190612ec3565b610bcc565b6040516103899190612540565b60405180910390f35b6103ac60048036038101906103a79190612f03565b610c60565b005b6103c860048036038101906103c39190612ce4565b610d01565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104329061300c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055e57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056e575061056d82610d85565b5b9050919050565b600680546105829061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae9061305b565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b505050505081565b60606007600083815260200190815260200160002060009054906101000a900460ff16610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c906130ff565b60405180910390fd5b6000600580546106749061305b565b90501161070b57600580546106889061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b49061305b565b80156107015780601f106106d657610100808354040283529160200191610701565b820191906000526020600020905b8154815290600101906020018083116106e457829003601f168201915b5050505050610737565b600561071683610def565b6040516020016107279291906131ef565b6040516020818303038152906040525b9050919050565b610746610f50565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078c575061078b85610786610f50565b610bcc565b5b6107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290613285565b60405180910390fd5b6107d88585858585610f58565b5050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610866906132f1565b60405180910390fd5b61087a83838361127a565b505050565b6108876114c1565b6108a28284836040518060200160405280600081525061153f565b505050565b6108af6114c1565b80600590805190602001906108c59291906122eb565b5060056040516108d59190613311565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b60608151835114610952576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109499061339a565b60405180910390fd5b6000835167ffffffffffffffff81111561096f5761096e612648565b5b60405190808252806020026020018201604052801561099d5781602001602082028036833780820191505090505b50905060005b8451811015610a1a576109ea8582815181106109c2576109c16133ba565b5b60200260200101518583815181106109dd576109dc6133ba565b5b60200260200101516103ca565b8282815181106109fd576109fc6133ba565b5b60200260200101818152505080610a1390613418565b90506109a3565b508091505092915050565b610a2d6114c1565b610a3760006116f0565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a6b6114c1565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610aba8184846117b6565b610afd81602a60016040518060400160405280601281526020017f4275726e20466f72204c6567656e64617279000000000000000000000000000081525061153f565b505050565b610b14610b0d610f50565b8383611a85565b5050565b610b206114c1565b60005b82829050811015610b8457610b71838383818110610b4457610b436133ba565b5b9050602002016020810190610b599190612ce4565b8560016040518060200160405280600081525061153f565b8080610b7c90613418565b915050610b23565b50505050565b60076020528060005260406000206000915054906101000a900460ff1681565b610bb26114c1565b8060069080519060200190610bc89291906122eb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c68610f50565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cae5750610cad85610ca8610f50565b610bcc565b5b610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613285565b60405180910390fd5b610cfa8585858585611bf2565b5050505050565b610d096114c1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906134d3565b60405180910390fd5b610d82816116f0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610e37576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f4b565b600082905060005b60008214610e69578080610e5290613418565b915050600a82610e629190613522565b9150610e3f565b60008167ffffffffffffffff811115610e8557610e84612648565b5b6040519080825280601f01601f191660200182016040528015610eb75781602001600182028036833780820191505090505b5090505b60008514610f4457600182610ed09190613553565b9150600a85610edf9190613587565b6030610eeb91906135b8565b60f81b818381518110610f0157610f006133ba565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610f3d9190613522565b9450610ebb565b8093505050505b919050565b600033905090565b8151835114610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613680565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100390613712565b60405180910390fd5b6000611016610f50565b9050611026818787878787611e8e565b60005b84518110156111d7576000858281518110611047576110466133ba565b5b602002602001015190506000858381518110611066576110656133ba565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe906137a4565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111bc91906135b8565b92505081905550505050806111d090613418565b9050611029565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161124e9291906137c4565b60405180910390a4611264818787878787611e96565b611272818787878787611e9e565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e19061386d565b60405180910390fd5b60006112f4610f50565b9050600061130184612076565b9050600061130e84612076565b905061132e83876000858560405180602001604052806000815250611e8e565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906138ff565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161149292919061391f565b60405180910390a46114b884886000868660405180602001604052806000815250611e96565b50505050505050565b6114c9610f50565b73ffffffffffffffffffffffffffffffffffffffff166114e7610a39565b73ffffffffffffffffffffffffffffffffffffffff161461153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613994565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a26565b60405180910390fd5b60006115b9610f50565b905060006115c685612076565b905060006115d385612076565b90506115e483600089858589611e8e565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164391906135b8565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516116c192919061391f565b60405180910390a46116d883600089858589611e96565b6116e7836000898989896120f0565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d9061386d565b60405180910390fd5b805182511461186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613680565b60405180910390fd5b6000611874610f50565b905061189481856000868660405180602001604052806000815250611e8e565b60005b83518110156119e15760008482815181106118b5576118b46133ba565b5b6020026020010151905060008483815181106118d4576118d36133ba565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906138ff565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806119d990613418565b915050611897565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a599291906137c4565b60405180910390a4611a7f81856000868660405180602001604052806000815250611e96565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613ab8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be59190612540565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5990613712565b60405180910390fd5b6000611c6c610f50565b90506000611c7985612076565b90506000611c8685612076565b9050611c96838989858589611e8e565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906137a4565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611de291906135b8565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e5f92919061391f565b60405180910390a4611e75848a8a86868a611e96565b611e83848a8a8a8a8a6120f0565b505050505050505050565b505050505050565b505050505050565b611ebd8473ffffffffffffffffffffffffffffffffffffffff166122c8565b1561206e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f03959493929190613b2d565b6020604051808303816000875af1925050508015611f3f57506040513d601f19601f82011682018060405250810190611f3c9190613baa565b60015b611fe557611f4b613be4565b806308c379a01415611fa85750611f60613c06565b80611f6b5750611faa565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f91906125f4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc90613d0e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613da0565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561209557612094612648565b5b6040519080825280602002602001820160405280156120c35781602001602082028036833780820191505090505b50905082816000815181106120db576120da6133ba565b5b60200260200101818152505080915050919050565b61210f8473ffffffffffffffffffffffffffffffffffffffff166122c8565b156122c0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612155959493929190613dc0565b6020604051808303816000875af192505050801561219157506040513d601f19601f8201168201806040525081019061218e9190613baa565b60015b6122375761219d613be4565b806308c379a014156121fa57506121b2613c06565b806121bd57506121fc565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f191906125f4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d0e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613da0565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122f79061305b565b90600052602060002090601f0160209004810192826123195760008555612360565b82601f1061233257805160ff1916838001178555612360565b82800160010185558215612360579182015b8281111561235f578251825591602001919060010190612344565b5b50905061236d9190612371565b5090565b5b8082111561238a576000816000905550600101612372565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123cd826123a2565b9050919050565b6123dd816123c2565b81146123e857600080fd5b50565b6000813590506123fa816123d4565b92915050565b6000819050919050565b61241381612400565b811461241e57600080fd5b50565b6000813590506124308161240a565b92915050565b6000806040838503121561244d5761244c612398565b5b600061245b858286016123eb565b925050602061246c85828601612421565b9150509250929050565b61247f81612400565b82525050565b600060208201905061249a6000830184612476565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d5816124a0565b81146124e057600080fd5b50565b6000813590506124f2816124cc565b92915050565b60006020828403121561250e5761250d612398565b5b600061251c848285016124e3565b91505092915050565b60008115159050919050565b61253a81612525565b82525050565b60006020820190506125556000830184612531565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561259557808201518184015260208101905061257a565b838111156125a4576000848401525b50505050565b6000601f19601f8301169050919050565b60006125c68261255b565b6125d08185612566565b93506125e0818560208601612577565b6125e9816125aa565b840191505092915050565b6000602082019050818103600083015261260e81846125bb565b905092915050565b60006020828403121561262c5761262b612398565b5b600061263a84828501612421565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612680826125aa565b810181811067ffffffffffffffff8211171561269f5761269e612648565b5b80604052505050565b60006126b261238e565b90506126be8282612677565b919050565b600067ffffffffffffffff8211156126de576126dd612648565b5b602082029050602081019050919050565b600080fd5b6000612707612702846126c3565b6126a8565b9050808382526020820190506020840283018581111561272a576127296126ef565b5b835b81811015612753578061273f8882612421565b84526020840193505060208101905061272c565b5050509392505050565b600082601f83011261277257612771612643565b5b81356127828482602086016126f4565b91505092915050565b600080fd5b600067ffffffffffffffff8211156127ab576127aa612648565b5b6127b4826125aa565b9050602081019050919050565b82818337600083830152505050565b60006127e36127de84612790565b6126a8565b9050828152602081018484840111156127ff576127fe61278b565b5b61280a8482856127c1565b509392505050565b600082601f83011261282757612826612643565b5b81356128378482602086016127d0565b91505092915050565b600080600080600060a0868803121561285c5761285b612398565b5b600061286a888289016123eb565b955050602061287b888289016123eb565b945050604086013567ffffffffffffffff81111561289c5761289b61239d565b5b6128a88882890161275d565b935050606086013567ffffffffffffffff8111156128c9576128c861239d565b5b6128d58882890161275d565b925050608086013567ffffffffffffffff8111156128f6576128f561239d565b5b61290288828901612812565b9150509295509295909350565b60008060006060848603121561292857612927612398565b5b6000612936868287016123eb565b935050602061294786828701612421565b925050604061295886828701612421565b9150509250925092565b60008060006060848603121561297b5761297a612398565b5b600061298986828701612421565b935050602061299a868287016123eb565b92505060406129ab86828701612421565b9150509250925092565b600067ffffffffffffffff8211156129d0576129cf612648565b5b6129d9826125aa565b9050602081019050919050565b60006129f96129f4846129b5565b6126a8565b905082815260208101848484011115612a1557612a1461278b565b5b612a208482856127c1565b509392505050565b600082601f830112612a3d57612a3c612643565b5b8135612a4d8482602086016129e6565b91505092915050565b600060208284031215612a6c57612a6b612398565b5b600082013567ffffffffffffffff811115612a8a57612a8961239d565b5b612a9684828501612a28565b91505092915050565b600067ffffffffffffffff821115612aba57612ab9612648565b5b602082029050602081019050919050565b6000612ade612ad984612a9f565b6126a8565b90508083825260208201905060208402830185811115612b0157612b006126ef565b5b835b81811015612b2a5780612b1688826123eb565b845260208401935050602081019050612b03565b5050509392505050565b600082601f830112612b4957612b48612643565b5b8135612b59848260208601612acb565b91505092915050565b60008060408385031215612b7957612b78612398565b5b600083013567ffffffffffffffff811115612b9757612b9661239d565b5b612ba385828601612b34565b925050602083013567ffffffffffffffff811115612bc457612bc361239d565b5b612bd08582860161275d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c0f81612400565b82525050565b6000612c218383612c06565b60208301905092915050565b6000602082019050919050565b6000612c4582612bda565b612c4f8185612be5565b9350612c5a83612bf6565b8060005b83811015612c8b578151612c728882612c15565b9750612c7d83612c2d565b925050600181019050612c5e565b5085935050505092915050565b60006020820190508181036000830152612cb28184612c3a565b905092915050565b612cc3816123c2565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b600060208284031215612cfa57612cf9612398565b5b6000612d08848285016123eb565b91505092915050565b600080600060608486031215612d2a57612d29612398565b5b600084013567ffffffffffffffff811115612d4857612d4761239d565b5b612d548682870161275d565b935050602084013567ffffffffffffffff811115612d7557612d7461239d565b5b612d818682870161275d565b9250506040612d92868287016123eb565b9150509250925092565b612da581612525565b8114612db057600080fd5b50565b600081359050612dc281612d9c565b92915050565b60008060408385031215612ddf57612dde612398565b5b6000612ded858286016123eb565b9250506020612dfe85828601612db3565b9150509250929050565b600080fd5b60008083601f840112612e2357612e22612643565b5b8235905067ffffffffffffffff811115612e4057612e3f612e08565b5b602083019150836020820283011115612e5c57612e5b6126ef565b5b9250929050565b600080600060408486031215612e7c57612e7b612398565b5b6000612e8a86828701612421565b935050602084013567ffffffffffffffff811115612eab57612eaa61239d565b5b612eb786828701612e0d565b92509250509250925092565b60008060408385031215612eda57612ed9612398565b5b6000612ee8858286016123eb565b9250506020612ef9858286016123eb565b9150509250929050565b600080600080600060a08688031215612f1f57612f1e612398565b5b6000612f2d888289016123eb565b9550506020612f3e888289016123eb565b9450506040612f4f88828901612421565b9350506060612f6088828901612421565b925050608086013567ffffffffffffffff811115612f8157612f8061239d565b5b612f8d88828901612812565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612ff6602a83612566565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307357607f821691505b602082108114156130875761308661302c565b5b50919050565b7f5552492072657175657374656420666f7220696e76616c69642061727469666160008201527f6374207479706500000000000000000000000000000000000000000000000000602082015250565b60006130e9602783612566565b91506130f48261308d565b604082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461314c8161305b565b613156818661311f565b945060018216600081146131715760018114613182576131b5565b60ff198316865281860193506131b5565b61318b8561312a565b60005b838110156131ad5781548189015260018201915060208101905061318e565b838801955050505b50505092915050565b60006131c98261255b565b6131d3818561311f565b93506131e3818560208601612577565b80840191505092915050565b60006131fb828561313f565b915061320782846131be565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b600061326f602f83612566565b915061327a82613213565b604082019050919050565b6000602082019050818103600083015261329e81613262565b9050919050565b7f496e76616c69642045766f6c7574696f6e20436f6e7472616374000000000000600082015250565b60006132db601a83612566565b91506132e6826132a5565b602082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b600061331d828461313f565b915081905092915050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613384602983612566565b915061338f82613328565b604082019050919050565b600060208201905081810360008301526133b381613377565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342382612400565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613456576134556133e9565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134bd602683612566565b91506134c882613461565b604082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061352d82612400565b915061353883612400565b925082613548576135476134f3565b5b828204905092915050565b600061355e82612400565b915061356983612400565b92508282101561357c5761357b6133e9565b5b828203905092915050565b600061359282612400565b915061359d83612400565b9250826135ad576135ac6134f3565b5b828206905092915050565b60006135c382612400565b91506135ce83612400565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613603576136026133e9565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061366a602883612566565b91506136758261360e565b604082019050919050565b600060208201905081810360008301526136998161365d565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136fc602583612566565b9150613707826136a0565b604082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061378e602a83612566565b915061379982613732565b604082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b600060408201905081810360008301526137de8185612c3a565b905081810360208301526137f28184612c3a565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613857602383612566565b9150613862826137fb565b604082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006138e9602483612566565b91506138f48261388d565b604082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b60006040820190506139346000830185612476565b6139416020830184612476565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061397e602083612566565b915061398982613948565b602082019050919050565b600060208201905081810360008301526139ad81613971565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a10602183612566565b9150613a1b826139b4565b604082019050919050565b60006020820190508181036000830152613a3f81613a03565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613aa2602983612566565b9150613aad82613a46565b604082019050919050565b60006020820190508181036000830152613ad181613a95565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613aff82613ad8565b613b098185613ae3565b9350613b19818560208601612577565b613b22816125aa565b840191505092915050565b600060a082019050613b426000830188612cba565b613b4f6020830187612cba565b8181036040830152613b618186612c3a565b90508181036060830152613b758185612c3a565b90508181036080830152613b898184613af4565b90509695505050505050565b600081519050613ba4816124cc565b92915050565b600060208284031215613bc057613bbf612398565b5b6000613bce84828501613b95565b91505092915050565b60008160e01c9050919050565b600060033d1115613c035760046000803e613c00600051613bd7565b90505b90565b600060443d1015613c1657613c99565b613c1e61238e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c46575050613c99565b808201805167ffffffffffffffff811115613c645750505050613c99565b80602083010160043d038501811115613c81575050505050613c99565b613c9082602001850186612677565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613cf8603483612566565b9150613d0382613c9c565b604082019050919050565b60006020820190508181036000830152613d2781613ceb565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d8a602883612566565b9150613d9582613d2e565b604082019050919050565b60006020820190508181036000830152613db981613d7d565b9050919050565b600060a082019050613dd56000830188612cba565b613de26020830187612cba565b613def6040830186612476565b613dfc6060830185612476565b8181036080830152613e0e8184613af4565b9050969550505050505056fea264697066735822122086d4183c1f3d1576a4e10682aabb8c96789a9b2ece078b1657ac27678782f41364736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005568747470733a2f2f6170656c69717569642e6d7970696e6174612e636c6f75642f697066732f516d51666a543354476361426a57544d356b50664b69775751436169714a477731614b66743633416b4e6434666e2f0000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://apeliquid.mypinata.cloud/ipfs/QmQfjT3TGcaBjWTM5kPfKiwWQCaiqJGw1aKft63AkNd4fn/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000055
Arg [2] : 68747470733a2f2f6170656c69717569642e6d7970696e6174612e636c6f7564
Arg [3] : 2f697066732f516d51666a543354476361426a57544d356b50664b6977575143
Arg [4] : 6169714a477731614b66743633416b4e6434666e2f0000000000000000000000


Deployed Bytecode Sourcemap

46386:3651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22325:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21298:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46680:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49671:363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24475:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49251:266;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48444:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49525:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22808:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43358:103;;;:::i;:::-;;42710:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48732:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48943:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23442:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47966:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46728:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48638:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23701:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23991:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43616:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22325:317;22456:7;22522:1;22503:21;;:7;:21;;;;22481:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:9;:13;22622:2;22612:13;;;;;;;;;;;:22;22626:7;22612:22;;;;;;;;;;;;;;;;22605:29;;22325:317;;;;:::o;21298:360::-;21445:4;21502:26;21487:41;;;:11;:41;;;;:110;;;;21560:37;21545:52;;;:11;:52;;;;21487:110;:163;;;;21614:36;21638:11;21614:23;:36::i;:::-;21487:163;21467:183;;21298:360;;;:::o;46680:39::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49671:363::-;49730:13;49778:18;:26;49797:6;49778:26;;;;;;;;;;;;;;;;;;;;;49756:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;49926:1;49908:7;49902:21;;;;;:::i;:::-;;;:25;:124;;50019:7;49902:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49971:7;49980:17;:6;:15;:17::i;:::-;49954:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49902:124;49882:144;;49671:363;;;:::o;24475:439::-;24716:12;:10;:12::i;:::-;24708:20;;:4;:20;;;:60;;;;24732:36;24749:4;24755:12;:10;:12::i;:::-;24732:16;:36::i;:::-;24708:60;24686:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24854:52;24877:4;24883:2;24887:3;24892:7;24901:4;24854:22;:52::i;:::-;24475:439;;;;;:::o;49251:266::-;49388:17;;;;;;;;;;;49374:31;;:10;:31;;;49352:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;49470:39;49476:10;49488:7;49497:11;49470:5;:39::i;:::-;49251:266;;;:::o;48444:186::-;42596:13;:11;:13::i;:::-;48582:40:::1;48588:8;48598;48608:9;48582:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;48444:186:::0;;;:::o;49525:138::-;42596:13;:11;:13::i;:::-;49612:8:::1;49602:7;:18;;;;;;;;;;;;:::i;:::-;;49647:7;49636:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;49525:138:::0;:::o;22808:561::-;22964:16;23039:3;:10;23020:8;:15;:29;22998:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;23131:30;23178:8;:15;23164:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23131:63;;23212:9;23207:122;23231:8;:15;23227:1;:19;23207:122;;;23287:30;23297:8;23306:1;23297:11;;;;;;;;:::i;:::-;;;;;;;;23310:3;23314:1;23310:6;;;;;;;;:::i;:::-;;;;;;;;23287:9;:30::i;:::-;23268:13;23282:1;23268:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23248:3;;;;:::i;:::-;;;23207:122;;;;23348:13;23341:20;;;22808:561;;;;:::o;43358:103::-;42596:13;:11;:13::i;:::-;43423:30:::1;43450:1;43423:18;:30::i;:::-;43358:103::o:0;42710:87::-;42756:7;42783:6;;;;;;;;;;;42776:13;;42710:87;:::o;48732:176::-;42596:13;:11;:13::i;:::-;48876:24:::1;48856:17;;:44;;;;;;;;;;;;;;;;;;48732:176:::0;:::o;48943:300::-;49076:41;49087:10;49099:8;49109:7;49076:10;:41::i;:::-;49189:46;49195:10;49207:2;49211:1;49189:46;;;;;;;;;;;;;;;;;:5;:46::i;:::-;48943:300;;;:::o;23442:187::-;23569:52;23588:12;:10;:12::i;:::-;23602:8;23612;23569:18;:52::i;:::-;23442:187;;:::o;47966:229::-;42596:13;:11;:13::i;:::-;48088:9:::1;48083:105;48107:5;;:12;;48103:1;:16;48083:105;;;48141:35;48147:5;;48153:1;48147:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48157:11;48170:1;48141:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;48121:3;;;;;:::i;:::-;;;;48083:105;;;;47966:229:::0;;;:::o;46728:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;48638:86::-;42596:13;:11;:13::i;:::-;48711:5:::1;48704:4;:12;;;;;;;;;;;;:::i;:::-;;48638:86:::0;:::o;23701:218::-;23845:4;23874:18;:27;23893:7;23874:27;;;;;;;;;;;;;;;:37;23902:8;23874:37;;;;;;;;;;;;;;;;;;;;;;;;;23867:44;;23701:218;;;;:::o;23991:407::-;24207:12;:10;:12::i;:::-;24199:20;;:4;:20;;;:60;;;;24223:36;24240:4;24246:12;:10;:12::i;:::-;24223:16;:36::i;:::-;24199:60;24177:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;24345:45;24363:4;24369:2;24373;24377:6;24385:4;24345:17;:45::i;:::-;23991:407;;;;;:::o;43616:238::-;42596:13;:11;:13::i;:::-;43739:1:::1;43719:22;;:8;:22;;;;43697:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;43818:28;43837:8;43818:18;:28::i;:::-;43616:238:::0;:::o;20079:207::-;20209:4;20253:25;20238:40;;;:11;:40;;;;20231:47;;20079:207;;;:::o;39351:723::-;39407:13;39637:1;39628:5;:10;39624:53;;;39655:10;;;;;;;;;;;;;;;;;;;;;39624:53;39687:12;39702:5;39687:20;;39718:14;39743:78;39758:1;39750:4;:9;39743:78;;39776:8;;;;;:::i;:::-;;;;39807:2;39799:10;;;;;:::i;:::-;;;39743:78;;;39831:19;39863:6;39853:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39831:39;;39881:154;39897:1;39888:5;:10;39881:154;;39925:1;39915:11;;;;;:::i;:::-;;;39992:2;39984:5;:10;;;;:::i;:::-;39971:2;:24;;;;:::i;:::-;39958:39;;39941:6;39948;39941:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;40021:2;40012:11;;;;;:::i;:::-;;;39881:154;;;40059:6;40045:21;;;;;39351:723;;;;:::o;19000:98::-;19053:7;19080:10;19073:17;;19000:98;:::o;26747:1321::-;26988:7;:14;26974:3;:10;:28;26952:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;27103:1;27089:16;;:2;:16;;;;27081:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27160:16;27179:12;:10;:12::i;:::-;27160:31;;27204:60;27225:8;27235:4;27241:2;27245:3;27250:7;27259:4;27204:20;:60::i;:::-;27282:9;27277:470;27301:3;:10;27297:1;:14;27277:470;;;27333:10;27346:3;27350:1;27346:6;;;;;;;;:::i;:::-;;;;;;;;27333:19;;27367:14;27384:7;27392:1;27384:10;;;;;;;;:::i;:::-;;;;;;;;27367:27;;27411:19;27433:9;:13;27443:2;27433:13;;;;;;;;;;;:19;27447:4;27433:19;;;;;;;;;;;;;;;;27411:41;;27508:6;27493:11;:21;;27467:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;27672:6;27658:11;:20;27636:9;:13;27646:2;27636:13;;;;;;;;;;;:19;27650:4;27636:19;;;;;;;;;;;;;;;:42;;;;27729:6;27708:9;:13;27718:2;27708:13;;;;;;;;;;;:17;27722:2;27708:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27318:429;;;27313:3;;;;:::i;:::-;;;27277:470;;;;27794:2;27764:47;;27788:4;27764:47;;27778:8;27764:47;;;27798:3;27803:7;27764:47;;;;;;;:::i;:::-;;;;;;;;27824:59;27844:8;27854:4;27860:2;27864:3;27869:7;27878:4;27824:19;:59::i;:::-;27896:164;27946:8;27969:4;27988:2;28005:3;28023:7;28045:4;27896:35;:164::i;:::-;26941:1127;26747:1321;;;;;:::o;31844:808::-;31987:1;31971:18;;:4;:18;;;;31963:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32042:16;32061:12;:10;:12::i;:::-;32042:31;;32084:20;32107:21;32125:2;32107:17;:21::i;:::-;32084:44;;32139:24;32166:25;32184:6;32166:17;:25::i;:::-;32139:52;;32204:66;32225:8;32235:4;32249:1;32253:3;32258:7;32204:66;;;;;;;;;;;;:20;:66::i;:::-;32283:19;32305:9;:13;32315:2;32305:13;;;;;;;;;;;:19;32319:4;32305:19;;;;;;;;;;;;;;;;32283:41;;32358:6;32343:11;:21;;32335:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:6;32463:11;:20;32441:9;:13;32451:2;32441:13;;;;;;;;;;;:19;32455:4;32441:19;;;;;;;;;;;;;;;:42;;;;32551:1;32512:54;;32537:4;32512:54;;32527:8;32512:54;;;32555:2;32559:6;32512:54;;;;;;;:::i;:::-;;;;;;;;32579:65;32599:8;32609:4;32623:1;32627:3;32632:7;32579:65;;;;;;;;;;;;:19;:65::i;:::-;31952:700;;;;31844:808;;;:::o;42875:132::-;42950:12;:10;:12::i;:::-;42939:23;;:7;:5;:7::i;:::-;:23;;;42931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42875:132::o;29386:818::-;29553:1;29539:16;;:2;:16;;;;29531:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29606:16;29625:12;:10;:12::i;:::-;29606:31;;29648:20;29671:21;29689:2;29671:17;:21::i;:::-;29648:44;;29703:24;29730:25;29748:6;29730:17;:25::i;:::-;29703:52;;29768:66;29789:8;29807:1;29811:2;29815:3;29820:7;29829:4;29768:20;:66::i;:::-;29868:6;29847:9;:13;29857:2;29847:13;;;;;;;;;;;:17;29861:2;29847:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29927:2;29890:52;;29923:1;29890:52;;29905:8;29890:52;;;29931:2;29935:6;29890:52;;;;;;;:::i;:::-;;;;;;;;29955:65;29975:8;29993:1;29997:2;30001:3;30006:7;30015:4;29955:19;:65::i;:::-;30033:163;30078:8;30109:1;30126:2;30143;30160:6;30181:4;30033:30;:163::i;:::-;29520:684;;;29386:818;;;;:::o;44014:191::-;44088:16;44107:6;;;;;;;;;;;44088:25;;44133:8;44124:6;;:17;;;;;;;;;;;;;;;;;;44188:8;44157:40;;44178:8;44157:40;;;;;;;;;;;;44077:128;44014:191;:::o;32902:1055::-;33070:1;33054:18;;:4;:18;;;;33046:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33159:7;:14;33145:3;:10;:28;33123:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33254:16;33273:12;:10;:12::i;:::-;33254:31;;33298:66;33319:8;33329:4;33343:1;33347:3;33352:7;33298:66;;;;;;;;;;;;:20;:66::i;:::-;33382:9;33377:422;33401:3;:10;33397:1;:14;33377:422;;;33433:10;33446:3;33450:1;33446:6;;;;;;;;:::i;:::-;;;;;;;;33433:19;;33467:14;33484:7;33492:1;33484:10;;;;;;;;:::i;:::-;;;;;;;;33467:27;;33511:19;33533:9;:13;33543:2;33533:13;;;;;;;;;;;:19;33547:4;33533:19;;;;;;;;;;;;;;;;33511:41;;33608:6;33593:11;:21;;33567:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;33766:6;33752:11;:20;33730:9;:13;33740:2;33730:13;;;;;;;;;;;:19;33744:4;33730:19;;;;;;;;;;;;;;;:42;;;;33418:381;;;33413:3;;;;;:::i;:::-;;;;33377:422;;;;33854:1;33816:55;;33840:4;33816:55;;33830:8;33816:55;;;33858:3;33863:7;33816:55;;;;;;;:::i;:::-;;;;;;;;33884:65;33904:8;33914:4;33928:1;33932:3;33937:7;33884:65;;;;;;;;;;;;:19;:65::i;:::-;33035:922;32902:1055;;;:::o;34100:331::-;34255:8;34246:17;;:5;:17;;;;34238:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34358:8;34320:18;:25;34339:5;34320:25;;;;;;;;;;;;;;;:35;34346:8;34320:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34404:8;34382:41;;34397:5;34382:41;;;34414:8;34382:41;;;;;;:::i;:::-;;;;;;;;34100:331;;;:::o;25378:1011::-;25580:1;25566:16;;:2;:16;;;;25558:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25637:16;25656:12;:10;:12::i;:::-;25637:31;;25679:20;25702:21;25720:2;25702:17;:21::i;:::-;25679:44;;25734:24;25761:25;25779:6;25761:17;:25::i;:::-;25734:52;;25799:60;25820:8;25830:4;25836:2;25840:3;25845:7;25854:4;25799:20;:60::i;:::-;25872:19;25894:9;:13;25904:2;25894:13;;;;;;;;;;;:19;25908:4;25894:19;;;;;;;;;;;;;;;;25872:41;;25961:6;25946:11;:21;;25924:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;26109:6;26095:11;:20;26073:9;:13;26083:2;26073:13;;;;;;;;;;;:19;26087:4;26073:19;;;;;;;;;;;;;;;:42;;;;26158:6;26137:9;:13;26147:2;26137:13;;;;;;;;;;;:17;26151:2;26137:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26213:2;26182:46;;26207:4;26182:46;;26197:8;26182:46;;;26217:2;26221:6;26182:46;;;;;;;:::i;:::-;;;;;;;;26241:59;26261:8;26271:4;26277:2;26281:3;26286:7;26295:4;26241:19;:59::i;:::-;26313:68;26344:8;26354:4;26360:2;26364;26368:6;26376:4;26313:30;:68::i;:::-;25547:842;;;;25378:1011;;;;;:::o;35389:221::-;;;;;;;:::o;36565:220::-;;;;;;;:::o;37699:975::-;37939:15;:2;:13;;;:15::i;:::-;37935:732;;;38009:2;37992:43;;;38058:8;38089:4;38116:3;38142:7;38172:4;37992:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37971:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38529:6;38522:14;;;;;;;;;;;:::i;:::-;;;;;;;;37971:685;;;38578:62;;;;;;;;;;:::i;:::-;;;;;;;;37971:685;38292:48;;;38280:60;;;:8;:60;;;;38254:199;;38383:50;;;;;;;;;;:::i;:::-;;;;;;;;38254:199;38209:259;37935:732;37699:975;;;;;;:::o;38682:230::-;38775:16;38809:22;38848:1;38834:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38809:41;;38872:7;38861:5;38867:1;38861:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38899:5;38892:12;;;38682:230;;;:::o;36793:898::-;37008:15;:2;:13;;;:15::i;:::-;37004:680;;;37078:2;37061:38;;;37122:8;37153:4;37180:2;37205:6;37234:4;37061:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37040:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37546:6;37539:14;;;;;;;;;;;:::i;:::-;;;;;;;;37040:633;;;37595:62;;;;;;;;;;:::i;:::-;;;;;;;;37040:633;37332:43;;;37320:55;;;:8;:55;;;;37316:154;;37400:50;;;;;;;;;;:::i;:::-;;;;;;;;37316:154;37271:214;37004:680;36793:898;;;;;;:::o;10532:326::-;10592:4;10849:1;10827:7;:19;;;:23;10820:30;;10532:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:619::-;10196:6;10204;10212;10261:2;10249:9;10240:7;10236:23;10232:32;10229:119;;;10267:79;;:::i;:::-;10229:119;10387:1;10412:53;10457:7;10448:6;10437:9;10433:22;10412:53;:::i;:::-;10402:63;;10358:117;10514:2;10540:53;10585:7;10576:6;10565:9;10561:22;10540:53;:::i;:::-;10530:63;;10485:118;10642:2;10668:53;10713:7;10704:6;10693:9;10689:22;10668:53;:::i;:::-;10658:63;;10613:118;10119:619;;;;;:::o;10744:::-;10821:6;10829;10837;10886:2;10874:9;10865:7;10861:23;10857:32;10854:119;;;10892:79;;:::i;:::-;10854:119;11012:1;11037:53;11082:7;11073:6;11062:9;11058:22;11037:53;:::i;:::-;11027:63;;10983:117;11139:2;11165:53;11210:7;11201:6;11190:9;11186:22;11165:53;:::i;:::-;11155:63;;11110:118;11267:2;11293:53;11338:7;11329:6;11318:9;11314:22;11293:53;:::i;:::-;11283:63;;11238:118;10744:619;;;;;:::o;11369:308::-;11431:4;11521:18;11513:6;11510:30;11507:56;;;11543:18;;:::i;:::-;11507:56;11581:29;11603:6;11581:29;:::i;:::-;11573:37;;11665:4;11659;11655:15;11647:23;;11369:308;;;:::o;11683:412::-;11761:5;11786:66;11802:49;11844:6;11802:49;:::i;:::-;11786:66;:::i;:::-;11777:75;;11875:6;11868:5;11861:21;11913:4;11906:5;11902:16;11951:3;11942:6;11937:3;11933:16;11930:25;11927:112;;;11958:79;;:::i;:::-;11927:112;12048:41;12082:6;12077:3;12072;12048:41;:::i;:::-;11767:328;11683:412;;;;;:::o;12115:340::-;12171:5;12220:3;12213:4;12205:6;12201:17;12197:27;12187:122;;12228:79;;:::i;:::-;12187:122;12345:6;12332:20;12370:79;12445:3;12437:6;12430:4;12422:6;12418:17;12370:79;:::i;:::-;12361:88;;12177:278;12115:340;;;;:::o;12461:509::-;12530:6;12579:2;12567:9;12558:7;12554:23;12550:32;12547:119;;;12585:79;;:::i;:::-;12547:119;12733:1;12722:9;12718:17;12705:31;12763:18;12755:6;12752:30;12749:117;;;12785:79;;:::i;:::-;12749:117;12890:63;12945:7;12936:6;12925:9;12921:22;12890:63;:::i;:::-;12880:73;;12676:287;12461:509;;;;:::o;12976:311::-;13053:4;13143:18;13135:6;13132:30;13129:56;;;13165:18;;:::i;:::-;13129:56;13215:4;13207:6;13203:17;13195:25;;13275:4;13269;13265:15;13257:23;;12976:311;;;:::o;13310:710::-;13406:5;13431:81;13447:64;13504:6;13447:64;:::i;:::-;13431:81;:::i;:::-;13422:90;;13532:5;13561:6;13554:5;13547:21;13595:4;13588:5;13584:16;13577:23;;13648:4;13640:6;13636:17;13628:6;13624:30;13677:3;13669:6;13666:15;13663:122;;;13696:79;;:::i;:::-;13663:122;13811:6;13794:220;13828:6;13823:3;13820:15;13794:220;;;13903:3;13932:37;13965:3;13953:10;13932:37;:::i;:::-;13927:3;13920:50;13999:4;13994:3;13990:14;13983:21;;13870:144;13854:4;13849:3;13845:14;13838:21;;13794:220;;;13798:21;13412:608;;13310:710;;;;;:::o;14043:370::-;14114:5;14163:3;14156:4;14148:6;14144:17;14140:27;14130:122;;14171:79;;:::i;:::-;14130:122;14288:6;14275:20;14313:94;14403:3;14395:6;14388:4;14380:6;14376:17;14313:94;:::i;:::-;14304:103;;14120:293;14043:370;;;;:::o;14419:894::-;14537:6;14545;14594:2;14582:9;14573:7;14569:23;14565:32;14562:119;;;14600:79;;:::i;:::-;14562:119;14748:1;14737:9;14733:17;14720:31;14778:18;14770:6;14767:30;14764:117;;;14800:79;;:::i;:::-;14764:117;14905:78;14975:7;14966:6;14955:9;14951:22;14905:78;:::i;:::-;14895:88;;14691:302;15060:2;15049:9;15045:18;15032:32;15091:18;15083:6;15080:30;15077:117;;;15113:79;;:::i;:::-;15077:117;15218:78;15288:7;15279:6;15268:9;15264:22;15218:78;:::i;:::-;15208:88;;15003:303;14419:894;;;;;:::o;15319:114::-;15386:6;15420:5;15414:12;15404:22;;15319:114;;;:::o;15439:184::-;15538:11;15572:6;15567:3;15560:19;15612:4;15607:3;15603:14;15588:29;;15439:184;;;;:::o;15629:132::-;15696:4;15719:3;15711:11;;15749:4;15744:3;15740:14;15732:22;;15629:132;;;:::o;15767:108::-;15844:24;15862:5;15844:24;:::i;:::-;15839:3;15832:37;15767:108;;:::o;15881:179::-;15950:10;15971:46;16013:3;16005:6;15971:46;:::i;:::-;16049:4;16044:3;16040:14;16026:28;;15881:179;;;;:::o;16066:113::-;16136:4;16168;16163:3;16159:14;16151:22;;16066:113;;;:::o;16215:732::-;16334:3;16363:54;16411:5;16363:54;:::i;:::-;16433:86;16512:6;16507:3;16433:86;:::i;:::-;16426:93;;16543:56;16593:5;16543:56;:::i;:::-;16622:7;16653:1;16638:284;16663:6;16660:1;16657:13;16638:284;;;16739:6;16733:13;16766:63;16825:3;16810:13;16766:63;:::i;:::-;16759:70;;16852:60;16905:6;16852:60;:::i;:::-;16842:70;;16698:224;16685:1;16682;16678:9;16673:14;;16638:284;;;16642:14;16938:3;16931:10;;16339:608;;;16215:732;;;;:::o;16953:373::-;17096:4;17134:2;17123:9;17119:18;17111:26;;17183:9;17177:4;17173:20;17169:1;17158:9;17154:17;17147:47;17211:108;17314:4;17305:6;17211:108;:::i;:::-;17203:116;;16953:373;;;;:::o;17332:118::-;17419:24;17437:5;17419:24;:::i;:::-;17414:3;17407:37;17332:118;;:::o;17456:222::-;17549:4;17587:2;17576:9;17572:18;17564:26;;17600:71;17668:1;17657:9;17653:17;17644:6;17600:71;:::i;:::-;17456:222;;;;:::o;17684:329::-;17743:6;17792:2;17780:9;17771:7;17767:23;17763:32;17760:119;;;17798:79;;:::i;:::-;17760:119;17918:1;17943:53;17988:7;17979:6;17968:9;17964:22;17943:53;:::i;:::-;17933:63;;17889:117;17684:329;;;;:::o;18019:1039::-;18146:6;18154;18162;18211:2;18199:9;18190:7;18186:23;18182:32;18179:119;;;18217:79;;:::i;:::-;18179:119;18365:1;18354:9;18350:17;18337:31;18395:18;18387:6;18384:30;18381:117;;;18417:79;;:::i;:::-;18381:117;18522:78;18592:7;18583:6;18572:9;18568:22;18522:78;:::i;:::-;18512:88;;18308:302;18677:2;18666:9;18662:18;18649:32;18708:18;18700:6;18697:30;18694:117;;;18730:79;;:::i;:::-;18694:117;18835:78;18905:7;18896:6;18885:9;18881:22;18835:78;:::i;:::-;18825:88;;18620:303;18962:2;18988:53;19033:7;19024:6;19013:9;19009:22;18988:53;:::i;:::-;18978:63;;18933:118;18019:1039;;;;;:::o;19064:116::-;19134:21;19149:5;19134:21;:::i;:::-;19127:5;19124:32;19114:60;;19170:1;19167;19160:12;19114:60;19064:116;:::o;19186:133::-;19229:5;19267:6;19254:20;19245:29;;19283:30;19307:5;19283:30;:::i;:::-;19186:133;;;;:::o;19325:468::-;19390:6;19398;19447:2;19435:9;19426:7;19422:23;19418:32;19415:119;;;19453:79;;:::i;:::-;19415:119;19573:1;19598:53;19643:7;19634:6;19623:9;19619:22;19598:53;:::i;:::-;19588:63;;19544:117;19700:2;19726:50;19768:7;19759:6;19748:9;19744:22;19726:50;:::i;:::-;19716:60;;19671:115;19325:468;;;;;:::o;19799:117::-;19908:1;19905;19898:12;19939:568;20012:8;20022:6;20072:3;20065:4;20057:6;20053:17;20049:27;20039:122;;20080:79;;:::i;:::-;20039:122;20193:6;20180:20;20170:30;;20223:18;20215:6;20212:30;20209:117;;;20245:79;;:::i;:::-;20209:117;20359:4;20351:6;20347:17;20335:29;;20413:3;20405:4;20397:6;20393:17;20383:8;20379:32;20376:41;20373:128;;;20420:79;;:::i;:::-;20373:128;19939:568;;;;;:::o;20513:704::-;20608:6;20616;20624;20673:2;20661:9;20652:7;20648:23;20644:32;20641:119;;;20679:79;;:::i;:::-;20641:119;20799:1;20824:53;20869:7;20860:6;20849:9;20845:22;20824:53;:::i;:::-;20814:63;;20770:117;20954:2;20943:9;20939:18;20926:32;20985:18;20977:6;20974:30;20971:117;;;21007:79;;:::i;:::-;20971:117;21120:80;21192:7;21183:6;21172:9;21168:22;21120:80;:::i;:::-;21102:98;;;;20897:313;20513:704;;;;;:::o;21223:474::-;21291:6;21299;21348:2;21336:9;21327:7;21323:23;21319:32;21316:119;;;21354:79;;:::i;:::-;21316:119;21474:1;21499:53;21544:7;21535:6;21524:9;21520:22;21499:53;:::i;:::-;21489:63;;21445:117;21601:2;21627:53;21672:7;21663:6;21652:9;21648:22;21627:53;:::i;:::-;21617:63;;21572:118;21223:474;;;;;:::o;21703:1089::-;21807:6;21815;21823;21831;21839;21888:3;21876:9;21867:7;21863:23;21859:33;21856:120;;;21895:79;;:::i;:::-;21856:120;22015:1;22040:53;22085:7;22076:6;22065:9;22061:22;22040:53;:::i;:::-;22030:63;;21986:117;22142:2;22168:53;22213:7;22204:6;22193:9;22189:22;22168:53;:::i;:::-;22158:63;;22113:118;22270:2;22296:53;22341:7;22332:6;22321:9;22317:22;22296:53;:::i;:::-;22286:63;;22241:118;22398:2;22424:53;22469:7;22460:6;22449:9;22445:22;22424:53;:::i;:::-;22414:63;;22369:118;22554:3;22543:9;22539:19;22526:33;22586:18;22578:6;22575:30;22572:117;;;22608:79;;:::i;:::-;22572:117;22713:62;22767:7;22758:6;22747:9;22743:22;22713:62;:::i;:::-;22703:72;;22497:288;21703:1089;;;;;;;;:::o;22798:229::-;22938:34;22934:1;22926:6;22922:14;22915:58;23007:12;23002:2;22994:6;22990:15;22983:37;22798:229;:::o;23033:366::-;23175:3;23196:67;23260:2;23255:3;23196:67;:::i;:::-;23189:74;;23272:93;23361:3;23272:93;:::i;:::-;23390:2;23385:3;23381:12;23374:19;;23033:366;;;:::o;23405:419::-;23571:4;23609:2;23598:9;23594:18;23586:26;;23658:9;23652:4;23648:20;23644:1;23633:9;23629:17;23622:47;23686:131;23812:4;23686:131;:::i;:::-;23678:139;;23405:419;;;:::o;23830:180::-;23878:77;23875:1;23868:88;23975:4;23972:1;23965:15;23999:4;23996:1;23989:15;24016:320;24060:6;24097:1;24091:4;24087:12;24077:22;;24144:1;24138:4;24134:12;24165:18;24155:81;;24221:4;24213:6;24209:17;24199:27;;24155:81;24283:2;24275:6;24272:14;24252:18;24249:38;24246:84;;;24302:18;;:::i;:::-;24246:84;24067:269;24016:320;;;:::o;24342:226::-;24482:34;24478:1;24470:6;24466:14;24459:58;24551:9;24546:2;24538:6;24534:15;24527:34;24342:226;:::o;24574:366::-;24716:3;24737:67;24801:2;24796:3;24737:67;:::i;:::-;24730:74;;24813:93;24902:3;24813:93;:::i;:::-;24931:2;24926:3;24922:12;24915:19;;24574:366;;;:::o;24946:419::-;25112:4;25150:2;25139:9;25135:18;25127:26;;25199:9;25193:4;25189:20;25185:1;25174:9;25170:17;25163:47;25227:131;25353:4;25227:131;:::i;:::-;25219:139;;24946:419;;;:::o;25371:148::-;25473:11;25510:3;25495:18;;25371:148;;;;:::o;25525:141::-;25574:4;25597:3;25589:11;;25620:3;25617:1;25610:14;25654:4;25651:1;25641:18;25633:26;;25525:141;;;:::o;25696:845::-;25799:3;25836:5;25830:12;25865:36;25891:9;25865:36;:::i;:::-;25917:89;25999:6;25994:3;25917:89;:::i;:::-;25910:96;;26037:1;26026:9;26022:17;26053:1;26048:137;;;;26199:1;26194:341;;;;26015:520;;26048:137;26132:4;26128:9;26117;26113:25;26108:3;26101:38;26168:6;26163:3;26159:16;26152:23;;26048:137;;26194:341;26261:38;26293:5;26261:38;:::i;:::-;26321:1;26335:154;26349:6;26346:1;26343:13;26335:154;;;26423:7;26417:14;26413:1;26408:3;26404:11;26397:35;26473:1;26464:7;26460:15;26449:26;;26371:4;26368:1;26364:12;26359:17;;26335:154;;;26518:6;26513:3;26509:16;26502:23;;26201:334;;26015:520;;25803:738;;25696:845;;;;:::o;26547:377::-;26653:3;26681:39;26714:5;26681:39;:::i;:::-;26736:89;26818:6;26813:3;26736:89;:::i;:::-;26729:96;;26834:52;26879:6;26874:3;26867:4;26860:5;26856:16;26834:52;:::i;:::-;26911:6;26906:3;26902:16;26895:23;;26657:267;26547:377;;;;:::o;26930:429::-;27107:3;27129:92;27217:3;27208:6;27129:92;:::i;:::-;27122:99;;27238:95;27329:3;27320:6;27238:95;:::i;:::-;27231:102;;27350:3;27343:10;;26930:429;;;;;:::o;27365:234::-;27505:34;27501:1;27493:6;27489:14;27482:58;27574:17;27569:2;27561:6;27557:15;27550:42;27365:234;:::o;27605:366::-;27747:3;27768:67;27832:2;27827:3;27768:67;:::i;:::-;27761:74;;27844:93;27933:3;27844:93;:::i;:::-;27962:2;27957:3;27953:12;27946:19;;27605:366;;;:::o;27977:419::-;28143:4;28181:2;28170:9;28166:18;28158:26;;28230:9;28224:4;28220:20;28216:1;28205:9;28201:17;28194:47;28258:131;28384:4;28258:131;:::i;:::-;28250:139;;27977:419;;;:::o;28402:176::-;28542:28;28538:1;28530:6;28526:14;28519:52;28402:176;:::o;28584:366::-;28726:3;28747:67;28811:2;28806:3;28747:67;:::i;:::-;28740:74;;28823:93;28912:3;28823:93;:::i;:::-;28941:2;28936:3;28932:12;28925:19;;28584:366;;;:::o;28956:419::-;29122:4;29160:2;29149:9;29145:18;29137:26;;29209:9;29203:4;29199:20;29195:1;29184:9;29180:17;29173:47;29237:131;29363:4;29237:131;:::i;:::-;29229:139;;28956:419;;;:::o;29381:269::-;29510:3;29532:92;29620:3;29611:6;29532:92;:::i;:::-;29525:99;;29641:3;29634:10;;29381:269;;;;:::o;29656:228::-;29796:34;29792:1;29784:6;29780:14;29773:58;29865:11;29860:2;29852:6;29848:15;29841:36;29656:228;:::o;29890:366::-;30032:3;30053:67;30117:2;30112:3;30053:67;:::i;:::-;30046:74;;30129:93;30218:3;30129:93;:::i;:::-;30247:2;30242:3;30238:12;30231:19;;29890:366;;;:::o;30262:419::-;30428:4;30466:2;30455:9;30451:18;30443:26;;30515:9;30509:4;30505:20;30501:1;30490:9;30486:17;30479:47;30543:131;30669:4;30543:131;:::i;:::-;30535:139;;30262:419;;;:::o;30687:180::-;30735:77;30732:1;30725:88;30832:4;30829:1;30822:15;30856:4;30853:1;30846:15;30873:180;30921:77;30918:1;30911:88;31018:4;31015:1;31008:15;31042:4;31039:1;31032:15;31059:233;31098:3;31121:24;31139:5;31121:24;:::i;:::-;31112:33;;31167:66;31160:5;31157:77;31154:103;;;31237:18;;:::i;:::-;31154:103;31284:1;31277:5;31273:13;31266:20;;31059:233;;;:::o;31298:225::-;31438:34;31434:1;31426:6;31422:14;31415:58;31507:8;31502:2;31494:6;31490:15;31483:33;31298:225;:::o;31529:366::-;31671:3;31692:67;31756:2;31751:3;31692:67;:::i;:::-;31685:74;;31768:93;31857:3;31768:93;:::i;:::-;31886:2;31881:3;31877:12;31870:19;;31529:366;;;:::o;31901:419::-;32067:4;32105:2;32094:9;32090:18;32082:26;;32154:9;32148:4;32144:20;32140:1;32129:9;32125:17;32118:47;32182:131;32308:4;32182:131;:::i;:::-;32174:139;;31901:419;;;:::o;32326:180::-;32374:77;32371:1;32364:88;32471:4;32468:1;32461:15;32495:4;32492:1;32485:15;32512:185;32552:1;32569:20;32587:1;32569:20;:::i;:::-;32564:25;;32603:20;32621:1;32603:20;:::i;:::-;32598:25;;32642:1;32632:35;;32647:18;;:::i;:::-;32632:35;32689:1;32686;32682:9;32677:14;;32512:185;;;;:::o;32703:191::-;32743:4;32763:20;32781:1;32763:20;:::i;:::-;32758:25;;32797:20;32815:1;32797:20;:::i;:::-;32792:25;;32836:1;32833;32830:8;32827:34;;;32841:18;;:::i;:::-;32827:34;32886:1;32883;32879:9;32871:17;;32703:191;;;;:::o;32900:176::-;32932:1;32949:20;32967:1;32949:20;:::i;:::-;32944:25;;32983:20;33001:1;32983:20;:::i;:::-;32978:25;;33022:1;33012:35;;33027:18;;:::i;:::-;33012:35;33068:1;33065;33061:9;33056:14;;32900:176;;;;:::o;33082:305::-;33122:3;33141:20;33159:1;33141:20;:::i;:::-;33136:25;;33175:20;33193:1;33175:20;:::i;:::-;33170:25;;33329:1;33261:66;33257:74;33254:1;33251:81;33248:107;;;33335:18;;:::i;:::-;33248:107;33379:1;33376;33372:9;33365:16;;33082:305;;;;:::o;33393:227::-;33533:34;33529:1;33521:6;33517:14;33510:58;33602:10;33597:2;33589:6;33585:15;33578:35;33393:227;:::o;33626:366::-;33768:3;33789:67;33853:2;33848:3;33789:67;:::i;:::-;33782:74;;33865:93;33954:3;33865:93;:::i;:::-;33983:2;33978:3;33974:12;33967:19;;33626:366;;;:::o;33998:419::-;34164:4;34202:2;34191:9;34187:18;34179:26;;34251:9;34245:4;34241:20;34237:1;34226:9;34222:17;34215:47;34279:131;34405:4;34279:131;:::i;:::-;34271:139;;33998:419;;;:::o;34423:224::-;34563:34;34559:1;34551:6;34547:14;34540:58;34632:7;34627:2;34619:6;34615:15;34608:32;34423:224;:::o;34653:366::-;34795:3;34816:67;34880:2;34875:3;34816:67;:::i;:::-;34809:74;;34892:93;34981:3;34892:93;:::i;:::-;35010:2;35005:3;35001:12;34994:19;;34653:366;;;:::o;35025:419::-;35191:4;35229:2;35218:9;35214:18;35206:26;;35278:9;35272:4;35268:20;35264:1;35253:9;35249:17;35242:47;35306:131;35432:4;35306:131;:::i;:::-;35298:139;;35025:419;;;:::o;35450:229::-;35590:34;35586:1;35578:6;35574:14;35567:58;35659:12;35654:2;35646:6;35642:15;35635:37;35450:229;:::o;35685:366::-;35827:3;35848:67;35912:2;35907:3;35848:67;:::i;:::-;35841:74;;35924:93;36013:3;35924:93;:::i;:::-;36042:2;36037:3;36033:12;36026:19;;35685:366;;;:::o;36057:419::-;36223:4;36261:2;36250:9;36246:18;36238:26;;36310:9;36304:4;36300:20;36296:1;36285:9;36281:17;36274:47;36338:131;36464:4;36338:131;:::i;:::-;36330:139;;36057:419;;;:::o;36482:634::-;36703:4;36741:2;36730:9;36726:18;36718:26;;36790:9;36784:4;36780:20;36776:1;36765:9;36761:17;36754:47;36818:108;36921:4;36912:6;36818:108;:::i;:::-;36810:116;;36973:9;36967:4;36963:20;36958:2;36947:9;36943:18;36936:48;37001:108;37104:4;37095:6;37001:108;:::i;:::-;36993:116;;36482:634;;;;;:::o;37122:222::-;37262:34;37258:1;37250:6;37246:14;37239:58;37331:5;37326:2;37318:6;37314:15;37307:30;37122:222;:::o;37350:366::-;37492:3;37513:67;37577:2;37572:3;37513:67;:::i;:::-;37506:74;;37589:93;37678:3;37589:93;:::i;:::-;37707:2;37702:3;37698:12;37691:19;;37350:366;;;:::o;37722:419::-;37888:4;37926:2;37915:9;37911:18;37903:26;;37975:9;37969:4;37965:20;37961:1;37950:9;37946:17;37939:47;38003:131;38129:4;38003:131;:::i;:::-;37995:139;;37722:419;;;:::o;38147:223::-;38287:34;38283:1;38275:6;38271:14;38264:58;38356:6;38351:2;38343:6;38339:15;38332:31;38147:223;:::o;38376:366::-;38518:3;38539:67;38603:2;38598:3;38539:67;:::i;:::-;38532:74;;38615:93;38704:3;38615:93;:::i;:::-;38733:2;38728:3;38724:12;38717:19;;38376:366;;;:::o;38748:419::-;38914:4;38952:2;38941:9;38937:18;38929:26;;39001:9;38995:4;38991:20;38987:1;38976:9;38972:17;38965:47;39029:131;39155:4;39029:131;:::i;:::-;39021:139;;38748:419;;;:::o;39173:332::-;39294:4;39332:2;39321:9;39317:18;39309:26;;39345:71;39413:1;39402:9;39398:17;39389:6;39345:71;:::i;:::-;39426:72;39494:2;39483:9;39479:18;39470:6;39426:72;:::i;:::-;39173:332;;;;;:::o;39511:182::-;39651:34;39647:1;39639:6;39635:14;39628:58;39511:182;:::o;39699:366::-;39841:3;39862:67;39926:2;39921:3;39862:67;:::i;:::-;39855:74;;39938:93;40027:3;39938:93;:::i;:::-;40056:2;40051:3;40047:12;40040:19;;39699:366;;;:::o;40071:419::-;40237:4;40275:2;40264:9;40260:18;40252:26;;40324:9;40318:4;40314:20;40310:1;40299:9;40295:17;40288:47;40352:131;40478:4;40352:131;:::i;:::-;40344:139;;40071:419;;;:::o;40496:220::-;40636:34;40632:1;40624:6;40620:14;40613:58;40705:3;40700:2;40692:6;40688:15;40681:28;40496:220;:::o;40722:366::-;40864:3;40885:67;40949:2;40944:3;40885:67;:::i;:::-;40878:74;;40961:93;41050:3;40961:93;:::i;:::-;41079:2;41074:3;41070:12;41063:19;;40722:366;;;:::o;41094:419::-;41260:4;41298:2;41287:9;41283:18;41275:26;;41347:9;41341:4;41337:20;41333:1;41322:9;41318:17;41311:47;41375:131;41501:4;41375:131;:::i;:::-;41367:139;;41094:419;;;:::o;41519:228::-;41659:34;41655:1;41647:6;41643:14;41636:58;41728:11;41723:2;41715:6;41711:15;41704:36;41519:228;:::o;41753:366::-;41895:3;41916:67;41980:2;41975:3;41916:67;:::i;:::-;41909:74;;41992:93;42081:3;41992:93;:::i;:::-;42110:2;42105:3;42101:12;42094:19;;41753:366;;;:::o;42125:419::-;42291:4;42329:2;42318:9;42314:18;42306:26;;42378:9;42372:4;42368:20;42364:1;42353:9;42349:17;42342:47;42406:131;42532:4;42406:131;:::i;:::-;42398:139;;42125:419;;;:::o;42550:98::-;42601:6;42635:5;42629:12;42619:22;;42550:98;;;:::o;42654:168::-;42737:11;42771:6;42766:3;42759:19;42811:4;42806:3;42802:14;42787:29;;42654:168;;;;:::o;42828:360::-;42914:3;42942:38;42974:5;42942:38;:::i;:::-;42996:70;43059:6;43054:3;42996:70;:::i;:::-;42989:77;;43075:52;43120:6;43115:3;43108:4;43101:5;43097:16;43075:52;:::i;:::-;43152:29;43174:6;43152:29;:::i;:::-;43147:3;43143:39;43136:46;;42918:270;42828:360;;;;:::o;43194:1053::-;43517:4;43555:3;43544:9;43540:19;43532:27;;43569:71;43637:1;43626:9;43622:17;43613:6;43569:71;:::i;:::-;43650:72;43718:2;43707:9;43703:18;43694:6;43650:72;:::i;:::-;43769:9;43763:4;43759:20;43754:2;43743:9;43739:18;43732:48;43797:108;43900:4;43891:6;43797:108;:::i;:::-;43789:116;;43952:9;43946:4;43942:20;43937:2;43926:9;43922:18;43915:48;43980:108;44083:4;44074:6;43980:108;:::i;:::-;43972:116;;44136:9;44130:4;44126:20;44120:3;44109:9;44105:19;44098:49;44164:76;44235:4;44226:6;44164:76;:::i;:::-;44156:84;;43194:1053;;;;;;;;:::o;44253:141::-;44309:5;44340:6;44334:13;44325:22;;44356:32;44382:5;44356:32;:::i;:::-;44253:141;;;;:::o;44400:349::-;44469:6;44518:2;44506:9;44497:7;44493:23;44489:32;44486:119;;;44524:79;;:::i;:::-;44486:119;44644:1;44669:63;44724:7;44715:6;44704:9;44700:22;44669:63;:::i;:::-;44659:73;;44615:127;44400:349;;;;:::o;44755:106::-;44799:8;44848:5;44843:3;44839:15;44818:36;;44755:106;;;:::o;44867:183::-;44902:3;44940:1;44922:16;44919:23;44916:128;;;44978:1;44975;44972;44957:23;45000:34;45031:1;45025:8;45000:34;:::i;:::-;44993:41;;44916:128;44867:183;:::o;45056:711::-;45095:3;45133:4;45115:16;45112:26;45109:39;;;45141:5;;45109:39;45170:20;;:::i;:::-;45245:1;45227:16;45223:24;45220:1;45214:4;45199:49;45278:4;45272:11;45377:16;45370:4;45362:6;45358:17;45355:39;45322:18;45314:6;45311:30;45295:113;45292:146;;;45423:5;;;;45292:146;45469:6;45463:4;45459:17;45505:3;45499:10;45532:18;45524:6;45521:30;45518:43;;;45554:5;;;;;;45518:43;45602:6;45595:4;45590:3;45586:14;45582:27;45661:1;45643:16;45639:24;45633:4;45629:35;45624:3;45621:44;45618:57;;;45668:5;;;;;;;45618:57;45685;45733:6;45727:4;45723:17;45715:6;45711:30;45705:4;45685:57;:::i;:::-;45758:3;45751:10;;45099:668;;;;;45056:711;;:::o;45773:239::-;45913:34;45909:1;45901:6;45897:14;45890:58;45982:22;45977:2;45969:6;45965:15;45958:47;45773:239;:::o;46018:366::-;46160:3;46181:67;46245:2;46240:3;46181:67;:::i;:::-;46174:74;;46257:93;46346:3;46257:93;:::i;:::-;46375:2;46370:3;46366:12;46359:19;;46018:366;;;:::o;46390:419::-;46556:4;46594:2;46583:9;46579:18;46571:26;;46643:9;46637:4;46633:20;46629:1;46618:9;46614:17;46607:47;46671:131;46797:4;46671:131;:::i;:::-;46663:139;;46390:419;;;:::o;46815:227::-;46955:34;46951:1;46943:6;46939:14;46932:58;47024:10;47019:2;47011:6;47007:15;47000:35;46815:227;:::o;47048:366::-;47190:3;47211:67;47275:2;47270:3;47211:67;:::i;:::-;47204:74;;47287:93;47376:3;47287:93;:::i;:::-;47405:2;47400:3;47396:12;47389:19;;47048:366;;;:::o;47420:419::-;47586:4;47624:2;47613:9;47609:18;47601:26;;47673:9;47667:4;47663:20;47659:1;47648:9;47644:17;47637:47;47701:131;47827:4;47701:131;:::i;:::-;47693:139;;47420:419;;;:::o;47845:751::-;48068:4;48106:3;48095:9;48091:19;48083:27;;48120:71;48188:1;48177:9;48173:17;48164:6;48120:71;:::i;:::-;48201:72;48269:2;48258:9;48254:18;48245:6;48201:72;:::i;:::-;48283;48351:2;48340:9;48336:18;48327:6;48283:72;:::i;:::-;48365;48433:2;48422:9;48418:18;48409:6;48365:72;:::i;:::-;48485:9;48479:4;48475:20;48469:3;48458:9;48454:19;48447:49;48513:76;48584:4;48575:6;48513:76;:::i;:::-;48505:84;;47845:751;;;;;;;;:::o

Swarm Source

ipfs://86d4183c1f3d1576a4e10682aabb8c96789a9b2ece078b1657ac27678782f413
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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