ETH Price: $3,877.40 (-0.86%)

Token

Resources for Adventurers (RESC)
 

Overview

Max Total Supply

1,634 RESC

Holders

296

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
440crypto.eth
Balance
2 RESC
0x732739De18DF630b354EC365a927a4f4F2BF28E5
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:
LootResources

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-02
*/

/**
 *Submitted for verification at Etherscan.io on 2021-08-31
*/

// SPDX-License-Identifier: MIT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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









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


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract LootResources is ERC721Enumerable, ReentrancyGuard, Ownable {
    string[] private commonItems = [
        "planks of Wood",
        "bolts of Wool",
        "ingots of Iron",
        "blocks of Stone"
    ];

    string[] private limitedItems = [
        "hides of Leather",
        "bars of Steel",
        "bolts of Linen",
        "scrolls of Paper",
        "pieces of Bone"
    ];

    string[] private moreLimitedItems = [
        "bolts of Silk",
        "bars of Silver",
        "bars of Bronze"
    ];

    string[] private rareItems = [
        "bars of Platinum",
        "slugs of Titanium",
        "bolts of Brightsilk",
        "sheaths of Dragonskin",
        "slabs of Demonhide"
    ];

    string[] private moreRareItems = [    
        "vials of Divine Essence",
        "vials of Demon Blood",
        "vials of Solar Essense",
        "vials of Lunar Essense",
        "vials of Void Essence",
        "satchels of Eternal Gemstones",
        "vials of Distilled Ghost Vapor"
    ];

    ERC721 loot = ERC721(0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7);

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

    function deposit() public payable onlyOwner {}

    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }

    function getCommon(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "COMMON", commonItems, 150, 200);
    }

    function getLimited(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "LIMITED", limitedItems, 75, 100);
    }

    function getMoreLimited(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "MORELIMITED", moreLimitedItems, 20, 50);
    }

    function getRare(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "RARE", rareItems, 10, 25);
    }

    function getMoreRare(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "MORERARE", moreRareItems, 2, 6);
    }

    function pluck(uint256 tokenId, string memory keyPrefix, string[] memory sourceArray, uint256 minQuantity, uint256 maxQuantity) internal pure returns (string memory) {
        uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId))));
        uint256 quantity = (rand % (maxQuantity-minQuantity)) + minQuantity;

        uint256 luckRand = random(string(abi.encodePacked("LUCKY?", toString(tokenId))));
        bool lucky = (luckRand % 100) == 42;
        if (lucky) {
            quantity = 3*quantity;
        }

        string memory resource = sourceArray[rand % sourceArray.length];
        string memory output = string(abi.encodePacked(toString(quantity), " ", resource));
        return output;
    }

    function tokenURI(uint256 tokenId) override public view returns (string memory) {
        string[13] memory parts;
        parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">';

        parts[1] = getCommon(tokenId);

        parts[2] = '</text><text x="10" y="40" class="base">';

        parts[3] = getLimited(tokenId);

        parts[4] = '</text><text x="10" y="60" class="base">';

        parts[5] = getMoreLimited(tokenId);

        parts[6] = '</text><text x="10" y="80" class="base">';

        parts[7] = getRare(tokenId);

        parts[8] = '</text><text x="10" y="100" class="base">';

        parts[9] = getMoreRare(tokenId);

        parts[10] = '</text></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]));
        output = string(abi.encodePacked(output, parts[9], parts[10]));
        
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Pack #', toString(tokenId), '", "description": "Randomized collections of resources for adventurers generated and stored on chain. Feel free to use Resources in any way you want.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
        output = string(abi.encodePacked('data:application/json;base64,', json));

        return output;
    }

    function claim(uint256 tokenId) public nonReentrant {
        require(tokenId > 8000 && tokenId < 9576, "Token ID invalid");
        _safeMint(_msgSender(), tokenId);
    }
   
    function claimForLoot(uint256 tokenId) public nonReentrant {
        require(tokenId > 0 && tokenId < 8001, "Token ID invalid");
        require(loot.ownerOf(tokenId) == msg.sender, "Not Loot owner");
        _safeMint(_msgSender(), tokenId);
    }
    
    function ownerClaim(uint256 tokenId) public nonReentrant onlyOwner {
        require(tokenId > 9575 && tokenId < 10001, "Token ID invalid");
        _safeMint(owner(), tokenId);
    }
    
    function toString(uint256 value) internal pure returns (string memory) {
    // Inspired by OraclizeAPI's implementation - MIT license
    // 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);
    }
    
    constructor() ERC721("Resources for Adventurers", "RESC") Ownable() {}
}

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimForLoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCommon","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLimited","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMoreLimited","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMoreRare","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRare","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180608001604052806040518060400160405280600e81526020017f706c616e6b73206f6620576f6f6400000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f626f6c7473206f6620576f6f6c0000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f696e676f7473206f662049726f6e00000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f626c6f636b73206f662053746f6e650000000000000000000000000000000000815250815250600c9060046200010b92919062000817565b506040518060a001604052806040518060400160405280601081526020017f6869646573206f66204c6561746865720000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f62617273206f6620537465656c0000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f626f6c7473206f66204c696e656e00000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f7363726f6c6c73206f662050617065720000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f706965636573206f6620426f6e65000000000000000000000000000000000000815250815250600d9060056200024e9291906200087e565b5060405180606001604052806040518060400160405280600d81526020017f626f6c7473206f662053696c6b0000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f62617273206f662053696c76657200000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f62617273206f662042726f6e7a65000000000000000000000000000000000000815250815250600e9060036200031b929190620008e5565b506040518060a001604052806040518060400160405280601081526020017f62617273206f6620506c6174696e756d0000000000000000000000000000000081525081526020016040518060400160405280601181526020017f736c756773206f6620546974616e69756d00000000000000000000000000000081525081526020016040518060400160405280601381526020017f626f6c7473206f662042726967687473696c6b0000000000000000000000000081525081526020016040518060400160405280601581526020017f73686561746873206f6620447261676f6e736b696e000000000000000000000081525081526020016040518060400160405280601281526020017f736c616273206f662044656d6f6e686964650000000000000000000000000000815250815250600f9060056200045e9291906200087e565b506040518060e001604052806040518060400160405280601781526020017f7669616c73206f6620446976696e6520457373656e636500000000000000000081525081526020016040518060400160405280601481526020017f7669616c73206f662044656d6f6e20426c6f6f6400000000000000000000000081525081526020016040518060400160405280601681526020017f7669616c73206f6620536f6c617220457373656e73650000000000000000000081525081526020016040518060400160405280601681526020017f7669616c73206f66204c756e617220457373656e73650000000000000000000081525081526020016040518060400160405280601581526020017f7669616c73206f6620566f696420457373656e6365000000000000000000000081525081526020016040518060400160405280601d81526020017f7361746368656c73206f6620457465726e616c2047656d73746f6e657300000081525081526020016040518060400160405280601e81526020017f7669616c73206f662044697374696c6c65642047686f7374205661706f7200008152508152506010906007620006179291906200094c565b5073ff9c1b15b16263c61d017ee9f65c50e4ae0113d7601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200067a57600080fd5b506040518060400160405280601981526020017f5265736f757263657320666f7220416476656e747572657273000000000000008152506040518060400160405280600481526020017f52455343000000000000000000000000000000000000000000000000000000008152508160009080519060200190620006ff929190620009b3565b50806001908051906020019062000718929190620009b3565b5050506001600a8190555062000743620007376200074960201b60201c565b6200075160201b60201c565b62000b36565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280548282559060005260206000209081019282156200086b579160200282015b828111156200086a57825182908051906020019062000859929190620009b3565b509160200191906001019062000838565b5b5090506200087a919062000a44565b5090565b828054828255906000526020600020908101928215620008d2579160200282015b82811115620008d1578251829080519060200190620008c0929190620009b3565b50916020019190600101906200089f565b5b509050620008e1919062000a44565b5090565b82805482825590600052602060002090810192821562000939579160200282015b828111156200093857825182908051906020019062000927929190620009b3565b509160200191906001019062000906565b5b50905062000948919062000a44565b5090565b828054828255906000526020600020908101928215620009a0579160200282015b828111156200099f5782518290805190602001906200098e929190620009b3565b50916020019190600101906200096d565b5b509050620009af919062000a44565b5090565b828054620009c19062000ad1565b90600052602060002090601f016020900481019282620009e5576000855562000a31565b82601f1062000a0057805160ff191683800117855562000a31565b8280016001018555821562000a31579182015b8281111562000a3057825182559160200191906001019062000a13565b5b50905062000a40919062000a6c565b5090565b5b8082111562000a68576000818162000a5e919062000a8b565b5060010162000a45565b5090565b5b8082111562000a8757600081600090555060010162000a6d565b5090565b50805462000a999062000ad1565b6000825580601f1062000aad575062000ace565b601f01602090049060005260206000209081019062000acd919062000a6c565b5b50565b6000600282049050600182168062000aea57607f821691505b6020821081141562000b015762000b0062000b07565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614df88062000b466000396000f3fe6080604052600436106101c25760003560e01c80636352211e116100f7578063a90b9c7211610095578063e497d4f111610064578063e497d4f114610655578063e985e9c514610692578063f2fde38b146106cf578063f356b3a1146106f8576101c2565b8063a90b9c72146105a8578063b88d4fde146105e5578063c87b56dd1461060e578063d0e30db01461064b576101c2565b80638da5cb5b116100d15780638da5cb5b146104ec57806395d89b41146105175780639d01b45514610542578063a22cb4651461057f576101c2565b80636352211e1461045b57806370a0823114610498578063715018a6146104d5576101c2565b8063379607f511610164578063434f48c41161013e578063434f48c41461038f57806347d8636a146103b85780634f6ccce7146103e1578063615be4e21461041e576101c2565b8063379607f5146103265780633ccfd60b1461034f57806342842e0e14610366576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd1461029557806323b872dd146102c05780632f745c59146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e9919061366b565b610735565b6040516101fb9190613d5a565b60405180910390f35b34801561021057600080fd5b506102196107af565b6040516102269190613d75565b60405180910390f35b34801561023b57600080fd5b50610256600480360381019061025191906136c5565b610841565b6040516102639190613cf3565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e919061362b565b6108c6565b005b3480156102a157600080fd5b506102aa6109de565b6040516102b79190614017565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190613515565b6109eb565b005b3480156102f557600080fd5b50610310600480360381019061030b919061362b565b610a4b565b60405161031d9190614017565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906136c5565b610af0565b005b34801561035b57600080fd5b50610364610bab565b005b34801561037257600080fd5b5061038d60048036038101906103889190613515565b610c76565b005b34801561039b57600080fd5b506103b660048036038101906103b191906136c5565b610c96565b005b3480156103c457600080fd5b506103df60048036038101906103da91906136c5565b610dcd565b005b3480156103ed57600080fd5b50610408600480360381019061040391906136c5565b610f9f565b6040516104159190614017565b60405180910390f35b34801561042a57600080fd5b50610445600480360381019061044091906136c5565b611010565b6040516104529190613d75565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906136c5565b61112e565b60405161048f9190613cf3565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba919061347b565b6111e0565b6040516104cc9190614017565b60405180910390f35b3480156104e157600080fd5b506104ea611298565b005b3480156104f857600080fd5b50610501611320565b60405161050e9190613cf3565b60405180910390f35b34801561052357600080fd5b5061052c61134a565b6040516105399190613d75565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906136c5565b6113dc565b6040516105769190613d75565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a191906135eb565b6114fa565b005b3480156105b457600080fd5b506105cf60048036038101906105ca91906136c5565b61167b565b6040516105dc9190613d75565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190613568565b611799565b005b34801561061a57600080fd5b50610635600480360381019061063091906136c5565b6117fb565b6040516106429190613d75565b60405180910390f35b610653611be7565b005b34801561066157600080fd5b5061067c600480360381019061067791906136c5565b611c65565b6040516106899190613d75565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906134d5565b611d83565b6040516106c69190613d5a565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f1919061347b565b611e17565b005b34801561070457600080fd5b5061071f600480360381019061071a91906136c5565b611f0f565b60405161072c9190613d75565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a857506107a78261202d565b5b9050919050565b6060600080546107be90614296565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea90614296565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b600061084c8261210f565b61088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290613f17565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108d18261112e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990613f97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096161217b565b73ffffffffffffffffffffffffffffffffffffffff161480610990575061098f8161098a61217b565b611d83565b5b6109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613e97565b60405180910390fd5b6109d98383612183565b505050565b6000600880549050905090565b6109fc6109f661217b565b8261223c565b610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613fb7565b60405180910390fd5b610a4683838361231a565b505050565b6000610a56836111e0565b8210610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613d97565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613ff7565b60405180910390fd5b6002600a81905550611f4081118015610b50575061256881105b610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613f57565b60405180910390fd5b610ba0610b9a61217b565b82612576565b6001600a8190555050565b610bb361217b565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611320565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613f37565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c72573d6000803e3d6000fd5b5050565b610c9183838360405180602001604052806000815250611799565b505050565b6002600a541415610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613ff7565b60405180910390fd5b6002600a81905550610cec61217b565b73ffffffffffffffffffffffffffffffffffffffff16610d0a611320565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613f37565b60405180910390fd5b61256781118015610d72575061271181105b610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613f57565b60405180910390fd5b610dc2610dbc611320565b82612576565b6001600a8190555050565b6002600a541415610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613ff7565b60405180910390fd5b6002600a81905550600081118015610e2c5750611f4181105b610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613f57565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610edd9190614017565b60206040518083038186803b158015610ef557600080fd5b505afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d91906134a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613e17565b60405180910390fd5b610f94610f8e61217b565b82612576565b6001600a8190555050565b6000610fa96109de565b8210610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613fd7565b60405180910390fd5b60088281548110610ffe57610ffd61442f565b5b90600052602060002001549050919050565b6060611127826040518060400160405280600781526020017f4c494d4954454400000000000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b8282101561111a57838290600052602060002001805461108d90614296565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990614296565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b50505050508152602001906001019061106e565b50505050604b6064612594565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613ed7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890613eb7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112a061217b565b73ffffffffffffffffffffffffffffffffffffffff166112be611320565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90613f37565b60405180910390fd5b61131e60006126bb565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461135990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461138590614296565b80156113d25780601f106113a7576101008083540402835291602001916113d2565b820191906000526020600020905b8154815290600101906020018083116113b557829003601f168201915b5050505050905090565b60606114f3826040518060400160405280600881526020017f4d4f5245524152450000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b828210156114e657838290600052602060002001805461145990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461148590614296565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b50505050508152602001906001019061143a565b5050505060026006612594565b9050919050565b61150261217b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790613e57565b60405180910390fd5b806005600061157d61217b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661162a61217b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166f9190613d5a565b60405180910390a35050565b6060611792826040518060400160405280600481526020017f5241524500000000000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b828210156117855783829060005260206000200180546116f890614296565b80601f016020809104026020016040519081016040528092919081815260200182805461172490614296565b80156117715780601f1061174657610100808354040283529160200191611771565b820191906000526020600020905b81548152906001019060200180831161175457829003601f168201915b5050505050815260200190600101906116d9565b50505050600a6019612594565b9050919050565b6117aa6117a461217b565b8361223c565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613fb7565b60405180910390fd5b6117f584848484612781565b50505050565b6060611805613365565b60405180610120016040528060fd8152602001614c5e60fd9139816000600d81106118335761183261442f565b5b602002018190525061184483611f0f565b816001600d81106118585761185761442f565b5b6020020181905250604051806060016040528060288152602001614d9b60289139816002600d811061188d5761188c61442f565b5b602002018190525061189e83611010565b816003600d81106118b2576118b161442f565b5b6020020181905250604051806060016040528060288152602001614be560289139816004600d81106118e7576118e661442f565b5b60200201819052506118f883611c65565b816005600d811061190c5761190b61442f565b5b6020020181905250604051806060016040528060288152602001614c0d60289139816006600d81106119415761194061442f565b5b60200201819052506119528361167b565b816007600d81106119665761196561442f565b5b6020020181905250604051806060016040528060298152602001614c3560299139816008600d811061199b5761199a61442f565b5b60200201819052506119ac836113dc565b816009600d81106119c0576119bf61442f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600a600d8110611a1257611a1161442f565b5b60200201819052506000816000600d8110611a3057611a2f61442f565b5b6020020151826001600d8110611a4957611a4861442f565b5b6020020151836002600d8110611a6257611a6161442f565b5b6020020151846003600d8110611a7b57611a7a61442f565b5b6020020151856004600d8110611a9457611a9361442f565b5b6020020151866005600d8110611aad57611aac61442f565b5b6020020151876006600d8110611ac657611ac561442f565b5b6020020151886007600d8110611adf57611ade61442f565b5b6020020151896008600d8110611af857611af761442f565b5b6020020151604051602001611b1599989796959493929190613bbc565b604051602081830303815290604052905080826009600d8110611b3b57611b3a61442f565b5b602002015183600a600d8110611b5457611b5361442f565b5b6020020151604051602001611b6b93929190613b8b565b60405160208183030381529060405290506000611bb8611b8a866127dd565b611b938461293e565b604051602001611ba4929190613c8c565b60405160208183030381529060405261293e565b905080604051602001611bcb9190613cd1565b6040516020818303038152906040529150819350505050919050565b611bef61217b565b73ffffffffffffffffffffffffffffffffffffffff16611c0d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90613f37565b60405180910390fd5b565b6060611d7c826040518060400160405280600b81526020017f4d4f52454c494d49544544000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b82821015611d6f578382906000526020600020018054611ce290614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0e90614296565b8015611d5b5780601f10611d3057610100808354040283529160200191611d5b565b820191906000526020600020905b815481529060010190602001808311611d3e57829003601f168201915b505050505081526020019060010190611cc3565b5050505060146032612594565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1f61217b565b73ffffffffffffffffffffffffffffffffffffffff16611e3d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613f37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613dd7565b60405180910390fd5b611f0c816126bb565b50565b6060612026826040518060400160405280600681526020017f434f4d4d4f4e0000000000000000000000000000000000000000000000000000815250600c805480602002602001604051908101604052809291908181526020016000905b82821015612019578382906000526020600020018054611f8c90614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb890614296565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b505050505081526020019060010190611f6d565b50505050609660c8612594565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612108575061210782612ad6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121f68361112e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122478261210f565b612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613e77565b60405180910390fd5b60006122918361112e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230057508373ffffffffffffffffffffffffffffffffffffffff166122e884610841565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231157506123108185611d83565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233a8261112e565b73ffffffffffffffffffffffffffffffffffffffff1614612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613f77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f790613e37565b60405180910390fd5b61240b838383612b40565b612416600082612183565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246691906141ac565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bd91906140cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612590828260405180602001604052806000815250612c54565b5050565b606060006125ca866125a5896127dd565b6040516020016125b6929190613b67565b604051602081830303815290604052612caf565b905060008485856125db91906141ac565b836125e69190614342565b6125f091906140cb565b905060006126246126008a6127dd565b6040516020016126109190613c6a565b604051602081830303815290604052612caf565b90506000602a6064836126379190614342565b14905080156126505782600361264d9190614152565b92505b6000888951866126609190614342565b815181106126715761267061442f565b5b602002602001015190506000612686856127dd565b82604051602001612698929190613c3b565b604051602081830303815290604052905080965050505050505095945050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61278c84848461231a565b61279884848484612ce2565b6127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce90613db7565b60405180910390fd5b50505050565b60606000821415612825576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612939565b600082905060005b60008214612857578080612840906142f9565b915050600a826128509190614121565b915061282d565b60008167ffffffffffffffff8111156128735761287261445e565b5b6040519080825280601f01601f1916602001820160405280156128a55781602001600182028036833780820191505090505b5090505b60008514612932576001826128be91906141ac565b9150600a856128cd9190614342565b60306128d991906140cb565b60f81b8183815181106128ef576128ee61442f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561292b9190614121565b94506128a9565b8093505050505b919050565b606060008251905060008114156129675760405180602001604052806000815250915050612ad1565b6000600360028361297891906140cb565b6129829190614121565b600461298e9190614152565b9050600060208261299f91906140cb565b67ffffffffffffffff8111156129b8576129b761445e565b5b6040519080825280601f01601f1916602001820160405280156129ea5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614d5b604091399050600181016020830160005b86811015612a8e5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612a15565b506003860660018114612aa85760028114612ab857612ac3565b613d3d60f01b6002830352612ac3565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b4b838383612e79565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8e57612b8981612e7e565b612bcd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bcc57612bcb8382612ec7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1057612c0b81613034565b612c4f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c4e57612c4d8282613105565b5b5b505050565b612c5e8383613184565b612c6b6000848484612ce2565b612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190613db7565b60405180910390fd5b505050565b600081604051602001612cc29190613b50565b6040516020818303038152906040528051906020012060001c9050919050565b6000612d038473ffffffffffffffffffffffffffffffffffffffff16613352565b15612e6c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d2c61217b565b8786866040518563ffffffff1660e01b8152600401612d4e9493929190613d0e565b602060405180830381600087803b158015612d6857600080fd5b505af1925050508015612d9957506040513d601f19601f82011682018060405250810190612d969190613698565b60015b612e1c573d8060008114612dc9576040519150601f19603f3d011682016040523d82523d6000602084013e612dce565b606091505b50600081511415612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b90613db7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e71565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ed4846111e0565b612ede91906141ac565b9050600060076000848152602001908152602001600020549050818114612fc3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061304891906141ac565b90506000600960008481526020019081526020016000205490506000600883815481106130785761307761442f565b5b90600052602060002001549050806008838154811061309a5761309961442f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130e9576130e8614400565b5b6001900381819060005260206000200160009055905550505050565b6000613110836111e0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131eb90613ef7565b60405180910390fd5b6131fd8161210f565b1561323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323490613df7565b60405180910390fd5b61324960008383612b40565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461329991906140cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b604051806101a00160405280600d905b60608152602001906001900390816133755790505090565b60006133a061339b84614057565b614032565b9050828152602081018484840111156133bc576133bb614492565b5b6133c7848285614254565b509392505050565b6000813590506133de81614b88565b92915050565b6000815190506133f381614b88565b92915050565b60008135905061340881614b9f565b92915050565b60008135905061341d81614bb6565b92915050565b60008151905061343281614bb6565b92915050565b600082601f83011261344d5761344c61448d565b5b813561345d84826020860161338d565b91505092915050565b60008135905061347581614bcd565b92915050565b6000602082840312156134915761349061449c565b5b600061349f848285016133cf565b91505092915050565b6000602082840312156134be576134bd61449c565b5b60006134cc848285016133e4565b91505092915050565b600080604083850312156134ec576134eb61449c565b5b60006134fa858286016133cf565b925050602061350b858286016133cf565b9150509250929050565b60008060006060848603121561352e5761352d61449c565b5b600061353c868287016133cf565b935050602061354d868287016133cf565b925050604061355e86828701613466565b9150509250925092565b600080600080608085870312156135825761358161449c565b5b6000613590878288016133cf565b94505060206135a1878288016133cf565b93505060406135b287828801613466565b925050606085013567ffffffffffffffff8111156135d3576135d2614497565b5b6135df87828801613438565b91505092959194509250565b600080604083850312156136025761360161449c565b5b6000613610858286016133cf565b9250506020613621858286016133f9565b9150509250929050565b600080604083850312156136425761364161449c565b5b6000613650858286016133cf565b925050602061366185828601613466565b9150509250929050565b6000602082840312156136815761368061449c565b5b600061368f8482850161340e565b91505092915050565b6000602082840312156136ae576136ad61449c565b5b60006136bc84828501613423565b91505092915050565b6000602082840312156136db576136da61449c565b5b60006136e984828501613466565b91505092915050565b6136fb816141e0565b82525050565b61370a816141f2565b82525050565b600061371b82614088565b613725818561409e565b9350613735818560208601614263565b61373e816144a1565b840191505092915050565b600061375482614093565b61375e81856140af565b935061376e818560208601614263565b613777816144a1565b840191505092915050565b600061378d82614093565b61379781856140c0565b93506137a7818560208601614263565b80840191505092915050565b60006137c0602b836140af565b91506137cb826144b2565b604082019050919050565b60006137e36032836140af565b91506137ee82614501565b604082019050919050565b60006138066026836140af565b915061381182614550565b604082019050919050565b6000613829601c836140af565b91506138348261459f565b602082019050919050565b600061384c600e836140af565b9150613857826145c8565b602082019050919050565b600061386f6024836140af565b915061387a826145f1565b604082019050919050565b60006138926019836140af565b915061389d82614640565b602082019050919050565b60006138b560bc836140c0565b91506138c082614669565b60bc82019050919050565b60006138d86006836140c0565b91506138e382614750565b600682019050919050565b60006138fb602c836140af565b915061390682614779565b604082019050919050565b600061391e6001836140c0565b9150613929826147c8565b600182019050919050565b60006139416038836140af565b915061394c826147f1565b604082019050919050565b6000613964602a836140af565b915061396f82614840565b604082019050919050565b60006139876029836140af565b91506139928261488f565b604082019050919050565b60006139aa6002836140c0565b91506139b5826148de565b600282019050919050565b60006139cd6020836140af565b91506139d882614907565b602082019050919050565b60006139f0602c836140af565b91506139fb82614930565b604082019050919050565b6000613a136020836140af565b9150613a1e8261497f565b602082019050919050565b6000613a366010836140af565b9150613a41826149a8565b602082019050919050565b6000613a596029836140af565b9150613a64826149d1565b604082019050919050565b6000613a7c6021836140af565b9150613a8782614a20565b604082019050919050565b6000613a9f6010836140c0565b9150613aaa82614a6f565b601082019050919050565b6000613ac2601d836140c0565b9150613acd82614a98565b601d82019050919050565b6000613ae56031836140af565b9150613af082614ac1565b604082019050919050565b6000613b08602c836140af565b9150613b1382614b10565b604082019050919050565b6000613b2b601f836140af565b9150613b3682614b5f565b602082019050919050565b613b4a8161424a565b82525050565b6000613b5c8284613782565b915081905092915050565b6000613b738285613782565b9150613b7f8284613782565b91508190509392505050565b6000613b978286613782565b9150613ba38285613782565b9150613baf8284613782565b9150819050949350505050565b6000613bc8828c613782565b9150613bd4828b613782565b9150613be0828a613782565b9150613bec8289613782565b9150613bf88288613782565b9150613c048287613782565b9150613c108286613782565b9150613c1c8285613782565b9150613c288284613782565b91508190509a9950505050505050505050565b6000613c478285613782565b9150613c5282613911565b9150613c5e8284613782565b91508190509392505050565b6000613c75826138cb565b9150613c818284613782565b915081905092915050565b6000613c9782613a92565b9150613ca38285613782565b9150613cae826138a8565b9150613cba8284613782565b9150613cc58261399d565b91508190509392505050565b6000613cdc82613ab5565b9150613ce88284613782565b915081905092915050565b6000602082019050613d0860008301846136f2565b92915050565b6000608082019050613d2360008301876136f2565b613d3060208301866136f2565b613d3d6040830185613b41565b8181036060830152613d4f8184613710565b905095945050505050565b6000602082019050613d6f6000830184613701565b92915050565b60006020820190508181036000830152613d8f8184613749565b905092915050565b60006020820190508181036000830152613db0816137b3565b9050919050565b60006020820190508181036000830152613dd0816137d6565b9050919050565b60006020820190508181036000830152613df0816137f9565b9050919050565b60006020820190508181036000830152613e108161381c565b9050919050565b60006020820190508181036000830152613e308161383f565b9050919050565b60006020820190508181036000830152613e5081613862565b9050919050565b60006020820190508181036000830152613e7081613885565b9050919050565b60006020820190508181036000830152613e90816138ee565b9050919050565b60006020820190508181036000830152613eb081613934565b9050919050565b60006020820190508181036000830152613ed081613957565b9050919050565b60006020820190508181036000830152613ef08161397a565b9050919050565b60006020820190508181036000830152613f10816139c0565b9050919050565b60006020820190508181036000830152613f30816139e3565b9050919050565b60006020820190508181036000830152613f5081613a06565b9050919050565b60006020820190508181036000830152613f7081613a29565b9050919050565b60006020820190508181036000830152613f9081613a4c565b9050919050565b60006020820190508181036000830152613fb081613a6f565b9050919050565b60006020820190508181036000830152613fd081613ad8565b9050919050565b60006020820190508181036000830152613ff081613afb565b9050919050565b6000602082019050818103600083015261401081613b1e565b9050919050565b600060208201905061402c6000830184613b41565b92915050565b600061403c61404d565b905061404882826142c8565b919050565b6000604051905090565b600067ffffffffffffffff8211156140725761407161445e565b5b61407b826144a1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d68261424a565b91506140e18361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411657614115614373565b5b828201905092915050565b600061412c8261424a565b91506141378361424a565b925082614147576141466143a2565b5b828204905092915050565b600061415d8261424a565b91506141688361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a1576141a0614373565b5b828202905092915050565b60006141b78261424a565b91506141c28361424a565b9250828210156141d5576141d4614373565b5b828203905092915050565b60006141eb8261422a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614281578082015181840152602081019050614266565b83811115614290576000848401525b50505050565b600060028204905060018216806142ae57607f821691505b602082108114156142c2576142c16143d1565b5b50919050565b6142d1826144a1565b810181811067ffffffffffffffff821117156142f0576142ef61445e565b5b80604052505050565b60006143048261424a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561433757614336614373565b5b600182019050919050565b600061434d8261424a565b91506143588361424a565b925082614368576143676143a2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f74204c6f6f74206f776e6572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f222c20226465736372697074696f6e223a202252616e646f6d697a656420636f60008201527f6c6c656374696f6e73206f66207265736f757263657320666f7220616476656e60208201527f7475726572732067656e65726174656420616e642073746f726564206f6e206360408201527f6861696e2e204665656c206672656520746f20757365205265736f757263657360608201527f20696e20616e792077617920796f752077616e742e222c2022696d616765223a60808201527f2022646174613a696d6167652f7376672b786d6c3b6261736536342c0000000060a082015250565b7f4c55434b593f0000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20225061636b202300000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614b91816141e0565b8114614b9c57600080fd5b50565b614ba8816141f2565b8114614bb357600080fd5b50565b614bbf816141fe565b8114614bca57600080fd5b50565b614bd68161424a565b8114614be157600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea26469706673582212201f0e2e4263d7db68612d752fabcf8a6c0b3a3276d39f6c164435e8531919ba4d64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101c25760003560e01c80636352211e116100f7578063a90b9c7211610095578063e497d4f111610064578063e497d4f114610655578063e985e9c514610692578063f2fde38b146106cf578063f356b3a1146106f8576101c2565b8063a90b9c72146105a8578063b88d4fde146105e5578063c87b56dd1461060e578063d0e30db01461064b576101c2565b80638da5cb5b116100d15780638da5cb5b146104ec57806395d89b41146105175780639d01b45514610542578063a22cb4651461057f576101c2565b80636352211e1461045b57806370a0823114610498578063715018a6146104d5576101c2565b8063379607f511610164578063434f48c41161013e578063434f48c41461038f57806347d8636a146103b85780634f6ccce7146103e1578063615be4e21461041e576101c2565b8063379607f5146103265780633ccfd60b1461034f57806342842e0e14610366576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd1461029557806323b872dd146102c05780632f745c59146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e9919061366b565b610735565b6040516101fb9190613d5a565b60405180910390f35b34801561021057600080fd5b506102196107af565b6040516102269190613d75565b60405180910390f35b34801561023b57600080fd5b50610256600480360381019061025191906136c5565b610841565b6040516102639190613cf3565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e919061362b565b6108c6565b005b3480156102a157600080fd5b506102aa6109de565b6040516102b79190614017565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190613515565b6109eb565b005b3480156102f557600080fd5b50610310600480360381019061030b919061362b565b610a4b565b60405161031d9190614017565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906136c5565b610af0565b005b34801561035b57600080fd5b50610364610bab565b005b34801561037257600080fd5b5061038d60048036038101906103889190613515565b610c76565b005b34801561039b57600080fd5b506103b660048036038101906103b191906136c5565b610c96565b005b3480156103c457600080fd5b506103df60048036038101906103da91906136c5565b610dcd565b005b3480156103ed57600080fd5b50610408600480360381019061040391906136c5565b610f9f565b6040516104159190614017565b60405180910390f35b34801561042a57600080fd5b50610445600480360381019061044091906136c5565b611010565b6040516104529190613d75565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906136c5565b61112e565b60405161048f9190613cf3565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba919061347b565b6111e0565b6040516104cc9190614017565b60405180910390f35b3480156104e157600080fd5b506104ea611298565b005b3480156104f857600080fd5b50610501611320565b60405161050e9190613cf3565b60405180910390f35b34801561052357600080fd5b5061052c61134a565b6040516105399190613d75565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906136c5565b6113dc565b6040516105769190613d75565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a191906135eb565b6114fa565b005b3480156105b457600080fd5b506105cf60048036038101906105ca91906136c5565b61167b565b6040516105dc9190613d75565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190613568565b611799565b005b34801561061a57600080fd5b50610635600480360381019061063091906136c5565b6117fb565b6040516106429190613d75565b60405180910390f35b610653611be7565b005b34801561066157600080fd5b5061067c600480360381019061067791906136c5565b611c65565b6040516106899190613d75565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906134d5565b611d83565b6040516106c69190613d5a565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f1919061347b565b611e17565b005b34801561070457600080fd5b5061071f600480360381019061071a91906136c5565b611f0f565b60405161072c9190613d75565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a857506107a78261202d565b5b9050919050565b6060600080546107be90614296565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea90614296565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b600061084c8261210f565b61088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290613f17565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108d18261112e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990613f97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096161217b565b73ffffffffffffffffffffffffffffffffffffffff161480610990575061098f8161098a61217b565b611d83565b5b6109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613e97565b60405180910390fd5b6109d98383612183565b505050565b6000600880549050905090565b6109fc6109f661217b565b8261223c565b610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613fb7565b60405180910390fd5b610a4683838361231a565b505050565b6000610a56836111e0565b8210610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90613d97565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613ff7565b60405180910390fd5b6002600a81905550611f4081118015610b50575061256881105b610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613f57565b60405180910390fd5b610ba0610b9a61217b565b82612576565b6001600a8190555050565b610bb361217b565b73ffffffffffffffffffffffffffffffffffffffff16610bd1611320565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613f37565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c72573d6000803e3d6000fd5b5050565b610c9183838360405180602001604052806000815250611799565b505050565b6002600a541415610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613ff7565b60405180910390fd5b6002600a81905550610cec61217b565b73ffffffffffffffffffffffffffffffffffffffff16610d0a611320565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613f37565b60405180910390fd5b61256781118015610d72575061271181105b610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613f57565b60405180910390fd5b610dc2610dbc611320565b82612576565b6001600a8190555050565b6002600a541415610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613ff7565b60405180910390fd5b6002600a81905550600081118015610e2c5750611f4181105b610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613f57565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610edd9190614017565b60206040518083038186803b158015610ef557600080fd5b505afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d91906134a8565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90613e17565b60405180910390fd5b610f94610f8e61217b565b82612576565b6001600a8190555050565b6000610fa96109de565b8210610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613fd7565b60405180910390fd5b60088281548110610ffe57610ffd61442f565b5b90600052602060002001549050919050565b6060611127826040518060400160405280600781526020017f4c494d4954454400000000000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b8282101561111a57838290600052602060002001805461108d90614296565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990614296565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b50505050508152602001906001019061106e565b50505050604b6064612594565b9050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613ed7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890613eb7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112a061217b565b73ffffffffffffffffffffffffffffffffffffffff166112be611320565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90613f37565b60405180910390fd5b61131e60006126bb565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461135990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461138590614296565b80156113d25780601f106113a7576101008083540402835291602001916113d2565b820191906000526020600020905b8154815290600101906020018083116113b557829003601f168201915b5050505050905090565b60606114f3826040518060400160405280600881526020017f4d4f5245524152450000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b828210156114e657838290600052602060002001805461145990614296565b80601f016020809104026020016040519081016040528092919081815260200182805461148590614296565b80156114d25780601f106114a7576101008083540402835291602001916114d2565b820191906000526020600020905b8154815290600101906020018083116114b557829003601f168201915b50505050508152602001906001019061143a565b5050505060026006612594565b9050919050565b61150261217b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790613e57565b60405180910390fd5b806005600061157d61217b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661162a61217b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161166f9190613d5a565b60405180910390a35050565b6060611792826040518060400160405280600481526020017f5241524500000000000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b828210156117855783829060005260206000200180546116f890614296565b80601f016020809104026020016040519081016040528092919081815260200182805461172490614296565b80156117715780601f1061174657610100808354040283529160200191611771565b820191906000526020600020905b81548152906001019060200180831161175457829003601f168201915b5050505050815260200190600101906116d9565b50505050600a6019612594565b9050919050565b6117aa6117a461217b565b8361223c565b6117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613fb7565b60405180910390fd5b6117f584848484612781565b50505050565b6060611805613365565b60405180610120016040528060fd8152602001614c5e60fd9139816000600d81106118335761183261442f565b5b602002018190525061184483611f0f565b816001600d81106118585761185761442f565b5b6020020181905250604051806060016040528060288152602001614d9b60289139816002600d811061188d5761188c61442f565b5b602002018190525061189e83611010565b816003600d81106118b2576118b161442f565b5b6020020181905250604051806060016040528060288152602001614be560289139816004600d81106118e7576118e661442f565b5b60200201819052506118f883611c65565b816005600d811061190c5761190b61442f565b5b6020020181905250604051806060016040528060288152602001614c0d60289139816006600d81106119415761194061442f565b5b60200201819052506119528361167b565b816007600d81106119665761196561442f565b5b6020020181905250604051806060016040528060298152602001614c3560299139816008600d811061199b5761199a61442f565b5b60200201819052506119ac836113dc565b816009600d81106119c0576119bf61442f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600a600d8110611a1257611a1161442f565b5b60200201819052506000816000600d8110611a3057611a2f61442f565b5b6020020151826001600d8110611a4957611a4861442f565b5b6020020151836002600d8110611a6257611a6161442f565b5b6020020151846003600d8110611a7b57611a7a61442f565b5b6020020151856004600d8110611a9457611a9361442f565b5b6020020151866005600d8110611aad57611aac61442f565b5b6020020151876006600d8110611ac657611ac561442f565b5b6020020151886007600d8110611adf57611ade61442f565b5b6020020151896008600d8110611af857611af761442f565b5b6020020151604051602001611b1599989796959493929190613bbc565b604051602081830303815290604052905080826009600d8110611b3b57611b3a61442f565b5b602002015183600a600d8110611b5457611b5361442f565b5b6020020151604051602001611b6b93929190613b8b565b60405160208183030381529060405290506000611bb8611b8a866127dd565b611b938461293e565b604051602001611ba4929190613c8c565b60405160208183030381529060405261293e565b905080604051602001611bcb9190613cd1565b6040516020818303038152906040529150819350505050919050565b611bef61217b565b73ffffffffffffffffffffffffffffffffffffffff16611c0d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90613f37565b60405180910390fd5b565b6060611d7c826040518060400160405280600b81526020017f4d4f52454c494d49544544000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b82821015611d6f578382906000526020600020018054611ce290614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0e90614296565b8015611d5b5780601f10611d3057610100808354040283529160200191611d5b565b820191906000526020600020905b815481529060010190602001808311611d3e57829003601f168201915b505050505081526020019060010190611cc3565b5050505060146032612594565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e1f61217b565b73ffffffffffffffffffffffffffffffffffffffff16611e3d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90613f37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613dd7565b60405180910390fd5b611f0c816126bb565b50565b6060612026826040518060400160405280600681526020017f434f4d4d4f4e0000000000000000000000000000000000000000000000000000815250600c805480602002602001604051908101604052809291908181526020016000905b82821015612019578382906000526020600020018054611f8c90614296565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb890614296565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b505050505081526020019060010190611f6d565b50505050609660c8612594565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612108575061210782612ad6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121f68361112e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122478261210f565b612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613e77565b60405180910390fd5b60006122918361112e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230057508373ffffffffffffffffffffffffffffffffffffffff166122e884610841565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231157506123108185611d83565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233a8261112e565b73ffffffffffffffffffffffffffffffffffffffff1614612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613f77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f790613e37565b60405180910390fd5b61240b838383612b40565b612416600082612183565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246691906141ac565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bd91906140cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612590828260405180602001604052806000815250612c54565b5050565b606060006125ca866125a5896127dd565b6040516020016125b6929190613b67565b604051602081830303815290604052612caf565b905060008485856125db91906141ac565b836125e69190614342565b6125f091906140cb565b905060006126246126008a6127dd565b6040516020016126109190613c6a565b604051602081830303815290604052612caf565b90506000602a6064836126379190614342565b14905080156126505782600361264d9190614152565b92505b6000888951866126609190614342565b815181106126715761267061442f565b5b602002602001015190506000612686856127dd565b82604051602001612698929190613c3b565b604051602081830303815290604052905080965050505050505095945050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61278c84848461231a565b61279884848484612ce2565b6127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce90613db7565b60405180910390fd5b50505050565b60606000821415612825576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612939565b600082905060005b60008214612857578080612840906142f9565b915050600a826128509190614121565b915061282d565b60008167ffffffffffffffff8111156128735761287261445e565b5b6040519080825280601f01601f1916602001820160405280156128a55781602001600182028036833780820191505090505b5090505b60008514612932576001826128be91906141ac565b9150600a856128cd9190614342565b60306128d991906140cb565b60f81b8183815181106128ef576128ee61442f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561292b9190614121565b94506128a9565b8093505050505b919050565b606060008251905060008114156129675760405180602001604052806000815250915050612ad1565b6000600360028361297891906140cb565b6129829190614121565b600461298e9190614152565b9050600060208261299f91906140cb565b67ffffffffffffffff8111156129b8576129b761445e565b5b6040519080825280601f01601f1916602001820160405280156129ea5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614d5b604091399050600181016020830160005b86811015612a8e5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612a15565b506003860660018114612aa85760028114612ab857612ac3565b613d3d60f01b6002830352612ac3565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b4b838383612e79565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8e57612b8981612e7e565b612bcd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bcc57612bcb8382612ec7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1057612c0b81613034565b612c4f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c4e57612c4d8282613105565b5b5b505050565b612c5e8383613184565b612c6b6000848484612ce2565b612caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca190613db7565b60405180910390fd5b505050565b600081604051602001612cc29190613b50565b6040516020818303038152906040528051906020012060001c9050919050565b6000612d038473ffffffffffffffffffffffffffffffffffffffff16613352565b15612e6c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d2c61217b565b8786866040518563ffffffff1660e01b8152600401612d4e9493929190613d0e565b602060405180830381600087803b158015612d6857600080fd5b505af1925050508015612d9957506040513d601f19601f82011682018060405250810190612d969190613698565b60015b612e1c573d8060008114612dc9576040519150601f19603f3d011682016040523d82523d6000602084013e612dce565b606091505b50600081511415612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b90613db7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e71565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ed4846111e0565b612ede91906141ac565b9050600060076000848152602001908152602001600020549050818114612fc3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061304891906141ac565b90506000600960008481526020019081526020016000205490506000600883815481106130785761307761442f565b5b90600052602060002001549050806008838154811061309a5761309961442f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130e9576130e8614400565b5b6001900381819060005260206000200160009055905550505050565b6000613110836111e0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131eb90613ef7565b60405180910390fd5b6131fd8161210f565b1561323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323490613df7565b60405180910390fd5b61324960008383612b40565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461329991906140cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b604051806101a00160405280600d905b60608152602001906001900390816133755790505090565b60006133a061339b84614057565b614032565b9050828152602081018484840111156133bc576133bb614492565b5b6133c7848285614254565b509392505050565b6000813590506133de81614b88565b92915050565b6000815190506133f381614b88565b92915050565b60008135905061340881614b9f565b92915050565b60008135905061341d81614bb6565b92915050565b60008151905061343281614bb6565b92915050565b600082601f83011261344d5761344c61448d565b5b813561345d84826020860161338d565b91505092915050565b60008135905061347581614bcd565b92915050565b6000602082840312156134915761349061449c565b5b600061349f848285016133cf565b91505092915050565b6000602082840312156134be576134bd61449c565b5b60006134cc848285016133e4565b91505092915050565b600080604083850312156134ec576134eb61449c565b5b60006134fa858286016133cf565b925050602061350b858286016133cf565b9150509250929050565b60008060006060848603121561352e5761352d61449c565b5b600061353c868287016133cf565b935050602061354d868287016133cf565b925050604061355e86828701613466565b9150509250925092565b600080600080608085870312156135825761358161449c565b5b6000613590878288016133cf565b94505060206135a1878288016133cf565b93505060406135b287828801613466565b925050606085013567ffffffffffffffff8111156135d3576135d2614497565b5b6135df87828801613438565b91505092959194509250565b600080604083850312156136025761360161449c565b5b6000613610858286016133cf565b9250506020613621858286016133f9565b9150509250929050565b600080604083850312156136425761364161449c565b5b6000613650858286016133cf565b925050602061366185828601613466565b9150509250929050565b6000602082840312156136815761368061449c565b5b600061368f8482850161340e565b91505092915050565b6000602082840312156136ae576136ad61449c565b5b60006136bc84828501613423565b91505092915050565b6000602082840312156136db576136da61449c565b5b60006136e984828501613466565b91505092915050565b6136fb816141e0565b82525050565b61370a816141f2565b82525050565b600061371b82614088565b613725818561409e565b9350613735818560208601614263565b61373e816144a1565b840191505092915050565b600061375482614093565b61375e81856140af565b935061376e818560208601614263565b613777816144a1565b840191505092915050565b600061378d82614093565b61379781856140c0565b93506137a7818560208601614263565b80840191505092915050565b60006137c0602b836140af565b91506137cb826144b2565b604082019050919050565b60006137e36032836140af565b91506137ee82614501565b604082019050919050565b60006138066026836140af565b915061381182614550565b604082019050919050565b6000613829601c836140af565b91506138348261459f565b602082019050919050565b600061384c600e836140af565b9150613857826145c8565b602082019050919050565b600061386f6024836140af565b915061387a826145f1565b604082019050919050565b60006138926019836140af565b915061389d82614640565b602082019050919050565b60006138b560bc836140c0565b91506138c082614669565b60bc82019050919050565b60006138d86006836140c0565b91506138e382614750565b600682019050919050565b60006138fb602c836140af565b915061390682614779565b604082019050919050565b600061391e6001836140c0565b9150613929826147c8565b600182019050919050565b60006139416038836140af565b915061394c826147f1565b604082019050919050565b6000613964602a836140af565b915061396f82614840565b604082019050919050565b60006139876029836140af565b91506139928261488f565b604082019050919050565b60006139aa6002836140c0565b91506139b5826148de565b600282019050919050565b60006139cd6020836140af565b91506139d882614907565b602082019050919050565b60006139f0602c836140af565b91506139fb82614930565b604082019050919050565b6000613a136020836140af565b9150613a1e8261497f565b602082019050919050565b6000613a366010836140af565b9150613a41826149a8565b602082019050919050565b6000613a596029836140af565b9150613a64826149d1565b604082019050919050565b6000613a7c6021836140af565b9150613a8782614a20565b604082019050919050565b6000613a9f6010836140c0565b9150613aaa82614a6f565b601082019050919050565b6000613ac2601d836140c0565b9150613acd82614a98565b601d82019050919050565b6000613ae56031836140af565b9150613af082614ac1565b604082019050919050565b6000613b08602c836140af565b9150613b1382614b10565b604082019050919050565b6000613b2b601f836140af565b9150613b3682614b5f565b602082019050919050565b613b4a8161424a565b82525050565b6000613b5c8284613782565b915081905092915050565b6000613b738285613782565b9150613b7f8284613782565b91508190509392505050565b6000613b978286613782565b9150613ba38285613782565b9150613baf8284613782565b9150819050949350505050565b6000613bc8828c613782565b9150613bd4828b613782565b9150613be0828a613782565b9150613bec8289613782565b9150613bf88288613782565b9150613c048287613782565b9150613c108286613782565b9150613c1c8285613782565b9150613c288284613782565b91508190509a9950505050505050505050565b6000613c478285613782565b9150613c5282613911565b9150613c5e8284613782565b91508190509392505050565b6000613c75826138cb565b9150613c818284613782565b915081905092915050565b6000613c9782613a92565b9150613ca38285613782565b9150613cae826138a8565b9150613cba8284613782565b9150613cc58261399d565b91508190509392505050565b6000613cdc82613ab5565b9150613ce88284613782565b915081905092915050565b6000602082019050613d0860008301846136f2565b92915050565b6000608082019050613d2360008301876136f2565b613d3060208301866136f2565b613d3d6040830185613b41565b8181036060830152613d4f8184613710565b905095945050505050565b6000602082019050613d6f6000830184613701565b92915050565b60006020820190508181036000830152613d8f8184613749565b905092915050565b60006020820190508181036000830152613db0816137b3565b9050919050565b60006020820190508181036000830152613dd0816137d6565b9050919050565b60006020820190508181036000830152613df0816137f9565b9050919050565b60006020820190508181036000830152613e108161381c565b9050919050565b60006020820190508181036000830152613e308161383f565b9050919050565b60006020820190508181036000830152613e5081613862565b9050919050565b60006020820190508181036000830152613e7081613885565b9050919050565b60006020820190508181036000830152613e90816138ee565b9050919050565b60006020820190508181036000830152613eb081613934565b9050919050565b60006020820190508181036000830152613ed081613957565b9050919050565b60006020820190508181036000830152613ef08161397a565b9050919050565b60006020820190508181036000830152613f10816139c0565b9050919050565b60006020820190508181036000830152613f30816139e3565b9050919050565b60006020820190508181036000830152613f5081613a06565b9050919050565b60006020820190508181036000830152613f7081613a29565b9050919050565b60006020820190508181036000830152613f9081613a4c565b9050919050565b60006020820190508181036000830152613fb081613a6f565b9050919050565b60006020820190508181036000830152613fd081613ad8565b9050919050565b60006020820190508181036000830152613ff081613afb565b9050919050565b6000602082019050818103600083015261401081613b1e565b9050919050565b600060208201905061402c6000830184613b41565b92915050565b600061403c61404d565b905061404882826142c8565b919050565b6000604051905090565b600067ffffffffffffffff8211156140725761407161445e565b5b61407b826144a1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d68261424a565b91506140e18361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561411657614115614373565b5b828201905092915050565b600061412c8261424a565b91506141378361424a565b925082614147576141466143a2565b5b828204905092915050565b600061415d8261424a565b91506141688361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141a1576141a0614373565b5b828202905092915050565b60006141b78261424a565b91506141c28361424a565b9250828210156141d5576141d4614373565b5b828203905092915050565b60006141eb8261422a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614281578082015181840152602081019050614266565b83811115614290576000848401525b50505050565b600060028204905060018216806142ae57607f821691505b602082108114156142c2576142c16143d1565b5b50919050565b6142d1826144a1565b810181811067ffffffffffffffff821117156142f0576142ef61445e565b5b80604052505050565b60006143048261424a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561433757614336614373565b5b600182019050919050565b600061434d8261424a565b91506143588361424a565b925082614368576143676143a2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f74204c6f6f74206f776e6572000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f222c20226465736372697074696f6e223a202252616e646f6d697a656420636f60008201527f6c6c656374696f6e73206f66207265736f757263657320666f7220616476656e60208201527f7475726572732067656e65726174656420616e642073746f726564206f6e206360408201527f6861696e2e204665656c206672656520746f20757365205265736f757263657360608201527f20696e20616e792077617920796f752077616e742e222c2022696d616765223a60808201527f2022646174613a696d6167652f7376672b786d6c3b6261736536342c0000000060a082015250565b7f4c55434b593f0000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20225061636b202300000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614b91816141e0565b8114614b9c57600080fd5b50565b614ba8816141f2565b8114614bb357600080fd5b50565b614bbf816141fe565b8114614bca57600080fd5b50565b614bd68161424a565b8114614be157600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea26469706673582212201f0e2e4263d7db68612d752fabcf8a6c0b3a3276d39f6c164435e8531919ba4d64736f6c63430008070033

