ETH Price: $3,430.44 (+5.65%)
Gas: 7 Gwei

Token

S7NB (S7NB)
 

Overview

Max Total Supply

1,251 S7NB

Holders

347

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 S7NB
0x4d94a5193e0005581c546f63ff12ef8be977785c
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:
S7NSBox

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-15
*/

// File: interfaces/IS7NSManagement.sol


pragma solidity ^0.8.0;

/**
   @title IS7NSManagement contract
   @dev Provide interfaces that allow interaction to S7NSManagement contract
*/
interface IS7NSManagement {
    function treasury() external view returns (address);
    function hasRole(bytes32 role, address account) external view returns (bool);
    function paymentTokens(address _token) external view returns (bool);
    function halted() external view returns (bool);
}

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/[email protected]/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: @openzeppelin/[email protected]/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.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, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be 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 = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer 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 an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    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: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol


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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: S7NSBox.sol


pragma solidity ^0.8.0;



contract S7NSBox is ERC721Enumerable {

	bytes32 private constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");
	
	IS7NSManagement public management;

	string public baseURI;

	modifier isHalted() {
		require(!management.halted(), "Maintenance");
		_;
	}
	
	modifier onlyMinter() {
		require(
			management.hasRole(MINTER_ROLE, _msgSender()), "OnlyMinter"
		);
        _;
    }

	modifier onlyManager() {
		require(
			management.hasRole(MANAGER_ROLE, _msgSender()), "OnlyManager"
		);
        _;
    }

	event Produce(address indexed to, uint256 indexed fromId, uint256 indexed toId);
	event Destroy(address indexed operator, uint256[] tokenIds);

	constructor(
		address _management,
		string memory _uri
	) ERC721("S7NB", "S7NB") {
		management = IS7NSManagement(_management);
		baseURI = _uri;
	}

	/**
       	@notice Update Address of S7NSManagement contract
       	@dev  Caller must have MANAGER_ROLE
		@param	_management				Address of S7NSManagement contract
    */
	function setManagement(address _management) external onlyManager {
		require(_management != address(0), "AddressZero");

		management = IS7NSManagement(_management);
	}

	/**
       	@notice Update new value of Base URI
       	@dev  Caller must have MANAGER_ROLE
       	@param 	baseURI_			New string of `baseURI`
    */
	function setBaseURI(string calldata baseURI_) external onlyManager {
		baseURI = baseURI_;
	}

	/**
       	@notice Mint Boxes to `_beneficiary`
       	@dev  Caller must have MINTER_ROLE
		@param	_beneficiary			Address of Beneficiary
		@param	_fromID					Start of TokenID
		@param	_amount					Amount of Boxes to be minted
    */
	function produce(address _beneficiary, uint256 _fromID, uint256 _amount) external onlyMinter {
		for (uint256 i = _fromID; i < _fromID + _amount; i++) 
			_safeMint(_beneficiary, i);

		emit Produce(_beneficiary, _fromID, _fromID + _amount - 1);
	}

	/**
       	@notice Burn Boxes from `msg.sender`
       	@dev  Caller can be ANY
		@param	_ids				A list of `tokenIds` to be burned
		
		Note: MINTER_ROLE is granted a privilege to burn Boxes
    */
	function destroy(uint256[] calldata _ids) external {
		bool isAuthorized;
		address _operator = _msgSender();
		if (management.hasRole(MINTER_ROLE, _operator)) isAuthorized = true;

		uint256 _amounts = _ids.length;
		uint256 _tokenId;
		for (uint256 i; i < _amounts; i++) {
			_tokenId = _ids[i];
			require(
				ownerOf(_tokenId) == _operator || isAuthorized,
				"NotAuthorizedNorOwner"
			);

			_burn(_tokenId);
		}

		emit Destroy(_operator, _ids);
	}

	/**
       	@notice Query a list of Boxes that owned by `_account`
       	@dev  Caller can be ANY
		@param	_account			Account's address to query
		@param	_fromIdx			Starting index
		@param	_toIdx				Ending index
    */
	function tokensByOwner(address _account, uint256 _fromIdx, uint256 _toIdx) external view returns (uint256[] memory _tokens) {
		uint256 _size = _toIdx - _fromIdx + 1;
		_tokens = new uint256[](_size);

		for(uint256 i; i < _size; i++) 
			_tokens[i] = tokenOfOwnerByIndex(_account, _fromIdx + i);
	}

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

	function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override isHalted {
		super._beforeTokenTransfer(from, to, tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_management","type":"address"},{"internalType":"string","name":"_uri","type":"string"}],"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":"operator","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"Destroy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"fromId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"toId","type":"uint256"}],"name":"Produce","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"management","outputs":[{"internalType":"contract IS7NSManagement","name":"","type":"address"}],"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":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_fromID","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"produce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_management","type":"address"}],"name":"setManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_fromIdx","type":"uint256"},{"internalType":"uint256","name":"_toIdx","type":"uint256"}],"name":"tokensByOwner","outputs":[{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"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"}]

60806040523480156200001157600080fd5b50604051620043d0380380620043d08339818101604052810190620000379190620003eb565b6040518060400160405280600481526020017f53374e42000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53374e42000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000139565b508060019080519060200190620000d492919062000139565b50505081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b90805190602001906200013092919062000139565b505050620004b6565b828054620001479062000480565b90600052602060002090601f0160209004810192826200016b5760008555620001b7565b82601f106200018657805160ff1916838001178555620001b7565b82800160010185558215620001b7579182015b82811115620001b657825182559160200191906001019062000199565b5b509050620001c69190620001ca565b5090565b5b80821115620001e5576000816000905550600101620001cb565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022a82620001fd565b9050919050565b6200023c816200021d565b81146200024857600080fd5b50565b6000815190506200025c8162000231565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002b7826200026c565b810181811067ffffffffffffffff82111715620002d957620002d86200027d565b5b80604052505050565b6000620002ee620001e9565b9050620002fc8282620002ac565b919050565b600067ffffffffffffffff8211156200031f576200031e6200027d565b5b6200032a826200026c565b9050602081019050919050565b60005b83811015620003575780820151818401526020810190506200033a565b8381111562000367576000848401525b50505050565b6000620003846200037e8462000301565b620002e2565b905082815260208101848484011115620003a357620003a262000267565b5b620003b084828562000337565b509392505050565b600082601f830112620003d057620003cf62000262565b5b8151620003e28482602086016200036d565b91505092915050565b60008060408385031215620004055762000404620001f3565b5b600062000415858286016200024b565b925050602083015167ffffffffffffffff811115620004395762000438620001f8565b5b6200044785828601620003b8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049957607f821691505b60208210811415620004b057620004af62000451565b5b50919050565b613f0a80620004c66000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80636352211e116100c3578063a22cb4651161007c578063a22cb465146103c4578063b88d4fde146103e0578063c87b56dd146103fc578063d4a22bde1461042c578063e985e9c514610448578063eedaf174146104785761014d565b80636352211e146102ee5780636c0360eb1461031e57806370a082311461033c5780637ae876aa1461036c57806388a8d6021461038857806395d89b41146103a65761014d565b806323b872dd1161011557806323b872dd1461020a5780632f745c591461022657806342842e0e1461025657806343198ac4146102725780634f6ccce7146102a257806355f804b3146102d25761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806318160ddd146101ec575b600080fd5b61016c600480360381019061016791906128f4565b610494565b604051610179919061293c565b60405180910390f35b61018a61050e565b60405161019791906129f0565b60405180910390f35b6101ba60048036038101906101b59190612a48565b6105a0565b6040516101c79190612ab6565b60405180910390f35b6101ea60048036038101906101e59190612afd565b6105e6565b005b6101f46106fe565b6040516102019190612b4c565b60405180910390f35b610224600480360381019061021f9190612b67565b61070b565b005b610240600480360381019061023b9190612afd565b61076b565b60405161024d9190612b4c565b60405180910390f35b610270600480360381019061026b9190612b67565b610810565b005b61028c60048036038101906102879190612bba565b610830565b6040516102999190612ccb565b60405180910390f35b6102bc60048036038101906102b79190612a48565b6108f4565b6040516102c99190612b4c565b60405180910390f35b6102ec60048036038101906102e79190612d52565b610965565b005b61030860048036038101906103039190612a48565b610a8e565b6040516103159190612ab6565b60405180910390f35b610326610b40565b60405161033391906129f0565b60405180910390f35b61035660048036038101906103519190612d9f565b610bce565b6040516103639190612b4c565b60405180910390f35b61038660048036038101906103819190612e22565b610c86565b005b610390610e8d565b60405161039d9190612ece565b60405180910390f35b6103ae610eb3565b6040516103bb91906129f0565b60405180910390f35b6103de60048036038101906103d99190612f15565b610f45565b005b6103fa60048036038101906103f59190613085565b610f5b565b005b61041660048036038101906104119190612a48565b610fbd565b60405161042391906129f0565b60405180910390f35b61044660048036038101906104419190612d9f565b611025565b005b610462600480360381019061045d9190613108565b6111ec565b60405161046f919061293c565b60405180910390f35b610492600480360381019061048d9190612bba565b611280565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050757506105068261142b565b5b9050919050565b60606000805461051d90613177565b80601f016020809104026020016040519081016040528092919081815260200182805461054990613177565b80156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b5050505050905090565b60006105ab8261150d565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105f182610a8e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106599061321b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610681611558565b73ffffffffffffffffffffffffffffffffffffffff1614806106b057506106af816106aa611558565b6111ec565b5b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906132ad565b60405180910390fd5b6106f98383611560565b505050565b6000600880549050905090565b61071c610716611558565b82611619565b61075b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107529061333f565b60405180910390fd5b6107668383836116ae565b505050565b600061077683610bce565b82106107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae906133d1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61082b83838360405180602001604052806000815250610f5b565b505050565b60606000600184846108429190613420565b61084c9190613454565b90508067ffffffffffffffff81111561086857610867612f5a565b5b6040519080825280602002602001820160405280156108965781602001602082028036833780820191505090505b50915060005b818110156108eb576108b98682876108b49190613454565b61076b565b8382815181106108cc576108cb6134aa565b5b60200260200101818152505080806108e3906134d9565b91505061089c565b50509392505050565b60006108fe6106fe565b821061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093690613594565b60405180910390fd5b60088281548110610953576109526134aa565b5b90600052602060002001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086109cc611558565b6040518363ffffffff1660e01b81526004016109e99291906135cd565b60206040518083038186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061360b565b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613684565b60405180910390fd5b8181600b9190610a899291906127e5565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e906136f0565b60405180910390fd5b80915050919050565b600b8054610b4d90613177565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7990613177565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613782565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080610c91611558565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836040518363ffffffff1660e01b8152600401610d109291906135cd565b60206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d60919061360b565b15610d6a57600191505b60008484905090506000805b82811015610e3457868682818110610d9157610d906134aa565b5b9050602002013591508373ffffffffffffffffffffffffffffffffffffffff16610dba83610a8e565b73ffffffffffffffffffffffffffffffffffffffff161480610dd95750845b610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f906137ee565b60405180910390fd5b610e2182611915565b8080610e2c906134d9565b915050610d76565b508273ffffffffffffffffffffffffffffffffffffffff167f98354903b0fbefd23d8949f0e8972ceca60ce107cca35415585abfbf7de333998787604051610e7d92919061386f565b60405180910390a2505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610ec290613177565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee90613177565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b610f57610f50611558565b8383611a32565b5050565b610f6c610f66611558565b83611619565b610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061333f565b60405180910390fd5b610fb784848484611b9f565b50505050565b6060610fc88261150d565b6000610fd2611bfb565b90506000815111610ff2576040518060200160405280600081525061101d565b80610ffc84611c8d565b60405160200161100d9291906138cf565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861108c611558565b6040518363ffffffff1660e01b81526004016110a99291906135cd565b60206040518083038186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f9919061360b565b611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f9061393f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66112e7611558565b6040518363ffffffff1660e01b81526004016113049291906135cd565b60206040518083038186803b15801561131c57600080fd5b505afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611354919061360b565b611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a906139ab565b60405180910390fd5b60008290505b81836113a59190613454565b8110156113c9576113b68482611dee565b80806113c1906134d9565b915050611399565b50600181836113d89190613454565b6113e29190613420565b828473ffffffffffffffffffffffffffffffffffffffff167f3fdd5d3b0a3507e72528ea3155c5058ef6fe67c148b765eeabc0b1c5cad7749f60405160405180910390a4505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611506575061150582611e0c565b5b9050919050565b61151681611e76565b611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906136f0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115d383610a8e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061162583610a8e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611667575061166681856111ec565b5b806116a557508373ffffffffffffffffffffffffffffffffffffffff1661168d846105a0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ce82610a8e565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613a3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613acf565b60405180910390fd5b61179f838383611ee2565b6117aa600082611560565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190613420565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118519190613454565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611910838383611fd2565b505050565b600061192082610a8e565b905061192e81600084611ee2565b611939600083611560565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119899190613420565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a2e81600084611fd2565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613b3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b92919061293c565b60405180910390a3505050565b611baa8484846116ae565b611bb684848484611fd7565b611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90613bcd565b60405180910390fd5b50505050565b6060600b8054611c0a90613177565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3690613177565b8015611c835780601f10611c5857610100808354040283529160200191611c83565b820191906000526020600020905b815481529060010190602001808311611c6657829003601f168201915b5050505050905090565b60606000821415611cd5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611de9565b600082905060005b60008214611d07578080611cf0906134d9565b915050600a82611d009190613c1c565b9150611cdd565b60008167ffffffffffffffff811115611d2357611d22612f5a565b5b6040519080825280601f01601f191660200182016040528015611d555781602001600182028036833780820191505090505b5090505b60008514611de257600182611d6e9190613420565b9150600a85611d7d9190613c4d565b6030611d899190613454565b60f81b818381518110611d9f57611d9e6134aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ddb9190613c1c565b9450611d59565b8093505050505b919050565b611e0882826040518060200160405280600081525061216e565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9b8af0b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4a57600080fd5b505afa158015611f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f82919061360b565b15611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613cca565b60405180910390fd5b611fcd8383836121c9565b505050565b505050565b6000611ff88473ffffffffffffffffffffffffffffffffffffffff166122dd565b15612161578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612021611558565b8786866040518563ffffffff1660e01b81526004016120439493929190613d3f565b602060405180830381600087803b15801561205d57600080fd5b505af192505050801561208e57506040513d601f19601f8201168201806040525081019061208b9190613da0565b60015b612111573d80600081146120be576040519150601f19603f3d011682016040523d82523d6000602084013e6120c3565b606091505b50600081511415612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613bcd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612166565b600190505b949350505050565b6121788383612300565b6121856000848484611fd7565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613bcd565b60405180910390fd5b505050565b6121d48383836124da565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221757612212816124df565b612256565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612255576122548382612528565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122995761229481612695565b6122d8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122d7576122d68282612766565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790613e19565b60405180910390fd5b61237981611e76565b156123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090613e85565b60405180910390fd5b6123c560008383611ee2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124159190613454565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124d660008383611fd2565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161253584610bce565b61253f9190613420565b9050600060076000848152602001908152602001600020549050818114612624576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126a99190613420565b90506000600960008481526020019081526020016000205490506000600883815481106126d9576126d86134aa565b5b9060005260206000200154905080600883815481106126fb576126fa6134aa565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061274a57612749613ea5565b5b6001900381819060005260206000200160009055905550505050565b600061277183610bce565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546127f190613177565b90600052602060002090601f016020900481019282612813576000855561285a565b82601f1061282c57803560ff191683800117855561285a565b8280016001018555821561285a579182015b8281111561285957823582559160200191906001019061283e565b5b509050612867919061286b565b5090565b5b8082111561288457600081600090555060010161286c565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128d18161289c565b81146128dc57600080fd5b50565b6000813590506128ee816128c8565b92915050565b60006020828403121561290a57612909612892565b5b6000612918848285016128df565b91505092915050565b60008115159050919050565b61293681612921565b82525050565b6000602082019050612951600083018461292d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612991578082015181840152602081019050612976565b838111156129a0576000848401525b50505050565b6000601f19601f8301169050919050565b60006129c282612957565b6129cc8185612962565b93506129dc818560208601612973565b6129e5816129a6565b840191505092915050565b60006020820190508181036000830152612a0a81846129b7565b905092915050565b6000819050919050565b612a2581612a12565b8114612a3057600080fd5b50565b600081359050612a4281612a1c565b92915050565b600060208284031215612a5e57612a5d612892565b5b6000612a6c84828501612a33565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aa082612a75565b9050919050565b612ab081612a95565b82525050565b6000602082019050612acb6000830184612aa7565b92915050565b612ada81612a95565b8114612ae557600080fd5b50565b600081359050612af781612ad1565b92915050565b60008060408385031215612b1457612b13612892565b5b6000612b2285828601612ae8565b9250506020612b3385828601612a33565b9150509250929050565b612b4681612a12565b82525050565b6000602082019050612b616000830184612b3d565b92915050565b600080600060608486031215612b8057612b7f612892565b5b6000612b8e86828701612ae8565b9350506020612b9f86828701612ae8565b9250506040612bb086828701612a33565b9150509250925092565b600080600060608486031215612bd357612bd2612892565b5b6000612be186828701612ae8565b9350506020612bf286828701612a33565b9250506040612c0386828701612a33565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c4281612a12565b82525050565b6000612c548383612c39565b60208301905092915050565b6000602082019050919050565b6000612c7882612c0d565b612c828185612c18565b9350612c8d83612c29565b8060005b83811015612cbe578151612ca58882612c48565b9750612cb083612c60565b925050600181019050612c91565b5085935050505092915050565b60006020820190508181036000830152612ce58184612c6d565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d1257612d11612ced565b5b8235905067ffffffffffffffff811115612d2f57612d2e612cf2565b5b602083019150836001820283011115612d4b57612d4a612cf7565b5b9250929050565b60008060208385031215612d6957612d68612892565b5b600083013567ffffffffffffffff811115612d8757612d86612897565b5b612d9385828601612cfc565b92509250509250929050565b600060208284031215612db557612db4612892565b5b6000612dc384828501612ae8565b91505092915050565b60008083601f840112612de257612de1612ced565b5b8235905067ffffffffffffffff811115612dff57612dfe612cf2565b5b602083019150836020820283011115612e1b57612e1a612cf7565b5b9250929050565b60008060208385031215612e3957612e38612892565b5b600083013567ffffffffffffffff811115612e5757612e56612897565b5b612e6385828601612dcc565b92509250509250929050565b6000819050919050565b6000612e94612e8f612e8a84612a75565b612e6f565b612a75565b9050919050565b6000612ea682612e79565b9050919050565b6000612eb882612e9b565b9050919050565b612ec881612ead565b82525050565b6000602082019050612ee36000830184612ebf565b92915050565b612ef281612921565b8114612efd57600080fd5b50565b600081359050612f0f81612ee9565b92915050565b60008060408385031215612f2c57612f2b612892565b5b6000612f3a85828601612ae8565b9250506020612f4b85828601612f00565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f92826129a6565b810181811067ffffffffffffffff82111715612fb157612fb0612f5a565b5b80604052505050565b6000612fc4612888565b9050612fd08282612f89565b919050565b600067ffffffffffffffff821115612ff057612fef612f5a565b5b612ff9826129a6565b9050602081019050919050565b82818337600083830152505050565b600061302861302384612fd5565b612fba565b90508281526020810184848401111561304457613043612f55565b5b61304f848285613006565b509392505050565b600082601f83011261306c5761306b612ced565b5b813561307c848260208601613015565b91505092915050565b6000806000806080858703121561309f5761309e612892565b5b60006130ad87828801612ae8565b94505060206130be87828801612ae8565b93505060406130cf87828801612a33565b925050606085013567ffffffffffffffff8111156130f0576130ef612897565b5b6130fc87828801613057565b91505092959194509250565b6000806040838503121561311f5761311e612892565b5b600061312d85828601612ae8565b925050602061313e85828601612ae8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318f57607f821691505b602082108114156131a3576131a2613148565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613205602183612962565b9150613210826131a9565b604082019050919050565b60006020820190508181036000830152613234816131f8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613297603e83612962565b91506132a28261323b565b604082019050919050565b600060208201905081810360008301526132c68161328a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613329602e83612962565b9150613334826132cd565b604082019050919050565b600060208201905081810360008301526133588161331c565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006133bb602b83612962565b91506133c68261335f565b604082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342b82612a12565b915061343683612a12565b925082821015613449576134486133f1565b5b828203905092915050565b600061345f82612a12565b915061346a83612a12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561349f5761349e6133f1565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006134e482612a12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613517576135166133f1565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061357e602c83612962565b915061358982613522565b604082019050919050565b600060208201905081810360008301526135ad81613571565b9050919050565b6000819050919050565b6135c7816135b4565b82525050565b60006040820190506135e260008301856135be565b6135ef6020830184612aa7565b9392505050565b60008151905061360581612ee9565b92915050565b60006020828403121561362157613620612892565b5b600061362f848285016135f6565b91505092915050565b7f4f6e6c794d616e61676572000000000000000000000000000000000000000000600082015250565b600061366e600b83612962565b915061367982613638565b602082019050919050565b6000602082019050818103600083015261369d81613661565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006136da601883612962565b91506136e5826136a4565b602082019050919050565b60006020820190508181036000830152613709816136cd565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061376c602983612962565b915061377782613710565b604082019050919050565b6000602082019050818103600083015261379b8161375f565b9050919050565b7f4e6f74417574686f72697a65644e6f724f776e65720000000000000000000000600082015250565b60006137d8601583612962565b91506137e3826137a2565b602082019050919050565b60006020820190508181036000830152613807816137cb565b9050919050565b600080fd5b600061381f8385612c18565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156138525761385161380e565b5b602083029250613863838584613006565b82840190509392505050565b6000602082019050818103600083015261388a818486613813565b90509392505050565b600081905092915050565b60006138a982612957565b6138b38185613893565b93506138c3818560208601612973565b80840191505092915050565b60006138db828561389e565b91506138e7828461389e565b91508190509392505050565b7f416464726573735a65726f000000000000000000000000000000000000000000600082015250565b6000613929600b83612962565b9150613934826138f3565b602082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f4f6e6c794d696e74657200000000000000000000000000000000000000000000600082015250565b6000613995600a83612962565b91506139a08261395f565b602082019050919050565b600060208201905081810360008301526139c481613988565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613a27602583612962565b9150613a32826139cb565b604082019050919050565b60006020820190508181036000830152613a5681613a1a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ab9602483612962565b9150613ac482613a5d565b604082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b25601983612962565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613bb7603283612962565b9150613bc282613b5b565b604082019050919050565b60006020820190508181036000830152613be681613baa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c2782612a12565b9150613c3283612a12565b925082613c4257613c41613bed565b5b828204905092915050565b6000613c5882612a12565b9150613c6383612a12565b925082613c7357613c72613bed565b5b828206905092915050565b7f4d61696e74656e616e6365000000000000000000000000000000000000000000600082015250565b6000613cb4600b83612962565b9150613cbf82613c7e565b602082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d1182613cea565b613d1b8185613cf5565b9350613d2b818560208601612973565b613d34816129a6565b840191505092915050565b6000608082019050613d546000830187612aa7565b613d616020830186612aa7565b613d6e6040830185612b3d565b8181036060830152613d808184613d06565b905095945050505050565b600081519050613d9a816128c8565b92915050565b600060208284031215613db657613db5612892565b5b6000613dc484828501613d8b565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613e03602083612962565b9150613e0e82613dcd565b602082019050919050565b60006020820190508181036000830152613e3281613df6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613e6f601c83612962565b9150613e7a82613e39565b602082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220d55b6effc994697bd244879b80dbfd4a42ad03bb7ed06ac5d268002c99ffa26b64736f6c634300080900330000000000000000000000003cd993f928eab47b7d5024521c84bf2476cbb3db0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f73376e737066702e6d7970696e6174612e636c6f75642f697066732f516d5061716b6977484775564354725262686566347466654a7436597258736e754864674a4567595142385031462f00000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80636352211e116100c3578063a22cb4651161007c578063a22cb465146103c4578063b88d4fde146103e0578063c87b56dd146103fc578063d4a22bde1461042c578063e985e9c514610448578063eedaf174146104785761014d565b80636352211e146102ee5780636c0360eb1461031e57806370a082311461033c5780637ae876aa1461036c57806388a8d6021461038857806395d89b41146103a65761014d565b806323b872dd1161011557806323b872dd1461020a5780632f745c591461022657806342842e0e1461025657806343198ac4146102725780634f6ccce7146102a257806355f804b3146102d25761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806318160ddd146101ec575b600080fd5b61016c600480360381019061016791906128f4565b610494565b604051610179919061293c565b60405180910390f35b61018a61050e565b60405161019791906129f0565b60405180910390f35b6101ba60048036038101906101b59190612a48565b6105a0565b6040516101c79190612ab6565b60405180910390f35b6101ea60048036038101906101e59190612afd565b6105e6565b005b6101f46106fe565b6040516102019190612b4c565b60405180910390f35b610224600480360381019061021f9190612b67565b61070b565b005b610240600480360381019061023b9190612afd565b61076b565b60405161024d9190612b4c565b60405180910390f35b610270600480360381019061026b9190612b67565b610810565b005b61028c60048036038101906102879190612bba565b610830565b6040516102999190612ccb565b60405180910390f35b6102bc60048036038101906102b79190612a48565b6108f4565b6040516102c99190612b4c565b60405180910390f35b6102ec60048036038101906102e79190612d52565b610965565b005b61030860048036038101906103039190612a48565b610a8e565b6040516103159190612ab6565b60405180910390f35b610326610b40565b60405161033391906129f0565b60405180910390f35b61035660048036038101906103519190612d9f565b610bce565b6040516103639190612b4c565b60405180910390f35b61038660048036038101906103819190612e22565b610c86565b005b610390610e8d565b60405161039d9190612ece565b60405180910390f35b6103ae610eb3565b6040516103bb91906129f0565b60405180910390f35b6103de60048036038101906103d99190612f15565b610f45565b005b6103fa60048036038101906103f59190613085565b610f5b565b005b61041660048036038101906104119190612a48565b610fbd565b60405161042391906129f0565b60405180910390f35b61044660048036038101906104419190612d9f565b611025565b005b610462600480360381019061045d9190613108565b6111ec565b60405161046f919061293c565b60405180910390f35b610492600480360381019061048d9190612bba565b611280565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050757506105068261142b565b5b9050919050565b60606000805461051d90613177565b80601f016020809104026020016040519081016040528092919081815260200182805461054990613177565b80156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b5050505050905090565b60006105ab8261150d565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105f182610a8e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106599061321b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610681611558565b73ffffffffffffffffffffffffffffffffffffffff1614806106b057506106af816106aa611558565b6111ec565b5b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906132ad565b60405180910390fd5b6106f98383611560565b505050565b6000600880549050905090565b61071c610716611558565b82611619565b61075b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107529061333f565b60405180910390fd5b6107668383836116ae565b505050565b600061077683610bce565b82106107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae906133d1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61082b83838360405180602001604052806000815250610f5b565b505050565b60606000600184846108429190613420565b61084c9190613454565b90508067ffffffffffffffff81111561086857610867612f5a565b5b6040519080825280602002602001820160405280156108965781602001602082028036833780820191505090505b50915060005b818110156108eb576108b98682876108b49190613454565b61076b565b8382815181106108cc576108cb6134aa565b5b60200260200101818152505080806108e3906134d9565b91505061089c565b50509392505050565b60006108fe6106fe565b821061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093690613594565b60405180910390fd5b60088281548110610953576109526134aa565b5b90600052602060002001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086109cc611558565b6040518363ffffffff1660e01b81526004016109e99291906135cd565b60206040518083038186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061360b565b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613684565b60405180910390fd5b8181600b9190610a899291906127e5565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e906136f0565b60405180910390fd5b80915050919050565b600b8054610b4d90613177565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7990613177565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613782565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080610c91611558565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836040518363ffffffff1660e01b8152600401610d109291906135cd565b60206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d60919061360b565b15610d6a57600191505b60008484905090506000805b82811015610e3457868682818110610d9157610d906134aa565b5b9050602002013591508373ffffffffffffffffffffffffffffffffffffffff16610dba83610a8e565b73ffffffffffffffffffffffffffffffffffffffff161480610dd95750845b610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f906137ee565b60405180910390fd5b610e2182611915565b8080610e2c906134d9565b915050610d76565b508273ffffffffffffffffffffffffffffffffffffffff167f98354903b0fbefd23d8949f0e8972ceca60ce107cca35415585abfbf7de333998787604051610e7d92919061386f565b60405180910390a2505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610ec290613177565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee90613177565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b610f57610f50611558565b8383611a32565b5050565b610f6c610f66611558565b83611619565b610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061333f565b60405180910390fd5b610fb784848484611b9f565b50505050565b6060610fc88261150d565b6000610fd2611bfb565b90506000815111610ff2576040518060200160405280600081525061101d565b80610ffc84611c8d565b60405160200161100d9291906138cf565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861108c611558565b6040518363ffffffff1660e01b81526004016110a99291906135cd565b60206040518083038186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f9919061360b565b611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613684565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f9061393f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d148547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66112e7611558565b6040518363ffffffff1660e01b81526004016113049291906135cd565b60206040518083038186803b15801561131c57600080fd5b505afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611354919061360b565b611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a906139ab565b60405180910390fd5b60008290505b81836113a59190613454565b8110156113c9576113b68482611dee565b80806113c1906134d9565b915050611399565b50600181836113d89190613454565b6113e29190613420565b828473ffffffffffffffffffffffffffffffffffffffff167f3fdd5d3b0a3507e72528ea3155c5058ef6fe67c148b765eeabc0b1c5cad7749f60405160405180910390a4505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114f657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611506575061150582611e0c565b5b9050919050565b61151681611e76565b611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906136f0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115d383610a8e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061162583610a8e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611667575061166681856111ec565b5b806116a557508373ffffffffffffffffffffffffffffffffffffffff1661168d846105a0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ce82610a8e565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613a3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613acf565b60405180910390fd5b61179f838383611ee2565b6117aa600082611560565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190613420565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118519190613454565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611910838383611fd2565b505050565b600061192082610a8e565b905061192e81600084611ee2565b611939600083611560565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119899190613420565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a2e81600084611fd2565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890613b3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b92919061293c565b60405180910390a3505050565b611baa8484846116ae565b611bb684848484611fd7565b611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90613bcd565b60405180910390fd5b50505050565b6060600b8054611c0a90613177565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3690613177565b8015611c835780601f10611c5857610100808354040283529160200191611c83565b820191906000526020600020905b815481529060010190602001808311611c6657829003601f168201915b5050505050905090565b60606000821415611cd5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611de9565b600082905060005b60008214611d07578080611cf0906134d9565b915050600a82611d009190613c1c565b9150611cdd565b60008167ffffffffffffffff811115611d2357611d22612f5a565b5b6040519080825280601f01601f191660200182016040528015611d555781602001600182028036833780820191505090505b5090505b60008514611de257600182611d6e9190613420565b9150600a85611d7d9190613c4d565b6030611d899190613454565b60f81b818381518110611d9f57611d9e6134aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ddb9190613c1c565b9450611d59565b8093505050505b919050565b611e0882826040518060200160405280600081525061216e565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9b8af0b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4a57600080fd5b505afa158015611f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f82919061360b565b15611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613cca565b60405180910390fd5b611fcd8383836121c9565b505050565b505050565b6000611ff88473ffffffffffffffffffffffffffffffffffffffff166122dd565b15612161578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612021611558565b8786866040518563ffffffff1660e01b81526004016120439493929190613d3f565b602060405180830381600087803b15801561205d57600080fd5b505af192505050801561208e57506040513d601f19601f8201168201806040525081019061208b9190613da0565b60015b612111573d80600081146120be576040519150601f19603f3d011682016040523d82523d6000602084013e6120c3565b606091505b50600081511415612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613bcd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612166565b600190505b949350505050565b6121788383612300565b6121856000848484611fd7565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613bcd565b60405180910390fd5b505050565b6121d48383836124da565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221757612212816124df565b612256565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612255576122548382612528565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122995761229481612695565b6122d8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122d7576122d68282612766565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790613e19565b60405180910390fd5b61237981611e76565b156123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b090613e85565b60405180910390fd5b6123c560008383611ee2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124159190613454565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124d660008383611fd2565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161253584610bce565b61253f9190613420565b9050600060076000848152602001908152602001600020549050818114612624576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126a99190613420565b90506000600960008481526020019081526020016000205490506000600883815481106126d9576126d86134aa565b5b9060005260206000200154905080600883815481106126fb576126fa6134aa565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061274a57612749613ea5565b5b6001900381819060005260206000200160009055905550505050565b600061277183610bce565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546127f190613177565b90600052602060002090601f016020900481019282612813576000855561285a565b82601f1061282c57803560ff191683800117855561285a565b8280016001018555821561285a579182015b8281111561285957823582559160200191906001019061283e565b5b509050612867919061286b565b5090565b5b8082111561288457600081600090555060010161286c565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128d18161289c565b81146128dc57600080fd5b50565b6000813590506128ee816128c8565b92915050565b60006020828403121561290a57612909612892565b5b6000612918848285016128df565b91505092915050565b60008115159050919050565b61293681612921565b82525050565b6000602082019050612951600083018461292d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612991578082015181840152602081019050612976565b838111156129a0576000848401525b50505050565b6000601f19601f8301169050919050565b60006129c282612957565b6129cc8185612962565b93506129dc818560208601612973565b6129e5816129a6565b840191505092915050565b60006020820190508181036000830152612a0a81846129b7565b905092915050565b6000819050919050565b612a2581612a12565b8114612a3057600080fd5b50565b600081359050612a4281612a1c565b92915050565b600060208284031215612a5e57612a5d612892565b5b6000612a6c84828501612a33565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aa082612a75565b9050919050565b612ab081612a95565b82525050565b6000602082019050612acb6000830184612aa7565b92915050565b612ada81612a95565b8114612ae557600080fd5b50565b600081359050612af781612ad1565b92915050565b60008060408385031215612b1457612b13612892565b5b6000612b2285828601612ae8565b9250506020612b3385828601612a33565b9150509250929050565b612b4681612a12565b82525050565b6000602082019050612b616000830184612b3d565b92915050565b600080600060608486031215612b8057612b7f612892565b5b6000612b8e86828701612ae8565b9350506020612b9f86828701612ae8565b9250506040612bb086828701612a33565b9150509250925092565b600080600060608486031215612bd357612bd2612892565b5b6000612be186828701612ae8565b9350506020612bf286828701612a33565b9250506040612c0386828701612a33565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c4281612a12565b82525050565b6000612c548383612c39565b60208301905092915050565b6000602082019050919050565b6000612c7882612c0d565b612c828185612c18565b9350612c8d83612c29565b8060005b83811015612cbe578151612ca58882612c48565b9750612cb083612c60565b925050600181019050612c91565b5085935050505092915050565b60006020820190508181036000830152612ce58184612c6d565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612d1257612d11612ced565b5b8235905067ffffffffffffffff811115612d2f57612d2e612cf2565b5b602083019150836001820283011115612d4b57612d4a612cf7565b5b9250929050565b60008060208385031215612d6957612d68612892565b5b600083013567ffffffffffffffff811115612d8757612d86612897565b5b612d9385828601612cfc565b92509250509250929050565b600060208284031215612db557612db4612892565b5b6000612dc384828501612ae8565b91505092915050565b60008083601f840112612de257612de1612ced565b5b8235905067ffffffffffffffff811115612dff57612dfe612cf2565b5b602083019150836020820283011115612e1b57612e1a612cf7565b5b9250929050565b60008060208385031215612e3957612e38612892565b5b600083013567ffffffffffffffff811115612e5757612e56612897565b5b612e6385828601612dcc565b92509250509250929050565b6000819050919050565b6000612e94612e8f612e8a84612a75565b612e6f565b612a75565b9050919050565b6000612ea682612e79565b9050919050565b6000612eb882612e9b565b9050919050565b612ec881612ead565b82525050565b6000602082019050612ee36000830184612ebf565b92915050565b612ef281612921565b8114612efd57600080fd5b50565b600081359050612f0f81612ee9565b92915050565b60008060408385031215612f2c57612f2b612892565b5b6000612f3a85828601612ae8565b9250506020612f4b85828601612f00565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f92826129a6565b810181811067ffffffffffffffff82111715612fb157612fb0612f5a565b5b80604052505050565b6000612fc4612888565b9050612fd08282612f89565b919050565b600067ffffffffffffffff821115612ff057612fef612f5a565b5b612ff9826129a6565b9050602081019050919050565b82818337600083830152505050565b600061302861302384612fd5565b612fba565b90508281526020810184848401111561304457613043612f55565b5b61304f848285613006565b509392505050565b600082601f83011261306c5761306b612ced565b5b813561307c848260208601613015565b91505092915050565b6000806000806080858703121561309f5761309e612892565b5b60006130ad87828801612ae8565b94505060206130be87828801612ae8565b93505060406130cf87828801612a33565b925050606085013567ffffffffffffffff8111156130f0576130ef612897565b5b6130fc87828801613057565b91505092959194509250565b6000806040838503121561311f5761311e612892565b5b600061312d85828601612ae8565b925050602061313e85828601612ae8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061318f57607f821691505b602082108114156131a3576131a2613148565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613205602183612962565b9150613210826131a9565b604082019050919050565b60006020820190508181036000830152613234816131f8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613297603e83612962565b91506132a28261323b565b604082019050919050565b600060208201905081810360008301526132c68161328a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613329602e83612962565b9150613334826132cd565b604082019050919050565b600060208201905081810360008301526133588161331c565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006133bb602b83612962565b91506133c68261335f565b604082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061342b82612a12565b915061343683612a12565b925082821015613449576134486133f1565b5b828203905092915050565b600061345f82612a12565b915061346a83612a12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561349f5761349e6133f1565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006134e482612a12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613517576135166133f1565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061357e602c83612962565b915061358982613522565b604082019050919050565b600060208201905081810360008301526135ad81613571565b9050919050565b6000819050919050565b6135c7816135b4565b82525050565b60006040820190506135e260008301856135be565b6135ef6020830184612aa7565b9392505050565b60008151905061360581612ee9565b92915050565b60006020828403121561362157613620612892565b5b600061362f848285016135f6565b91505092915050565b7f4f6e6c794d616e61676572000000000000000000000000000000000000000000600082015250565b600061366e600b83612962565b915061367982613638565b602082019050919050565b6000602082019050818103600083015261369d81613661565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006136da601883612962565b91506136e5826136a4565b602082019050919050565b60006020820190508181036000830152613709816136cd565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061376c602983612962565b915061377782613710565b604082019050919050565b6000602082019050818103600083015261379b8161375f565b9050919050565b7f4e6f74417574686f72697a65644e6f724f776e65720000000000000000000000600082015250565b60006137d8601583612962565b91506137e3826137a2565b602082019050919050565b60006020820190508181036000830152613807816137cb565b9050919050565b600080fd5b600061381f8385612c18565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156138525761385161380e565b5b602083029250613863838584613006565b82840190509392505050565b6000602082019050818103600083015261388a818486613813565b90509392505050565b600081905092915050565b60006138a982612957565b6138b38185613893565b93506138c3818560208601612973565b80840191505092915050565b60006138db828561389e565b91506138e7828461389e565b91508190509392505050565b7f416464726573735a65726f000000000000000000000000000000000000000000600082015250565b6000613929600b83612962565b9150613934826138f3565b602082019050919050565b600060208201905081810360008301526139588161391c565b9050919050565b7f4f6e6c794d696e74657200000000000000000000000000000000000000000000600082015250565b6000613995600a83612962565b91506139a08261395f565b602082019050919050565b600060208201905081810360008301526139c481613988565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613a27602583612962565b9150613a32826139cb565b604082019050919050565b60006020820190508181036000830152613a5681613a1a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ab9602483612962565b9150613ac482613a5d565b604082019050919050565b60006020820190508181036000830152613ae881613aac565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b25601983612962565b9150613b3082613aef565b602082019050919050565b60006020820190508181036000830152613b5481613b18565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613bb7603283612962565b9150613bc282613b5b565b604082019050919050565b60006020820190508181036000830152613be681613baa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c2782612a12565b9150613c3283612a12565b925082613c4257613c41613bed565b5b828204905092915050565b6000613c5882612a12565b9150613c6383612a12565b925082613c7357613c72613bed565b5b828206905092915050565b7f4d61696e74656e616e6365000000000000000000000000000000000000000000600082015250565b6000613cb4600b83612962565b9150613cbf82613c7e565b602082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d1182613cea565b613d1b8185613cf5565b9350613d2b818560208601612973565b613d34816129a6565b840191505092915050565b6000608082019050613d546000830187612aa7565b613d616020830186612aa7565b613d6e6040830185612b3d565b8181036060830152613d808184613d06565b905095945050505050565b600081519050613d9a816128c8565b92915050565b600060208284031215613db657613db5612892565b5b6000613dc484828501613d8b565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613e03602083612962565b9150613e0e82613dcd565b602082019050919050565b60006020820190508181036000830152613e3281613df6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613e6f601c83612962565b9150613e7a82613e39565b602082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220d55b6effc994697bd244879b80dbfd4a42ad03bb7ed06ac5d268002c99ffa26b64736f6c63430008090033

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

0000000000000000000000003cd993f928eab47b7d5024521c84bf2476cbb3db0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f73376e737066702e6d7970696e6174612e636c6f75642f697066732f516d5061716b6977484775564354725262686566347466654a7436597258736e754864674a4567595142385031462f00000000000000000000000000

-----Decoded View---------------
Arg [0] : _management (address): 0x3CD993f928eaB47b7d5024521c84bF2476cbb3Db
Arg [1] : _uri (string): https://s7nspfp.mypinata.cloud/ipfs/QmPaqkiwHGuVCTrRbhef4tfeJt6YrXsnuHdgJEgYQB8P1F/

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000003cd993f928eab47b7d5024521c84bf2476cbb3db
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [3] : 68747470733a2f2f73376e737066702e6d7970696e6174612e636c6f75642f69
Arg [4] : 7066732f516d5061716b6977484775564354725262686566347466654a743659
Arg [5] : 7258736e754864674a4567595142385031462f00000000000000000000000000


Deployed Bytecode Sourcemap

44089:3501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37884:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24611:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26124:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38524:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26824:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38192:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27231:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47023:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38714:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45508:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24322:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44313:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24053:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46315:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44274:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24780:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26367:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27487:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24955:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45174:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26593:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45850:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37884:224;37986:4;38025:35;38010:50;;;:11;:50;;;;:90;;;;38064:36;38088:11;38064:23;:36::i;:::-;38010:90;38003:97;;37884:224;;;:::o;24611:100::-;24665:13;24698:5;24691:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24611:100;:::o;26124:171::-;26200:7;26220:23;26235:7;26220:14;:23::i;:::-;26263:15;:24;26279:7;26263:24;;;;;;;;;;;;;;;;;;;;;26256:31;;26124:171;;;:::o;25641:417::-;25722:13;25738:23;25753:7;25738:14;:23::i;:::-;25722:39;;25786:5;25780:11;;:2;:11;;;;25772:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25880:5;25864:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25889:37;25906:5;25913:12;:10;:12::i;:::-;25889:16;:37::i;:::-;25864:62;25842:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;26029:21;26038:2;26042:7;26029:8;:21::i;:::-;25711:347;25641:417;;:::o;38524:113::-;38585:7;38612:10;:17;;;;38605:24;;38524:113;:::o;26824:336::-;27019:41;27038:12;:10;:12::i;:::-;27052:7;27019:18;:41::i;:::-;27011:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;27124:28;27134:4;27140:2;27144:7;27124:9;:28::i;:::-;26824:336;;;:::o;38192:256::-;38289:7;38325:23;38342:5;38325:16;:23::i;:::-;38317:5;:31;38309:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38414:12;:19;38427:5;38414:19;;;;;;;;;;;;;;;:26;38434:5;38414:26;;;;;;;;;;;;38407:33;;38192:256;;;;:::o;27231:185::-;27369:39;27386:4;27392:2;27396:7;27369:39;;;;;;;;;;;;:16;:39::i;:::-;27231:185;;;:::o;47023:305::-;47121:24;47152:13;47188:1;47177:8;47168:6;:17;;;;:::i;:::-;:21;;;;:::i;:::-;47152:37;;47218:5;47204:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47194:30;;47235:9;47231:92;47250:5;47246:1;:9;47231:92;;;47280:43;47300:8;47321:1;47310:8;:12;;;;:::i;:::-;47280:19;:43::i;:::-;47267:7;47275:1;47267:10;;;;;;;;:::i;:::-;;;;;;;:56;;;;;47257:3;;;;;:::i;:::-;;;;47231:92;;;;47147:181;47023:305;;;;;:::o;38714:233::-;38789:7;38825:30;:28;:30::i;:::-;38817:5;:38;38809:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38922:10;38933:5;38922:17;;;;;;;;:::i;:::-;;;;;;;;;;38915:24;;38714:233;;;:::o;45508:95::-;44596:10;;;;;;;;;;;:18;;;44172:25;44629:12;:10;:12::i;:::-;44596:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44583:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45590:8:::1;;45580:7;:18;;;;;;;:::i;:::-;;45508:95:::0;;:::o;24322:222::-;24394:7;24414:13;24430:7;:16;24438:7;24430:16;;;;;;;;;;;;;;;;;;;;;24414:32;;24482:1;24465:19;;:5;:19;;;;24457:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24531:5;24524:12;;;24322:222;;;:::o;44313:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24053:207::-;24125:7;24170:1;24153:19;;:5;:19;;;;24145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24236:9;:16;24246:5;24236:16;;;;;;;;;;;;;;;;24229:23;;24053:207;;;:::o;46315:475::-;46371:17;46393;46413:12;:10;:12::i;:::-;46393:32;;46434:10;;;;;;;;;;;:18;;;44243:24;46466:9;46434:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46430:67;;;46493:4;46478:19;;46430:67;46504:16;46523:4;;:11;;46504:30;;46539:16;46565:9;46560:190;46580:8;46576:1;:12;46560:190;;;46612:4;;46617:1;46612:7;;;;;;;:::i;:::-;;;;;;;;46601:18;;46660:9;46639:30;;:17;46647:8;46639:7;:17::i;:::-;:30;;;:46;;;;46673:12;46639:46;46625:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;46729:15;46735:8;46729:5;:15::i;:::-;46590:3;;;;;:::i;:::-;;;;46560:190;;;;46769:9;46761:24;;;46780:4;;46761:24;;;;;;;:::i;:::-;;;;;;;;46366:424;;;;46315:475;;:::o;44274:33::-;;;;;;;;;;;;;:::o;24780:104::-;24836:13;24869:7;24862:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24780:104;:::o;26367:155::-;26462:52;26481:12;:10;:12::i;:::-;26495:8;26505;26462:18;:52::i;:::-;26367:155;;:::o;27487:323::-;27661:41;27680:12;:10;:12::i;:::-;27694:7;27661:18;:41::i;:::-;27653:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;27764:38;27778:4;27784:2;27788:7;27797:4;27764:13;:38::i;:::-;27487:323;;;;:::o;24955:281::-;25028:13;25054:23;25069:7;25054:14;:23::i;:::-;25090:21;25114:10;:8;:10::i;:::-;25090:34;;25166:1;25148:7;25142:21;:25;:86;;;;;;;;;;;;;;;;;25194:7;25203:18;:7;:16;:18::i;:::-;25177:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25142:86;25135:93;;;24955:281;;;:::o;45174:172::-;44596:10;;;;;;;;;;;:18;;;44172:25;44629:12;:10;:12::i;:::-;44596:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44583:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45275:1:::1;45252:25;;:11;:25;;;;45244:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45329:11;45300:10;;:41;;;;;;;;;;;;;;;;;;45174:172:::0;:::o;26593:164::-;26690:4;26714:18;:25;26733:5;26714:25;;;;;;;;;;;;;;;:35;26740:8;26714:35;;;;;;;;;;;;;;;;;;;;;;;;;26707:42;;26593:164;;;;:::o;45850:253::-;44466:10;;;;;;;;;;;:18;;;44243:24;44498:12;:10;:12::i;:::-;44466:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44453:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45953:9:::1;45965:7;45953:19;;45948:85;45988:7;45978;:17;;;;:::i;:::-;45974:1;:21;45948:85;;;46007:26;46017:12;46031:1;46007:9;:26::i;:::-;45997:3;;;;;:::i;:::-;;;;45948:85;;;;46096:1;46086:7;46076;:17;;;;:::i;:::-;:21;;;;:::i;:::-;46067:7;46053:12;46045:53;;;;;;;;;;;;45850:253:::0;;;:::o;23684:305::-;23786:4;23838:25;23823:40;;;:11;:40;;;;:105;;;;23895:33;23880:48;;;:11;:48;;;;23823:105;:158;;;;23945:36;23969:11;23945:23;:36::i;:::-;23823:158;23803:178;;23684:305;;;:::o;34099:135::-;34181:16;34189:7;34181;:16::i;:::-;34173:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;34099:135;:::o;3687:98::-;3740:7;3767:10;3760:17;;3687:98;:::o;33378:174::-;33480:2;33453:15;:24;33469:7;33453:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33536:7;33532:2;33498:46;;33507:23;33522:7;33507:14;:23::i;:::-;33498:46;;;;;;;;;;;;33378:174;;:::o;29611:264::-;29704:4;29721:13;29737:23;29752:7;29737:14;:23::i;:::-;29721:39;;29790:5;29779:16;;:7;:16;;;:52;;;;29799:32;29816:5;29823:7;29799:16;:32::i;:::-;29779:52;:87;;;;29859:7;29835:31;;:20;29847:7;29835:11;:20::i;:::-;:31;;;29779:87;29771:96;;;29611:264;;;;:::o;32634:625::-;32793:4;32766:31;;:23;32781:7;32766:14;:23::i;:::-;:31;;;32758:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32872:1;32858:16;;:2;:16;;;;32850:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32928:39;32949:4;32955:2;32959:7;32928:20;:39::i;:::-;33032:29;33049:1;33053:7;33032:8;:29::i;:::-;33093:1;33074:9;:15;33084:4;33074:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33122:1;33105:9;:13;33115:2;33105:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33153:2;33134:7;:16;33142:7;33134:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33192:7;33188:2;33173:27;;33182:4;33173:27;;;;;;;;;;;;33213:38;33233:4;33239:2;33243:7;33213:19;:38::i;:::-;32634:625;;;:::o;31877:420::-;31937:13;31953:23;31968:7;31953:14;:23::i;:::-;31937:39;;31989:48;32010:5;32025:1;32029:7;31989:20;:48::i;:::-;32078:29;32095:1;32099:7;32078:8;:29::i;:::-;32140:1;32120:9;:16;32130:5;32120:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32159:7;:16;32167:7;32159:16;;;;;;;;;;;;32152:23;;;;;;;;;;;32221:7;32217:1;32193:36;;32202:5;32193:36;;;;;;;;;;;;32242:47;32262:5;32277:1;32281:7;32242:19;:47::i;:::-;31926:371;31877:420;:::o;33695:315::-;33850:8;33841:17;;:5;:17;;;;33833:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33937:8;33899:18;:25;33918:5;33899:25;;;;;;;;;;;;;;;:35;33925:8;33899:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33983:8;33961:41;;33976:5;33961:41;;;33993:8;33961:41;;;;;;:::i;:::-;;;;;;;;33695:315;;;:::o;28691:313::-;28847:28;28857:4;28863:2;28867:7;28847:9;:28::i;:::-;28894:47;28917:4;28923:2;28927:7;28936:4;28894:22;:47::i;:::-;28886:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28691:313;;;;:::o;47333:91::-;47385:13;47412:7;47405:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47333:91;:::o;934:723::-;990:13;1220:1;1211:5;:10;1207:53;;;1238:10;;;;;;;;;;;;;;;;;;;;;1207:53;1270:12;1285:5;1270:20;;1301:14;1326:78;1341:1;1333:4;:9;1326:78;;1359:8;;;;;:::i;:::-;;;;1390:2;1382:10;;;;;:::i;:::-;;;1326:78;;;1414:19;1446:6;1436:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:39;;1464:154;1480:1;1471:5;:10;1464:154;;1508:1;1498:11;;;;;:::i;:::-;;;1575:2;1567:5;:10;;;;:::i;:::-;1554:2;:24;;;;:::i;:::-;1541:39;;1524:6;1531;1524:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1604:2;1595:11;;;;;:::i;:::-;;;1464:154;;;1642:6;1628:21;;;;;934:723;;;;:::o;30217:110::-;30293:26;30303:2;30307:7;30293:26;;;;;;;;;;;;:9;:26::i;:::-;30217:110;;:::o;15318:157::-;15403:4;15442:25;15427:40;;;:11;:40;;;;15420:47;;15318:157;;;:::o;29317:127::-;29382:4;29434:1;29406:30;;:7;:16;29414:7;29406:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29399:37;;29317:127;;;:::o;47429:158::-;44374:10;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44373:20;44365:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47534:45:::1;47561:4;47567:2;47571:7;47534:26;:45::i;:::-;47429:158:::0;;;:::o;36734:125::-;;;;:::o;34798:853::-;34952:4;34973:15;:2;:13;;;:15::i;:::-;34969:675;;;35025:2;35009:36;;;35046:12;:10;:12::i;:::-;35060:4;35066:7;35075:4;35009:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35005:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35267:1;35250:6;:13;:18;35246:328;;;35293:60;;;;;;;;;;:::i;:::-;;;;;;;;35246:328;35524:6;35518:13;35509:6;35505:2;35501:15;35494:38;35005:584;35141:41;;;35131:51;;;:6;:51;;;;35124:58;;;;;34969:675;35628:4;35621:11;;34798:853;;;;;;;:::o;30554:319::-;30683:18;30689:2;30693:7;30683:5;:18::i;:::-;30734:53;30765:1;30769:2;30773:7;30782:4;30734:22;:53::i;:::-;30712:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30554:319;;;:::o;39560:589::-;39704:45;39731:4;39737:2;39741:7;39704:26;:45::i;:::-;39782:1;39766:18;;:4;:18;;;39762:187;;;39801:40;39833:7;39801:31;:40::i;:::-;39762:187;;;39871:2;39863:10;;:4;:10;;;39859:90;;39890:47;39923:4;39929:7;39890:32;:47::i;:::-;39859:90;39762:187;39977:1;39963:16;;:2;:16;;;39959:183;;;39996:45;40033:7;39996:36;:45::i;:::-;39959:183;;;40069:4;40063:10;;:2;:10;;;40059:83;;40090:40;40118:2;40122:7;40090:27;:40::i;:::-;40059:83;39959:183;39560:589;;;:::o;5141:326::-;5201:4;5458:1;5436:7;:19;;;:23;5429:30;;5141:326;;;:::o;31209:439::-;31303:1;31289:16;;:2;:16;;;;31281:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31362:16;31370:7;31362;:16::i;:::-;31361:17;31353:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31424:45;31453:1;31457:2;31461:7;31424:20;:45::i;:::-;31499:1;31482:9;:13;31492:2;31482:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31530:2;31511:7;:16;31519:7;31511:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31575:7;31571:2;31550:33;;31567:1;31550:33;;;;;;;;;;;;31596:44;31624:1;31628:2;31632:7;31596:19;:44::i;:::-;31209:439;;:::o;36223:126::-;;;;:::o;40872:164::-;40976:10;:17;;;;40949:15;:24;40965:7;40949:24;;;;;;;;;;;:44;;;;41004:10;41020:7;41004:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40872:164;:::o;41663:988::-;41929:22;41979:1;41954:22;41971:4;41954:16;:22::i;:::-;:26;;;;:::i;:::-;41929:51;;41991:18;42012:17;:26;42030:7;42012:26;;;;;;;;;;;;41991:47;;42159:14;42145:10;:28;42141:328;;42190:19;42212:12;:18;42225:4;42212:18;;;;;;;;;;;;;;;:34;42231:14;42212:34;;;;;;;;;;;;42190:56;;42296:11;42263:12;:18;42276:4;42263:18;;;;;;;;;;;;;;;:30;42282:10;42263:30;;;;;;;;;;;:44;;;;42413:10;42380:17;:30;42398:11;42380:30;;;;;;;;;;;:43;;;;42175:294;42141:328;42565:17;:26;42583:7;42565:26;;;;;;;;;;;42558:33;;;42609:12;:18;42622:4;42609:18;;;;;;;;;;;;;;;:34;42628:14;42609:34;;;;;;;;;;;42602:41;;;41744:907;;41663:988;;:::o;42946:1079::-;43199:22;43244:1;43224:10;:17;;;;:21;;;;:::i;:::-;43199:46;;43256:18;43277:15;:24;43293:7;43277:24;;;;;;;;;;;;43256:45;;43628:19;43650:10;43661:14;43650:26;;;;;;;;:::i;:::-;;;;;;;;;;43628:48;;43714:11;43689:10;43700;43689:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43825:10;43794:15;:28;43810:11;43794:28;;;;;;;;;;;:41;;;;43966:15;:24;43982:7;43966:24;;;;;;;;;;;43959:31;;;44001:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43017:1008;;;42946:1079;:::o;40450:221::-;40535:14;40552:20;40569:2;40552:16;:20::i;:::-;40535:37;;40610:7;40583:12;:16;40596:2;40583:16;;;;;;;;;;;;;;;:24;40600:6;40583:24;;;;;;;;;;;:34;;;;40657:6;40628:17;:26;40646:7;40628:26;;;;;;;;;;;:35;;;;40524:147;40450:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:::-;5992:6;6000;6008;6057:2;6045:9;6036:7;6032:23;6028:32;6025:119;;;6063:79;;:::i;:::-;6025:119;6183:1;6208:53;6253:7;6244:6;6233:9;6229:22;6208:53;:::i;:::-;6198:63;;6154:117;6310:2;6336:53;6381:7;6372:6;6361:9;6357:22;6336:53;:::i;:::-;6326:63;;6281:118;6438:2;6464:53;6509:7;6500:6;6489:9;6485:22;6464:53;:::i;:::-;6454:63;;6409:118;5915:619;;;;;:::o;6540:114::-;6607:6;6641:5;6635:12;6625:22;;6540:114;;;:::o;6660:184::-;6759:11;6793:6;6788:3;6781:19;6833:4;6828:3;6824:14;6809:29;;6660:184;;;;:::o;6850:132::-;6917:4;6940:3;6932:11;;6970:4;6965:3;6961:14;6953:22;;6850:132;;;:::o;6988:108::-;7065:24;7083:5;7065:24;:::i;:::-;7060:3;7053:37;6988:108;;:::o;7102:179::-;7171:10;7192:46;7234:3;7226:6;7192:46;:::i;:::-;7270:4;7265:3;7261:14;7247:28;;7102:179;;;;:::o;7287:113::-;7357:4;7389;7384:3;7380:14;7372:22;;7287:113;;;:::o;7436:732::-;7555:3;7584:54;7632:5;7584:54;:::i;:::-;7654:86;7733:6;7728:3;7654:86;:::i;:::-;7647:93;;7764:56;7814:5;7764:56;:::i;:::-;7843:7;7874:1;7859:284;7884:6;7881:1;7878:13;7859:284;;;7960:6;7954:13;7987:63;8046:3;8031:13;7987:63;:::i;:::-;7980:70;;8073:60;8126:6;8073:60;:::i;:::-;8063:70;;7919:224;7906:1;7903;7899:9;7894:14;;7859:284;;;7863:14;8159:3;8152:10;;7560:608;;;7436:732;;;;:::o;8174:373::-;8317:4;8355:2;8344:9;8340:18;8332:26;;8404:9;8398:4;8394:20;8390:1;8379:9;8375:17;8368:47;8432:108;8535:4;8526:6;8432:108;:::i;:::-;8424:116;;8174:373;;;;:::o;8553:117::-;8662:1;8659;8652:12;8676:117;8785:1;8782;8775:12;8799:117;8908:1;8905;8898:12;8936:553;8994:8;9004:6;9054:3;9047:4;9039:6;9035:17;9031:27;9021:122;;9062:79;;:::i;:::-;9021:122;9175:6;9162:20;9152:30;;9205:18;9197:6;9194:30;9191:117;;;9227:79;;:::i;:::-;9191:117;9341:4;9333:6;9329:17;9317:29;;9395:3;9387:4;9379:6;9375:17;9365:8;9361:32;9358:41;9355:128;;;9402:79;;:::i;:::-;9355:128;8936:553;;;;;:::o;9495:529::-;9566:6;9574;9623:2;9611:9;9602:7;9598:23;9594:32;9591:119;;;9629:79;;:::i;:::-;9591:119;9777:1;9766:9;9762:17;9749:31;9807:18;9799:6;9796:30;9793:117;;;9829:79;;:::i;:::-;9793:117;9942:65;9999:7;9990:6;9979:9;9975:22;9942:65;:::i;:::-;9924:83;;;;9720:297;9495:529;;;;;:::o;10030:329::-;10089:6;10138:2;10126:9;10117:7;10113:23;10109:32;10106:119;;;10144:79;;:::i;:::-;10106:119;10264:1;10289:53;10334:7;10325:6;10314:9;10310:22;10289:53;:::i;:::-;10279:63;;10235:117;10030:329;;;;:::o;10382:568::-;10455:8;10465:6;10515:3;10508:4;10500:6;10496:17;10492:27;10482:122;;10523:79;;:::i;:::-;10482:122;10636:6;10623:20;10613:30;;10666:18;10658:6;10655:30;10652:117;;;10688:79;;:::i;:::-;10652:117;10802:4;10794:6;10790:17;10778:29;;10856:3;10848:4;10840:6;10836:17;10826:8;10822:32;10819:41;10816:128;;;10863:79;;:::i;:::-;10816:128;10382:568;;;;;:::o;10956:559::-;11042:6;11050;11099:2;11087:9;11078:7;11074:23;11070:32;11067:119;;;11105:79;;:::i;:::-;11067:119;11253:1;11242:9;11238:17;11225:31;11283:18;11275:6;11272:30;11269:117;;;11305:79;;:::i;:::-;11269:117;11418:80;11490:7;11481:6;11470:9;11466:22;11418:80;:::i;:::-;11400:98;;;;11196:312;10956:559;;;;;:::o;11521:60::-;11549:3;11570:5;11563:12;;11521:60;;;:::o;11587:142::-;11637:9;11670:53;11688:34;11697:24;11715:5;11697:24;:::i;:::-;11688:34;:::i;:::-;11670:53;:::i;:::-;11657:66;;11587:142;;;:::o;11735:126::-;11785:9;11818:37;11849:5;11818:37;:::i;:::-;11805:50;;11735:126;;;:::o;11867:148::-;11939:9;11972:37;12003:5;11972:37;:::i;:::-;11959:50;;11867:148;;;:::o;12021:175::-;12130:59;12183:5;12130:59;:::i;:::-;12125:3;12118:72;12021:175;;:::o;12202:266::-;12317:4;12355:2;12344:9;12340:18;12332:26;;12368:93;12458:1;12447:9;12443:17;12434:6;12368:93;:::i;:::-;12202:266;;;;:::o;12474:116::-;12544:21;12559:5;12544:21;:::i;:::-;12537:5;12534:32;12524:60;;12580:1;12577;12570:12;12524:60;12474:116;:::o;12596:133::-;12639:5;12677:6;12664:20;12655:29;;12693:30;12717:5;12693:30;:::i;:::-;12596:133;;;;:::o;12735:468::-;12800:6;12808;12857:2;12845:9;12836:7;12832:23;12828:32;12825:119;;;12863:79;;:::i;:::-;12825:119;12983:1;13008:53;13053:7;13044:6;13033:9;13029:22;13008:53;:::i;:::-;12998:63;;12954:117;13110:2;13136:50;13178:7;13169:6;13158:9;13154:22;13136:50;:::i;:::-;13126:60;;13081:115;12735:468;;;;;:::o;13209:117::-;13318:1;13315;13308:12;13332:180;13380:77;13377:1;13370:88;13477:4;13474:1;13467:15;13501:4;13498:1;13491:15;13518:281;13601:27;13623:4;13601:27;:::i;:::-;13593:6;13589:40;13731:6;13719:10;13716:22;13695:18;13683:10;13680:34;13677:62;13674:88;;;13742:18;;:::i;:::-;13674:88;13782:10;13778:2;13771:22;13561:238;13518:281;;:::o;13805:129::-;13839:6;13866:20;;:::i;:::-;13856:30;;13895:33;13923:4;13915:6;13895:33;:::i;:::-;13805:129;;;:::o;13940:307::-;14001:4;14091:18;14083:6;14080:30;14077:56;;;14113:18;;:::i;:::-;14077:56;14151:29;14173:6;14151:29;:::i;:::-;14143:37;;14235:4;14229;14225:15;14217:23;;13940:307;;;:::o;14253:154::-;14337:6;14332:3;14327;14314:30;14399:1;14390:6;14385:3;14381:16;14374:27;14253:154;;;:::o;14413:410::-;14490:5;14515:65;14531:48;14572:6;14531:48;:::i;:::-;14515:65;:::i;:::-;14506:74;;14603:6;14596:5;14589:21;14641:4;14634:5;14630:16;14679:3;14670:6;14665:3;14661:16;14658:25;14655:112;;;14686:79;;:::i;:::-;14655:112;14776:41;14810:6;14805:3;14800;14776:41;:::i;:::-;14496:327;14413:410;;;;;:::o;14842:338::-;14897:5;14946:3;14939:4;14931:6;14927:17;14923:27;14913:122;;14954:79;;:::i;:::-;14913:122;15071:6;15058:20;15096:78;15170:3;15162:6;15155:4;15147:6;15143:17;15096:78;:::i;:::-;15087:87;;14903:277;14842:338;;;;:::o;15186:943::-;15281:6;15289;15297;15305;15354:3;15342:9;15333:7;15329:23;15325:33;15322:120;;;15361:79;;:::i;:::-;15322:120;15481:1;15506:53;15551:7;15542:6;15531:9;15527:22;15506:53;:::i;:::-;15496:63;;15452:117;15608:2;15634:53;15679:7;15670:6;15659:9;15655:22;15634:53;:::i;:::-;15624:63;;15579:118;15736:2;15762:53;15807:7;15798:6;15787:9;15783:22;15762:53;:::i;:::-;15752:63;;15707:118;15892:2;15881:9;15877:18;15864:32;15923:18;15915:6;15912:30;15909:117;;;15945:79;;:::i;:::-;15909:117;16050:62;16104:7;16095:6;16084:9;16080:22;16050:62;:::i;:::-;16040:72;;15835:287;15186:943;;;;;;;:::o;16135:474::-;16203:6;16211;16260:2;16248:9;16239:7;16235:23;16231:32;16228:119;;;16266:79;;:::i;:::-;16228:119;16386:1;16411:53;16456:7;16447:6;16436:9;16432:22;16411:53;:::i;:::-;16401:63;;16357:117;16513:2;16539:53;16584:7;16575:6;16564:9;16560:22;16539:53;:::i;:::-;16529:63;;16484:118;16135:474;;;;;:::o;16615:180::-;16663:77;16660:1;16653:88;16760:4;16757:1;16750:15;16784:4;16781:1;16774:15;16801:320;16845:6;16882:1;16876:4;16872:12;16862:22;;16929:1;16923:4;16919:12;16950:18;16940:81;;17006:4;16998:6;16994:17;16984:27;;16940:81;17068:2;17060:6;17057:14;17037:18;17034:38;17031:84;;;17087:18;;:::i;:::-;17031:84;16852:269;16801:320;;;:::o;17127:220::-;17267:34;17263:1;17255:6;17251:14;17244:58;17336:3;17331:2;17323:6;17319:15;17312:28;17127:220;:::o;17353:366::-;17495:3;17516:67;17580:2;17575:3;17516:67;:::i;:::-;17509:74;;17592:93;17681:3;17592:93;:::i;:::-;17710:2;17705:3;17701:12;17694:19;;17353:366;;;:::o;17725:419::-;17891:4;17929:2;17918:9;17914:18;17906:26;;17978:9;17972:4;17968:20;17964:1;17953:9;17949:17;17942:47;18006:131;18132:4;18006:131;:::i;:::-;17998:139;;17725:419;;;:::o;18150:249::-;18290:34;18286:1;18278:6;18274:14;18267:58;18359:32;18354:2;18346:6;18342:15;18335:57;18150:249;:::o;18405:366::-;18547:3;18568:67;18632:2;18627:3;18568:67;:::i;:::-;18561:74;;18644:93;18733:3;18644:93;:::i;:::-;18762:2;18757:3;18753:12;18746:19;;18405:366;;;:::o;18777:419::-;18943:4;18981:2;18970:9;18966:18;18958:26;;19030:9;19024:4;19020:20;19016:1;19005:9;19001:17;18994:47;19058:131;19184:4;19058:131;:::i;:::-;19050:139;;18777:419;;;:::o;19202:233::-;19342:34;19338:1;19330:6;19326:14;19319:58;19411:16;19406:2;19398:6;19394:15;19387:41;19202:233;:::o;19441:366::-;19583:3;19604:67;19668:2;19663:3;19604:67;:::i;:::-;19597:74;;19680:93;19769:3;19680:93;:::i;:::-;19798:2;19793:3;19789:12;19782:19;;19441:366;;;:::o;19813:419::-;19979:4;20017:2;20006:9;20002:18;19994:26;;20066:9;20060:4;20056:20;20052:1;20041:9;20037:17;20030:47;20094:131;20220:4;20094:131;:::i;:::-;20086:139;;19813:419;;;:::o;20238:230::-;20378:34;20374:1;20366:6;20362:14;20355:58;20447:13;20442:2;20434:6;20430:15;20423:38;20238:230;:::o;20474:366::-;20616:3;20637:67;20701:2;20696:3;20637:67;:::i;:::-;20630:74;;20713:93;20802:3;20713:93;:::i;:::-;20831:2;20826:3;20822:12;20815:19;;20474:366;;;:::o;20846:419::-;21012:4;21050:2;21039:9;21035:18;21027:26;;21099:9;21093:4;21089:20;21085:1;21074:9;21070:17;21063:47;21127:131;21253:4;21127:131;:::i;:::-;21119:139;;20846:419;;;:::o;21271:180::-;21319:77;21316:1;21309:88;21416:4;21413:1;21406:15;21440:4;21437:1;21430:15;21457:191;21497:4;21517:20;21535:1;21517:20;:::i;:::-;21512:25;;21551:20;21569:1;21551:20;:::i;:::-;21546:25;;21590:1;21587;21584:8;21581:34;;;21595:18;;:::i;:::-;21581:34;21640:1;21637;21633:9;21625:17;;21457:191;;;;:::o;21654:305::-;21694:3;21713:20;21731:1;21713:20;:::i;:::-;21708:25;;21747:20;21765:1;21747:20;:::i;:::-;21742:25;;21901:1;21833:66;21829:74;21826:1;21823:81;21820:107;;;21907:18;;:::i;:::-;21820:107;21951:1;21948;21944:9;21937:16;;21654:305;;;;:::o;21965:180::-;22013:77;22010:1;22003:88;22110:4;22107:1;22100:15;22134:4;22131:1;22124:15;22151:233;22190:3;22213:24;22231:5;22213:24;:::i;:::-;22204:33;;22259:66;22252:5;22249:77;22246:103;;;22329:18;;:::i;:::-;22246:103;22376:1;22369:5;22365:13;22358:20;;22151:233;;;:::o;22390:231::-;22530:34;22526:1;22518:6;22514:14;22507:58;22599:14;22594:2;22586:6;22582:15;22575:39;22390:231;:::o;22627:366::-;22769:3;22790:67;22854:2;22849:3;22790:67;:::i;:::-;22783:74;;22866:93;22955:3;22866:93;:::i;:::-;22984:2;22979:3;22975:12;22968:19;;22627:366;;;:::o;22999:419::-;23165:4;23203:2;23192:9;23188:18;23180:26;;23252:9;23246:4;23242:20;23238:1;23227:9;23223:17;23216:47;23280:131;23406:4;23280:131;:::i;:::-;23272:139;;22999:419;;;:::o;23424:77::-;23461:7;23490:5;23479:16;;23424:77;;;:::o;23507:118::-;23594:24;23612:5;23594:24;:::i;:::-;23589:3;23582:37;23507:118;;:::o;23631:332::-;23752:4;23790:2;23779:9;23775:18;23767:26;;23803:71;23871:1;23860:9;23856:17;23847:6;23803:71;:::i;:::-;23884:72;23952:2;23941:9;23937:18;23928:6;23884:72;:::i;:::-;23631:332;;;;;:::o;23969:137::-;24023:5;24054:6;24048:13;24039:22;;24070:30;24094:5;24070:30;:::i;:::-;23969:137;;;;:::o;24112:345::-;24179:6;24228:2;24216:9;24207:7;24203:23;24199:32;24196:119;;;24234:79;;:::i;:::-;24196:119;24354:1;24379:61;24432:7;24423:6;24412:9;24408:22;24379:61;:::i;:::-;24369:71;;24325:125;24112:345;;;;:::o;24463:161::-;24603:13;24599:1;24591:6;24587:14;24580:37;24463:161;:::o;24630:366::-;24772:3;24793:67;24857:2;24852:3;24793:67;:::i;:::-;24786:74;;24869:93;24958:3;24869:93;:::i;:::-;24987:2;24982:3;24978:12;24971:19;;24630:366;;;:::o;25002:419::-;25168:4;25206:2;25195:9;25191:18;25183:26;;25255:9;25249:4;25245:20;25241:1;25230:9;25226:17;25219:47;25283:131;25409:4;25283:131;:::i;:::-;25275:139;;25002:419;;;:::o;25427:174::-;25567:26;25563:1;25555:6;25551:14;25544:50;25427:174;:::o;25607:366::-;25749:3;25770:67;25834:2;25829:3;25770:67;:::i;:::-;25763:74;;25846:93;25935:3;25846:93;:::i;:::-;25964:2;25959:3;25955:12;25948:19;;25607:366;;;:::o;25979:419::-;26145:4;26183:2;26172:9;26168:18;26160:26;;26232:9;26226:4;26222:20;26218:1;26207:9;26203:17;26196:47;26260:131;26386:4;26260:131;:::i;:::-;26252:139;;25979:419;;;:::o;26404:228::-;26544:34;26540:1;26532:6;26528:14;26521:58;26613:11;26608:2;26600:6;26596:15;26589:36;26404:228;:::o;26638:366::-;26780:3;26801:67;26865:2;26860:3;26801:67;:::i;:::-;26794:74;;26877:93;26966:3;26877:93;:::i;:::-;26995:2;26990:3;26986:12;26979:19;;26638:366;;;:::o;27010:419::-;27176:4;27214:2;27203:9;27199:18;27191:26;;27263:9;27257:4;27253:20;27249:1;27238:9;27234:17;27227:47;27291:131;27417:4;27291:131;:::i;:::-;27283:139;;27010:419;;;:::o;27435:171::-;27575:23;27571:1;27563:6;27559:14;27552:47;27435:171;:::o;27612:366::-;27754:3;27775:67;27839:2;27834:3;27775:67;:::i;:::-;27768:74;;27851:93;27940:3;27851:93;:::i;:::-;27969:2;27964:3;27960:12;27953:19;;27612:366;;;:::o;27984:419::-;28150:4;28188:2;28177:9;28173:18;28165:26;;28237:9;28231:4;28227:20;28223:1;28212:9;28208:17;28201:47;28265:131;28391:4;28265:131;:::i;:::-;28257:139;;27984:419;;;:::o;28409:117::-;28518:1;28515;28508:12;28562:537;28690:3;28711:86;28790:6;28785:3;28711:86;:::i;:::-;28704:93;;28821:66;28813:6;28810:78;28807:165;;;28891:79;;:::i;:::-;28807:165;29003:4;28995:6;28991:17;28981:27;;29018:43;29054:6;29049:3;29042:5;29018:43;:::i;:::-;29086:6;29081:3;29077:16;29070:23;;28562:537;;;;;:::o;29105:393::-;29258:4;29296:2;29285:9;29281:18;29273:26;;29345:9;29339:4;29335:20;29331:1;29320:9;29316:17;29309:47;29373:118;29486:4;29477:6;29469;29373:118;:::i;:::-;29365:126;;29105:393;;;;;:::o;29504:148::-;29606:11;29643:3;29628:18;;29504:148;;;;:::o;29658:377::-;29764:3;29792:39;29825:5;29792:39;:::i;:::-;29847:89;29929:6;29924:3;29847:89;:::i;:::-;29840:96;;29945:52;29990:6;29985:3;29978:4;29971:5;29967:16;29945:52;:::i;:::-;30022:6;30017:3;30013:16;30006:23;;29768:267;29658:377;;;;:::o;30041:435::-;30221:3;30243:95;30334:3;30325:6;30243:95;:::i;:::-;30236:102;;30355:95;30446:3;30437:6;30355:95;:::i;:::-;30348:102;;30467:3;30460:10;;30041:435;;;;;:::o;30482:161::-;30622:13;30618:1;30610:6;30606:14;30599:37;30482:161;:::o;30649:366::-;30791:3;30812:67;30876:2;30871:3;30812:67;:::i;:::-;30805:74;;30888:93;30977:3;30888:93;:::i;:::-;31006:2;31001:3;30997:12;30990:19;;30649:366;;;:::o;31021:419::-;31187:4;31225:2;31214:9;31210:18;31202:26;;31274:9;31268:4;31264:20;31260:1;31249:9;31245:17;31238:47;31302:131;31428:4;31302:131;:::i;:::-;31294:139;;31021:419;;;:::o;31446:160::-;31586:12;31582:1;31574:6;31570:14;31563:36;31446:160;:::o;31612:366::-;31754:3;31775:67;31839:2;31834:3;31775:67;:::i;:::-;31768:74;;31851:93;31940:3;31851:93;:::i;:::-;31969:2;31964:3;31960:12;31953:19;;31612:366;;;:::o;31984:419::-;32150:4;32188:2;32177:9;32173:18;32165:26;;32237:9;32231:4;32227:20;32223:1;32212:9;32208:17;32201:47;32265:131;32391:4;32265:131;:::i;:::-;32257:139;;31984:419;;;:::o;32409:224::-;32549:34;32545:1;32537:6;32533:14;32526:58;32618:7;32613:2;32605:6;32601:15;32594:32;32409:224;:::o;32639:366::-;32781:3;32802:67;32866:2;32861:3;32802:67;:::i;:::-;32795:74;;32878:93;32967:3;32878:93;:::i;:::-;32996:2;32991:3;32987:12;32980:19;;32639:366;;;:::o;33011:419::-;33177:4;33215:2;33204:9;33200:18;33192:26;;33264:9;33258:4;33254:20;33250:1;33239:9;33235:17;33228:47;33292:131;33418:4;33292:131;:::i;:::-;33284:139;;33011:419;;;:::o;33436:223::-;33576:34;33572:1;33564:6;33560:14;33553:58;33645:6;33640:2;33632:6;33628:15;33621:31;33436:223;:::o;33665:366::-;33807:3;33828:67;33892:2;33887:3;33828:67;:::i;:::-;33821:74;;33904:93;33993:3;33904:93;:::i;:::-;34022:2;34017:3;34013:12;34006:19;;33665:366;;;:::o;34037:419::-;34203:4;34241:2;34230:9;34226:18;34218:26;;34290:9;34284:4;34280:20;34276:1;34265:9;34261:17;34254:47;34318:131;34444:4;34318:131;:::i;:::-;34310:139;;34037:419;;;:::o;34462:175::-;34602:27;34598:1;34590:6;34586:14;34579:51;34462:175;:::o;34643:366::-;34785:3;34806:67;34870:2;34865:3;34806:67;:::i;:::-;34799:74;;34882:93;34971:3;34882:93;:::i;:::-;35000:2;34995:3;34991:12;34984:19;;34643:366;;;:::o;35015:419::-;35181:4;35219:2;35208:9;35204:18;35196:26;;35268:9;35262:4;35258:20;35254:1;35243:9;35239:17;35232:47;35296:131;35422:4;35296:131;:::i;:::-;35288:139;;35015:419;;;:::o;35440:237::-;35580:34;35576:1;35568:6;35564:14;35557:58;35649:20;35644:2;35636:6;35632:15;35625:45;35440:237;:::o;35683:366::-;35825:3;35846:67;35910:2;35905:3;35846:67;:::i;:::-;35839:74;;35922:93;36011:3;35922:93;:::i;:::-;36040:2;36035:3;36031:12;36024:19;;35683:366;;;:::o;36055:419::-;36221:4;36259:2;36248:9;36244:18;36236:26;;36308:9;36302:4;36298:20;36294:1;36283:9;36279:17;36272:47;36336:131;36462:4;36336:131;:::i;:::-;36328:139;;36055:419;;;:::o;36480:180::-;36528:77;36525:1;36518:88;36625:4;36622:1;36615:15;36649:4;36646:1;36639:15;36666:185;36706:1;36723:20;36741:1;36723:20;:::i;:::-;36718:25;;36757:20;36775:1;36757:20;:::i;:::-;36752:25;;36796:1;36786:35;;36801:18;;:::i;:::-;36786:35;36843:1;36840;36836:9;36831:14;;36666:185;;;;:::o;36857:176::-;36889:1;36906:20;36924:1;36906:20;:::i;:::-;36901:25;;36940:20;36958:1;36940:20;:::i;:::-;36935:25;;36979:1;36969:35;;36984:18;;:::i;:::-;36969:35;37025:1;37022;37018:9;37013:14;;36857:176;;;;:::o;37039:161::-;37179:13;37175:1;37167:6;37163:14;37156:37;37039:161;:::o;37206:366::-;37348:3;37369:67;37433:2;37428:3;37369:67;:::i;:::-;37362:74;;37445:93;37534:3;37445:93;:::i;:::-;37563:2;37558:3;37554:12;37547:19;;37206:366;;;:::o;37578:419::-;37744:4;37782:2;37771:9;37767:18;37759:26;;37831:9;37825:4;37821:20;37817:1;37806:9;37802:17;37795:47;37859:131;37985:4;37859:131;:::i;:::-;37851:139;;37578:419;;;:::o;38003:98::-;38054:6;38088:5;38082:12;38072:22;;38003:98;;;:::o;38107:168::-;38190:11;38224:6;38219:3;38212:19;38264:4;38259:3;38255:14;38240:29;;38107:168;;;;:::o;38281:360::-;38367:3;38395:38;38427:5;38395:38;:::i;:::-;38449:70;38512:6;38507:3;38449:70;:::i;:::-;38442:77;;38528:52;38573:6;38568:3;38561:4;38554:5;38550:16;38528:52;:::i;:::-;38605:29;38627:6;38605:29;:::i;:::-;38600:3;38596:39;38589:46;;38371:270;38281:360;;;;:::o;38647:640::-;38842:4;38880:3;38869:9;38865:19;38857:27;;38894:71;38962:1;38951:9;38947:17;38938:6;38894:71;:::i;:::-;38975:72;39043:2;39032:9;39028:18;39019:6;38975:72;:::i;:::-;39057;39125:2;39114:9;39110:18;39101:6;39057:72;:::i;:::-;39176:9;39170:4;39166:20;39161:2;39150:9;39146:18;39139:48;39204:76;39275:4;39266:6;39204:76;:::i;:::-;39196:84;;38647:640;;;;;;;:::o;39293:141::-;39349:5;39380:6;39374:13;39365:22;;39396:32;39422:5;39396:32;:::i;:::-;39293:141;;;;:::o;39440:349::-;39509:6;39558:2;39546:9;39537:7;39533:23;39529:32;39526:119;;;39564:79;;:::i;:::-;39526:119;39684:1;39709:63;39764:7;39755:6;39744:9;39740:22;39709:63;:::i;:::-;39699:73;;39655:127;39440:349;;;;:::o;39795:182::-;39935:34;39931:1;39923:6;39919:14;39912:58;39795:182;:::o;39983:366::-;40125:3;40146:67;40210:2;40205:3;40146:67;:::i;:::-;40139:74;;40222:93;40311:3;40222:93;:::i;:::-;40340:2;40335:3;40331:12;40324:19;;39983:366;;;:::o;40355:419::-;40521:4;40559:2;40548:9;40544:18;40536:26;;40608:9;40602:4;40598:20;40594:1;40583:9;40579:17;40572:47;40636:131;40762:4;40636:131;:::i;:::-;40628:139;;40355:419;;;:::o;40780:178::-;40920:30;40916:1;40908:6;40904:14;40897:54;40780:178;:::o;40964:366::-;41106:3;41127:67;41191:2;41186:3;41127:67;:::i;:::-;41120:74;;41203:93;41292:3;41203:93;:::i;:::-;41321:2;41316:3;41312:12;41305:19;;40964:366;;;:::o;41336:419::-;41502:4;41540:2;41529:9;41525:18;41517:26;;41589:9;41583:4;41579:20;41575:1;41564:9;41560:17;41553:47;41617:131;41743:4;41617:131;:::i;:::-;41609:139;;41336:419;;;:::o;41761:180::-;41809:77;41806:1;41799:88;41906:4;41903:1;41896:15;41930:4;41927:1;41920:15

Swarm Source

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