ETH Price: $3,232.29 (-3.24%)

Token

Mos Hot Potatos (MHP)
 

Overview

Max Total Supply

1,000 MHP

Holders

60

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 MHP
0x59f2c73Bf80317E88195eB728cD66172EBbDa05a
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:
MosHotPotatos

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 2022-08-17
*/

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: ERC721r.sol



pragma solidity ^0.8.0;








/**
 * @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. This does random batch minting.
 */
contract ERC721r is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    mapping(uint => uint) private _availableTokens;
    uint256 private _numAvailableTokens;
    uint256 immutable _maxSupply;
    // 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_, uint maxSupply_) {
        _name = name_;
        _symbol = symbol_;
        _maxSupply = maxSupply_;
        _numAvailableTokens = maxSupply_;
    }
    
    /**
     * @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);
    }
    
    function totalSupply() public view virtual returns (uint256) {
        return _maxSupply - _numAvailableTokens;
    }
    
    function maxSupply() public view virtual returns (uint256) {
        return _maxSupply;
    }

    /**
     * @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())) : ".json";
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(),".json")) : '';

    }
    /**
     * @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 overridden 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 = ERC721r.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 {
        _setApprovalForAll(_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 = ERC721r.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mintIdWithoutBalanceUpdate(address to, uint256 tokenId) private {
        _beforeTokenTransfer(address(0), to, tokenId);
        
        _owners[tokenId] = to;
        
        emit Transfer(address(0), to, tokenId);
        
        _afterTokenTransfer(address(0), to, tokenId);
    }

    function _mintRandom(address to, uint _numToMint) internal virtual {
        require(_msgSender() == tx.origin, "Contracts cannot mint");
        require(to != address(0), "ERC721: mint to the zero address");
        require(_numToMint > 0, "ERC721r: need to mint at least one token");
        
        // TODO: Probably don't need this as it will underflow and revert automatically in this case
        require(_numAvailableTokens >= _numToMint, "ERC721r: minting more tokens than available");
        
        uint updatedNumAvailableTokens = _numAvailableTokens;
        for (uint256 i; i < _numToMint; ++i) { // Do this ++ unchecked?
            uint256 tokenId = getRandomAvailableTokenId(to, updatedNumAvailableTokens);
            
            _mintIdWithoutBalanceUpdate(to, tokenId);
            
            --updatedNumAvailableTokens;
        }
        
        _numAvailableTokens = updatedNumAvailableTokens;
        _balances[to] += _numToMint;
    }
        
    function getRandomAvailableTokenId(address to, uint updatedNumAvailableTokens)
        internal
        returns (uint256)
    {
        uint256 randomNum = uint256(
            keccak256(
                abi.encode(
                    to,
                    tx.gasprice,
                    block.number,
                    block.timestamp,
                    block.difficulty,
                    blockhash(block.number - 1),
                    address(this),
                    updatedNumAvailableTokens
                )
            )
        ); 
        uint256 randomIndex = (randomNum % updatedNumAvailableTokens);
        return getAvailableTokenAtIndex(randomIndex, updatedNumAvailableTokens);


    }

    // Implements https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle. Code taken from CryptoPhunksV2
    function getAvailableTokenAtIndex(uint256 indexToUse, uint updatedNumAvailableTokens)
        internal
        returns (uint256)
    {
        uint256 valAtIndex = _availableTokens[indexToUse];
        uint256 result;
        if (valAtIndex == 0) {
            // This means the index itself is still an available token
            result = indexToUse;
        } else {
            // This means the index itself is not an available token, but the val at that index is.
            result = valAtIndex;
        }

        uint256 lastIndex = updatedNumAvailableTokens - 1;
        if (indexToUse != lastIndex) {
            // Replace the value at indexToUse, now that it's been used.
            // Replace it with the data from the last index in the array, since we are going to decrease the array size afterwards.
            uint256 lastValInArray = _availableTokens[lastIndex];
            if (lastValInArray == 0) {
                // This means the index itself is still an available token
                _availableTokens[indexToUse] = lastIndex;
            } else {
                // This means the index itself is not an available token, but the val at that index is.
                _availableTokens[indexToUse] = lastValInArray;
                // Gas refund courtsey of @dievardump
                delete _availableTokens[lastIndex];
            }
        }
        return result;
    }
    
    // Not as good as minting a specific tokenId, but will behave the same at the start
    // allowing you to explicitly mint some tokens at launch.
    function _mintAtIndex(address to, uint index) internal virtual {
        require(_msgSender() == tx.origin, "Contracts cannot mint");
        require(to != address(0), "ERC721: mint to the zero address");
        require(_numAvailableTokens >= 1, "ERC721r: minting more tokens than available");
        
        uint tokenId = getAvailableTokenAtIndex(index, _numAvailableTokens);
        --_numAvailableTokens;
        
        _mintIdWithoutBalanceUpdate(to, tokenId);
        
        _balances[to] += 1;
    }

    /**
     * @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(ERC721r.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        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);

        _afterTokenTransfer(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(ERC721r.ownerOf(tokenId), to, tokenId);
    }

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

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
// File: HotPotato.sol

pragma solidity ^0.8.7;

contract MosHotPotatos is ERC721r {
    uint256 public MAX_SUPPLY=1000;

    address public Owner = msg.sender;
    constructor () ERC721r("Mos Hot Potatos", "MHP", MAX_SUPPLY) {}

    modifier onlyOwner() {
        require(msg.sender == Owner, "not owner");
        _;
    }

    uint256 public PotRangeMin;
    uint256 public PotRangeMax;
    uint256 public DailyWinner;
    uint256 public NumberOfPlayers;
    uint256 public mintRate = 0.00 ether; //change to 0.08
    bool DevelopmentWalletPaid;
    bool ContractFinishedUnlocked=false;
    string public baseURI = "ipfs://QmZCr5M5BMQH26tZTAdj2SUFKHA8BaqxVvyvTUigGCRbaM/";


    function ExplodePotatoes() public onlyOwner 
    {
        require(DevelopmentWalletPaid==true);
 
        uint RandomNumber = uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty, msg.sender))) % 2;
        NumberOfPlayers=NumberOfPlayers/2;
        //Select random side to explode //explode right side
        if(RandomNumber==0)
        {
            PotRangeMax=PotRangeMax-NumberOfPlayers;
        }
        else  //explode left side
        {
            PotRangeMin=PotRangeMin+NumberOfPlayers;
        }

        //0-499 OF 1st set
        DailyWinner = uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty, msg.sender))) % NumberOfPlayers;
        //adds min number so it turns it to ID 1-500 or 501-1000 :) some smart coding here
        DailyWinner=DailyWinner+PotRangeMin;

        //Game should run 5 rounds on 5th round paying out ALL of vault
         if(NumberOfPlayers>50)
         {
            (bool hs, ) = payable(ownerOf(DailyWinner)).call{value: address(this).balance * 10 / 100}("");
            require(hs);
        }
        else
        {  //if less than 100 players GIVE everything to that one lucky guy in the last batch :D
             (bool hs, ) = payable(ownerOf(DailyWinner)).call{value: address(this).balance}("");
            require(hs);

            //after EVERYTHING is gone from the vault unlock the vault 
            //also adds possibility of running the game again if the vault increases
            DevelopmentWalletPaid=false;
        }
    }


    function setMintRate(uint256 _mintRate) public onlyOwner {
        mintRate = _mintRate;
    }


    function mint(uint256 quantity) external payable{
        require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough tokens left");
        require(msg.value >= (mintRate * quantity), "Not enough ether sent");
        _mintRandom(msg.sender, quantity);
    }


    function SetupGame() public onlyOwner
    {
        //50% goes to devleopment fund, cant be called  till after game is finished after initial 50% saved to vault
        if(DevelopmentWalletPaid==false)
        {
            (bool hs, ) = payable(Owner).call{value: address(this).balance * 50 / 100}("");
            require(hs);
            PotRangeMin=0;
            PotRangeMax=MAX_SUPPLY-1;  
            DevelopmentWalletPaid=true;
            NumberOfPlayers = MAX_SUPPLY;
        }
    }



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

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
     }

    //Donations or secondary sales to vault will be paid out to winners
    //if onto 2nd game > then owner can place more funds back into the game
    receive() external payable{}
}

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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DailyWinner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ExplodePotatoes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NumberOfPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PotRangeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PotRangeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetupGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintRate","type":"uint256"}],"name":"setMintRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526103e860085533600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e556000600f60016101000a81548160ff02191690831515021790555060405180606001604052806036815260200162003dd660369139601090805190602001906200009c92919062000164565b50348015620000aa57600080fd5b506040518060400160405280600f81526020017f4d6f7320486f7420506f7461746f7300000000000000000000000000000000008152506040518060400160405280600381526020017f4d4850000000000000000000000000000000000000000000000000000000000081525060085482600090805190602001906200013292919062000164565b5081600190805190602001906200014b92919062000164565b5080608081815250508060038190555050505062000279565b828054620001729062000214565b90600052602060002090601f016020900481019282620001965760008555620001e2565b82601f10620001b157805160ff1916838001178555620001e2565b82800160010185558215620001e2579182015b82811115620001e1578251825591602001919060010190620001c4565b5b509050620001f19190620001f5565b5090565b5b8082111562000210576000816000905550600101620001f6565b5090565b600060028204905060018216806200022d57607f821691505b602082108114156200024457620002436200024a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b608051613b3a6200029c60003960008181610c9801526114370152613b3a6000f3fe6080604052600436106101bb5760003560e01c80636c0360eb116100ec578063b88d4fde1161008a578063d5abeb0111610064578063d5abeb01146105e6578063d842b22114610611578063dbe2193f1461063c578063e985e9c514610665576101c2565b8063b88d4fde14610555578063c87b56dd1461057e578063ca0dcf16146105bb576101c2565b806395d89b41116100c657806395d89b41146104ba578063a0712d68146104e5578063a22cb46514610501578063b4a99a4e1461052a576101c2565b80636c0360eb1461042757806370a08231146104525780637ec0e40a1461048f576101c2565b80633136d6891161015957806342842e0e1161013357806342842e0e1461036d57806355f804b3146103965780636352211e146103bf578063685008f9146103fc576101c2565b80633136d6891461030057806332cb6b0c1461031757806340cb346514610342576101c2565b8063095ea7b311610195578063095ea7b31461026c57806315f2590f1461029557806318160ddd146102ac57806323b872dd146102d7576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906127ad565b6106a2565b6040516101fb9190612dcf565b60405180910390f35b34801561021057600080fd5b50610219610784565b6040516102269190612dea565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612850565b610816565b6040516102639190612cea565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e919061276d565b61089b565b005b3480156102a157600080fd5b506102aa6109b3565b005b3480156102b857600080fd5b506102c1610c91565b6040516102ce919061306c565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612657565b610cc6565b005b34801561030c57600080fd5b50610315610d26565b005b34801561032357600080fd5b5061032c610ec7565b604051610339919061306c565b60405180910390f35b34801561034e57600080fd5b50610357610ecd565b604051610364919061306c565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190612657565b610ed3565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612807565b610ef3565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612850565b610f9d565b6040516103f39190612cea565b60405180910390f35b34801561040857600080fd5b5061041161104f565b60405161041e919061306c565b60405180910390f35b34801561043357600080fd5b5061043c611055565b6040516104499190612dea565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906125ea565b6110e3565b604051610486919061306c565b60405180910390f35b34801561049b57600080fd5b506104a461119b565b6040516104b1919061306c565b60405180910390f35b3480156104c657600080fd5b506104cf6111a1565b6040516104dc9190612dea565b60405180910390f35b6104ff60048036038101906104fa9190612850565b611233565b005b34801561050d57600080fd5b506105286004803603810190610523919061272d565b6112e7565b005b34801561053657600080fd5b5061053f6112fd565b60405161054c9190612cea565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906126aa565b611323565b005b34801561058a57600080fd5b506105a560048036038101906105a09190612850565b611385565b6040516105b29190612dea565b60405180910390f35b3480156105c757600080fd5b506105d061142d565b6040516105dd919061306c565b60405180910390f35b3480156105f257600080fd5b506105fb611433565b604051610608919061306c565b60405180910390f35b34801561061d57600080fd5b5061062661145b565b604051610633919061306c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612850565b611461565b005b34801561067157600080fd5b5061068c60048036038101906106879190612617565b6114fb565b6040516106999190612dcf565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077d575061077c8261158f565b5b9050919050565b6060600080546107939061335b565b80601f01602080910402602001604051908101604052809291908181526020018280546107bf9061335b565b801561080c5780601f106107e15761010080835404028352916020019161080c565b820191906000526020600020905b8154815290600101906020018083116107ef57829003601f168201915b5050505050905090565b6000610821826115f9565b610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790612f8c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a682610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612fcc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610936611665565b73ffffffffffffffffffffffffffffffffffffffff16148061096557506109648161095f611665565b6114fb565b5b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90612ecc565b60405180910390fd5b6109ae838361166d565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061304c565b60405180910390fd5b60011515600f60009054906101000a900460ff16151514610a6357600080fd5b60006002424433604051602001610a7c93929190612cad565b6040516020818303038152906040528051906020012060001c610a9f9190613435565b90506002600d54610ab091906131b2565b600d819055506000811415610ada57600d54600b54610acf919061323d565b600b81905550610af1565b600d54600a54610aea919061315c565b600a819055505b600d54424433604051602001610b0993929190612cad565b6040516020818303038152906040528051906020012060001c610b2c9190613435565b600c81905550600a54600c54610b42919061315c565b600c819055506032600d541115610bf1576000610b60600c54610f9d565b73ffffffffffffffffffffffffffffffffffffffff166064600a47610b8591906131e3565b610b8f91906131b2565b604051610b9b90612c98565b60006040518083038185875af1925050503d8060008114610bd8576040519150601f19603f3d011682016040523d82523d6000602084013e610bdd565b606091505b5050905080610beb57600080fd5b50610c8e565b6000610bfe600c54610f9d565b73ffffffffffffffffffffffffffffffffffffffff1647604051610c2190612c98565b60006040518083038185875af1925050503d8060008114610c5e576040519150601f19603f3d011682016040523d82523d6000602084013e610c63565b606091505b5050905080610c7157600080fd5b6000600f60006101000a81548160ff021916908315150217905550505b50565b60006003547f0000000000000000000000000000000000000000000000000000000000000000610cc1919061323d565b905090565b610cd7610cd1611665565b82611726565b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d9061300c565b60405180910390fd5b610d21838383611804565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061304c565b60405180910390fd5b60001515600f60009054906101000a900460ff1615151415610ec5576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064603247610e1c91906131e3565b610e2691906131b2565b604051610e3290612c98565b60006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b5050905080610e8257600080fd5b6000600a819055506001600854610e99919061323d565b600b819055506001600f60006101000a81548160ff021916908315150217905550600854600d81905550505b565b60085481565b600a5481565b610eee83838360405180602001604052806000815250611323565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061304c565b60405180910390fd5b8060109080519060200190610f999291906123fe565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612f0c565b60405180910390fd5b80915050919050565b600d5481565b601080546110629061335b565b80601f016020809104026020016040519081016040528092919081815260200182805461108e9061335b565b80156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90612eec565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6060600180546111b09061335b565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc9061335b565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b6008548161123f610c91565b611249919061315c565b111561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190612f2c565b60405180910390fd5b80600e5461129891906131e3565b3410156112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d19061302c565b60405180910390fd5b6112e43382611a6b565b50565b6112f96112f2611665565b8383611c83565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61133461132e611665565b83611726565b611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a9061300c565b60405180910390fd5b61137f84848484611df0565b50505050565b6060611390826115f9565b6113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612fac565b60405180910390fd5b60006113d9611e4c565b90506000815114156113fa5760405180602001604052806000815250611425565b8061140484611ede565b604051602001611415929190612c69565b6040516020818303038152906040525b915050919050565b600e5481565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061304c565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116e083610f9d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611731826115f9565b611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612eac565b60405180910390fd5b600061177b83610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117ea57508373ffffffffffffffffffffffffffffffffffffffff166117d284610816565b73ffffffffffffffffffffffffffffffffffffffff16145b806117fb57506117fa81856114fb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661182482610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190612e2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190612e6c565b60405180910390fd5b6118f583838361203f565b61190060008261166d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611950919061323d565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119a7919061315c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a66838383612044565b505050565b3273ffffffffffffffffffffffffffffffffffffffff16611a8a611665565b73ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612e4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790612f4c565b60405180910390fd5b60008111611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90612fec565b60405180910390fd5b806003541015611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90612f6c565b60405180910390fd5b6000600354905060005b82811015611c20576000611bf68584612049565b9050611c0285826120b7565b82611c0c90613331565b92505080611c19906133be565b9050611be2565b508060038190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c77919061315c565b92505081905550505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990612e8c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611de39190612dcf565b60405180910390a3505050565b611dfb848484611804565b611e0784848484612181565b611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90612e0c565b60405180910390fd5b50505050565b606060108054611e5b9061335b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e879061335b565b8015611ed45780601f10611ea957610100808354040283529160200191611ed4565b820191906000526020600020905b815481529060010190602001808311611eb757829003601f168201915b5050505050905090565b60606000821415611f26576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203a565b600082905060005b60008214611f58578080611f41906133be565b915050600a82611f5191906131b2565b9150611f2e565b60008167ffffffffffffffff811115611f7457611f73613522565b5b6040519080825280601f01601f191660200182016040528015611fa65781602001600182028036833780820191505090505b5090505b6000851461203357600182611fbf919061323d565b9150600a85611fce9190613435565b6030611fda919061315c565b60f81b818381518110611ff057611fef6134f3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202c91906131b2565b9450611faa565b8093505050505b919050565b505050565b505050565b600080833a43424460014361205e919061323d565b403089604051602001612078989796959493929190612d51565b6040516020818303038152906040528051906020012060001c9050600083826120a19190613435565b90506120ad8185612318565b9250505092915050565b6120c36000838361203f565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461217d60008383612044565b5050565b60006121a28473ffffffffffffffffffffffffffffffffffffffff166123db565b1561230b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121cb611665565b8786866040518563ffffffff1660e01b81526004016121ed9493929190612d05565b602060405180830381600087803b15801561220757600080fd5b505af192505050801561223857506040513d601f19601f8201168201806040525081019061223591906127da565b60015b6122bb573d8060008114612268576040519150601f19603f3d011682016040523d82523d6000602084013e61226d565b606091505b506000815114156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90612e0c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612310565b600190505b949350505050565b6000806002600085815260200190815260200160002054905060008082141561234357849050612347565b8190505b6000600185612356919061323d565b90508086146123cf57600060026000838152602001908152602001600020549050600081141561239d578160026000898152602001908152602001600020819055506123cd565b80600260008981526020019081526020016000208190555060026000838152602001908152602001600020600090555b505b81935050505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461240a9061335b565b90600052602060002090601f01602090048101928261242c5760008555612473565b82601f1061244557805160ff1916838001178555612473565b82800160010185558215612473579182015b82811115612472578251825591602001919060010190612457565b5b5090506124809190612484565b5090565b5b8082111561249d576000816000905550600101612485565b5090565b60006124b46124af846130ac565b613087565b9050828152602081018484840111156124d0576124cf613556565b5b6124db8482856132ef565b509392505050565b60006124f66124f1846130dd565b613087565b90508281526020810184848401111561251257612511613556565b5b61251d8482856132ef565b509392505050565b60008135905061253481613aa8565b92915050565b60008135905061254981613abf565b92915050565b60008135905061255e81613ad6565b92915050565b60008151905061257381613ad6565b92915050565b600082601f83011261258e5761258d613551565b5b813561259e8482602086016124a1565b91505092915050565b600082601f8301126125bc576125bb613551565b5b81356125cc8482602086016124e3565b91505092915050565b6000813590506125e481613aed565b92915050565b600060208284031215612600576125ff613560565b5b600061260e84828501612525565b91505092915050565b6000806040838503121561262e5761262d613560565b5b600061263c85828601612525565b925050602061264d85828601612525565b9150509250929050565b6000806000606084860312156126705761266f613560565b5b600061267e86828701612525565b935050602061268f86828701612525565b92505060406126a0868287016125d5565b9150509250925092565b600080600080608085870312156126c4576126c3613560565b5b60006126d287828801612525565b94505060206126e387828801612525565b93505060406126f4878288016125d5565b925050606085013567ffffffffffffffff8111156127155761271461355b565b5b61272187828801612579565b91505092959194509250565b6000806040838503121561274457612743613560565b5b600061275285828601612525565b92505060206127638582860161253a565b9150509250929050565b6000806040838503121561278457612783613560565b5b600061279285828601612525565b92505060206127a3858286016125d5565b9150509250929050565b6000602082840312156127c3576127c2613560565b5b60006127d18482850161254f565b91505092915050565b6000602082840312156127f0576127ef613560565b5b60006127fe84828501612564565b91505092915050565b60006020828403121561281d5761281c613560565b5b600082013567ffffffffffffffff81111561283b5761283a61355b565b5b612847848285016125a7565b91505092915050565b60006020828403121561286657612865613560565b5b6000612874848285016125d5565b91505092915050565b61288681613271565b82525050565b61289d61289882613271565b613407565b82525050565b6128ac81613283565b82525050565b6128bb8161328f565b82525050565b60006128cc8261310e565b6128d68185613124565b93506128e68185602086016132fe565b6128ef81613565565b840191505092915050565b600061290582613119565b61290f8185613140565b935061291f8185602086016132fe565b61292881613565565b840191505092915050565b600061293e82613119565b6129488185613151565b93506129588185602086016132fe565b80840191505092915050565b6000612971603283613140565b915061297c82613583565b604082019050919050565b6000612994602583613140565b915061299f826135d2565b604082019050919050565b60006129b7601583613140565b91506129c282613621565b602082019050919050565b60006129da602483613140565b91506129e58261364a565b604082019050919050565b60006129fd601983613140565b9150612a0882613699565b602082019050919050565b6000612a20602c83613140565b9150612a2b826136c2565b604082019050919050565b6000612a43603883613140565b9150612a4e82613711565b604082019050919050565b6000612a66602a83613140565b9150612a7182613760565b604082019050919050565b6000612a89602983613140565b9150612a94826137af565b604082019050919050565b6000612aac601683613140565b9150612ab7826137fe565b602082019050919050565b6000612acf602083613140565b9150612ada82613827565b602082019050919050565b6000612af2602b83613140565b9150612afd82613850565b604082019050919050565b6000612b15602c83613140565b9150612b208261389f565b604082019050919050565b6000612b38600583613151565b9150612b43826138ee565b600582019050919050565b6000612b5b602f83613140565b9150612b6682613917565b604082019050919050565b6000612b7e602183613140565b9150612b8982613966565b604082019050919050565b6000612ba1602883613140565b9150612bac826139b5565b604082019050919050565b6000612bc4600083613135565b9150612bcf82613a04565b600082019050919050565b6000612be7603183613140565b9150612bf282613a07565b604082019050919050565b6000612c0a601583613140565b9150612c1582613a56565b602082019050919050565b6000612c2d600983613140565b9150612c3882613a7f565b602082019050919050565b612c4c816132e5565b82525050565b612c63612c5e826132e5565b61342b565b82525050565b6000612c758285612933565b9150612c818284612933565b9150612c8c82612b2b565b91508190509392505050565b6000612ca382612bb7565b9150819050919050565b6000612cb98286612c52565b602082019150612cc98285612c52565b602082019150612cd9828461288c565b601482019150819050949350505050565b6000602082019050612cff600083018461287d565b92915050565b6000608082019050612d1a600083018761287d565b612d27602083018661287d565b612d346040830185612c43565b8181036060830152612d4681846128c1565b905095945050505050565b600061010082019050612d67600083018b61287d565b612d74602083018a612c43565b612d816040830189612c43565b612d8e6060830188612c43565b612d9b6080830187612c43565b612da860a08301866128b2565b612db560c083018561287d565b612dc260e0830184612c43565b9998505050505050505050565b6000602082019050612de460008301846128a3565b92915050565b60006020820190508181036000830152612e0481846128fa565b905092915050565b60006020820190508181036000830152612e2581612964565b9050919050565b60006020820190508181036000830152612e4581612987565b9050919050565b60006020820190508181036000830152612e65816129aa565b9050919050565b60006020820190508181036000830152612e85816129cd565b9050919050565b60006020820190508181036000830152612ea5816129f0565b9050919050565b60006020820190508181036000830152612ec581612a13565b9050919050565b60006020820190508181036000830152612ee581612a36565b9050919050565b60006020820190508181036000830152612f0581612a59565b9050919050565b60006020820190508181036000830152612f2581612a7c565b9050919050565b60006020820190508181036000830152612f4581612a9f565b9050919050565b60006020820190508181036000830152612f6581612ac2565b9050919050565b60006020820190508181036000830152612f8581612ae5565b9050919050565b60006020820190508181036000830152612fa581612b08565b9050919050565b60006020820190508181036000830152612fc581612b4e565b9050919050565b60006020820190508181036000830152612fe581612b71565b9050919050565b6000602082019050818103600083015261300581612b94565b9050919050565b6000602082019050818103600083015261302581612bda565b9050919050565b6000602082019050818103600083015261304581612bfd565b9050919050565b6000602082019050818103600083015261306581612c20565b9050919050565b60006020820190506130816000830184612c43565b92915050565b60006130916130a2565b905061309d828261338d565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c7576130c6613522565b5b6130d082613565565b9050602081019050919050565b600067ffffffffffffffff8211156130f8576130f7613522565b5b61310182613565565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613167826132e5565b9150613172836132e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131a7576131a6613466565b5b828201905092915050565b60006131bd826132e5565b91506131c8836132e5565b9250826131d8576131d7613495565b5b828204905092915050565b60006131ee826132e5565b91506131f9836132e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323257613231613466565b5b828202905092915050565b6000613248826132e5565b9150613253836132e5565b92508282101561326657613265613466565b5b828203905092915050565b600061327c826132c5565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561331c578082015181840152602081019050613301565b8381111561332b576000848401525b50505050565b600061333c826132e5565b915060008214156133505761334f613466565b5b600182039050919050565b6000600282049050600182168061337357607f821691505b60208210811415613387576133866134c4565b5b50919050565b61339682613565565b810181811067ffffffffffffffff821117156133b5576133b4613522565b5b80604052505050565b60006133c9826132e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133fc576133fb613466565b5b600182019050919050565b600061341282613419565b9050919050565b600061342482613576565b9050919050565b6000819050919050565b6000613440826132e5565b915061344b836132e5565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374732063616e6e6f74206d696e740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f455243373231723a206d696e74696e67206d6f726520746f6b656e732074686160008201527f6e20617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231723a206e65656420746f206d696e74206174206c65617374206f60008201527f6e6520746f6b656e000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b613ab181613271565b8114613abc57600080fd5b50565b613ac881613283565b8114613ad357600080fd5b50565b613adf81613299565b8114613aea57600080fd5b50565b613af6816132e5565b8114613b0157600080fd5b5056fea2646970667358221220ee226540dd5b610c570434ed5558bba2fa9617269238be4ba03bab78c13c8bc064736f6c63430008070033697066733a2f2f516d5a4372354d35424d51483236745a5441646a325355464b48413842617178567679765455696747435262614d2f

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80636c0360eb116100ec578063b88d4fde1161008a578063d5abeb0111610064578063d5abeb01146105e6578063d842b22114610611578063dbe2193f1461063c578063e985e9c514610665576101c2565b8063b88d4fde14610555578063c87b56dd1461057e578063ca0dcf16146105bb576101c2565b806395d89b41116100c657806395d89b41146104ba578063a0712d68146104e5578063a22cb46514610501578063b4a99a4e1461052a576101c2565b80636c0360eb1461042757806370a08231146104525780637ec0e40a1461048f576101c2565b80633136d6891161015957806342842e0e1161013357806342842e0e1461036d57806355f804b3146103965780636352211e146103bf578063685008f9146103fc576101c2565b80633136d6891461030057806332cb6b0c1461031757806340cb346514610342576101c2565b8063095ea7b311610195578063095ea7b31461026c57806315f2590f1461029557806318160ddd146102ac57806323b872dd146102d7576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906127ad565b6106a2565b6040516101fb9190612dcf565b60405180910390f35b34801561021057600080fd5b50610219610784565b6040516102269190612dea565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612850565b610816565b6040516102639190612cea565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e919061276d565b61089b565b005b3480156102a157600080fd5b506102aa6109b3565b005b3480156102b857600080fd5b506102c1610c91565b6040516102ce919061306c565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612657565b610cc6565b005b34801561030c57600080fd5b50610315610d26565b005b34801561032357600080fd5b5061032c610ec7565b604051610339919061306c565b60405180910390f35b34801561034e57600080fd5b50610357610ecd565b604051610364919061306c565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190612657565b610ed3565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612807565b610ef3565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612850565b610f9d565b6040516103f39190612cea565b60405180910390f35b34801561040857600080fd5b5061041161104f565b60405161041e919061306c565b60405180910390f35b34801561043357600080fd5b5061043c611055565b6040516104499190612dea565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906125ea565b6110e3565b604051610486919061306c565b60405180910390f35b34801561049b57600080fd5b506104a461119b565b6040516104b1919061306c565b60405180910390f35b3480156104c657600080fd5b506104cf6111a1565b6040516104dc9190612dea565b60405180910390f35b6104ff60048036038101906104fa9190612850565b611233565b005b34801561050d57600080fd5b506105286004803603810190610523919061272d565b6112e7565b005b34801561053657600080fd5b5061053f6112fd565b60405161054c9190612cea565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906126aa565b611323565b005b34801561058a57600080fd5b506105a560048036038101906105a09190612850565b611385565b6040516105b29190612dea565b60405180910390f35b3480156105c757600080fd5b506105d061142d565b6040516105dd919061306c565b60405180910390f35b3480156105f257600080fd5b506105fb611433565b604051610608919061306c565b60405180910390f35b34801561061d57600080fd5b5061062661145b565b604051610633919061306c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612850565b611461565b005b34801561067157600080fd5b5061068c60048036038101906106879190612617565b6114fb565b6040516106999190612dcf565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077d575061077c8261158f565b5b9050919050565b6060600080546107939061335b565b80601f01602080910402602001604051908101604052809291908181526020018280546107bf9061335b565b801561080c5780601f106107e15761010080835404028352916020019161080c565b820191906000526020600020905b8154815290600101906020018083116107ef57829003601f168201915b5050505050905090565b6000610821826115f9565b610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790612f8c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a682610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612fcc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610936611665565b73ffffffffffffffffffffffffffffffffffffffff16148061096557506109648161095f611665565b6114fb565b5b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90612ecc565b60405180910390fd5b6109ae838361166d565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a9061304c565b60405180910390fd5b60011515600f60009054906101000a900460ff16151514610a6357600080fd5b60006002424433604051602001610a7c93929190612cad565b6040516020818303038152906040528051906020012060001c610a9f9190613435565b90506002600d54610ab091906131b2565b600d819055506000811415610ada57600d54600b54610acf919061323d565b600b81905550610af1565b600d54600a54610aea919061315c565b600a819055505b600d54424433604051602001610b0993929190612cad565b6040516020818303038152906040528051906020012060001c610b2c9190613435565b600c81905550600a54600c54610b42919061315c565b600c819055506032600d541115610bf1576000610b60600c54610f9d565b73ffffffffffffffffffffffffffffffffffffffff166064600a47610b8591906131e3565b610b8f91906131b2565b604051610b9b90612c98565b60006040518083038185875af1925050503d8060008114610bd8576040519150601f19603f3d011682016040523d82523d6000602084013e610bdd565b606091505b5050905080610beb57600080fd5b50610c8e565b6000610bfe600c54610f9d565b73ffffffffffffffffffffffffffffffffffffffff1647604051610c2190612c98565b60006040518083038185875af1925050503d8060008114610c5e576040519150601f19603f3d011682016040523d82523d6000602084013e610c63565b606091505b5050905080610c7157600080fd5b6000600f60006101000a81548160ff021916908315150217905550505b50565b60006003547f00000000000000000000000000000000000000000000000000000000000003e8610cc1919061323d565b905090565b610cd7610cd1611665565b82611726565b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d9061300c565b60405180910390fd5b610d21838383611804565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061304c565b60405180910390fd5b60001515600f60009054906101000a900460ff1615151415610ec5576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064603247610e1c91906131e3565b610e2691906131b2565b604051610e3290612c98565b60006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b5050905080610e8257600080fd5b6000600a819055506001600854610e99919061323d565b600b819055506001600f60006101000a81548160ff021916908315150217905550600854600d81905550505b565b60085481565b600a5481565b610eee83838360405180602001604052806000815250611323565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061304c565b60405180910390fd5b8060109080519060200190610f999291906123fe565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612f0c565b60405180910390fd5b80915050919050565b600d5481565b601080546110629061335b565b80601f016020809104026020016040519081016040528092919081815260200182805461108e9061335b565b80156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b90612eec565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b6060600180546111b09061335b565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc9061335b565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b6008548161123f610c91565b611249919061315c565b111561128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190612f2c565b60405180910390fd5b80600e5461129891906131e3565b3410156112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d19061302c565b60405180910390fd5b6112e43382611a6b565b50565b6112f96112f2611665565b8383611c83565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61133461132e611665565b83611726565b611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a9061300c565b60405180910390fd5b61137f84848484611df0565b50505050565b6060611390826115f9565b6113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612fac565b60405180910390fd5b60006113d9611e4c565b90506000815114156113fa5760405180602001604052806000815250611425565b8061140484611ede565b604051602001611415929190612c69565b6040516020818303038152906040525b915050919050565b600e5481565b60007f00000000000000000000000000000000000000000000000000000000000003e8905090565b600c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e89061304c565b60405180910390fd5b80600e8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116e083610f9d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611731826115f9565b611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612eac565b60405180910390fd5b600061177b83610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117ea57508373ffffffffffffffffffffffffffffffffffffffff166117d284610816565b73ffffffffffffffffffffffffffffffffffffffff16145b806117fb57506117fa81856114fb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661182482610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190612e2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190612e6c565b60405180910390fd5b6118f583838361203f565b61190060008261166d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611950919061323d565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119a7919061315c565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a66838383612044565b505050565b3273ffffffffffffffffffffffffffffffffffffffff16611a8a611665565b73ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612e4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790612f4c565b60405180910390fd5b60008111611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90612fec565b60405180910390fd5b806003541015611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90612f6c565b60405180910390fd5b6000600354905060005b82811015611c20576000611bf68584612049565b9050611c0285826120b7565b82611c0c90613331565b92505080611c19906133be565b9050611be2565b508060038190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c77919061315c565b92505081905550505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990612e8c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611de39190612dcf565b60405180910390a3505050565b611dfb848484611804565b611e0784848484612181565b611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90612e0c565b60405180910390fd5b50505050565b606060108054611e5b9061335b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e879061335b565b8015611ed45780601f10611ea957610100808354040283529160200191611ed4565b820191906000526020600020905b815481529060010190602001808311611eb757829003601f168201915b5050505050905090565b60606000821415611f26576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203a565b600082905060005b60008214611f58578080611f41906133be565b915050600a82611f5191906131b2565b9150611f2e565b60008167ffffffffffffffff811115611f7457611f73613522565b5b6040519080825280601f01601f191660200182016040528015611fa65781602001600182028036833780820191505090505b5090505b6000851461203357600182611fbf919061323d565b9150600a85611fce9190613435565b6030611fda919061315c565b60f81b818381518110611ff057611fef6134f3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202c91906131b2565b9450611faa565b8093505050505b919050565b505050565b505050565b600080833a43424460014361205e919061323d565b403089604051602001612078989796959493929190612d51565b6040516020818303038152906040528051906020012060001c9050600083826120a19190613435565b90506120ad8185612318565b9250505092915050565b6120c36000838361203f565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461217d60008383612044565b5050565b60006121a28473ffffffffffffffffffffffffffffffffffffffff166123db565b1561230b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121cb611665565b8786866040518563ffffffff1660e01b81526004016121ed9493929190612d05565b602060405180830381600087803b15801561220757600080fd5b505af192505050801561223857506040513d601f19601f8201168201806040525081019061223591906127da565b60015b6122bb573d8060008114612268576040519150601f19603f3d011682016040523d82523d6000602084013e61226d565b606091505b506000815114156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90612e0c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612310565b600190505b949350505050565b6000806002600085815260200190815260200160002054905060008082141561234357849050612347565b8190505b6000600185612356919061323d565b90508086146123cf57600060026000838152602001908152602001600020549050600081141561239d578160026000898152602001908152602001600020819055506123cd565b80600260008981526020019081526020016000208190555060026000838152602001908152602001600020600090555b505b81935050505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461240a9061335b565b90600052602060002090601f01602090048101928261242c5760008555612473565b82601f1061244557805160ff1916838001178555612473565b82800160010185558215612473579182015b82811115612472578251825591602001919060010190612457565b5b5090506124809190612484565b5090565b5b8082111561249d576000816000905550600101612485565b5090565b60006124b46124af846130ac565b613087565b9050828152602081018484840111156124d0576124cf613556565b5b6124db8482856132ef565b509392505050565b60006124f66124f1846130dd565b613087565b90508281526020810184848401111561251257612511613556565b5b61251d8482856132ef565b509392505050565b60008135905061253481613aa8565b92915050565b60008135905061254981613abf565b92915050565b60008135905061255e81613ad6565b92915050565b60008151905061257381613ad6565b92915050565b600082601f83011261258e5761258d613551565b5b813561259e8482602086016124a1565b91505092915050565b600082601f8301126125bc576125bb613551565b5b81356125cc8482602086016124e3565b91505092915050565b6000813590506125e481613aed565b92915050565b600060208284031215612600576125ff613560565b5b600061260e84828501612525565b91505092915050565b6000806040838503121561262e5761262d613560565b5b600061263c85828601612525565b925050602061264d85828601612525565b9150509250929050565b6000806000606084860312156126705761266f613560565b5b600061267e86828701612525565b935050602061268f86828701612525565b92505060406126a0868287016125d5565b9150509250925092565b600080600080608085870312156126c4576126c3613560565b5b60006126d287828801612525565b94505060206126e387828801612525565b93505060406126f4878288016125d5565b925050606085013567ffffffffffffffff8111156127155761271461355b565b5b61272187828801612579565b91505092959194509250565b6000806040838503121561274457612743613560565b5b600061275285828601612525565b92505060206127638582860161253a565b9150509250929050565b6000806040838503121561278457612783613560565b5b600061279285828601612525565b92505060206127a3858286016125d5565b9150509250929050565b6000602082840312156127c3576127c2613560565b5b60006127d18482850161254f565b91505092915050565b6000602082840312156127f0576127ef613560565b5b60006127fe84828501612564565b91505092915050565b60006020828403121561281d5761281c613560565b5b600082013567ffffffffffffffff81111561283b5761283a61355b565b5b612847848285016125a7565b91505092915050565b60006020828403121561286657612865613560565b5b6000612874848285016125d5565b91505092915050565b61288681613271565b82525050565b61289d61289882613271565b613407565b82525050565b6128ac81613283565b82525050565b6128bb8161328f565b82525050565b60006128cc8261310e565b6128d68185613124565b93506128e68185602086016132fe565b6128ef81613565565b840191505092915050565b600061290582613119565b61290f8185613140565b935061291f8185602086016132fe565b61292881613565565b840191505092915050565b600061293e82613119565b6129488185613151565b93506129588185602086016132fe565b80840191505092915050565b6000612971603283613140565b915061297c82613583565b604082019050919050565b6000612994602583613140565b915061299f826135d2565b604082019050919050565b60006129b7601583613140565b91506129c282613621565b602082019050919050565b60006129da602483613140565b91506129e58261364a565b604082019050919050565b60006129fd601983613140565b9150612a0882613699565b602082019050919050565b6000612a20602c83613140565b9150612a2b826136c2565b604082019050919050565b6000612a43603883613140565b9150612a4e82613711565b604082019050919050565b6000612a66602a83613140565b9150612a7182613760565b604082019050919050565b6000612a89602983613140565b9150612a94826137af565b604082019050919050565b6000612aac601683613140565b9150612ab7826137fe565b602082019050919050565b6000612acf602083613140565b9150612ada82613827565b602082019050919050565b6000612af2602b83613140565b9150612afd82613850565b604082019050919050565b6000612b15602c83613140565b9150612b208261389f565b604082019050919050565b6000612b38600583613151565b9150612b43826138ee565b600582019050919050565b6000612b5b602f83613140565b9150612b6682613917565b604082019050919050565b6000612b7e602183613140565b9150612b8982613966565b604082019050919050565b6000612ba1602883613140565b9150612bac826139b5565b604082019050919050565b6000612bc4600083613135565b9150612bcf82613a04565b600082019050919050565b6000612be7603183613140565b9150612bf282613a07565b604082019050919050565b6000612c0a601583613140565b9150612c1582613a56565b602082019050919050565b6000612c2d600983613140565b9150612c3882613a7f565b602082019050919050565b612c4c816132e5565b82525050565b612c63612c5e826132e5565b61342b565b82525050565b6000612c758285612933565b9150612c818284612933565b9150612c8c82612b2b565b91508190509392505050565b6000612ca382612bb7565b9150819050919050565b6000612cb98286612c52565b602082019150612cc98285612c52565b602082019150612cd9828461288c565b601482019150819050949350505050565b6000602082019050612cff600083018461287d565b92915050565b6000608082019050612d1a600083018761287d565b612d27602083018661287d565b612d346040830185612c43565b8181036060830152612d4681846128c1565b905095945050505050565b600061010082019050612d67600083018b61287d565b612d74602083018a612c43565b612d816040830189612c43565b612d8e6060830188612c43565b612d9b6080830187612c43565b612da860a08301866128b2565b612db560c083018561287d565b612dc260e0830184612c43565b9998505050505050505050565b6000602082019050612de460008301846128a3565b92915050565b60006020820190508181036000830152612e0481846128fa565b905092915050565b60006020820190508181036000830152612e2581612964565b9050919050565b60006020820190508181036000830152612e4581612987565b9050919050565b60006020820190508181036000830152612e65816129aa565b9050919050565b60006020820190508181036000830152612e85816129cd565b9050919050565b60006020820190508181036000830152612ea5816129f0565b9050919050565b60006020820190508181036000830152612ec581612a13565b9050919050565b60006020820190508181036000830152612ee581612a36565b9050919050565b60006020820190508181036000830152612f0581612a59565b9050919050565b60006020820190508181036000830152612f2581612a7c565b9050919050565b60006020820190508181036000830152612f4581612a9f565b9050919050565b60006020820190508181036000830152612f6581612ac2565b9050919050565b60006020820190508181036000830152612f8581612ae5565b9050919050565b60006020820190508181036000830152612fa581612b08565b9050919050565b60006020820190508181036000830152612fc581612b4e565b9050919050565b60006020820190508181036000830152612fe581612b71565b9050919050565b6000602082019050818103600083015261300581612b94565b9050919050565b6000602082019050818103600083015261302581612bda565b9050919050565b6000602082019050818103600083015261304581612bfd565b9050919050565b6000602082019050818103600083015261306581612c20565b9050919050565b60006020820190506130816000830184612c43565b92915050565b60006130916130a2565b905061309d828261338d565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c7576130c6613522565b5b6130d082613565565b9050602081019050919050565b600067ffffffffffffffff8211156130f8576130f7613522565b5b61310182613565565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613167826132e5565b9150613172836132e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131a7576131a6613466565b5b828201905092915050565b60006131bd826132e5565b91506131c8836132e5565b9250826131d8576131d7613495565b5b828204905092915050565b60006131ee826132e5565b91506131f9836132e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323257613231613466565b5b828202905092915050565b6000613248826132e5565b9150613253836132e5565b92508282101561326657613265613466565b5b828203905092915050565b600061327c826132c5565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561331c578082015181840152602081019050613301565b8381111561332b576000848401525b50505050565b600061333c826132e5565b915060008214156133505761334f613466565b5b600182039050919050565b6000600282049050600182168061337357607f821691505b60208210811415613387576133866134c4565b5b50919050565b61339682613565565b810181811067ffffffffffffffff821117156133b5576133b4613522565b5b80604052505050565b60006133c9826132e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133fc576133fb613466565b5b600182019050919050565b600061341282613419565b9050919050565b600061342482613576565b9050919050565b6000819050919050565b6000613440826132e5565b915061344b836132e5565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374732063616e6e6f74206d696e740000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f455243373231723a206d696e74696e67206d6f726520746f6b656e732074686160008201527f6e20617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231723a206e65656420746f206d696e74206174206c65617374206f60008201527f6e6520746f6b656e000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b613ab181613271565b8114613abc57600080fd5b50565b613ac881613283565b8114613ad357600080fd5b50565b613adf81613299565b8114613aea57600080fd5b50565b613af6816132e5565b8114613b0157600080fd5b5056fea2646970667358221220ee226540dd5b610c570434ed5558bba2fa9617269238be4ba03bab78c13c8bc064736f6c63430008070033

Deployed Bytecode Sourcemap

37634:3511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22238:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23421:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25102:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24624:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38288:1549;;;;;;;;;;;;;:::i;:::-;;22555:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25850:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40226:505;;;;;;;;;;;;;:::i;:::-;;37675:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37926:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26260:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40851:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23115:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38025:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38197:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22845:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37959:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23590:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39953:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25393:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37714:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26516:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23765:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38062:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22686:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37992:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39847:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25619:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22238:305;22340:4;22392:25;22377:40;;;:11;:40;;;;:105;;;;22449:33;22434:48;;;:11;:48;;;;22377:105;:158;;;;22499:36;22523:11;22499:23;:36::i;:::-;22377:158;22357:178;;22238:305;;;:::o;23421:100::-;23475:13;23508:5;23501:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23421:100;:::o;25102:219::-;25178:7;25206:16;25214:7;25206;:16::i;:::-;25198:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25289:15;:24;25305:7;25289:24;;;;;;;;;;;;;;;;;;;;;25282:31;;25102:219;;;:::o;24624:412::-;24705:13;24721:24;24737:7;24721:15;:24::i;:::-;24705:40;;24770:5;24764:11;;:2;:11;;;;24756:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24864:5;24848:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24873:37;24890:5;24897:12;:10;:12::i;:::-;24873:16;:37::i;:::-;24848:62;24826:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25007:21;25016:2;25020:7;25007:8;:21::i;:::-;24694:342;24624:412;;:::o;38288:1549::-;37879:5;;;;;;;;;;;37865:19;;:10;:19;;;37857:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;38380:4:::1;38357:27;;:21;;;;;;;;;;;:27;;;38349:36;;;::::0;::::1;;38399:17;38501:1;38451:15;38467:16;38485:10;38434:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38424:73;;;;;;38419:79;;:83;;;;:::i;:::-;38399:103;;38545:1;38529:15;;:17;;;;:::i;:::-;38513:15;:33;;;;38636:1;38622:12;:15;38619:206;;;38687:15;;38675:11;;:27;;;;:::i;:::-;38663:11;:39;;;;38619:206;;;38798:15;;38786:11;;:27;;;;:::i;:::-;38774:11;:39;;;;38619:206;38961:15;;38911;38927:16;38945:10;38894:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38884:73;;;;;;38879:79;;:97;;;;:::i;:::-;38865:11;:111;;;;39103:11;;39091;;:23;;;;:::i;:::-;39079:11;:35;;;;39220:2;39204:15;;:18;39201:629;;;39250:7;39271:20;39279:11;;39271:7;:20::i;:::-;39263:34;;39334:3;39329:2;39305:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;39263:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39249:93;;;39365:2;39357:11;;;::::0;::::1;;39234:146;39201:629;;;39508:7;39529:20;39537:11;;39529:7;:20::i;:::-;39521:34;;39563:21;39521:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39507:82;;;39612:2;39604:11;;;::::0;::::1;;39813:5;39791:21;;:27;;;;;;;;;;;;;;;;;;39404:426;39201:629;38338:1499;38288:1549::o:0;22555:119::-;22607:7;22647:19;;22634:10;:32;;;;:::i;:::-;22627:39;;22555:119;:::o;25850:339::-;26045:41;26064:12;:10;:12::i;:::-;26078:7;26045:18;:41::i;:::-;26037:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26153:28;26163:4;26169:2;26173:7;26153:9;:28::i;:::-;25850:339;;;:::o;40226:505::-;37879:5;;;;;;;;;;;37865:19;;:10;:19;;;37857:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40424:5:::1;40401:28;;:21;;;;;;;;;;;:28;;;40398:326;;;40456:7;40477:5;;;;;;;;;;;40469:19;;40525:3;40520:2;40496:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;40469:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40455:78;;;40556:2;40548:11;;;::::0;::::1;;40586:1;40574:11;:13;;;;40625:1;40614:10;;:12;;;;:::i;:::-;40602:11;:24;;;;40665:4;40643:21;;:26;;;;;;;;;;;;;;;;;;40702:10;;40684:15;:28;;;;40440:284;40398:326;40226:505::o:0;37675:30::-;;;;:::o;37926:26::-;;;;:::o;26260:185::-;26398:39;26415:4;26421:2;26425:7;26398:39;;;;;;;;;;;;:16;:39::i;:::-;26260:185;;;:::o;40851:105::-;37879:5;;;;;;;;;;;37865:19;;:10;:19;;;37857:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40936:11:::1;40926:7;:21;;;;;;;;;;;;:::i;:::-;;40851:105:::0;:::o;23115:239::-;23187:7;23207:13;23223:7;:16;23231:7;23223:16;;;;;;;;;;;;;;;;;;;;;23207:32;;23275:1;23258:19;;:5;:19;;;;23250:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23341:5;23334:12;;;23115:239;;;:::o;38025:30::-;;;;:::o;38197:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22845:208::-;22917:7;22962:1;22945:19;;:5;:19;;;;22937:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23029:9;:16;23039:5;23029:16;;;;;;;;;;;;;;;;23022:23;;22845:208;;;:::o;37959:26::-;;;;:::o;23590:104::-;23646:13;23679:7;23672:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23590:104;:::o;39953:263::-;40048:10;;40036:8;40020:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;40012:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40129:8;40118;;:19;;;;:::i;:::-;40104:9;:34;;40096:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40175:33;40187:10;40199:8;40175:11;:33::i;:::-;39953:263;:::o;25393:155::-;25488:52;25507:12;:10;:12::i;:::-;25521:8;25531;25488:18;:52::i;:::-;25393:155;;:::o;37714:33::-;;;;;;;;;;;;;:::o;26516:328::-;26691:41;26710:12;:10;:12::i;:::-;26724:7;26691:18;:41::i;:::-;26683:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26797:39;26811:4;26817:2;26821:7;26830:5;26797:13;:39::i;:::-;26516:328;;;;:::o;23765:456::-;23838:13;23872:16;23880:7;23872;:16::i;:::-;23864:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23953:21;23977:10;:8;:10::i;:::-;23953:34;;24141:1;24122:7;24116:21;:26;;:95;;;;;;;;;;;;;;;;;24169:7;24178:18;:7;:16;:18::i;:::-;24152:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24116:95;24109:102;;;23765:456;;;:::o;38062:36::-;;;;:::o;22686:95::-;22736:7;22763:10;22756:17;;22686:95;:::o;37992:26::-;;;;:::o;39847:96::-;37879:5;;;;;;;;;;;37865:19;;:10;:19;;;37857:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39926:9:::1;39915:8;:20;;;;39847:96:::0;:::o;25619:164::-;25716:4;25740:18;:25;25759:5;25740:25;;;;;;;;;;;;;;;:35;25766:8;25740:35;;;;;;;;;;;;;;;;;;;;;;;;;25733:42;;25619:164;;;;:::o;14883:157::-;14968:4;15007:25;14992:40;;;:11;:40;;;;14985:47;;14883:157;;;:::o;28354:127::-;28419:4;28471:1;28443:30;;:7;:16;28451:7;28443:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28436:37;;28354:127;;;:::o;3280:98::-;3333:7;3360:10;3353:17;;3280:98;:::o;34372:175::-;34474:2;34447:15;:24;34463:7;34447:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34531:7;34527:2;34492:47;;34501:24;34517:7;34501:15;:24::i;:::-;34492:47;;;;;;;;;;;;34372:175;;:::o;28648:349::-;28741:4;28766:16;28774:7;28766;:16::i;:::-;28758:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28842:13;28858:24;28874:7;28858:15;:24::i;:::-;28842:40;;28912:5;28901:16;;:7;:16;;;:51;;;;28945:7;28921:31;;:20;28933:7;28921:11;:20::i;:::-;:31;;;28901:51;:87;;;;28956:32;28973:5;28980:7;28956:16;:32::i;:::-;28901:87;28893:96;;;28648:349;;;;:::o;33628:626::-;33788:4;33760:32;;:24;33776:7;33760:15;:24::i;:::-;:32;;;33752:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:1;33853:16;;:2;:16;;;;33845:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33923:39;33944:4;33950:2;33954:7;33923:20;:39::i;:::-;34027:29;34044:1;34048:7;34027:8;:29::i;:::-;34088:1;34069:9;:15;34079:4;34069:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34117:1;34100:9;:13;34110:2;34100:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34148:2;34129:7;:16;34137:7;34129:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34187:7;34183:2;34168:27;;34177:4;34168:27;;;;;;;;;;;;34208:38;34228:4;34234:2;34238:7;34208:19;:38::i;:::-;33628:626;;;:::o;29317:984::-;29419:9;29403:25;;:12;:10;:12::i;:::-;:25;;;29395:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;29487:1;29473:16;;:2;:16;;;;29465:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29558:1;29545:10;:14;29537:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29758:10;29735:19;;:33;;29727:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29837:30;29870:19;;29837:52;;29905:9;29900:288;29920:10;29916:1;:14;29900:288;;;29977:15;29995:56;30021:2;30025:25;29995;:56::i;:::-;29977:74;;30080:40;30108:2;30112:7;30080:27;:40::i;:::-;30149:27;;;;:::i;:::-;;;29937:251;29932:3;;;;:::i;:::-;;;29900:288;;;;30230:25;30208:19;:47;;;;30283:10;30266:9;:13;30276:2;30266:13;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29384:917;29317:984;;:::o;34689:315::-;34844:8;34835:17;;:5;:17;;;;34827:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34931:8;34893:18;:25;34912:5;34893:25;;;;;;;;;;;;;;;:35;34919:8;34893:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34977:8;34955:41;;34970:5;34955:41;;;34987:8;34955:41;;;;;;:::i;:::-;;;;;;;;34689:315;;;:::o;27726:::-;27883:28;27893:4;27899:2;27903:7;27883:9;:28::i;:::-;27930:48;27953:4;27959:2;27963:7;27972:5;27930:22;:48::i;:::-;27922:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27726:315;;;;:::o;40743:100::-;40795:13;40828:7;40821:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40743:100;:::o;534:723::-;590:13;820:1;811:5;:10;807:53;;;838:10;;;;;;;;;;;;;;;;;;;;;807:53;870:12;885:5;870:20;;901:14;926:78;941:1;933:4;:9;926:78;;959:8;;;;;:::i;:::-;;;;990:2;982:10;;;;;:::i;:::-;;;926:78;;;1014:19;1046:6;1036:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1014:39;;1064:154;1080:1;1071:5;:10;1064:154;;1108:1;1098:11;;;;;:::i;:::-;;;1175:2;1167:5;:10;;;;:::i;:::-;1154:2;:24;;;;:::i;:::-;1141:39;;1124:6;1131;1124:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1204:2;1195:11;;;;;:::i;:::-;;;1064:154;;;1242:6;1228:21;;;;;534:723;;;;:::o;36940:126::-;;;;:::o;37451:125::-;;;;:::o;30317:737::-;30432:7;30457:17;30560:2;30585:11;30619:12;30654:15;30692:16;30756:1;30741:12;:16;;;;:::i;:::-;30731:27;30789:4;30817:25;30527:334;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30499:377;;;;;;30477:410;;30457:430;;30899:19;30934:25;30922:9;:37;;;;:::i;:::-;30899:61;;30978:64;31003:11;31016:25;30978:24;:64::i;:::-;30971:71;;;;30317:737;;;;:::o;29005:304::-;29090:45;29119:1;29123:2;29127:7;29090:20;:45::i;:::-;29175:2;29156:7;:16;29164:7;29156:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29228:7;29224:2;29203:33;;29220:1;29203:33;;;;;;;;;;;;29257:44;29285:1;29289:2;29293:7;29257:19;:44::i;:::-;29005:304;;:::o;35569:799::-;35724:4;35745:15;:2;:13;;;:15::i;:::-;35741:620;;;35797:2;35781:36;;;35818:12;:10;:12::i;:::-;35832:4;35838:7;35847:5;35781:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35777:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36040:1;36023:6;:13;:18;36019:272;;;36066:60;;;;;;;;;;:::i;:::-;;;;;;;;36019:272;36241:6;36235:13;36226:6;36222:2;36218:15;36211:38;35777:529;35914:41;;;35904:51;;;:6;:51;;;;35897:58;;;;;35741:620;36345:4;36338:11;;35569:799;;;;;;;:::o;31172:1431::-;31294:7;31319:18;31340:16;:28;31357:10;31340:28;;;;;;;;;;;;31319:49;;31379:14;31422:1;31408:10;:15;31404:292;;;31521:10;31512:19;;31404:292;;;31674:10;31665:19;;31404:292;31708:17;31756:1;31728:25;:29;;;;:::i;:::-;31708:49;;31786:9;31772:10;:23;31768:804;;32019:22;32044:16;:27;32061:9;32044:27;;;;;;;;;;;;32019:52;;32108:1;32090:14;:19;32086:475;;;32237:9;32206:16;:28;32223:10;32206:28;;;;;;;;;;;:40;;;;32086:475;;;32423:14;32392:16;:28;32409:10;32392:28;;;;;;;;;;;:45;;;;32518:16;:27;32535:9;32518:27;;;;;;;;;;;32511:34;;;32086:475;31797:775;31768:804;32589:6;32582:13;;;;;31172:1431;;;;:::o;4727:326::-;4787:4;5044:1;5022:7;:19;;;:23;5015:30;;4727:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:157::-;7387:45;7407:24;7425:5;7407:24;:::i;:::-;7387:45;:::i;:::-;7382:3;7375:58;7282:157;;:::o;7445:109::-;7526:21;7541:5;7526:21;:::i;:::-;7521:3;7514:34;7445:109;;:::o;7560:118::-;7647:24;7665:5;7647:24;:::i;:::-;7642:3;7635:37;7560:118;;:::o;7684:360::-;7770:3;7798:38;7830:5;7798:38;:::i;:::-;7852:70;7915:6;7910:3;7852:70;:::i;:::-;7845:77;;7931:52;7976:6;7971:3;7964:4;7957:5;7953:16;7931:52;:::i;:::-;8008:29;8030:6;8008:29;:::i;:::-;8003:3;7999:39;7992:46;;7774:270;7684:360;;;;:::o;8050:364::-;8138:3;8166:39;8199:5;8166:39;:::i;:::-;8221:71;8285:6;8280:3;8221:71;:::i;:::-;8214:78;;8301:52;8346:6;8341:3;8334:4;8327:5;8323:16;8301:52;:::i;:::-;8378:29;8400:6;8378:29;:::i;:::-;8373:3;8369:39;8362:46;;8142:272;8050:364;;;;:::o;8420:377::-;8526:3;8554:39;8587:5;8554:39;:::i;:::-;8609:89;8691:6;8686:3;8609:89;:::i;:::-;8602:96;;8707:52;8752:6;8747:3;8740:4;8733:5;8729:16;8707:52;:::i;:::-;8784:6;8779:3;8775:16;8768:23;;8530:267;8420:377;;;;:::o;8803:366::-;8945:3;8966:67;9030:2;9025:3;8966:67;:::i;:::-;8959:74;;9042:93;9131:3;9042:93;:::i;:::-;9160:2;9155:3;9151:12;9144:19;;8803:366;;;:::o;9175:::-;9317:3;9338:67;9402:2;9397:3;9338:67;:::i;:::-;9331:74;;9414:93;9503:3;9414:93;:::i;:::-;9532:2;9527:3;9523:12;9516:19;;9175:366;;;:::o;9547:::-;9689:3;9710:67;9774:2;9769:3;9710:67;:::i;:::-;9703:74;;9786:93;9875:3;9786:93;:::i;:::-;9904:2;9899:3;9895:12;9888:19;;9547:366;;;:::o;9919:::-;10061:3;10082:67;10146:2;10141:3;10082:67;:::i;:::-;10075:74;;10158:93;10247:3;10158:93;:::i;:::-;10276:2;10271:3;10267:12;10260:19;;9919:366;;;:::o;10291:::-;10433:3;10454:67;10518:2;10513:3;10454:67;:::i;:::-;10447:74;;10530:93;10619:3;10530:93;:::i;:::-;10648:2;10643:3;10639:12;10632:19;;10291:366;;;:::o;10663:::-;10805:3;10826:67;10890:2;10885:3;10826:67;:::i;:::-;10819:74;;10902:93;10991:3;10902:93;:::i;:::-;11020:2;11015:3;11011:12;11004:19;;10663:366;;;:::o;11035:::-;11177:3;11198:67;11262:2;11257:3;11198:67;:::i;:::-;11191:74;;11274:93;11363:3;11274:93;:::i;:::-;11392:2;11387:3;11383:12;11376:19;;11035:366;;;:::o;11407:::-;11549:3;11570:67;11634:2;11629:3;11570:67;:::i;:::-;11563:74;;11646:93;11735:3;11646:93;:::i;:::-;11764:2;11759:3;11755:12;11748:19;;11407:366;;;:::o;11779:::-;11921:3;11942:67;12006:2;12001:3;11942:67;:::i;:::-;11935:74;;12018:93;12107:3;12018:93;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;11779:366;;;:::o;12151:::-;12293:3;12314:67;12378:2;12373:3;12314:67;:::i;:::-;12307:74;;12390:93;12479:3;12390:93;:::i;:::-;12508:2;12503:3;12499:12;12492:19;;12151:366;;;:::o;12523:::-;12665:3;12686:67;12750:2;12745:3;12686:67;:::i;:::-;12679:74;;12762:93;12851:3;12762:93;:::i;:::-;12880:2;12875:3;12871:12;12864:19;;12523:366;;;:::o;12895:::-;13037:3;13058:67;13122:2;13117:3;13058:67;:::i;:::-;13051:74;;13134:93;13223:3;13134:93;:::i;:::-;13252:2;13247:3;13243:12;13236:19;;12895:366;;;:::o;13267:::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13267:366;;;:::o;13639:400::-;13799:3;13820:84;13902:1;13897:3;13820:84;:::i;:::-;13813:91;;13913:93;14002:3;13913:93;:::i;:::-;14031:1;14026:3;14022:11;14015:18;;13639:400;;;:::o;14045:366::-;14187:3;14208:67;14272:2;14267:3;14208:67;:::i;:::-;14201:74;;14284:93;14373:3;14284:93;:::i;:::-;14402:2;14397:3;14393:12;14386:19;;14045:366;;;:::o;14417:::-;14559:3;14580:67;14644:2;14639:3;14580:67;:::i;:::-;14573:74;;14656:93;14745:3;14656:93;:::i;:::-;14774:2;14769:3;14765:12;14758:19;;14417:366;;;:::o;14789:::-;14931:3;14952:67;15016:2;15011:3;14952:67;:::i;:::-;14945:74;;15028:93;15117:3;15028:93;:::i;:::-;15146:2;15141:3;15137:12;15130:19;;14789:366;;;:::o;15161:398::-;15320:3;15341:83;15422:1;15417:3;15341:83;:::i;:::-;15334:90;;15433:93;15522:3;15433:93;:::i;:::-;15551:1;15546:3;15542:11;15535:18;;15161:398;;;:::o;15565:366::-;15707:3;15728:67;15792:2;15787:3;15728:67;:::i;:::-;15721:74;;15804:93;15893:3;15804:93;:::i;:::-;15922:2;15917:3;15913:12;15906:19;;15565:366;;;:::o;15937:::-;16079:3;16100:67;16164:2;16159:3;16100:67;:::i;:::-;16093:74;;16176:93;16265:3;16176:93;:::i;:::-;16294:2;16289:3;16285:12;16278:19;;15937:366;;;:::o;16309:365::-;16451:3;16472:66;16536:1;16531:3;16472:66;:::i;:::-;16465:73;;16547:93;16636:3;16547:93;:::i;:::-;16665:2;16660:3;16656:12;16649:19;;16309:365;;;:::o;16680:118::-;16767:24;16785:5;16767:24;:::i;:::-;16762:3;16755:37;16680:118;;:::o;16804:157::-;16909:45;16929:24;16947:5;16929:24;:::i;:::-;16909:45;:::i;:::-;16904:3;16897:58;16804:157;;:::o;16967:701::-;17248:3;17270:95;17361:3;17352:6;17270:95;:::i;:::-;17263:102;;17382:95;17473:3;17464:6;17382:95;:::i;:::-;17375:102;;17494:148;17638:3;17494:148;:::i;:::-;17487:155;;17659:3;17652:10;;16967:701;;;;;:::o;17674:379::-;17858:3;17880:147;18023:3;17880:147;:::i;:::-;17873:154;;18044:3;18037:10;;17674:379;;;:::o;18059:538::-;18227:3;18242:75;18313:3;18304:6;18242:75;:::i;:::-;18342:2;18337:3;18333:12;18326:19;;18355:75;18426:3;18417:6;18355:75;:::i;:::-;18455:2;18450:3;18446:12;18439:19;;18468:75;18539:3;18530:6;18468:75;:::i;:::-;18568:2;18563:3;18559:12;18552:19;;18588:3;18581:10;;18059:538;;;;;;:::o;18603:222::-;18696:4;18734:2;18723:9;18719:18;18711:26;;18747:71;18815:1;18804:9;18800:17;18791:6;18747:71;:::i;:::-;18603:222;;;;:::o;18831:640::-;19026:4;19064:3;19053:9;19049:19;19041:27;;19078:71;19146:1;19135:9;19131:17;19122:6;19078:71;:::i;:::-;19159:72;19227:2;19216:9;19212:18;19203:6;19159:72;:::i;:::-;19241;19309:2;19298:9;19294:18;19285:6;19241:72;:::i;:::-;19360:9;19354:4;19350:20;19345:2;19334:9;19330:18;19323:48;19388:76;19459:4;19450:6;19388:76;:::i;:::-;19380:84;;18831:640;;;;;;;:::o;19477:997::-;19766:4;19804:3;19793:9;19789:19;19781:27;;19818:71;19886:1;19875:9;19871:17;19862:6;19818:71;:::i;:::-;19899:72;19967:2;19956:9;19952:18;19943:6;19899:72;:::i;:::-;19981;20049:2;20038:9;20034:18;20025:6;19981:72;:::i;:::-;20063;20131:2;20120:9;20116:18;20107:6;20063:72;:::i;:::-;20145:73;20213:3;20202:9;20198:19;20189:6;20145:73;:::i;:::-;20228;20296:3;20285:9;20281:19;20272:6;20228:73;:::i;:::-;20311;20379:3;20368:9;20364:19;20355:6;20311:73;:::i;:::-;20394;20462:3;20451:9;20447:19;20438:6;20394:73;:::i;:::-;19477:997;;;;;;;;;;;:::o;20480:210::-;20567:4;20605:2;20594:9;20590:18;20582:26;;20618:65;20680:1;20669:9;20665:17;20656:6;20618:65;:::i;:::-;20480:210;;;;:::o;20696:313::-;20809:4;20847:2;20836:9;20832:18;20824:26;;20896:9;20890:4;20886:20;20882:1;20871:9;20867:17;20860:47;20924:78;20997:4;20988:6;20924:78;:::i;:::-;20916:86;;20696:313;;;;:::o;21015:419::-;21181:4;21219:2;21208:9;21204:18;21196:26;;21268:9;21262:4;21258:20;21254:1;21243:9;21239:17;21232:47;21296:131;21422:4;21296:131;:::i;:::-;21288:139;;21015:419;;;:::o;21440:::-;21606:4;21644:2;21633:9;21629:18;21621:26;;21693:9;21687:4;21683:20;21679:1;21668:9;21664:17;21657:47;21721:131;21847:4;21721:131;:::i;:::-;21713:139;;21440:419;;;:::o;21865:::-;22031:4;22069:2;22058:9;22054:18;22046:26;;22118:9;22112:4;22108:20;22104:1;22093:9;22089:17;22082:47;22146:131;22272:4;22146:131;:::i;:::-;22138:139;;21865:419;;;:::o;22290:::-;22456:4;22494:2;22483:9;22479:18;22471:26;;22543:9;22537:4;22533:20;22529:1;22518:9;22514:17;22507:47;22571:131;22697:4;22571:131;:::i;:::-;22563:139;;22290:419;;;:::o;22715:::-;22881:4;22919:2;22908:9;22904:18;22896:26;;22968:9;22962:4;22958:20;22954:1;22943:9;22939:17;22932:47;22996:131;23122:4;22996:131;:::i;:::-;22988:139;;22715:419;;;:::o;23140:::-;23306:4;23344:2;23333:9;23329:18;23321:26;;23393:9;23387:4;23383:20;23379:1;23368:9;23364:17;23357:47;23421:131;23547:4;23421:131;:::i;:::-;23413:139;;23140:419;;;:::o;23565:::-;23731:4;23769:2;23758:9;23754:18;23746:26;;23818:9;23812:4;23808:20;23804:1;23793:9;23789:17;23782:47;23846:131;23972:4;23846:131;:::i;:::-;23838:139;;23565:419;;;:::o;23990:::-;24156:4;24194:2;24183:9;24179:18;24171:26;;24243:9;24237:4;24233:20;24229:1;24218:9;24214:17;24207:47;24271:131;24397:4;24271:131;:::i;:::-;24263:139;;23990:419;;;:::o;24415:::-;24581:4;24619:2;24608:9;24604:18;24596:26;;24668:9;24662:4;24658:20;24654:1;24643:9;24639:17;24632:47;24696:131;24822:4;24696:131;:::i;:::-;24688:139;;24415:419;;;:::o;24840:::-;25006:4;25044:2;25033:9;25029:18;25021:26;;25093:9;25087:4;25083:20;25079:1;25068:9;25064:17;25057:47;25121:131;25247:4;25121:131;:::i;:::-;25113:139;;24840:419;;;:::o;25265:::-;25431:4;25469:2;25458:9;25454:18;25446:26;;25518:9;25512:4;25508:20;25504:1;25493:9;25489:17;25482:47;25546:131;25672:4;25546:131;:::i;:::-;25538:139;;25265:419;;;:::o;25690:::-;25856:4;25894:2;25883:9;25879:18;25871:26;;25943:9;25937:4;25933:20;25929:1;25918:9;25914:17;25907:47;25971:131;26097:4;25971:131;:::i;:::-;25963:139;;25690:419;;;:::o;26115:::-;26281:4;26319:2;26308:9;26304:18;26296:26;;26368:9;26362:4;26358:20;26354:1;26343:9;26339:17;26332:47;26396:131;26522:4;26396:131;:::i;:::-;26388:139;;26115:419;;;:::o;26540:::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:::-;27131:4;27169:2;27158:9;27154:18;27146:26;;27218:9;27212:4;27208:20;27204:1;27193:9;27189:17;27182:47;27246:131;27372:4;27246:131;:::i;:::-;27238:139;;26965:419;;;:::o;27390:::-;27556:4;27594:2;27583:9;27579:18;27571:26;;27643:9;27637:4;27633:20;27629:1;27618:9;27614:17;27607:47;27671:131;27797:4;27671:131;:::i;:::-;27663:139;;27390:419;;;:::o;27815:::-;27981:4;28019:2;28008:9;28004:18;27996:26;;28068:9;28062:4;28058:20;28054:1;28043:9;28039:17;28032:47;28096:131;28222:4;28096:131;:::i;:::-;28088:139;;27815:419;;;:::o;28240:::-;28406:4;28444:2;28433:9;28429:18;28421:26;;28493:9;28487:4;28483:20;28479:1;28468:9;28464:17;28457:47;28521:131;28647:4;28521:131;:::i;:::-;28513:139;;28240:419;;;:::o;28665:::-;28831:4;28869:2;28858:9;28854:18;28846:26;;28918:9;28912:4;28908:20;28904:1;28893:9;28889:17;28882:47;28946:131;29072:4;28946:131;:::i;:::-;28938:139;;28665:419;;;:::o;29090:222::-;29183:4;29221:2;29210:9;29206:18;29198:26;;29234:71;29302:1;29291:9;29287:17;29278:6;29234:71;:::i;:::-;29090:222;;;;:::o;29318:129::-;29352:6;29379:20;;:::i;:::-;29369:30;;29408:33;29436:4;29428:6;29408:33;:::i;:::-;29318:129;;;:::o;29453:75::-;29486:6;29519:2;29513:9;29503:19;;29453:75;:::o;29534:307::-;29595:4;29685:18;29677:6;29674:30;29671:56;;;29707:18;;:::i;:::-;29671:56;29745:29;29767:6;29745:29;:::i;:::-;29737:37;;29829:4;29823;29819:15;29811:23;;29534:307;;;:::o;29847:308::-;29909:4;29999:18;29991:6;29988:30;29985:56;;;30021:18;;:::i;:::-;29985:56;30059:29;30081:6;30059:29;:::i;:::-;30051:37;;30143:4;30137;30133:15;30125:23;;29847:308;;;:::o;30161:98::-;30212:6;30246:5;30240:12;30230:22;;30161:98;;;:::o;30265:99::-;30317:6;30351:5;30345:12;30335:22;;30265:99;;;:::o;30370:168::-;30453:11;30487:6;30482:3;30475:19;30527:4;30522:3;30518:14;30503:29;;30370:168;;;;:::o;30544:147::-;30645:11;30682:3;30667:18;;30544:147;;;;:::o;30697:169::-;30781:11;30815:6;30810:3;30803:19;30855:4;30850:3;30846:14;30831:29;;30697:169;;;;:::o;30872:148::-;30974:11;31011:3;30996:18;;30872:148;;;;:::o;31026:305::-;31066:3;31085:20;31103:1;31085:20;:::i;:::-;31080:25;;31119:20;31137:1;31119:20;:::i;:::-;31114:25;;31273:1;31205:66;31201:74;31198:1;31195:81;31192:107;;;31279:18;;:::i;:::-;31192:107;31323:1;31320;31316:9;31309:16;;31026:305;;;;:::o;31337:185::-;31377:1;31394:20;31412:1;31394:20;:::i;:::-;31389:25;;31428:20;31446:1;31428:20;:::i;:::-;31423:25;;31467:1;31457:35;;31472:18;;:::i;:::-;31457:35;31514:1;31511;31507:9;31502:14;;31337:185;;;;:::o;31528:348::-;31568:7;31591:20;31609:1;31591:20;:::i;:::-;31586:25;;31625:20;31643:1;31625:20;:::i;:::-;31620:25;;31813:1;31745:66;31741:74;31738:1;31735:81;31730:1;31723:9;31716:17;31712:105;31709:131;;;31820:18;;:::i;:::-;31709:131;31868:1;31865;31861:9;31850:20;;31528:348;;;;:::o;31882:191::-;31922:4;31942:20;31960:1;31942:20;:::i;:::-;31937:25;;31976:20;31994:1;31976:20;:::i;:::-;31971:25;;32015:1;32012;32009:8;32006:34;;;32020:18;;:::i;:::-;32006:34;32065:1;32062;32058:9;32050:17;;31882:191;;;;:::o;32079:96::-;32116:7;32145:24;32163:5;32145:24;:::i;:::-;32134:35;;32079:96;;;:::o;32181:90::-;32215:7;32258:5;32251:13;32244:21;32233:32;;32181:90;;;:::o;32277:77::-;32314:7;32343:5;32332:16;;32277:77;;;:::o;32360:149::-;32396:7;32436:66;32429:5;32425:78;32414:89;;32360:149;;;:::o;32515:126::-;32552:7;32592:42;32585:5;32581:54;32570:65;;32515:126;;;:::o;32647:77::-;32684:7;32713:5;32702:16;;32647:77;;;:::o;32730:154::-;32814:6;32809:3;32804;32791:30;32876:1;32867:6;32862:3;32858:16;32851:27;32730:154;;;:::o;32890:307::-;32958:1;32968:113;32982:6;32979:1;32976:13;32968:113;;;33067:1;33062:3;33058:11;33052:18;33048:1;33043:3;33039:11;33032:39;33004:2;33001:1;32997:10;32992:15;;32968:113;;;33099:6;33096:1;33093:13;33090:101;;;33179:1;33170:6;33165:3;33161:16;33154:27;33090:101;32939:258;32890:307;;;:::o;33203:171::-;33242:3;33265:24;33283:5;33265:24;:::i;:::-;33256:33;;33311:4;33304:5;33301:15;33298:41;;;33319:18;;:::i;:::-;33298:41;33366:1;33359:5;33355:13;33348:20;;33203:171;;;:::o;33380:320::-;33424:6;33461:1;33455:4;33451:12;33441:22;;33508:1;33502:4;33498:12;33529:18;33519:81;;33585:4;33577:6;33573:17;33563:27;;33519:81;33647:2;33639:6;33636:14;33616:18;33613:38;33610:84;;;33666:18;;:::i;:::-;33610:84;33431:269;33380:320;;;:::o;33706:281::-;33789:27;33811:4;33789:27;:::i;:::-;33781:6;33777:40;33919:6;33907:10;33904:22;33883:18;33871:10;33868:34;33865:62;33862:88;;;33930:18;;:::i;:::-;33862:88;33970:10;33966:2;33959:22;33749:238;33706:281;;:::o;33993:233::-;34032:3;34055:24;34073:5;34055:24;:::i;:::-;34046:33;;34101:66;34094:5;34091:77;34088:103;;;34171:18;;:::i;:::-;34088:103;34218:1;34211:5;34207:13;34200:20;;33993:233;;;:::o;34232:100::-;34271:7;34300:26;34320:5;34300:26;:::i;:::-;34289:37;;34232:100;;;:::o;34338:94::-;34377:7;34406:20;34420:5;34406:20;:::i;:::-;34395:31;;34338:94;;;:::o;34438:79::-;34477:7;34506:5;34495:16;;34438:79;;;:::o;34523:176::-;34555:1;34572:20;34590:1;34572:20;:::i;:::-;34567:25;;34606:20;34624:1;34606:20;:::i;:::-;34601:25;;34645:1;34635:35;;34650:18;;:::i;:::-;34635:35;34691:1;34688;34684:9;34679:14;;34523:176;;;;:::o;34705:180::-;34753:77;34750:1;34743:88;34850:4;34847:1;34840:15;34874:4;34871:1;34864:15;34891:180;34939:77;34936:1;34929:88;35036:4;35033:1;35026:15;35060:4;35057:1;35050:15;35077:180;35125:77;35122:1;35115:88;35222:4;35219:1;35212:15;35246:4;35243:1;35236:15;35263:180;35311:77;35308:1;35301:88;35408:4;35405:1;35398:15;35432:4;35429:1;35422:15;35449:180;35497:77;35494:1;35487:88;35594:4;35591:1;35584:15;35618:4;35615:1;35608:15;35635:117;35744:1;35741;35734:12;35758:117;35867:1;35864;35857:12;35881:117;35990:1;35987;35980:12;36004:117;36113:1;36110;36103:12;36127:102;36168:6;36219:2;36215:7;36210:2;36203:5;36199:14;36195:28;36185:38;;36127:102;;;:::o;36235:94::-;36268:8;36316:5;36312:2;36308:14;36287:35;;36235:94;;;:::o;36335:237::-;36475:34;36471:1;36463:6;36459:14;36452:58;36544:20;36539:2;36531:6;36527:15;36520:45;36335:237;:::o;36578:224::-;36718:34;36714:1;36706:6;36702:14;36695:58;36787:7;36782:2;36774:6;36770:15;36763:32;36578:224;:::o;36808:171::-;36948:23;36944:1;36936:6;36932:14;36925:47;36808:171;:::o;36985:223::-;37125:34;37121:1;37113:6;37109:14;37102:58;37194:6;37189:2;37181:6;37177:15;37170:31;36985:223;:::o;37214:175::-;37354:27;37350:1;37342:6;37338:14;37331:51;37214:175;:::o;37395:231::-;37535:34;37531:1;37523:6;37519:14;37512:58;37604:14;37599:2;37591:6;37587:15;37580:39;37395:231;:::o;37632:243::-;37772:34;37768:1;37760:6;37756:14;37749:58;37841:26;37836:2;37828:6;37824:15;37817:51;37632:243;:::o;37881:229::-;38021:34;38017:1;38009:6;38005:14;37998:58;38090:12;38085:2;38077:6;38073:15;38066:37;37881:229;:::o;38116:228::-;38256:34;38252:1;38244:6;38240:14;38233:58;38325:11;38320:2;38312:6;38308:15;38301:36;38116:228;:::o;38350:172::-;38490:24;38486:1;38478:6;38474:14;38467:48;38350:172;:::o;38528:182::-;38668:34;38664:1;38656:6;38652:14;38645:58;38528:182;:::o;38716:230::-;38856:34;38852:1;38844:6;38840:14;38833:58;38925:13;38920:2;38912:6;38908:15;38901:38;38716:230;:::o;38952:231::-;39092:34;39088:1;39080:6;39076:14;39069:58;39161:14;39156:2;39148:6;39144:15;39137:39;38952:231;:::o;39189:155::-;39329:7;39325:1;39317:6;39313:14;39306:31;39189:155;:::o;39350:234::-;39490:34;39486:1;39478:6;39474:14;39467:58;39559:17;39554:2;39546:6;39542:15;39535:42;39350:234;:::o;39590:220::-;39730:34;39726:1;39718:6;39714:14;39707:58;39799:3;39794:2;39786:6;39782:15;39775:28;39590:220;:::o;39816:227::-;39956:34;39952:1;39944:6;39940:14;39933:58;40025:10;40020:2;40012:6;40008:15;40001:35;39816:227;:::o;40049:114::-;;:::o;40169:236::-;40309:34;40305:1;40297:6;40293:14;40286:58;40378:19;40373:2;40365:6;40361:15;40354:44;40169:236;:::o;40411:171::-;40551:23;40547:1;40539:6;40535:14;40528:47;40411:171;:::o;40588:159::-;40728:11;40724:1;40716:6;40712:14;40705:35;40588:159;:::o;40753:122::-;40826:24;40844:5;40826:24;:::i;:::-;40819:5;40816:35;40806:63;;40865:1;40862;40855:12;40806:63;40753:122;:::o;40881:116::-;40951:21;40966:5;40951:21;:::i;:::-;40944:5;40941:32;40931:60;;40987:1;40984;40977:12;40931:60;40881:116;:::o;41003:120::-;41075:23;41092:5;41075:23;:::i;:::-;41068:5;41065:34;41055:62;;41113:1;41110;41103:12;41055:62;41003:120;:::o;41129:122::-;41202:24;41220:5;41202:24;:::i;:::-;41195:5;41192:35;41182:63;;41241:1;41238;41231:12;41182:63;41129:122;:::o

Swarm Source

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