Deployed Bytecode Sourcemap

44465:6071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38317:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25443:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27002:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26525:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38957:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27892:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38625:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49088:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45599:143;;;;;;;;;;;;;:::i;:::-;;28302:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49538:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49274:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39147:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46103:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25137:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24867:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9889:94;;;;;;;;;;;;;:::i;:::-;;9238:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25612:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46569:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27295:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46424:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28558:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47473:1607;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45750:46;;;:::i;:::-;;46258:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27661:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10138:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45950:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38317:224;38419:4;38458:35;38443:50;;;:11;:50;;;;:90;;;;38497:36;38521:11;38497:23;:36::i;:::-;38443:90;38436:97;;38317:224;;;:::o;25443:100::-;25497:13;25530:5;25523:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25443:100;:::o;27002:221::-;27078:7;27106:16;27114:7;27106;:16::i;:::-;27098:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27191:15;:24;27207:7;27191:24;;;;;;;;;;;;;;;;;;;;;27184:31;;27002:221;;;:::o;26525:411::-;26606:13;26622:23;26637:7;26622:14;:23::i;:::-;26606:39;;26670:5;26664:11;;:2;:11;;;;26656:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26764:5;26748:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26773:37;26790:5;26797:12;:10;:12::i;:::-;26773:16;:37::i;:::-;26748:62;26726:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26907:21;26916:2;26920:7;26907:8;:21::i;:::-;26595:341;26525:411;;:::o;38957:113::-;39018:7;39045:10;:17;;;;39038:24;;38957:113;:::o;27892:339::-;28087:41;28106:12;:10;:12::i;:::-;28120:7;28087:18;:41::i;:::-;28079:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28195:28;28205:4;28211:2;28215:7;28195:9;:28::i;:::-;27892:339;;;:::o;38625:256::-;38722:7;38758:23;38775:5;38758:16;:23::i;:::-;38750:5;:31;38742:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38847:12;:19;38860:5;38847:19;;;;;;;;;;;;;;;:26;38867:5;38847:26;;;;;;;;;;;;38840:33;;38625:256;;;;:::o;49088:175::-;12169:1;12765:7;;:19;;12757:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12169:1;12898:7;:18;;;;49169:4:::1;49159:7;:14;:32;;;;;49187:4;49177:7;:14;49159:32;49151:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;49223:32;49233:12;:10;:12::i;:::-;49247:7;49223:9;:32::i;:::-;12125:1:::0;13077:7;:22;;;;49088:175;:::o;45599:143::-;9469:12;:10;:12::i;:::-;9458:23;;:7;:5;:7::i;:::-;:23;;;9450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45647:15:::1;45665:21;45647:39;;45705:10;45697:28;;:37;45726:7;45697:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45636:106;45599:143::o:0;28302:185::-;28440:39;28457:4;28463:2;28467:7;28440:39;;;;;;;;;;;;:16;:39::i;:::-;28302:185;;;:::o;49538:186::-;12169:1;12765:7;;:19;;12757:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12169:1;12898:7;:18;;;;9469:12:::1;:10;:12::i;:::-;9458:23;;:7;:5;:7::i;:::-;:23;;;9450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49634:4:::2;49624:7;:14;:33;;;;;49652:5;49642:7;:15;49624:33;49616:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49689:27;49699:7;:5;:7::i;:::-;49708;49689:9;:27::i;:::-;12125:1:::0;13077:7;:22;;;;49538:186;:::o;49274:252::-;12169:1;12765:7;;:19;;12757:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12169:1;12898:7;:18;;;;49362:1:::1;49352:7;:11;:29;;;;;49377:4;49367:7;:14;49352:29;49344:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;49446:10;49421:35;;:4;;;;;;;;;;;:12;;;49434:7;49421:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;49413:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49486:32;49496:12;:10;:12::i;:::-;49510:7;49486:9;:32::i;:::-;12125:1:::0;13077:7;:22;;;;49274:252;:::o;39147:233::-;39222:7;39258:30;:28;:30::i;:::-;39250:5;:38;39242:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39355:10;39366:5;39355:17;;;;;;;;:::i;:::-;;;;;;;;;;39348:24;;39147:233;;;:::o;46103:147::-;46161:13;46194:48;46200:7;46194:48;;;;;;;;;;;;;;;;;46220:12;46194:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46234:2;46238:3;46194:5;:48::i;:::-;46187:55;;46103:147;;;:::o;25137:239::-;25209:7;25229:13;25245:7;:16;25253:7;25245:16;;;;;;;;;;;;;;;;;;;;;25229:32;;25297:1;25280:19;;:5;:19;;;;25272:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25363:5;25356:12;;;25137:239;;;:::o;24867:208::-;24939:7;24984:1;24967:19;;:5;:19;;;;24959:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25051:9;:16;25061:5;25051:16;;;;;;;;;;;;;;;;25044:23;;24867:208;;;:::o;9889:94::-;9469:12;:10;:12::i;:::-;9458:23;;:7;:5;:7::i;:::-;:23;;;9450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9954:21:::1;9972:1;9954:9;:21::i;:::-;9889:94::o:0;9238:87::-;9284:7;9311:6;;;;;;;;;;;9304:13;;9238:87;:::o;25612:104::-;25668:13;25701:7;25694:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25612:104;:::o;46569:147::-;46628:13;46661:47;46667:7;46661:47;;;;;;;;;;;;;;;;;46688:13;46661:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46703:1;46706;46661:5;:47::i;:::-;46654:54;;46569:147;;;:::o;27295:295::-;27410:12;:10;:12::i;:::-;27398:24;;:8;:24;;;;27390:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:8;27465:18;:32;27484:12;:10;:12::i;:::-;27465:32;;;;;;;;;;;;;;;:42;27498:8;27465:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27563:8;27534:48;;27549:12;:10;:12::i;:::-;27534:48;;;27573:8;27534:48;;;;;;:::i;:::-;;;;;;;;27295:295;;:::o;46424:137::-;46479:13;46512:41;46518:7;46512:41;;;;;;;;;;;;;;;;;46535:9;46512:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46546:2;46550;46512:5;:41::i;:::-;46505:48;;46424:137;;;:::o;28558:328::-;28733:41;28752:12;:10;:12::i;:::-;28766:7;28733:18;:41::i;:::-;28725:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28839:39;28853:4;28859:2;28863:7;28872:5;28839:13;:39::i;:::-;28558:328;;;;:::o;47473:1607::-;47538:13;47564:23;;:::i;:::-;47598:266;;;;;;;;;;;;;;;;;:5;47604:1;47598:8;;;;;;;:::i;:::-;;;;;:266;;;;47888:18;47898:7;47888:9;:18::i;:::-;47877:5;47883:1;47877:8;;;;;;;:::i;:::-;;;;;:29;;;;47919:53;;;;;;;;;;;;;;;;;:5;47925:1;47919:8;;;;;;;:::i;:::-;;;;;:53;;;;47996:19;48007:7;47996:10;:19::i;:::-;47985:5;47991:1;47985:8;;;;;;;:::i;:::-;;;;;:30;;;;48028:53;;;;;;;;;;;;;;;;;:5;48034:1;48028:8;;;;;;;:::i;:::-;;;;;:53;;;;48105:23;48120:7;48105:14;:23::i;:::-;48094:5;48100:1;48094:8;;;;;;;:::i;:::-;;;;;:34;;;;48141:53;;;;;;;;;;;;;;;;;:5;48147:1;48141:8;;;;;;;:::i;:::-;;;;;:53;;;;48218:16;48226:7;48218;:16::i;:::-;48207:5;48213:1;48207:8;;;;;;;:::i;:::-;;;;;:27;;;;48247:54;;;;;;;;;;;;;;;;;:5;48253:1;48247:8;;;;;;;:::i;:::-;;;;;:54;;;;48325:20;48337:7;48325:11;:20::i;:::-;48314:5;48320:1;48314:8;;;;;;;:::i;:::-;;;;;:31;;;;48358:27;;;;;;;;;;;;;;;;;:5;48364:2;48358:9;;;;;;;:::i;:::-;;;;;:27;;;;48398:20;48445:5;48451:1;48445:8;;;;;;;:::i;:::-;;;;;;48455:5;48461:1;48455:8;;;;;;;:::i;:::-;;;;;;48465:5;48471:1;48465:8;;;;;;;:::i;:::-;;;;;;48475:5;48481:1;48475:8;;;;;;;:::i;:::-;;;;;;48485:5;48491:1;48485:8;;;;;;;:::i;:::-;;;;;;48495:5;48501:1;48495:8;;;;;;;:::i;:::-;;;;;;48505:5;48511:1;48505:8;;;;;;;:::i;:::-;;;;;;48515:5;48521:1;48515:8;;;;;;;:::i;:::-;;;;;;48525:5;48531:1;48525:8;;;;;;;:::i;:::-;;;;;;48428:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48398:137;;48579:6;48587:5;48593:1;48587:8;;;;;;;:::i;:::-;;;;;;48597:5;48603:2;48597:9;;;;;;;:::i;:::-;;;;;;48562:45;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48546:62;;48629:18;48650:313;48714:17;48723:7;48714:8;:17::i;:::-;48925:28;48945:6;48925:13;:28::i;:::-;48677:283;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48650:13;:313::i;:::-;48629:334;;49040:4;48990:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;48974:72;;49066:6;49059:13;;;;;47473:1607;;;:::o;45750:46::-;9469:12;:10;:12::i;:::-;9458:23;;:7;:5;:7::i;:::-;:23;;;9450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45750:46::o;46258:158::-;46320:13;46353:55;46359:7;46353:55;;;;;;;;;;;;;;;;;46383:16;46353:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46401:2;46405;46353:5;:55::i;:::-;46346:62;;46258:158;;;:::o;27661:164::-;27758:4;27782:18;:25;27801:5;27782:25;;;;;;;;;;;;;;;:35;27808:8;27782:35;;;;;;;;;;;;;;;;;;;;;;;;;27775:42;;27661:164;;;;:::o;10138:192::-;9469:12;:10;:12::i;:::-;9458:23;;:7;:5;:7::i;:::-;:23;;;9450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10247:1:::1;10227:22;;:8;:22;;;;10219:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10303:19;10313:8;10303:9;:19::i;:::-;10138:192:::0;:::o;45950:145::-;46007:13;46040:47;46046:7;46040:47;;;;;;;;;;;;;;;;;46065:11;46040:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46078:3;46083;46040:5;:47::i;:::-;46033:54;;45950:145;;;:::o;24498:305::-;24600:4;24652:25;24637:40;;;:11;:40;;;;:105;;;;24709:33;24694:48;;;:11;:48;;;;24637:105;:158;;;;24759:36;24783:11;24759:23;:36::i;:::-;24637:158;24617:178;;24498:305;;;:::o;30396:127::-;30461:4;30513:1;30485:30;;:7;:16;30493:7;30485:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30478:37;;30396:127;;;:::o;8114:98::-;8167:7;8194:10;8187:17;;8114:98;:::o;34378:174::-;34480:2;34453:15;:24;34469:7;34453:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34536:7;34532:2;34498:46;;34507:23;34522:7;34507:14;:23::i;:::-;34498:46;;;;;;;;;;;;34378:174;;:::o;30690:348::-;30783:4;30808:16;30816:7;30808;:16::i;:::-;30800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30884:13;30900:23;30915:7;30900:14;:23::i;:::-;30884:39;;30953:5;30942:16;;:7;:16;;;:51;;;;30986:7;30962:31;;:20;30974:7;30962:11;:20::i;:::-;:31;;;30942:51;:87;;;;30997:32;31014:5;31021:7;30997:16;:32::i;:::-;30942:87;30934:96;;;30690:348;;;;:::o;33682:578::-;33841:4;33814:31;;:23;33829:7;33814:14;:23::i;:::-;:31;;;33806:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33924:1;33910:16;;:2;:16;;;;33902:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33980:39;34001:4;34007:2;34011:7;33980:20;:39::i;:::-;34084:29;34101:1;34105:7;34084:8;:29::i;:::-;34145:1;34126:9;:15;34136:4;34126:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34174:1;34157:9;:13;34167:2;34157:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34205:2;34186:7;:16;34194:7;34186:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34244:7;34240:2;34225:27;;34234:4;34225:27;;;;;;;;;;;;33682:578;;;:::o;31380:110::-;31456:26;31466:2;31470:7;31456:26;;;;;;;;;;;;:9;:26::i;:::-;31380:110;;:::o;46724:741::-;46875:13;46901:12;46916:62;46947:9;46958:17;46967:7;46958:8;:17::i;:::-;46930:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46916:6;:62::i;:::-;46901:77;;46989:16;47045:11;47029;47017;:23;;;;:::i;:::-;47009:4;:32;;;;:::i;:::-;47008:48;;;;:::i;:::-;46989:67;;47069:16;47088:61;47129:17;47138:7;47129:8;:17::i;:::-;47102:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;47088:6;:61::i;:::-;47069:80;;47160:10;47193:2;47185:3;47174:8;:14;;;;:::i;:::-;47173:22;47160:35;;47210:5;47206:59;;;47245:8;47243:1;:10;;;;:::i;:::-;47232:21;;47206:59;47277:22;47302:11;47321;:18;47314:4;:25;;;;:::i;:::-;47302:38;;;;;;;;:::i;:::-;;;;;;;;47277:63;;47351:20;47398:18;47407:8;47398;:18::i;:::-;47423:8;47381:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47351:82;;47451:6;47444:13;;;;;;;;46724:741;;;;;;;:::o;10338:173::-;10394:16;10413:6;;;;;;;;;;;10394:25;;10439:8;10430:6;;:17;;;;;;;;;;;;;;;;;;10494:8;10463:40;;10484:8;10463:40;;;;;;;;;;;;10383:128;10338:173;:::o;29768:315::-;29925:28;29935:4;29941:2;29945:7;29925:9;:28::i;:::-;29972:48;29995:4;30001:2;30005:7;30014:5;29972:22;:48::i;:::-;29964:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:315;;;;:::o;49736:715::-;49792:13;50014:1;50005:5;:10;50001:53;;;50032:10;;;;;;;;;;;;;;;;;;;;;50001:53;50064:12;50079:5;50064:20;;50095:14;50120:78;50135:1;50127:4;:9;50120:78;;50153:8;;;;;:::i;:::-;;;;50184:2;50176:10;;;;;:::i;:::-;;;50120:78;;;50208:19;50240:6;50230:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50208:39;;50258:154;50274:1;50265:5;:10;50258:154;;50302:1;50292:11;;;;;:::i;:::-;;;50369:2;50361:5;:10;;;;:::i;:::-;50348:2;:24;;;;:::i;:::-;50335:39;;50318:6;50325;50318:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;50398:2;50389:11;;;;;:::i;:::-;;;50258:154;;;50436:6;50422:21;;;;;49736:715;;;;:::o;50887:1607::-;50945:13;50971:11;50985:4;:11;50971:25;;51018:1;51011:3;:8;51007:23;;;51021:9;;;;;;;;;;;;;;;;;51007:23;51082:18;51120:1;51115;51109:3;:7;;;;:::i;:::-;51108:13;;;;:::i;:::-;51103:1;:19;;;;:::i;:::-;51082:40;;51180:19;51225:2;51212:10;:15;;;;:::i;:::-;51202:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51180:48;;51241:18;51262:5;;;;;;;;;;;;;;;;;51241:26;;51331:1;51324:5;51320:13;51376:2;51368:6;51364:15;51427:1;51395:777;51450:3;51447:1;51444:10;51395:777;;;51505:1;51502;51498:9;51493:14;;51563:8;51558:1;51552:4;51548:12;51542:19;51538:34;51643:4;51635:5;51631:2;51627:14;51623:25;51613:8;51609:40;51603:47;51682:3;51679:1;51675:11;51668:18;;51773:4;51764;51756:5;51752:2;51748:14;51744:25;51734:8;51730:40;51724:47;51720:58;51715:3;51711:68;51704:75;;51811:3;51808:1;51804:11;51797:18;;51901:4;51892;51884:5;51881:1;51877:13;51873:24;51863:8;51859:39;51853:46;51849:57;51844:3;51840:67;51833:74;;51939:3;51936:1;51932:11;51925:18;;52021:4;52012;52005:5;52001:16;51991:8;51987:31;51981:38;51977:49;51972:3;51968:59;51961:66;;52061:3;52056;52052:13;52045:20;;52103:3;52092:9;52085:22;52155:1;52144:9;52140:17;52127:30;;51474:698;;51395:777;;;51399:44;52204:1;52199:3;52195:11;52225:1;52220:84;;;;52323:1;52318:82;;;;52188:212;;52220:84;52281:6;52276:3;52272:16;52268:1;52257:9;52253:17;52246:43;52220:84;;52318:82;52379:4;52374:3;52370:14;52366:1;52355:9;52351:17;52344:41;52188:212;;52431:10;52423:6;52416:26;51289:1164;;52479:6;52465:21;;;;;;50887:1607;;;;:::o;23105:157::-;23190:4;23229:25;23214:40;;;:11;:40;;;;23207:47;;23105:157;;;:::o;39993:589::-;40137:45;40164:4;40170:2;40174:7;40137:26;:45::i;:::-;40215:1;40199:18;;:4;:18;;;40195:187;;;40234:40;40266:7;40234:31;:40::i;:::-;40195:187;;;40304:2;40296:10;;:4;:10;;;40292:90;;40323:47;40356:4;40362:7;40323:32;:47::i;:::-;40292:90;40195:187;40410:1;40396:16;;:2;:16;;;40392:183;;;40429:45;40466:7;40429:36;:45::i;:::-;40392:183;;;40502:4;40496:10;;:2;:10;;;40492:83;;40523:40;40551:2;40555:7;40523:27;:40::i;:::-;40492:83;40392:183;39993:589;;;:::o;31717:321::-;31847:18;31853:2;31857:7;31847:5;:18::i;:::-;31898:54;31929:1;31933:2;31937:7;31946:5;31898:22;:54::i;:::-;31876:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31717:321;;;:::o;45804:138::-;45864:7;45926:5;45909:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;45899:34;;;;;;45891:43;;45884:50;;45804:138;;;:::o;35117:803::-;35272:4;35293:15;:2;:13;;;:15::i;:::-;35289:624;;;35345:2;35329:36;;;35366:12;:10;:12::i;:::-;35380:4;35386:7;35395:5;35329:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35325:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35592:1;35575:6;:13;:18;35571:272;;;35618:60;;;;;;;;;;:::i;:::-;;;;;;;;35571:272;35793:6;35787:13;35778:6;35774:2;35770:15;35763:38;35325:533;35462:45;;;35452:55;;;:6;:55;;;;35445:62;;;;;35289:624;35897:4;35890:11;;35117:803;;;;;;;:::o;36492:126::-;;;;:::o;41305:164::-;41409:10;:17;;;;41382:15;:24;41398:7;41382:24;;;;;;;;;;;:44;;;;41437:10;41453:7;41437:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41305:164;:::o;42096:988::-;42362:22;42412:1;42387:22;42404:4;42387:16;:22::i;:::-;:26;;;;:::i;:::-;42362:51;;42424:18;42445:17;:26;42463:7;42445:26;;;;;;;;;;;;42424:47;;42592:14;42578:10;:28;42574:328;;42623:19;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:34;42664:14;42645:34;;;;;;;;;;;;42623:56;;42729:11;42696:12;:18;42709:4;42696:18;;;;;;;;;;;;;;;:30;42715:10;42696:30;;;;;;;;;;;:44;;;;42846:10;42813:17;:30;42831:11;42813:30;;;;;;;;;;;:43;;;;42608:294;42574:328;42998:17;:26;43016:7;42998:26;;;;;;;;;;;42991:33;;;43042:12;:18;43055:4;43042:18;;;;;;;;;;;;;;;:34;43061:14;43042:34;;;;;;;;;;;43035:41;;;42177:907;;42096:988;;:::o;43379:1079::-;43632:22;43677:1;43657:10;:17;;;;:21;;;;:::i;:::-;43632:46;;43689:18;43710:15;:24;43726:7;43710:24;;;;;;;;;;;;43689:45;;44061:19;44083:10;44094:14;44083:26;;;;;;;;:::i;:::-;;;;;;;;;;44061:48;;44147:11;44122:10;44133;44122:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44258:10;44227:15;:28;44243:11;44227:28;;;;;;;;;;;:41;;;;44399:15;:24;44415:7;44399:24;;;;;;;;;;;44392:31;;;44434:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43450:1008;;;43379:1079;:::o;40883:221::-;40968:14;40985:20;41002:2;40985:16;:20::i;:::-;40968:37;;41043:7;41016:12;:16;41029:2;41016:16;;;;;;;;;;;;;;;:24;41033:6;41016:24;;;;;;;;;;;:34;;;;41090:6;41061:17;:26;41079:7;41061:26;;;;;;;;;;;:35;;;;40957:147;40883:221;;:::o;32374:382::-;32468:1;32454:16;;:2;:16;;;;32446:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32527:16;32535:7;32527;:16::i;:::-;32526:17;32518:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32589:45;32618:1;32622:2;32626:7;32589:20;:45::i;:::-;32664:1;32647:9;:13;32657:2;32647:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32695:2;32676:7;:16;32684:7;32676:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32740:7;32736:2;32715:33;;32732:1;32715:33;;;;;;;;;;;;32374:382;;:::o;15277:387::-;15337:4;15545:12;15612:7;15600:20;15592:28;;15655:1;15648:4;:8;15641:15;;;15277:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:143::-;625:5;656:6;650:13;641:22;;672:33;699:5;672:33;:::i;:::-;568:143;;;;:::o;717:133::-;760:5;798:6;785:20;776:29;;814:30;838:5;814:30;:::i;:::-;717:133;;;;:::o;856:137::-;901:5;939:6;926:20;917:29;;955:32;981:5;955:32;:::i;:::-;856:137;;;;:::o;999:141::-;1055:5;1086:6;1080:13;1071:22;;1102:32;1128:5;1102:32;:::i;:::-;999:141;;;;:::o;1159:338::-;1214:5;1263:3;1256:4;1248:6;1244:17;1240:27;1230:122;;1271:79;;:::i;:::-;1230:122;1388:6;1375:20;1413:78;1487:3;1479:6;1472:4;1464:6;1460:17;1413:78;:::i;:::-;1404:87;;1220:277;1159:338;;;;:::o;1503:139::-;1549:5;1587:6;1574:20;1565:29;;1603:33;1630:5;1603:33;:::i;:::-;1503:139;;;;:::o;1648:329::-;1707:6;1756:2;1744:9;1735:7;1731:23;1727:32;1724:119;;;1762:79;;:::i;:::-;1724:119;1882:1;1907:53;1952:7;1943:6;1932:9;1928:22;1907:53;:::i;:::-;1897:63;;1853:117;1648:329;;;;:::o;1983:351::-;2053:6;2102:2;2090:9;2081:7;2077:23;2073:32;2070:119;;;2108:79;;:::i;:::-;2070:119;2228:1;2253:64;2309:7;2300:6;2289:9;2285:22;2253:64;:::i;:::-;2243:74;;2199:128;1983:351;;;;:::o;2340:474::-;2408:6;2416;2465:2;2453:9;2444:7;2440:23;2436:32;2433:119;;;2471:79;;:::i;:::-;2433:119;2591:1;2616:53;2661:7;2652:6;2641:9;2637:22;2616:53;:::i;:::-;2606:63;;2562:117;2718:2;2744:53;2789:7;2780:6;2769:9;2765:22;2744:53;:::i;:::-;2734:63;;2689:118;2340:474;;;;;:::o;2820:619::-;2897:6;2905;2913;2962:2;2950:9;2941:7;2937:23;2933:32;2930:119;;;2968:79;;:::i;:::-;2930:119;3088:1;3113:53;3158:7;3149:6;3138:9;3134:22;3113:53;:::i;:::-;3103:63;;3059:117;3215:2;3241:53;3286:7;3277:6;3266:9;3262:22;3241:53;:::i;:::-;3231:63;;3186:118;3343:2;3369:53;3414:7;3405:6;3394:9;3390:22;3369:53;:::i;:::-;3359:63;;3314:118;2820:619;;;;;:::o;3445:943::-;3540:6;3548;3556;3564;3613:3;3601:9;3592:7;3588:23;3584:33;3581:120;;;3620:79;;:::i;:::-;3581:120;3740:1;3765:53;3810:7;3801:6;3790:9;3786:22;3765:53;:::i;:::-;3755:63;;3711:117;3867:2;3893:53;3938:7;3929:6;3918:9;3914:22;3893:53;:::i;:::-;3883:63;;3838:118;3995:2;4021:53;4066:7;4057:6;4046:9;4042:22;4021:53;:::i;:::-;4011:63;;3966:118;4151:2;4140:9;4136:18;4123:32;4182:18;4174:6;4171:30;4168:117;;;4204:79;;:::i;:::-;4168:117;4309:62;4363:7;4354:6;4343:9;4339:22;4309:62;:::i;:::-;4299:72;;4094:287;3445:943;;;;;;;:::o;4394:468::-;4459:6;4467;4516:2;4504:9;4495:7;4491:23;4487:32;4484:119;;;4522:79;;:::i;:::-;4484:119;4642:1;4667:53;4712:7;4703:6;4692:9;4688:22;4667:53;:::i;:::-;4657:63;;4613:117;4769:2;4795:50;4837:7;4828:6;4817:9;4813:22;4795:50;:::i;:::-;4785:60;;4740:115;4394:468;;;;;:::o;4868:474::-;4936:6;4944;4993:2;4981:9;4972:7;4968:23;4964:32;4961:119;;;4999:79;;:::i;:::-;4961:119;5119:1;5144:53;5189:7;5180:6;5169:9;5165:22;5144:53;:::i;:::-;5134:63;;5090:117;5246:2;5272:53;5317:7;5308:6;5297:9;5293:22;5272:53;:::i;:::-;5262:63;;5217:118;4868:474;;;;;:::o;5348:327::-;5406:6;5455:2;5443:9;5434:7;5430:23;5426:32;5423:119;;;5461:79;;:::i;:::-;5423:119;5581:1;5606:52;5650:7;5641:6;5630:9;5626:22;5606:52;:::i;:::-;5596:62;;5552:116;5348:327;;;;:::o;5681:349::-;5750:6;5799:2;5787:9;5778:7;5774:23;5770:32;5767:119;;;5805:79;;:::i;:::-;5767:119;5925:1;5950:63;6005:7;5996:6;5985:9;5981:22;5950:63;:::i;:::-;5940:73;;5896:127;5681:349;;;;:::o;6036:329::-;6095:6;6144:2;6132:9;6123:7;6119:23;6115:32;6112:119;;;6150:79;;:::i;:::-;6112:119;6270:1;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6241:117;6036:329;;;;:::o;6371:118::-;6458:24;6476:5;6458:24;:::i;:::-;6453:3;6446:37;6371:118;;:::o;6495:109::-;6576:21;6591:5;6576:21;:::i;:::-;6571:3;6564:34;6495:109;;:::o;6610:360::-;6696:3;6724:38;6756:5;6724:38;:::i;:::-;6778:70;6841:6;6836:3;6778:70;:::i;:::-;6771:77;;6857:52;6902:6;6897:3;6890:4;6883:5;6879:16;6857:52;:::i;:::-;6934:29;6956:6;6934:29;:::i;:::-;6929:3;6925:39;6918:46;;6700:270;6610:360;;;;:::o;6976:364::-;7064:3;7092:39;7125:5;7092:39;:::i;:::-;7147:71;7211:6;7206:3;7147:71;:::i;:::-;7140:78;;7227:52;7272:6;7267:3;7260:4;7253:5;7249:16;7227:52;:::i;:::-;7304:29;7326:6;7304:29;:::i;:::-;7299:3;7295:39;7288:46;;7068:272;6976:364;;;;:::o;7346:377::-;7452:3;7480:39;7513:5;7480:39;:::i;:::-;7535:89;7617:6;7612:3;7535:89;:::i;:::-;7528:96;;7633:52;7678:6;7673:3;7666:4;7659:5;7655:16;7633:52;:::i;:::-;7710:6;7705:3;7701:16;7694:23;;7456:267;7346:377;;;;:::o;7729:366::-;7871:3;7892:67;7956:2;7951:3;7892:67;:::i;:::-;7885:74;;7968:93;8057:3;7968:93;:::i;:::-;8086:2;8081:3;8077:12;8070:19;;7729:366;;;:::o;8101:::-;8243:3;8264:67;8328:2;8323:3;8264:67;:::i;:::-;8257:74;;8340:93;8429:3;8340:93;:::i;:::-;8458:2;8453:3;8449:12;8442:19;;8101:366;;;:::o;8473:::-;8615:3;8636:67;8700:2;8695:3;8636:67;:::i;:::-;8629:74;;8712:93;8801:3;8712:93;:::i;:::-;8830:2;8825:3;8821:12;8814:19;;8473:366;;;:::o;8845:::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:404::-;10493:3;10514:86;10596:3;10591;10514:86;:::i;:::-;10507:93;;10609;10698:3;10609:93;:::i;:::-;10727:3;10722;10718:13;10711:20;;10333:404;;;:::o;10743:400::-;10903:3;10924:84;11006:1;11001:3;10924:84;:::i;:::-;10917:91;;11017:93;11106:3;11017:93;:::i;:::-;11135:1;11130:3;11126:11;11119:18;;10743:400;;;:::o;11149:366::-;11291:3;11312:67;11376:2;11371:3;11312:67;:::i;:::-;11305:74;;11388:93;11477:3;11388:93;:::i;:::-;11506:2;11501:3;11497:12;11490:19;;11149:366;;;:::o;11521:400::-;11681:3;11702:84;11784:1;11779:3;11702:84;:::i;:::-;11695:91;;11795:93;11884:3;11795:93;:::i;:::-;11913:1;11908:3;11904:11;11897:18;;11521:400;;;:::o;11927:366::-;12069:3;12090:67;12154:2;12149:3;12090:67;:::i;:::-;12083:74;;12166:93;12255:3;12166:93;:::i;:::-;12284:2;12279:3;12275:12;12268:19;;11927:366;;;:::o;12299:::-;12441:3;12462:67;12526:2;12521:3;12462:67;:::i;:::-;12455:74;;12538:93;12627:3;12538:93;:::i;:::-;12656:2;12651:3;12647:12;12640:19;;12299:366;;;:::o;12671:::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12671:366;;;:::o;13043:400::-;13203:3;13224:84;13306:1;13301:3;13224:84;:::i;:::-;13217:91;;13317:93;13406:3;13317:93;:::i;:::-;13435:1;13430:3;13426:11;13419:18;;13043:400;;;:::o;13449:366::-;13591:3;13612:67;13676:2;13671:3;13612:67;:::i;:::-;13605:74;;13688:93;13777:3;13688:93;:::i;:::-;13806:2;13801:3;13797:12;13790:19;;13449:366;;;:::o;13821:::-;13963:3;13984:67;14048:2;14043:3;13984:67;:::i;:::-;13977:74;;14060:93;14149:3;14060:93;:::i;:::-;14178:2;14173:3;14169:12;14162:19;;13821:366;;;:::o;14193:::-;14335:3;14356:67;14420:2;14415:3;14356:67;:::i;:::-;14349:74;;14432:93;14521:3;14432:93;:::i;:::-;14550:2;14545:3;14541:12;14534:19;;14193:366;;;:::o;14565:::-;14707:3;14728:67;14792:2;14787:3;14728:67;:::i;:::-;14721:74;;14804:93;14893:3;14804:93;:::i;:::-;14922:2;14917:3;14913:12;14906:19;;14565:366;;;:::o;14937:::-;15079:3;15100:67;15164:2;15159:3;15100:67;:::i;:::-;15093:74;;15176:93;15265:3;15176:93;:::i;:::-;15294:2;15289:3;15285:12;15278:19;;14937:366;;;:::o;15309:::-;15451:3;15472:67;15536:2;15531:3;15472:67;:::i;:::-;15465:74;;15548:93;15637:3;15548:93;:::i;:::-;15666:2;15661:3;15657:12;15650:19;;15309:366;;;:::o;15681:402::-;15841:3;15862:85;15944:2;15939:3;15862:85;:::i;:::-;15855:92;;15956:93;16045:3;15956:93;:::i;:::-;16074:2;16069:3;16065:12;16058:19;;15681:402;;;:::o;16089:::-;16249:3;16270:85;16352:2;16347:3;16270:85;:::i;:::-;16263:92;;16364:93;16453:3;16364:93;:::i;:::-;16482:2;16477:3;16473:12;16466:19;;16089:402;;;:::o;16497:366::-;16639:3;16660:67;16724:2;16719:3;16660:67;:::i;:::-;16653:74;;16736:93;16825:3;16736:93;:::i;:::-;16854:2;16849:3;16845:12;16838:19;;16497:366;;;:::o;16869:::-;17011:3;17032:67;17096:2;17091:3;17032:67;:::i;:::-;17025:74;;17108:93;17197:3;17108:93;:::i;:::-;17226:2;17221:3;17217:12;17210:19;;16869:366;;;:::o;17241:::-;17383:3;17404:67;17468:2;17463:3;17404:67;:::i;:::-;17397:74;;17480:93;17569:3;17480:93;:::i;:::-;17598:2;17593:3;17589:12;17582:19;;17241:366;;;:::o;17613:118::-;17700:24;17718:5;17700:24;:::i;:::-;17695:3;17688:37;17613:118;;:::o;17737:275::-;17869:3;17891:95;17982:3;17973:6;17891:95;:::i;:::-;17884:102;;18003:3;17996:10;;17737:275;;;;:::o;18018:435::-;18198:3;18220:95;18311:3;18302:6;18220:95;:::i;:::-;18213:102;;18332:95;18423:3;18414:6;18332:95;:::i;:::-;18325:102;;18444:3;18437:10;;18018:435;;;;;:::o;18459:595::-;18687:3;18709:95;18800:3;18791:6;18709:95;:::i;:::-;18702:102;;18821:95;18912:3;18903:6;18821:95;:::i;:::-;18814:102;;18933:95;19024:3;19015:6;18933:95;:::i;:::-;18926:102;;19045:3;19038:10;;18459:595;;;;;;:::o;19060:1555::-;19576:3;19598:95;19689:3;19680:6;19598:95;:::i;:::-;19591:102;;19710:95;19801:3;19792:6;19710:95;:::i;:::-;19703:102;;19822:95;19913:3;19904:6;19822:95;:::i;:::-;19815:102;;19934:95;20025:3;20016:6;19934:95;:::i;:::-;19927:102;;20046:95;20137:3;20128:6;20046:95;:::i;:::-;20039:102;;20158:95;20249:3;20240:6;20158:95;:::i;:::-;20151:102;;20270:95;20361:3;20352:6;20270:95;:::i;:::-;20263:102;;20382:95;20473:3;20464:6;20382:95;:::i;:::-;20375:102;;20494:95;20585:3;20576:6;20494:95;:::i;:::-;20487:102;;20606:3;20599:10;;19060:1555;;;;;;;;;;;;:::o;20621:701::-;20902:3;20924:95;21015:3;21006:6;20924:95;:::i;:::-;20917:102;;21036:148;21180:3;21036:148;:::i;:::-;21029:155;;21201:95;21292:3;21283:6;21201:95;:::i;:::-;21194:102;;21313:3;21306:10;;20621:701;;;;;:::o;21328:541::-;21561:3;21583:148;21727:3;21583:148;:::i;:::-;21576:155;;21748:95;21839:3;21830:6;21748:95;:::i;:::-;21741:102;;21860:3;21853:10;;21328:541;;;;:::o;21875:1233::-;22358:3;22380:148;22524:3;22380:148;:::i;:::-;22373:155;;22545:95;22636:3;22627:6;22545:95;:::i;:::-;22538:102;;22657:148;22801:3;22657:148;:::i;:::-;22650:155;;22822:95;22913:3;22904:6;22822:95;:::i;:::-;22815:102;;22934:148;23078:3;22934:148;:::i;:::-;22927:155;;23099:3;23092:10;;21875:1233;;;;;:::o;23114:541::-;23347:3;23369:148;23513:3;23369:148;:::i;:::-;23362:155;;23534:95;23625:3;23616:6;23534:95;:::i;:::-;23527:102;;23646:3;23639:10;;23114:541;;;;:::o;23661:222::-;23754:4;23792:2;23781:9;23777:18;23769:26;;23805:71;23873:1;23862:9;23858:17;23849:6;23805:71;:::i;:::-;23661:222;;;;:::o;23889:640::-;24084:4;24122:3;24111:9;24107:19;24099:27;;24136:71;24204:1;24193:9;24189:17;24180:6;24136:71;:::i;:::-;24217:72;24285:2;24274:9;24270:18;24261:6;24217:72;:::i;:::-;24299;24367:2;24356:9;24352:18;24343:6;24299:72;:::i;:::-;24418:9;24412:4;24408:20;24403:2;24392:9;24388:18;24381:48;24446:76;24517:4;24508:6;24446:76;:::i;:::-;24438:84;;23889:640;;;;;;;:::o;24535:210::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24673:65;24735:1;24724:9;24720:17;24711:6;24673:65;:::i;:::-;24535:210;;;;:::o;24751:313::-;24864:4;24902:2;24891:9;24887:18;24879:26;;24951:9;24945:4;24941:20;24937:1;24926:9;24922:17;24915:47;24979:78;25052:4;25043:6;24979:78;:::i;:::-;24971:86;;24751:313;;;;:::o;25070:419::-;25236:4;25274:2;25263:9;25259:18;25251:26;;25323:9;25317:4;25313:20;25309:1;25298:9;25294:17;25287:47;25351:131;25477:4;25351:131;:::i;:::-;25343:139;;25070:419;;;:::o;25495:::-;25661:4;25699:2;25688:9;25684:18;25676:26;;25748:9;25742:4;25738:20;25734:1;25723:9;25719:17;25712:47;25776:131;25902:4;25776:131;:::i;:::-;25768:139;;25495:419;;;:::o;25920:::-;26086:4;26124:2;26113:9;26109:18;26101:26;;26173:9;26167:4;26163:20;26159:1;26148:9;26144:17;26137:47;26201:131;26327:4;26201:131;:::i;:::-;26193:139;;25920:419;;;:::o;26345:::-;26511:4;26549:2;26538:9;26534:18;26526:26;;26598:9;26592:4;26588:20;26584:1;26573:9;26569:17;26562:47;26626:131;26752:4;26626:131;:::i;:::-;26618:139;;26345:419;;;:::o;26770:::-;26936:4;26974:2;26963:9;26959:18;26951:26;;27023:9;27017:4;27013:20;27009:1;26998:9;26994:17;26987:47;27051:131;27177:4;27051:131;:::i;:::-;27043:139;;26770:419;;;:::o;27195:::-;27361:4;27399:2;27388:9;27384:18;27376:26;;27448:9;27442:4;27438:20;27434:1;27423:9;27419:17;27412:47;27476:131;27602:4;27476:131;:::i;:::-;27468:139;;27195:419;;;:::o;27620:::-;27786:4;27824:2;27813:9;27809:18;27801:26;;27873:9;27867:4;27863:20;27859:1;27848:9;27844:17;27837:47;27901:131;28027:4;27901:131;:::i;:::-;27893:139;;27620:419;;;:::o;28045:::-;28211:4;28249:2;28238:9;28234:18;28226:26;;28298:9;28292:4;28288:20;28284:1;28273:9;28269:17;28262:47;28326:131;28452:4;28326:131;:::i;:::-;28318:139;;28045:419;;;:::o;28470:::-;28636:4;28674:2;28663:9;28659:18;28651:26;;28723:9;28717:4;28713:20;28709:1;28698:9;28694:17;28687:47;28751:131;28877:4;28751:131;:::i;:::-;28743:139;;28470:419;;;:::o;28895:::-;29061:4;29099:2;29088:9;29084:18;29076:26;;29148:9;29142:4;29138:20;29134:1;29123:9;29119:17;29112:47;29176:131;29302:4;29176:131;:::i;:::-;29168:139;;28895:419;;;:::o;29320:::-;29486:4;29524:2;29513:9;29509:18;29501:26;;29573:9;29567:4;29563:20;29559:1;29548:9;29544:17;29537:47;29601:131;29727:4;29601:131;:::i;:::-;29593:139;;29320:419;;;:::o;29745:::-;29911:4;29949:2;29938:9;29934:18;29926:26;;29998:9;29992:4;29988:20;29984:1;29973:9;29969:17;29962:47;30026:131;30152:4;30026:131;:::i;:::-;30018:139;;29745:419;;;:::o;30170:::-;30336:4;30374:2;30363:9;30359:18;30351:26;;30423:9;30417:4;30413:20;30409:1;30398:9;30394:17;30387:47;30451:131;30577:4;30451:131;:::i;:::-;30443:139;;30170:419;;;:::o;30595:::-;30761:4;30799:2;30788:9;30784:18;30776:26;;30848:9;30842:4;30838:20;30834:1;30823:9;30819:17;30812:47;30876:131;31002:4;30876:131;:::i;:::-;30868:139;;30595:419;;;:::o;31020:::-;31186:4;31224:2;31213:9;31209:18;31201:26;;31273:9;31267:4;31263:20;31259:1;31248:9;31244:17;31237:47;31301:131;31427:4;31301:131;:::i;:::-;31293:139;;31020:419;;;:::o;31445:::-;31611:4;31649:2;31638:9;31634:18;31626:26;;31698:9;31692:4;31688:20;31684:1;31673:9;31669:17;31662:47;31726:131;31852:4;31726:131;:::i;:::-;31718:139;;31445:419;;;:::o;31870:::-;32036:4;32074:2;32063:9;32059:18;32051:26;;32123:9;32117:4;32113:20;32109:1;32098:9;32094:17;32087:47;32151:131;32277:4;32151:131;:::i;:::-;32143:139;;31870:419;;;:::o;32295:::-;32461:4;32499:2;32488:9;32484:18;32476:26;;32548:9;32542:4;32538:20;32534:1;32523:9;32519:17;32512:47;32576:131;32702:4;32576:131;:::i;:::-;32568:139;;32295:419;;;:::o;32720:::-;32886:4;32924:2;32913:9;32909:18;32901:26;;32973:9;32967:4;32963:20;32959:1;32948:9;32944:17;32937:47;33001:131;33127:4;33001:131;:::i;:::-;32993:139;;32720:419;;;:::o;33145:::-;33311:4;33349:2;33338:9;33334:18;33326:26;;33398:9;33392:4;33388:20;33384:1;33373:9;33369:17;33362:47;33426:131;33552:4;33426:131;:::i;:::-;33418:139;;33145:419;;;:::o;33570:222::-;33663:4;33701:2;33690:9;33686:18;33678:26;;33714:71;33782:1;33771:9;33767:17;33758:6;33714:71;:::i;:::-;33570:222;;;;:::o;33798:129::-;33832:6;33859:20;;:::i;:::-;33849:30;;33888:33;33916:4;33908:6;33888:33;:::i;:::-;33798:129;;;:::o;33933:75::-;33966:6;33999:2;33993:9;33983:19;;33933:75;:::o;34014:307::-;34075:4;34165:18;34157:6;34154:30;34151:56;;;34187:18;;:::i;:::-;34151:56;34225:29;34247:6;34225:29;:::i;:::-;34217:37;;34309:4;34303;34299:15;34291:23;;34014:307;;;:::o;34327:98::-;34378:6;34412:5;34406:12;34396:22;;34327:98;;;:::o;34431:99::-;34483:6;34517:5;34511:12;34501:22;;34431:99;;;:::o;34536:168::-;34619:11;34653:6;34648:3;34641:19;34693:4;34688:3;34684:14;34669:29;;34536:168;;;;:::o;34710:169::-;34794:11;34828:6;34823:3;34816:19;34868:4;34863:3;34859:14;34844:29;;34710:169;;;;:::o;34885:148::-;34987:11;35024:3;35009:18;;34885:148;;;;:::o;35039:305::-;35079:3;35098:20;35116:1;35098:20;:::i;:::-;35093:25;;35132:20;35150:1;35132:20;:::i;:::-;35127:25;;35286:1;35218:66;35214:74;35211:1;35208:81;35205:107;;;35292:18;;:::i;:::-;35205:107;35336:1;35333;35329:9;35322:16;;35039:305;;;;:::o;35350:185::-;35390:1;35407:20;35425:1;35407:20;:::i;:::-;35402:25;;35441:20;35459:1;35441:20;:::i;:::-;35436:25;;35480:1;35470:35;;35485:18;;:::i;:::-;35470:35;35527:1;35524;35520:9;35515:14;;35350:185;;;;:::o;35541:348::-;35581:7;35604:20;35622:1;35604:20;:::i;:::-;35599:25;;35638:20;35656:1;35638:20;:::i;:::-;35633:25;;35826:1;35758:66;35754:74;35751:1;35748:81;35743:1;35736:9;35729:17;35725:105;35722:131;;;35833:18;;:::i;:::-;35722:131;35881:1;35878;35874:9;35863:20;;35541:348;;;;:::o;35895:191::-;35935:4;35955:20;35973:1;35955:20;:::i;:::-;35950:25;;35989:20;36007:1;35989:20;:::i;:::-;35984:25;;36028:1;36025;36022:8;36019:34;;;36033:18;;:::i;:::-;36019:34;36078:1;36075;36071:9;36063:17;;35895:191;;;;:::o;36092:96::-;36129:7;36158:24;36176:5;36158:24;:::i;:::-;36147:35;;36092:96;;;:::o;36194:90::-;36228:7;36271:5;36264:13;36257:21;36246:32;;36194:90;;;:::o;36290:149::-;36326:7;36366:66;36359:5;36355:78;36344:89;;36290:149;;;:::o;36445:126::-;36482:7;36522:42;36515:5;36511:54;36500:65;;36445:126;;;:::o;36577:77::-;36614:7;36643:5;36632:16;;36577:77;;;:::o;36660:154::-;36744:6;36739:3;36734;36721:30;36806:1;36797:6;36792:3;36788:16;36781:27;36660:154;;;:::o;36820:307::-;36888:1;36898:113;36912:6;36909:1;36906:13;36898:113;;;36997:1;36992:3;36988:11;36982:18;36978:1;36973:3;36969:11;36962:39;36934:2;36931:1;36927:10;36922:15;;36898:113;;;37029:6;37026:1;37023:13;37020:101;;;37109:1;37100:6;37095:3;37091:16;37084:27;37020:101;36869:258;36820:307;;;:::o;37133:320::-;37177:6;37214:1;37208:4;37204:12;37194:22;;37261:1;37255:4;37251:12;37282:18;37272:81;;37338:4;37330:6;37326:17;37316:27;;37272:81;37400:2;37392:6;37389:14;37369:18;37366:38;37363:84;;;37419:18;;:::i;:::-;37363:84;37184:269;37133:320;;;:::o;37459:281::-;37542:27;37564:4;37542:27;:::i;:::-;37534:6;37530:40;37672:6;37660:10;37657:22;37636:18;37624:10;37621:34;37618:62;37615:88;;;37683:18;;:::i;:::-;37615:88;37723:10;37719:2;37712:22;37502:238;37459:281;;:::o;37746:233::-;37785:3;37808:24;37826:5;37808:24;:::i;:::-;37799:33;;37854:66;37847:5;37844:77;37841:103;;;37924:18;;:::i;:::-;37841:103;37971:1;37964:5;37960:13;37953:20;;37746:233;;;:::o;37985:176::-;38017:1;38034:20;38052:1;38034:20;:::i;:::-;38029:25;;38068:20;38086:1;38068:20;:::i;:::-;38063:25;;38107:1;38097:35;;38112:18;;:::i;:::-;38097:35;38153:1;38150;38146:9;38141:14;;37985:176;;;;:::o;38167:180::-;38215:77;38212:1;38205:88;38312:4;38309:1;38302:15;38336:4;38333:1;38326:15;38353:180;38401:77;38398:1;38391:88;38498:4;38495:1;38488:15;38522:4;38519:1;38512:15;38539:180;38587:77;38584:1;38577:88;38684:4;38681:1;38674:15;38708:4;38705:1;38698:15;38725:180;38773:77;38770:1;38763:88;38870:4;38867:1;38860:15;38894:4;38891:1;38884:15;38911:180;38959:77;38956:1;38949:88;39056:4;39053:1;39046:15;39080:4;39077:1;39070:15;39097:180;39145:77;39142:1;39135:88;39242:4;39239:1;39232:15;39266:4;39263:1;39256:15;39283:117;39392:1;39389;39382:12;39406:117;39515:1;39512;39505:12;39529:117;39638:1;39635;39628:12;39652:117;39761:1;39758;39751:12;39775:102;39816:6;39867:2;39863:7;39858:2;39851:5;39847:14;39843:28;39833:38;;39775:102;;;:::o;39883:230::-;40023:34;40019:1;40011:6;40007:14;40000:58;40092:13;40087:2;40079:6;40075:15;40068:38;39883:230;:::o;40119:237::-;40259:34;40255:1;40247:6;40243:14;40236:58;40328:20;40323:2;40315:6;40311:15;40304:45;40119:237;:::o;40362:225::-;40502:34;40498:1;40490:6;40486:14;40479:58;40571:8;40566:2;40558:6;40554:15;40547:33;40362:225;:::o;40593:178::-;40733:30;40729:1;40721:6;40717:14;40710:54;40593:178;:::o;40777:164::-;40917:16;40913:1;40905:6;40901:14;40894:40;40777:164;:::o;40947:223::-;41087:34;41083:1;41075:6;41071:14;41064:58;41156:6;41151:2;41143:6;41139:15;41132:31;40947:223;:::o;41176:175::-;41316:27;41312:1;41304:6;41300:14;41293:51;41176:175;:::o;41357:625::-;41497:66;41493:1;41485:6;41481:14;41474:90;41598:34;41593:2;41585:6;41581:15;41574:59;41667:34;41662:2;41654:6;41650:15;41643:59;41736:34;41731:2;41723:6;41719:15;41712:59;41806:66;41800:3;41792:6;41788:16;41781:92;41908:66;41902:3;41894:6;41890:16;41883:92;41357:625;:::o;41988:156::-;42128:8;42124:1;42116:6;42112:14;42105:32;41988:156;:::o;42150:231::-;42290:34;42286:1;42278:6;42274:14;42267:58;42359:14;42354:2;42346:6;42342:15;42335:39;42150:231;:::o;42387:151::-;42527:3;42523:1;42515:6;42511:14;42504:27;42387:151;:::o;42544:243::-;42684:34;42680:1;42672:6;42668:14;42661:58;42753:26;42748:2;42740:6;42736:15;42729:51;42544:243;:::o;42793:229::-;42933:34;42929:1;42921:6;42917:14;42910:58;43002:12;42997:2;42989:6;42985:15;42978:37;42793:229;:::o;43028:228::-;43168:34;43164:1;43156:6;43152:14;43145:58;43237:11;43232:2;43224:6;43220:15;43213:36;43028:228;:::o;43262:214::-;43402:66;43398:1;43390:6;43386:14;43379:90;43262:214;:::o;43482:182::-;43622:34;43618:1;43610:6;43606:14;43599:58;43482:182;:::o;43670:231::-;43810:34;43806:1;43798:6;43794:14;43787:58;43879:14;43874:2;43866:6;43862:15;43855:39;43670:231;:::o;43907:182::-;44047:34;44043:1;44035:6;44031:14;44024:58;43907:182;:::o;44095:166::-;44235:18;44231:1;44223:6;44219:14;44212:42;44095:166;:::o;44267:228::-;44407:34;44403:1;44395:6;44391:14;44384:58;44476:11;44471:2;44463:6;44459:15;44452:36;44267:228;:::o;44501:220::-;44641:34;44637:1;44629:6;44625:14;44618:58;44710:3;44705:2;44697:6;44693:15;44686:28;44501:220;:::o;44727:214::-;44867:66;44863:1;44855:6;44851:14;44844:90;44727:214;:::o;44947:179::-;45087:31;45083:1;45075:6;45071:14;45064:55;44947:179;:::o;45132:236::-;45272:34;45268:1;45260:6;45256:14;45249:58;45341:19;45336:2;45328:6;45324:15;45317:44;45132:236;:::o;45374:231::-;45514:34;45510:1;45502:6;45498:14;45491:58;45583:14;45578:2;45570:6;45566:15;45559:39;45374:231;:::o;45611:181::-;45751:33;45747:1;45739:6;45735:14;45728:57;45611:181;:::o;45798:122::-;45871:24;45889:5;45871:24;:::i;:::-;45864:5;45861:35;45851:63;;45910:1;45907;45900:12;45851:63;45798:122;:::o;45926:116::-;45996:21;46011:5;45996:21;:::i;:::-;45989:5;45986:32;45976:60;;46032:1;46029;46022:12;45976:60;45926:116;:::o;46048:120::-;46120:23;46137:5;46120:23;:::i;:::-;46113:5;46110:34;46100:62;;46158:1;46155;46148:12;46100:62;46048:120;:::o;46174:122::-;46247:24;46265:5;46247:24;:::i;:::-;46240:5;46237:35;46227:63;;46286:1;46283;46276:12;46227:63;46174:122;:::o

Swarm Source

ipfs://1f0e2e4263d7db68612d752fabcf8a6c0b3a3276d39f6c164435e8531919ba4d
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.