ERC-721
Overview
Max Total Supply
92 ppNode
Holders
17
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 ppNodeLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ppNode
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-12 */ /** *Submitted for verification at Etherscan.io on 2022-03-11 */ /** *Submitted for verification at Etherscan.io on 2022-03-05 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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/contracts/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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/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: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IRewardPool { function addNodeInfo(uint _nftId, uint _nodeType, address _owner) external returns (bool); function updateNodeOwner(uint _nftId, address _owner) external returns (bool); function claimReward(uint _nftId) external returns (bool); } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.7; contract ControlledAccess is Ownable { /* * @dev Requires msg.sender to have valid access message. * @param _v ECDSA signature parameter v. * @param _r ECDSA signature parameters r. * @param _s ECDSA signature parameters s. */ modifier onlyValidAccess(uint8 _v, bytes32 _r, bytes32 _s) { require( isValidAccessMessage(msg.sender,_v,_r,_s), "Not valid Message"); _; } /* * @dev Verifies if message was signed by owner to give access to _add for this contract. * Assumes Geth signature prefix. * @param _add Address of agent with access * @param _v ECDSA signature parameter v. * @param _r ECDSA signature parameters r. * @param _s ECDSA signature parameters s. * @return Validity of access message for a given address. */ function isValidAccessMessage( address _add, uint8 _v, bytes32 _r, bytes32 _s ) public view returns (bool) { bytes32 msgHash = keccak256(abi.encodePacked(address(this), _add)); bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, msgHash)); address _recovered = ecrecover(prefixedHash, _v, _r, _s); if (owner() == _recovered) { return true; } return false; } } pragma solidity >=0.7.0 <0.9.0; contract ppNode is ERC721Enumerable, Ownable, ControlledAccess{ using Strings for uint256; bool public autosell = false; string baseURI; string public baseExtension = ".json"; uint256 public maxSupply = 10000000; uint256 public timeDeployed; uint256 public allowMintingAfter = 0; address public XPPINU; bool public isPaused = false; address public rewardPool; mapping(uint256 => uint) public nodeType; IUniswapV2Router02 public uniswapV2Router; // tax in 1e4 (10000 = 100%) uint256 public tax; uint256[5] public mintPrices=[0,0,0,0,0]; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, uint256 _revealTime, address _xPpInuAddress ) ERC721(_name, _symbol) { if (_revealTime > block.timestamp) { allowMintingAfter = _revealTime; } XPPINU = _xPpInuAddress; timeDeployed = block.timestamp; setBaseURI(_initBaseURI); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; } receive() external payable { } function toggleAutoSell() public onlyOwner { autosell = !autosell; } function updateMintPrices(uint256[5] memory _prices) public onlyOwner{ mintPrices = _prices; } function setRewardPool(address _rewardPool) public onlyOwner{ rewardPool = _rewardPool; } function updateTax(uint256 _tax) public onlyOwner{ tax = _tax; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function updateXPPINUAddress( address _xPpInuAddress) public onlyOwner{ XPPINU = _xPpInuAddress; } // public function mint(uint _type) public payable { require( block.timestamp >= allowMintingAfter, "Minting now allowed yet" ); require(_type>0 && _type<=5, "Invalid node type"); uint256 price = mintPrices[_type-1]; uint256 supply = totalSupply(); nodeType[supply+1] = _type; require(IERC20(XPPINU).transferFrom(msg.sender, address(this), price), "Not enough funds"); require(!isPaused); require(supply + 1 <= maxSupply); _safeMint(msg.sender, supply + 1); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, nodeType[tokenId].toString(), baseExtension ) ) : ""; } function getSecondsUntilMinting() public view returns (uint256) { if (block.timestamp < allowMintingAfter) { return (allowMintingAfter) - block.timestamp; } else { return 0; } } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setIsPaused(bool _state) public onlyOwner { isPaused = _state; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = XPPINU; path[1] = uniswapV2Router.WETH(); IERC20(XPPINU).approve(address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function sell(uint256 tokenAmount) public onlyOwner { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = XPPINU; path[1] = uniswapV2Router.WETH(); IERC20(XPPINU).approve(address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { IRewardPool(rewardPool).addNodeInfo(tokenId, nodeType[tokenId], to); } else if (from != to) { IRewardPool(rewardPool).claimReward(tokenId); IRewardPool(rewardPool).updateNodeOwner(tokenId, to); } } function claimRewards( address _owner) public { uint256[] memory tokens = walletOfOwner(_owner); for (uint256 i; i < tokens.length; i++) { IRewardPool(rewardPool).claimReward(tokens[i]); } } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"uint256","name":"_revealTime","type":"uint256"},{"internalType":"address","name":"_xPpInuAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"XPPINU","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowMintingAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autosell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"claimRewards","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":[],"name":"getSecondsUntilMinting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"isValidAccessMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodeType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sell","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardPool","type":"address"}],"name":"setRewardPool","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":[],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeDeployed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAutoSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"_prices","type":"uint256[5]"}],"name":"updateMintPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_xPpInuAddress","type":"address"}],"name":"updateXPPINUAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200006c929190620003de565b5062989680600d556000600f556000601060146101000a81548160ff0219169083151502179055506040518060a00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152506015906005620000e19291906200046f565b50348015620000ef57600080fd5b50604051620060a3380380620060a3833981810160405281019062000115919062000584565b848481600090805190602001906200012f929190620003de565b50806001908051906020019062000148929190620003de565b5050506200016b6200015f6200023b60201b60201c565b6200024360201b60201c565b428211156200017c5781600f819055505b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600e81905550620001d5836200030960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050620008e2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003196200023b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200033f620003b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000398576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038f9062000690565b60405180910390fd5b80600b9080519060200190620003b0929190620003de565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003ec9062000796565b90600052602060002090601f0160209004810192826200041057600085556200045c565b82601f106200042b57805160ff19168380011785556200045c565b828001600101855582156200045c579182015b828111156200045b5782518255916020019190600101906200043e565b5b5090506200046b9190620004b9565b5090565b8260058101928215620004a6579160200282015b82811115620004a5578251829060ff1690559160200191906001019062000483565b5b509050620004b59190620004b9565b5090565b5b80821115620004d4576000816000905550600101620004ba565b5090565b6000620004ef620004e984620006db565b620006b2565b9050828152602081018484840111156200050e576200050d62000865565b5b6200051b84828562000760565b509392505050565b6000815190506200053481620008ae565b92915050565b600082601f83011262000552576200055162000860565b5b815162000564848260208601620004d8565b91505092915050565b6000815190506200057e81620008c8565b92915050565b600080600080600060a08688031215620005a357620005a26200086f565b5b600086015167ffffffffffffffff811115620005c457620005c36200086a565b5b620005d2888289016200053a565b955050602086015167ffffffffffffffff811115620005f657620005f56200086a565b5b62000604888289016200053a565b945050604086015167ffffffffffffffff8111156200062857620006276200086a565b5b62000636888289016200053a565b935050606062000649888289016200056d565b92505060806200065c8882890162000523565b9150509295509295909350565b60006200067860208362000711565b9150620006858262000885565b602082019050919050565b60006020820190508181036000830152620006ab8162000669565b9050919050565b6000620006be620006d1565b9050620006cc8282620007cc565b919050565b6000604051905090565b600067ffffffffffffffff821115620006f957620006f862000831565b5b620007048262000874565b9050602081019050919050565b600082825260208201905092915050565b60006200072f8262000736565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200078057808201518184015260208101905062000763565b8381111562000790576000848401525b50505050565b60006002820490506001821680620007af57607f821691505b60208210811415620007c657620007c562000802565b5b50919050565b620007d78262000874565b810181811067ffffffffffffffff82111715620007f957620007f862000831565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008b98162000722565b8114620008c557600080fd5b50565b620008d38162000756565b8114620008df57600080fd5b50565b6157b180620008f26000396000f3fe6080604052600436106102815760003560e01c8063715018a61161014f578063c6682862116100c1578063e4849b321161007a578063e4849b321461099d578063e985e9c5146109c6578063ef5cfb8c14610a03578063f2fde38b14610a2c578063fa1f7b0c14610a55578063ffdcc2fa14610a7e57610288565b8063c66828621461088f578063c87b56dd146108ba578063cca0feb6146108f7578063d3ed9def14610920578063d5abeb0114610949578063da3ef23f1461097457610288565b806399c8d5561161011357806399c8d556146107a0578063a0712d68146107cb578063a22cb465146107e7578063a75052cb14610810578063b187bd261461083b578063b88d4fde1461086657610288565b8063715018a6146106df57806378238c37146106f6578063872bdcdb1461071f5780638da5cb5b1461074a57806395d89b411461077557610288565b80632f745c59116101f357806355f804b3116101ac57806355f804b3146105bd5780636187b33e146105e65780636352211e1461062357806366666aa9146106605780636677ef011461068b57806370a08231146106a257610288565b80632f745c591461049657806332624114146104d35780633ccfd60b1461051057806342842e0e1461051a578063438b6300146105435780634f6ccce71461058057610288565b80631694505e116102455780631694505e1461038657806318160ddd146103b157806319188c35146103dc5780631c794b841461040757806323b872dd14610444578063240976bf1461046d57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b314610332578063139a71f41461035b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613f74565b610aa9565b6040516102c191906147bd565b60405180910390f35b3480156102d657600080fd5b506102df610b23565b6040516102ec9190614838565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190614017565b610bb5565b60405161032991906146d4565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613e46565b610c3a565b005b34801561036757600080fd5b50610370610d52565b60405161037d91906146d4565b60405180910390f35b34801561039257600080fd5b5061039b610d78565b6040516103a8919061481d565b60405180910390f35b3480156103bd57600080fd5b506103c6610d9e565b6040516103d39190614afa565b60405180910390f35b3480156103e857600080fd5b506103f1610dab565b6040516103fe9190614afa565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190614017565b610db1565b60405161043b9190614afa565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613d30565b610dc9565b005b34801561047957600080fd5b50610494600480360381019061048f9190613f1a565b610e29565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613e46565b610ec2565b6040516104ca9190614afa565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613e86565b610f67565b60405161050791906147bd565b60405180910390f35b6105186110a8565b005b34801561052657600080fd5b50610541600480360381019061053c9190613d30565b61119d565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613c96565b6111bd565b604051610577919061479b565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614017565b61126b565b6040516105b49190614afa565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613fce565b6112dc565b005b3480156105f257600080fd5b5061060d60048036038101906106089190614017565b611372565b60405161061a9190614afa565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614017565b61138d565b60405161065791906146d4565b60405180910390f35b34801561066c57600080fd5b5061067561143f565b60405161068291906146d4565b60405180910390f35b34801561069757600080fd5b506106a0611465565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613c96565b61150d565b6040516106d69190614afa565b60405180910390f35b3480156106eb57600080fd5b506106f46115c5565b005b34801561070257600080fd5b5061071d60048036038101906107189190613c96565b61164d565b005b34801561072b57600080fd5b5061073461170d565b6040516107419190614afa565b60405180910390f35b34801561075657600080fd5b5061075f611713565b60405161076c91906146d4565b60405180910390f35b34801561078157600080fd5b5061078a61173d565b6040516107979190614838565b60405180910390f35b3480156107ac57600080fd5b506107b56117cf565b6040516107c29190614afa565b60405180910390f35b6107e560048036038101906107e09190614017565b6117d5565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613e06565b611a00565b005b34801561081c57600080fd5b50610825611b81565b6040516108329190614afa565b60405180910390f35b34801561084757600080fd5b50610850611baa565b60405161085d91906147bd565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613d83565b611bbd565b005b34801561089b57600080fd5b506108a4611c1f565b6040516108b19190614838565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190614017565b611cad565b6040516108ee9190614838565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614017565b611d6a565b005b34801561092c57600080fd5b5061094760048036038101906109429190613c96565b611df0565b005b34801561095557600080fd5b5061095e611eb0565b60405161096b9190614afa565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613fce565b611eb6565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614017565b611f4c565b005b3480156109d257600080fd5b506109ed60048036038101906109e89190613cf0565b6122e1565b6040516109fa91906147bd565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c96565b612375565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613c96565b61246e565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613eed565b612566565b005b348015610a8a57600080fd5b50610a936125f7565b604051610aa091906147bd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1c5750610b1b8261260a565b5b9050919050565b606060008054610b3290614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90614f21565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b6000610bc0826126ec565b610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906149fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c458261138d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90614a7a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd5612758565b73ffffffffffffffffffffffffffffffffffffffff161480610d045750610d0381610cfe612758565b6122e1565b5b610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a9061497a565b60405180910390fd5b610d4d8383612760565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b600e5481565b60126020528060005260406000206000915090505481565b610dda610dd4612758565b82612819565b610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090614aba565b60405180910390fd5b610e248383836128f7565b505050565b610e31612758565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611713565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90614a1a565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b6000610ecd8361150d565b8210610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f059061485a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000803086604051602001610f7d92919061463a565b60405160208183030381529060405280519060200120905060006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008183604051602001610fe4929190614666565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161102194939291906147d8565b6020604051602081039080840390855afa158015611043573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff1661106e611713565b73ffffffffffffffffffffffffffffffffffffffff1614156110975760019450505050506110a0565b60009450505050505b949350505050565b6110b0612758565b73ffffffffffffffffffffffffffffffffffffffff166110ce611713565b73ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614a1a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161114a906146bf565b60006040518083038185875af1925050503d8060008114611187576040519150601f19603f3d011682016040523d82523d6000602084013e61118c565b606091505b505090508061119a57600080fd5b50565b6111b883838360405180602001604052806000815250611bbd565b505050565b606060006111ca8361150d565b905060008167ffffffffffffffff8111156111e8576111e7615117565b5b6040519080825280602002602001820160405280156112165781602001602082028036833780820191505090505b50905060005b828110156112605761122e8582610ec2565b828281518110611241576112406150e8565b5b602002602001018181525050808061125890614f84565b91505061121c565b508092505050919050565b6000611275610d9e565b82106112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90614ada565b60405180910390fd5b600882815481106112ca576112c96150e8565b5b90600052602060002001549050919050565b6112e4612758565b73ffffffffffffffffffffffffffffffffffffffff16611302611713565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90614a1a565b60405180910390fd5b80600b908051906020019061136e929190613984565b5050565b6015816005811061138257600080fd5b016000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d906149ba565b60405180910390fd5b80915050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61146d612758565b73ffffffffffffffffffffffffffffffffffffffff1661148b611713565b73ffffffffffffffffffffffffffffffffffffffff16146114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614a1a565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115759061499a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115cd612758565b73ffffffffffffffffffffffffffffffffffffffff166115eb611713565b73ffffffffffffffffffffffffffffffffffffffff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890614a1a565b60405180910390fd5b61164b6000612b53565b565b611655612758565b73ffffffffffffffffffffffffffffffffffffffff16611673611713565b73ffffffffffffffffffffffffffffffffffffffff16146116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c090614a1a565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174c90614f21565b80601f016020809104026020016040519081016040528092919081815260200182805461177890614f21565b80156117c55780601f1061179a576101008083540402835291602001916117c5565b820191906000526020600020905b8154815290600101906020018083116117a857829003601f168201915b5050505050905090565b60145481565b600f5442101561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614a9a565b60405180910390fd5b60008111801561182b575060058111155b61186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906148fa565b60405180910390fd5b6000601560018361187b9190614dd8565b6005811061188c5761188b6150e8565b5b01549050600061189a610d9e565b905082601260006001846118ae9190614d51565b815260200190815260200160002081905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161191f939291906146ef565b602060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190613f47565b6119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906148da565b60405180910390fd5b601060149054906101000a900460ff16156119ca57600080fd5b600d546001826119da9190614d51565b11156119e557600080fd5b6119fb336001836119f69190614d51565b612c19565b505050565b611a08612758565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d9061493a565b60405180910390fd5b8060056000611a83612758565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b30612758565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7591906147bd565b60405180910390a35050565b6000600f54421015611ba25742600f54611b9b9190614dd8565b9050611ba7565b600090505b90565b601060149054906101000a900460ff1681565b611bce611bc8612758565b83612819565b611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490614aba565b60405180910390fd5b611c1984848484612c37565b50505050565b600c8054611c2c90614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5890614f21565b8015611ca55780601f10611c7a57610100808354040283529160200191611ca5565b820191906000526020600020905b815481529060010190602001808311611c8857829003601f168201915b505050505081565b6060611cb8826126ec565b611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a5a565b60405180910390fd5b6000611d01612c93565b90506000815111611d215760405180602001604052806000815250611d62565b80611d3e6012600086815260200190815260200160002054612d25565b600c604051602001611d529392919061468e565b6040516020818303038152906040525b915050919050565b611d72612758565b73ffffffffffffffffffffffffffffffffffffffff16611d90611713565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614a1a565b60405180910390fd5b8060148190555050565b611df8612758565b73ffffffffffffffffffffffffffffffffffffffff16611e16611713565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390614a1a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b611ebe612758565b73ffffffffffffffffffffffffffffffffffffffff16611edc611713565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614a1a565b60405180910390fd5b80600c9080519060200190611f48929190613984565b5050565b611f54612758565b73ffffffffffffffffffffffffffffffffffffffff16611f72611713565b73ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf90614a1a565b60405180910390fd5b6000600267ffffffffffffffff811115611fe557611fe4615117565b5b6040519080825280602002602001820160405280156120135781602001602082028036833780820191505090505b509050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061204d5761204c6150e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ef57600080fd5b505afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190613cc3565b8160018151811061213b5761213a6150e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121f4929190614772565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190613f47565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122ab959493929190614b3e565b600060405180830381600087803b1580156122c557600080fd5b505af11580156122d9573d6000803e3d6000fd5b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612380826111bd565b905060005b815181101561246957601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae169a508383815181106123df576123de6150e8565b5b60200260200101516040518263ffffffff1660e01b81526004016124039190614afa565b602060405180830381600087803b15801561241d57600080fd5b505af1158015612431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124559190613f47565b50808061246190614f84565b915050612385565b505050565b612476612758565b73ffffffffffffffffffffffffffffffffffffffff16612494611713565b73ffffffffffffffffffffffffffffffffffffffff16146124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190614a1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125519061489a565b60405180910390fd5b61256381612b53565b50565b61256e612758565b73ffffffffffffffffffffffffffffffffffffffff1661258c611713565b73ffffffffffffffffffffffffffffffffffffffff16146125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d990614a1a565b60405180910390fd5b8060159060056125f3929190613a0a565b5050565b600a60149054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126e557506126e482612e86565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127d38361138d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612824826126ec565b612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a9061495a565b60405180910390fd5b600061286e8361138d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128dd57508373ffffffffffffffffffffffffffffffffffffffff166128c584610bb5565b73ffffffffffffffffffffffffffffffffffffffff16145b806128ee57506128ed81856122e1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129178261138d565b73ffffffffffffffffffffffffffffffffffffffff161461296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614a3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d49061491a565b60405180910390fd5b6129e8838383612ef0565b6129f3600082612760565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a439190614dd8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9a9190614d51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c33828260405180602001604052806000815250613192565b5050565b612c428484846128f7565b612c4e848484846131ed565b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c849061487a565b60405180910390fd5b50505050565b6060600b8054612ca290614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054612cce90614f21565b8015612d1b5780601f10612cf057610100808354040283529160200191612d1b565b820191906000526020600020905b815481529060010190602001808311612cfe57829003601f168201915b5050505050905090565b60606000821415612d6d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e81565b600082905060005b60008214612d9f578080612d8890614f84565b915050600a82612d989190614da7565b9150612d75565b60008167ffffffffffffffff811115612dbb57612dba615117565b5b6040519080825280601f01601f191660200182016040528015612ded5781602001600182028036833780820191505090505b5090505b60008514612e7a57600182612e069190614dd8565b9150600a85612e159190614ffb565b6030612e219190614d51565b60f81b818381518110612e3757612e366150e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e739190614da7565b9450612df1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612efb838383613384565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ffa57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b9b4667826012600085815260200190815260200160002054856040518463ffffffff1660e01b8152600401612fa293929190614b98565b602060405180830381600087803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff49190613f47565b5061318d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461318c57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae169a50826040518263ffffffff1660e01b81526004016130889190614afa565b602060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130da9190613f47565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639774950682846040518363ffffffff1660e01b8152600401613138929190614b15565b602060405180830381600087803b15801561315257600080fd5b505af1158015613166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318a9190613f47565b505b5b505050565b61319c8383613498565b6131a960008484846131ed565b6131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df9061487a565b60405180910390fd5b505050565b600061320e8473ffffffffffffffffffffffffffffffffffffffff16613666565b15613377578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613237612758565b8786866040518563ffffffff1660e01b81526004016132599493929190614726565b602060405180830381600087803b15801561327357600080fd5b505af19250505080156132a457506040513d601f19601f820116820180604052508101906132a19190613fa1565b60015b613327573d80600081146132d4576040519150601f19603f3d011682016040523d82523d6000602084013e6132d9565b606091505b5060008151141561331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133169061487a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061337c565b600190505b949350505050565b61338f838383613679565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133d2576133cd8161367e565b613411565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134105761340f83826136c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134545761344f81613834565b613493565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613492576134918282613905565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ff906149da565b60405180910390fd5b613511816126ec565b15613551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613548906148ba565b60405180910390fd5b61355d60008383612ef0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135ad9190614d51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136d48461150d565b6136de9190614dd8565b90506000600760008481526020019081526020016000205490508181146137c3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138489190614dd8565b9050600060096000848152602001908152602001600020549050600060088381548110613878576138776150e8565b5b90600052602060002001549050806008838154811061389a576138996150e8565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138e9576138e86150b9565b5b6001900381819060005260206000200160009055905550505050565b60006139108361150d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461399090614f21565b90600052602060002090601f0160209004810192826139b257600085556139f9565b82601f106139cb57805160ff19168380011785556139f9565b828001600101855582156139f9579182015b828111156139f85782518255916020019190600101906139dd565b5b509050613a069190613a4a565b5090565b8260058101928215613a39579160200282015b82811115613a38578251825591602001919060010190613a1d565b5b509050613a469190613a4a565b5090565b5b80821115613a63576000816000905550600101613a4b565b5090565b6000613a7a613a7584614bf4565b614bcf565b90508082856020860282011115613a9457613a9361514b565b5b60005b85811015613ac45781613aaa8882613c6c565b845260208401935060208301925050600181019050613a97565b5050509392505050565b6000613ae1613adc84614c1a565b614bcf565b905082815260208101848484011115613afd57613afc615150565b5b613b08848285614edf565b509392505050565b6000613b23613b1e84614c4b565b614bcf565b905082815260208101848484011115613b3f57613b3e615150565b5b613b4a848285614edf565b509392505050565b600081359050613b61816156f1565b92915050565b600081519050613b76816156f1565b92915050565b600082601f830112613b9157613b90615146565b5b6005613b9e848285613a67565b91505092915050565b600081359050613bb681615708565b92915050565b600081519050613bcb81615708565b92915050565b600081359050613be08161571f565b92915050565b600081359050613bf581615736565b92915050565b600081519050613c0a81615736565b92915050565b600082601f830112613c2557613c24615146565b5b8135613c35848260208601613ace565b91505092915050565b600082601f830112613c5357613c52615146565b5b8135613c63848260208601613b10565b91505092915050565b600081359050613c7b8161574d565b92915050565b600081359050613c9081615764565b92915050565b600060208284031215613cac57613cab61515a565b5b6000613cba84828501613b52565b91505092915050565b600060208284031215613cd957613cd861515a565b5b6000613ce784828501613b67565b91505092915050565b60008060408385031215613d0757613d0661515a565b5b6000613d1585828601613b52565b9250506020613d2685828601613b52565b9150509250929050565b600080600060608486031215613d4957613d4861515a565b5b6000613d5786828701613b52565b9350506020613d6886828701613b52565b9250506040613d7986828701613c6c565b9150509250925092565b60008060008060808587031215613d9d57613d9c61515a565b5b6000613dab87828801613b52565b9450506020613dbc87828801613b52565b9350506040613dcd87828801613c6c565b925050606085013567ffffffffffffffff811115613dee57613ded615155565b5b613dfa87828801613c10565b91505092959194509250565b60008060408385031215613e1d57613e1c61515a565b5b6000613e2b85828601613b52565b9250506020613e3c85828601613ba7565b9150509250929050565b60008060408385031215613e5d57613e5c61515a565b5b6000613e6b85828601613b52565b9250506020613e7c85828601613c6c565b9150509250929050565b60008060008060808587031215613ea057613e9f61515a565b5b6000613eae87828801613b52565b9450506020613ebf87828801613c81565b9350506040613ed087828801613bd1565b9250506060613ee187828801613bd1565b91505092959194509250565b600060a08284031215613f0357613f0261515a565b5b6000613f1184828501613b7c565b91505092915050565b600060208284031215613f3057613f2f61515a565b5b6000613f3e84828501613ba7565b91505092915050565b600060208284031215613f5d57613f5c61515a565b5b6000613f6b84828501613bbc565b91505092915050565b600060208284031215613f8a57613f8961515a565b5b6000613f9884828501613be6565b91505092915050565b600060208284031215613fb757613fb661515a565b5b6000613fc584828501613bfb565b91505092915050565b600060208284031215613fe457613fe361515a565b5b600082013567ffffffffffffffff81111561400257614001615155565b5b61400e84828501613c3e565b91505092915050565b60006020828403121561402d5761402c61515a565b5b600061403b84828501613c6c565b91505092915050565b60006140508383614074565b60208301905092915050565b6000614068838361460d565b60208301905092915050565b61407d81614e0c565b82525050565b61408c81614e0c565b82525050565b6140a361409e82614e0c565b614fcd565b82525050565b60006140b482614cb1565b6140be8185614cf7565b93506140c983614c7c565b8060005b838110156140fa5781516140e18882614044565b97506140ec83614cdd565b9250506001810190506140cd565b5085935050505092915050565b600061411282614cbc565b61411c8185614d08565b935061412783614c8c565b8060005b8381101561415857815161413f888261405c565b975061414a83614cea565b92505060018101905061412b565b5085935050505092915050565b61416e81614e1e565b82525050565b61417d81614e2a565b82525050565b61419461418f82614e2a565b614fdf565b82525050565b60006141a582614cc7565b6141af8185614d19565b93506141bf818560208601614eee565b6141c88161515f565b840191505092915050565b60006141de82614cc7565b6141e88185614d2a565b93506141f8818560208601614eee565b80840191505092915050565b61420d81614e97565b82525050565b61421c81614ea9565b82525050565b600061422d82614cd2565b6142378185614d35565b9350614247818560208601614eee565b6142508161515f565b840191505092915050565b600061426682614cd2565b6142708185614d46565b9350614280818560208601614eee565b80840191505092915050565b6000815461429981614f21565b6142a38186614d46565b945060018216600081146142be57600181146142cf57614302565b60ff19831686528186019350614302565b6142d885614c9c565b60005b838110156142fa578154818901526001820191506020810190506142db565b838801955050505b50505092915050565b6000614318602b83614d35565b91506143238261517d565b604082019050919050565b600061433b603283614d35565b9150614346826151cc565b604082019050919050565b600061435e602683614d35565b91506143698261521b565b604082019050919050565b6000614381601c83614d35565b915061438c8261526a565b602082019050919050565b60006143a4601083614d35565b91506143af82615293565b602082019050919050565b60006143c7601183614d35565b91506143d2826152bc565b602082019050919050565b60006143ea602483614d35565b91506143f5826152e5565b604082019050919050565b600061440d601983614d35565b915061441882615334565b602082019050919050565b6000614430602c83614d35565b915061443b8261535d565b604082019050919050565b6000614453603883614d35565b915061445e826153ac565b604082019050919050565b6000614476602a83614d35565b9150614481826153fb565b604082019050919050565b6000614499602983614d35565b91506144a48261544a565b604082019050919050565b60006144bc602083614d35565b91506144c782615499565b602082019050919050565b60006144df602c83614d35565b91506144ea826154c2565b604082019050919050565b6000614502602083614d35565b915061450d82615511565b602082019050919050565b6000614525602983614d35565b91506145308261553a565b604082019050919050565b6000614548602f83614d35565b915061455382615589565b604082019050919050565b600061456b602183614d35565b9150614576826155d8565b604082019050919050565b600061458e601783614d35565b915061459982615627565b602082019050919050565b60006145b1600083614d2a565b91506145bc82615650565b600082019050919050565b60006145d4603183614d35565b91506145df82615653565b604082019050919050565b60006145f7602c83614d35565b9150614602826156a2565b604082019050919050565b61461681614e80565b82525050565b61462581614e80565b82525050565b61463481614e8a565b82525050565b60006146468285614092565b6014820191506146568284614092565b6014820191508190509392505050565b600061467282856141d3565b915061467e8284614183565b6020820191508190509392505050565b600061469a828661425b565b91506146a6828561425b565b91506146b2828461428c565b9150819050949350505050565b60006146ca826145a4565b9150819050919050565b60006020820190506146e96000830184614083565b92915050565b60006060820190506147046000830186614083565b6147116020830185614083565b61471e604083018461461c565b949350505050565b600060808201905061473b6000830187614083565b6147486020830186614083565b614755604083018561461c565b8181036060830152614767818461419a565b905095945050505050565b60006040820190506147876000830185614083565b614794602083018461461c565b9392505050565b600060208201905081810360008301526147b58184614107565b905092915050565b60006020820190506147d26000830184614165565b92915050565b60006080820190506147ed6000830187614174565b6147fa602083018661462b565b6148076040830185614174565b6148146060830184614174565b95945050505050565b60006020820190506148326000830184614204565b92915050565b600060208201905081810360008301526148528184614222565b905092915050565b600060208201905081810360008301526148738161430b565b9050919050565b600060208201905081810360008301526148938161432e565b9050919050565b600060208201905081810360008301526148b381614351565b9050919050565b600060208201905081810360008301526148d381614374565b9050919050565b600060208201905081810360008301526148f381614397565b9050919050565b60006020820190508181036000830152614913816143ba565b9050919050565b60006020820190508181036000830152614933816143dd565b9050919050565b6000602082019050818103600083015261495381614400565b9050919050565b6000602082019050818103600083015261497381614423565b9050919050565b6000602082019050818103600083015261499381614446565b9050919050565b600060208201905081810360008301526149b381614469565b9050919050565b600060208201905081810360008301526149d38161448c565b9050919050565b600060208201905081810360008301526149f3816144af565b9050919050565b60006020820190508181036000830152614a13816144d2565b9050919050565b60006020820190508181036000830152614a33816144f5565b9050919050565b60006020820190508181036000830152614a5381614518565b9050919050565b60006020820190508181036000830152614a738161453b565b9050919050565b60006020820190508181036000830152614a938161455e565b9050919050565b60006020820190508181036000830152614ab381614581565b9050919050565b60006020820190508181036000830152614ad3816145c7565b9050919050565b60006020820190508181036000830152614af3816145ea565b9050919050565b6000602082019050614b0f600083018461461c565b92915050565b6000604082019050614b2a600083018561461c565b614b376020830184614083565b9392505050565b600060a082019050614b53600083018861461c565b614b606020830187614213565b8181036040830152614b7281866140a9565b9050614b816060830185614083565b614b8e608083018461461c565b9695505050505050565b6000606082019050614bad600083018661461c565b614bba602083018561461c565b614bc76040830184614083565b949350505050565b6000614bd9614bea565b9050614be58282614f53565b919050565b6000604051905090565b600067ffffffffffffffff821115614c0f57614c0e615117565b5b602082029050919050565b600067ffffffffffffffff821115614c3557614c34615117565b5b614c3e8261515f565b9050602081019050919050565b600067ffffffffffffffff821115614c6657614c65615117565b5b614c6f8261515f565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d5c82614e80565b9150614d6783614e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9c57614d9b61502c565b5b828201905092915050565b6000614db282614e80565b9150614dbd83614e80565b925082614dcd57614dcc61505b565b5b828204905092915050565b6000614de382614e80565b9150614dee83614e80565b925082821015614e0157614e0061502c565b5b828203905092915050565b6000614e1782614e60565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614ea282614ebb565b9050919050565b6000614eb482614e80565b9050919050565b6000614ec682614ecd565b9050919050565b6000614ed882614e60565b9050919050565b82818337600083830152505050565b60005b83811015614f0c578082015181840152602081019050614ef1565b83811115614f1b576000848401525b50505050565b60006002820490506001821680614f3957607f821691505b60208210811415614f4d57614f4c61508a565b5b50919050565b614f5c8261515f565b810181811067ffffffffffffffff82111715614f7b57614f7a615117565b5b80604052505050565b6000614f8f82614e80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc257614fc161502c565b5b600182019050919050565b6000614fd882614fe9565b9050919050565b6000819050919050565b6000614ff482615170565b9050919050565b600061500682614e80565b915061501183614e80565b9250826150215761502061505b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b7f496e76616c6964206e6f64652074797065000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f7720616c6c6f77656420796574000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6156fa81614e0c565b811461570557600080fd5b50565b61571181614e1e565b811461571c57600080fd5b50565b61572881614e2a565b811461573357600080fd5b50565b61573f81614e34565b811461574a57600080fd5b50565b61575681614e80565b811461576157600080fd5b50565b61576d81614e8a565b811461577857600080fd5b5056fea264697066735822122025ba9a6eb1c6f67ab0417a2aa0e0c97f5e1f57b5a3d37508bda7dac27687e76c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be05c9775dbf9ecbbbd936999dd8750f7875505f0000000000000000000000000000000000000000000000000000000000000013506f6e7a6920506c756720496e75204e6f646500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000670704e6f646500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063715018a61161014f578063c6682862116100c1578063e4849b321161007a578063e4849b321461099d578063e985e9c5146109c6578063ef5cfb8c14610a03578063f2fde38b14610a2c578063fa1f7b0c14610a55578063ffdcc2fa14610a7e57610288565b8063c66828621461088f578063c87b56dd146108ba578063cca0feb6146108f7578063d3ed9def14610920578063d5abeb0114610949578063da3ef23f1461097457610288565b806399c8d5561161011357806399c8d556146107a0578063a0712d68146107cb578063a22cb465146107e7578063a75052cb14610810578063b187bd261461083b578063b88d4fde1461086657610288565b8063715018a6146106df57806378238c37146106f6578063872bdcdb1461071f5780638da5cb5b1461074a57806395d89b411461077557610288565b80632f745c59116101f357806355f804b3116101ac57806355f804b3146105bd5780636187b33e146105e65780636352211e1461062357806366666aa9146106605780636677ef011461068b57806370a08231146106a257610288565b80632f745c591461049657806332624114146104d35780633ccfd60b1461051057806342842e0e1461051a578063438b6300146105435780634f6ccce71461058057610288565b80631694505e116102455780631694505e1461038657806318160ddd146103b157806319188c35146103dc5780631c794b841461040757806323b872dd14610444578063240976bf1461046d57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b314610332578063139a71f41461035b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613f74565b610aa9565b6040516102c191906147bd565b60405180910390f35b3480156102d657600080fd5b506102df610b23565b6040516102ec9190614838565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190614017565b610bb5565b60405161032991906146d4565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613e46565b610c3a565b005b34801561036757600080fd5b50610370610d52565b60405161037d91906146d4565b60405180910390f35b34801561039257600080fd5b5061039b610d78565b6040516103a8919061481d565b60405180910390f35b3480156103bd57600080fd5b506103c6610d9e565b6040516103d39190614afa565b60405180910390f35b3480156103e857600080fd5b506103f1610dab565b6040516103fe9190614afa565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190614017565b610db1565b60405161043b9190614afa565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613d30565b610dc9565b005b34801561047957600080fd5b50610494600480360381019061048f9190613f1a565b610e29565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613e46565b610ec2565b6040516104ca9190614afa565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613e86565b610f67565b60405161050791906147bd565b60405180910390f35b6105186110a8565b005b34801561052657600080fd5b50610541600480360381019061053c9190613d30565b61119d565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613c96565b6111bd565b604051610577919061479b565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614017565b61126b565b6040516105b49190614afa565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613fce565b6112dc565b005b3480156105f257600080fd5b5061060d60048036038101906106089190614017565b611372565b60405161061a9190614afa565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614017565b61138d565b60405161065791906146d4565b60405180910390f35b34801561066c57600080fd5b5061067561143f565b60405161068291906146d4565b60405180910390f35b34801561069757600080fd5b506106a0611465565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613c96565b61150d565b6040516106d69190614afa565b60405180910390f35b3480156106eb57600080fd5b506106f46115c5565b005b34801561070257600080fd5b5061071d60048036038101906107189190613c96565b61164d565b005b34801561072b57600080fd5b5061073461170d565b6040516107419190614afa565b60405180910390f35b34801561075657600080fd5b5061075f611713565b60405161076c91906146d4565b60405180910390f35b34801561078157600080fd5b5061078a61173d565b6040516107979190614838565b60405180910390f35b3480156107ac57600080fd5b506107b56117cf565b6040516107c29190614afa565b60405180910390f35b6107e560048036038101906107e09190614017565b6117d5565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613e06565b611a00565b005b34801561081c57600080fd5b50610825611b81565b6040516108329190614afa565b60405180910390f35b34801561084757600080fd5b50610850611baa565b60405161085d91906147bd565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613d83565b611bbd565b005b34801561089b57600080fd5b506108a4611c1f565b6040516108b19190614838565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190614017565b611cad565b6040516108ee9190614838565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614017565b611d6a565b005b34801561092c57600080fd5b5061094760048036038101906109429190613c96565b611df0565b005b34801561095557600080fd5b5061095e611eb0565b60405161096b9190614afa565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613fce565b611eb6565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614017565b611f4c565b005b3480156109d257600080fd5b506109ed60048036038101906109e89190613cf0565b6122e1565b6040516109fa91906147bd565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c96565b612375565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613c96565b61246e565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613eed565b612566565b005b348015610a8a57600080fd5b50610a936125f7565b604051610aa091906147bd565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1c5750610b1b8261260a565b5b9050919050565b606060008054610b3290614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90614f21565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b6000610bc0826126ec565b610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906149fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c458261138d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90614a7a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd5612758565b73ffffffffffffffffffffffffffffffffffffffff161480610d045750610d0381610cfe612758565b6122e1565b5b610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a9061497a565b60405180910390fd5b610d4d8383612760565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b600e5481565b60126020528060005260406000206000915090505481565b610dda610dd4612758565b82612819565b610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090614aba565b60405180910390fd5b610e248383836128f7565b505050565b610e31612758565b73ffffffffffffffffffffffffffffffffffffffff16610e4f611713565b73ffffffffffffffffffffffffffffffffffffffff1614610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90614a1a565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b6000610ecd8361150d565b8210610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f059061485a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000803086604051602001610f7d92919061463a565b60405160208183030381529060405280519060200120905060006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008183604051602001610fe4929190614666565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161102194939291906147d8565b6020604051602081039080840390855afa158015611043573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff1661106e611713565b73ffffffffffffffffffffffffffffffffffffffff1614156110975760019450505050506110a0565b60009450505050505b949350505050565b6110b0612758565b73ffffffffffffffffffffffffffffffffffffffff166110ce611713565b73ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614a1a565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161114a906146bf565b60006040518083038185875af1925050503d8060008114611187576040519150601f19603f3d011682016040523d82523d6000602084013e61118c565b606091505b505090508061119a57600080fd5b50565b6111b883838360405180602001604052806000815250611bbd565b505050565b606060006111ca8361150d565b905060008167ffffffffffffffff8111156111e8576111e7615117565b5b6040519080825280602002602001820160405280156112165781602001602082028036833780820191505090505b50905060005b828110156112605761122e8582610ec2565b828281518110611241576112406150e8565b5b602002602001018181525050808061125890614f84565b91505061121c565b508092505050919050565b6000611275610d9e565b82106112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90614ada565b60405180910390fd5b600882815481106112ca576112c96150e8565b5b90600052602060002001549050919050565b6112e4612758565b73ffffffffffffffffffffffffffffffffffffffff16611302611713565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90614a1a565b60405180910390fd5b80600b908051906020019061136e929190613984565b5050565b6015816005811061138257600080fd5b016000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d906149ba565b60405180910390fd5b80915050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61146d612758565b73ffffffffffffffffffffffffffffffffffffffff1661148b611713565b73ffffffffffffffffffffffffffffffffffffffff16146114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614a1a565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115759061499a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115cd612758565b73ffffffffffffffffffffffffffffffffffffffff166115eb611713565b73ffffffffffffffffffffffffffffffffffffffff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890614a1a565b60405180910390fd5b61164b6000612b53565b565b611655612758565b73ffffffffffffffffffffffffffffffffffffffff16611673611713565b73ffffffffffffffffffffffffffffffffffffffff16146116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c090614a1a565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174c90614f21565b80601f016020809104026020016040519081016040528092919081815260200182805461177890614f21565b80156117c55780601f1061179a576101008083540402835291602001916117c5565b820191906000526020600020905b8154815290600101906020018083116117a857829003601f168201915b5050505050905090565b60145481565b600f5442101561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614a9a565b60405180910390fd5b60008111801561182b575060058111155b61186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906148fa565b60405180910390fd5b6000601560018361187b9190614dd8565b6005811061188c5761188b6150e8565b5b01549050600061189a610d9e565b905082601260006001846118ae9190614d51565b815260200190815260200160002081905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161191f939291906146ef565b602060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190613f47565b6119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906148da565b60405180910390fd5b601060149054906101000a900460ff16156119ca57600080fd5b600d546001826119da9190614d51565b11156119e557600080fd5b6119fb336001836119f69190614d51565b612c19565b505050565b611a08612758565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d9061493a565b60405180910390fd5b8060056000611a83612758565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b30612758565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7591906147bd565b60405180910390a35050565b6000600f54421015611ba25742600f54611b9b9190614dd8565b9050611ba7565b600090505b90565b601060149054906101000a900460ff1681565b611bce611bc8612758565b83612819565b611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490614aba565b60405180910390fd5b611c1984848484612c37565b50505050565b600c8054611c2c90614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5890614f21565b8015611ca55780601f10611c7a57610100808354040283529160200191611ca5565b820191906000526020600020905b815481529060010190602001808311611c8857829003601f168201915b505050505081565b6060611cb8826126ec565b611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a5a565b60405180910390fd5b6000611d01612c93565b90506000815111611d215760405180602001604052806000815250611d62565b80611d3e6012600086815260200190815260200160002054612d25565b600c604051602001611d529392919061468e565b6040516020818303038152906040525b915050919050565b611d72612758565b73ffffffffffffffffffffffffffffffffffffffff16611d90611713565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614a1a565b60405180910390fd5b8060148190555050565b611df8612758565b73ffffffffffffffffffffffffffffffffffffffff16611e16611713565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390614a1a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b611ebe612758565b73ffffffffffffffffffffffffffffffffffffffff16611edc611713565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614a1a565b60405180910390fd5b80600c9080519060200190611f48929190613984565b5050565b611f54612758565b73ffffffffffffffffffffffffffffffffffffffff16611f72611713565b73ffffffffffffffffffffffffffffffffffffffff1614611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf90614a1a565b60405180910390fd5b6000600267ffffffffffffffff811115611fe557611fe4615117565b5b6040519080825280602002602001820160405280156120135781602001602082028036833780820191505090505b509050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061204d5761204c6150e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156120ef57600080fd5b505afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121279190613cc3565b8160018151811061213b5761213a6150e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121f4929190614772565b602060405180830381600087803b15801561220e57600080fd5b505af1158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190613f47565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122ab959493929190614b3e565b600060405180830381600087803b1580156122c557600080fd5b505af11580156122d9573d6000803e3d6000fd5b505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612380826111bd565b905060005b815181101561246957601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae169a508383815181106123df576123de6150e8565b5b60200260200101516040518263ffffffff1660e01b81526004016124039190614afa565b602060405180830381600087803b15801561241d57600080fd5b505af1158015612431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124559190613f47565b50808061246190614f84565b915050612385565b505050565b612476612758565b73ffffffffffffffffffffffffffffffffffffffff16612494611713565b73ffffffffffffffffffffffffffffffffffffffff16146124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190614a1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125519061489a565b60405180910390fd5b61256381612b53565b50565b61256e612758565b73ffffffffffffffffffffffffffffffffffffffff1661258c611713565b73ffffffffffffffffffffffffffffffffffffffff16146125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d990614a1a565b60405180910390fd5b8060159060056125f3929190613a0a565b5050565b600a60149054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126e557506126e482612e86565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127d38361138d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612824826126ec565b612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a9061495a565b60405180910390fd5b600061286e8361138d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128dd57508373ffffffffffffffffffffffffffffffffffffffff166128c584610bb5565b73ffffffffffffffffffffffffffffffffffffffff16145b806128ee57506128ed81856122e1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129178261138d565b73ffffffffffffffffffffffffffffffffffffffff161461296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614a3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d49061491a565b60405180910390fd5b6129e8838383612ef0565b6129f3600082612760565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a439190614dd8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9a9190614d51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c33828260405180602001604052806000815250613192565b5050565b612c428484846128f7565b612c4e848484846131ed565b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c849061487a565b60405180910390fd5b50505050565b6060600b8054612ca290614f21565b80601f0160208091040260200160405190810160405280929190818152602001828054612cce90614f21565b8015612d1b5780601f10612cf057610100808354040283529160200191612d1b565b820191906000526020600020905b815481529060010190602001808311612cfe57829003601f168201915b5050505050905090565b60606000821415612d6d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e81565b600082905060005b60008214612d9f578080612d8890614f84565b915050600a82612d989190614da7565b9150612d75565b60008167ffffffffffffffff811115612dbb57612dba615117565b5b6040519080825280601f01601f191660200182016040528015612ded5781602001600182028036833780820191505090505b5090505b60008514612e7a57600182612e069190614dd8565b9150600a85612e159190614ffb565b6030612e219190614d51565b60f81b818381518110612e3757612e366150e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e739190614da7565b9450612df1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612efb838383613384565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ffa57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b9b4667826012600085815260200190815260200160002054856040518463ffffffff1660e01b8152600401612fa293929190614b98565b602060405180830381600087803b158015612fbc57600080fd5b505af1158015612fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff49190613f47565b5061318d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461318c57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae169a50826040518263ffffffff1660e01b81526004016130889190614afa565b602060405180830381600087803b1580156130a257600080fd5b505af11580156130b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130da9190613f47565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639774950682846040518363ffffffff1660e01b8152600401613138929190614b15565b602060405180830381600087803b15801561315257600080fd5b505af1158015613166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318a9190613f47565b505b5b505050565b61319c8383613498565b6131a960008484846131ed565b6131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df9061487a565b60405180910390fd5b505050565b600061320e8473ffffffffffffffffffffffffffffffffffffffff16613666565b15613377578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613237612758565b8786866040518563ffffffff1660e01b81526004016132599493929190614726565b602060405180830381600087803b15801561327357600080fd5b505af19250505080156132a457506040513d601f19601f820116820180604052508101906132a19190613fa1565b60015b613327573d80600081146132d4576040519150601f19603f3d011682016040523d82523d6000602084013e6132d9565b606091505b5060008151141561331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133169061487a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061337c565b600190505b949350505050565b61338f838383613679565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133d2576133cd8161367e565b613411565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134105761340f83826136c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134545761344f81613834565b613493565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613492576134918282613905565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ff906149da565b60405180910390fd5b613511816126ec565b15613551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613548906148ba565b60405180910390fd5b61355d60008383612ef0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135ad9190614d51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136d48461150d565b6136de9190614dd8565b90506000600760008481526020019081526020016000205490508181146137c3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138489190614dd8565b9050600060096000848152602001908152602001600020549050600060088381548110613878576138776150e8565b5b90600052602060002001549050806008838154811061389a576138996150e8565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138e9576138e86150b9565b5b6001900381819060005260206000200160009055905550505050565b60006139108361150d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461399090614f21565b90600052602060002090601f0160209004810192826139b257600085556139f9565b82601f106139cb57805160ff19168380011785556139f9565b828001600101855582156139f9579182015b828111156139f85782518255916020019190600101906139dd565b5b509050613a069190613a4a565b5090565b8260058101928215613a39579160200282015b82811115613a38578251825591602001919060010190613a1d565b5b509050613a469190613a4a565b5090565b5b80821115613a63576000816000905550600101613a4b565b5090565b6000613a7a613a7584614bf4565b614bcf565b90508082856020860282011115613a9457613a9361514b565b5b60005b85811015613ac45781613aaa8882613c6c565b845260208401935060208301925050600181019050613a97565b5050509392505050565b6000613ae1613adc84614c1a565b614bcf565b905082815260208101848484011115613afd57613afc615150565b5b613b08848285614edf565b509392505050565b6000613b23613b1e84614c4b565b614bcf565b905082815260208101848484011115613b3f57613b3e615150565b5b613b4a848285614edf565b509392505050565b600081359050613b61816156f1565b92915050565b600081519050613b76816156f1565b92915050565b600082601f830112613b9157613b90615146565b5b6005613b9e848285613a67565b91505092915050565b600081359050613bb681615708565b92915050565b600081519050613bcb81615708565b92915050565b600081359050613be08161571f565b92915050565b600081359050613bf581615736565b92915050565b600081519050613c0a81615736565b92915050565b600082601f830112613c2557613c24615146565b5b8135613c35848260208601613ace565b91505092915050565b600082601f830112613c5357613c52615146565b5b8135613c63848260208601613b10565b91505092915050565b600081359050613c7b8161574d565b92915050565b600081359050613c9081615764565b92915050565b600060208284031215613cac57613cab61515a565b5b6000613cba84828501613b52565b91505092915050565b600060208284031215613cd957613cd861515a565b5b6000613ce784828501613b67565b91505092915050565b60008060408385031215613d0757613d0661515a565b5b6000613d1585828601613b52565b9250506020613d2685828601613b52565b9150509250929050565b600080600060608486031215613d4957613d4861515a565b5b6000613d5786828701613b52565b9350506020613d6886828701613b52565b9250506040613d7986828701613c6c565b9150509250925092565b60008060008060808587031215613d9d57613d9c61515a565b5b6000613dab87828801613b52565b9450506020613dbc87828801613b52565b9350506040613dcd87828801613c6c565b925050606085013567ffffffffffffffff811115613dee57613ded615155565b5b613dfa87828801613c10565b91505092959194509250565b60008060408385031215613e1d57613e1c61515a565b5b6000613e2b85828601613b52565b9250506020613e3c85828601613ba7565b9150509250929050565b60008060408385031215613e5d57613e5c61515a565b5b6000613e6b85828601613b52565b9250506020613e7c85828601613c6c565b9150509250929050565b60008060008060808587031215613ea057613e9f61515a565b5b6000613eae87828801613b52565b9450506020613ebf87828801613c81565b9350506040613ed087828801613bd1565b9250506060613ee187828801613bd1565b91505092959194509250565b600060a08284031215613f0357613f0261515a565b5b6000613f1184828501613b7c565b91505092915050565b600060208284031215613f3057613f2f61515a565b5b6000613f3e84828501613ba7565b91505092915050565b600060208284031215613f5d57613f5c61515a565b5b6000613f6b84828501613bbc565b91505092915050565b600060208284031215613f8a57613f8961515a565b5b6000613f9884828501613be6565b91505092915050565b600060208284031215613fb757613fb661515a565b5b6000613fc584828501613bfb565b91505092915050565b600060208284031215613fe457613fe361515a565b5b600082013567ffffffffffffffff81111561400257614001615155565b5b61400e84828501613c3e565b91505092915050565b60006020828403121561402d5761402c61515a565b5b600061403b84828501613c6c565b91505092915050565b60006140508383614074565b60208301905092915050565b6000614068838361460d565b60208301905092915050565b61407d81614e0c565b82525050565b61408c81614e0c565b82525050565b6140a361409e82614e0c565b614fcd565b82525050565b60006140b482614cb1565b6140be8185614cf7565b93506140c983614c7c565b8060005b838110156140fa5781516140e18882614044565b97506140ec83614cdd565b9250506001810190506140cd565b5085935050505092915050565b600061411282614cbc565b61411c8185614d08565b935061412783614c8c565b8060005b8381101561415857815161413f888261405c565b975061414a83614cea565b92505060018101905061412b565b5085935050505092915050565b61416e81614e1e565b82525050565b61417d81614e2a565b82525050565b61419461418f82614e2a565b614fdf565b82525050565b60006141a582614cc7565b6141af8185614d19565b93506141bf818560208601614eee565b6141c88161515f565b840191505092915050565b60006141de82614cc7565b6141e88185614d2a565b93506141f8818560208601614eee565b80840191505092915050565b61420d81614e97565b82525050565b61421c81614ea9565b82525050565b600061422d82614cd2565b6142378185614d35565b9350614247818560208601614eee565b6142508161515f565b840191505092915050565b600061426682614cd2565b6142708185614d46565b9350614280818560208601614eee565b80840191505092915050565b6000815461429981614f21565b6142a38186614d46565b945060018216600081146142be57600181146142cf57614302565b60ff19831686528186019350614302565b6142d885614c9c565b60005b838110156142fa578154818901526001820191506020810190506142db565b838801955050505b50505092915050565b6000614318602b83614d35565b91506143238261517d565b604082019050919050565b600061433b603283614d35565b9150614346826151cc565b604082019050919050565b600061435e602683614d35565b91506143698261521b565b604082019050919050565b6000614381601c83614d35565b915061438c8261526a565b602082019050919050565b60006143a4601083614d35565b91506143af82615293565b602082019050919050565b60006143c7601183614d35565b91506143d2826152bc565b602082019050919050565b60006143ea602483614d35565b91506143f5826152e5565b604082019050919050565b600061440d601983614d35565b915061441882615334565b602082019050919050565b6000614430602c83614d35565b915061443b8261535d565b604082019050919050565b6000614453603883614d35565b915061445e826153ac565b604082019050919050565b6000614476602a83614d35565b9150614481826153fb565b604082019050919050565b6000614499602983614d35565b91506144a48261544a565b604082019050919050565b60006144bc602083614d35565b91506144c782615499565b602082019050919050565b60006144df602c83614d35565b91506144ea826154c2565b604082019050919050565b6000614502602083614d35565b915061450d82615511565b602082019050919050565b6000614525602983614d35565b91506145308261553a565b604082019050919050565b6000614548602f83614d35565b915061455382615589565b604082019050919050565b600061456b602183614d35565b9150614576826155d8565b604082019050919050565b600061458e601783614d35565b915061459982615627565b602082019050919050565b60006145b1600083614d2a565b91506145bc82615650565b600082019050919050565b60006145d4603183614d35565b91506145df82615653565b604082019050919050565b60006145f7602c83614d35565b9150614602826156a2565b604082019050919050565b61461681614e80565b82525050565b61462581614e80565b82525050565b61463481614e8a565b82525050565b60006146468285614092565b6014820191506146568284614092565b6014820191508190509392505050565b600061467282856141d3565b915061467e8284614183565b6020820191508190509392505050565b600061469a828661425b565b91506146a6828561425b565b91506146b2828461428c565b9150819050949350505050565b60006146ca826145a4565b9150819050919050565b60006020820190506146e96000830184614083565b92915050565b60006060820190506147046000830186614083565b6147116020830185614083565b61471e604083018461461c565b949350505050565b600060808201905061473b6000830187614083565b6147486020830186614083565b614755604083018561461c565b8181036060830152614767818461419a565b905095945050505050565b60006040820190506147876000830185614083565b614794602083018461461c565b9392505050565b600060208201905081810360008301526147b58184614107565b905092915050565b60006020820190506147d26000830184614165565b92915050565b60006080820190506147ed6000830187614174565b6147fa602083018661462b565b6148076040830185614174565b6148146060830184614174565b95945050505050565b60006020820190506148326000830184614204565b92915050565b600060208201905081810360008301526148528184614222565b905092915050565b600060208201905081810360008301526148738161430b565b9050919050565b600060208201905081810360008301526148938161432e565b9050919050565b600060208201905081810360008301526148b381614351565b9050919050565b600060208201905081810360008301526148d381614374565b9050919050565b600060208201905081810360008301526148f381614397565b9050919050565b60006020820190508181036000830152614913816143ba565b9050919050565b60006020820190508181036000830152614933816143dd565b9050919050565b6000602082019050818103600083015261495381614400565b9050919050565b6000602082019050818103600083015261497381614423565b9050919050565b6000602082019050818103600083015261499381614446565b9050919050565b600060208201905081810360008301526149b381614469565b9050919050565b600060208201905081810360008301526149d38161448c565b9050919050565b600060208201905081810360008301526149f3816144af565b9050919050565b60006020820190508181036000830152614a13816144d2565b9050919050565b60006020820190508181036000830152614a33816144f5565b9050919050565b60006020820190508181036000830152614a5381614518565b9050919050565b60006020820190508181036000830152614a738161453b565b9050919050565b60006020820190508181036000830152614a938161455e565b9050919050565b60006020820190508181036000830152614ab381614581565b9050919050565b60006020820190508181036000830152614ad3816145c7565b9050919050565b60006020820190508181036000830152614af3816145ea565b9050919050565b6000602082019050614b0f600083018461461c565b92915050565b6000604082019050614b2a600083018561461c565b614b376020830184614083565b9392505050565b600060a082019050614b53600083018861461c565b614b606020830187614213565b8181036040830152614b7281866140a9565b9050614b816060830185614083565b614b8e608083018461461c565b9695505050505050565b6000606082019050614bad600083018661461c565b614bba602083018561461c565b614bc76040830184614083565b949350505050565b6000614bd9614bea565b9050614be58282614f53565b919050565b6000604051905090565b600067ffffffffffffffff821115614c0f57614c0e615117565b5b602082029050919050565b600067ffffffffffffffff821115614c3557614c34615117565b5b614c3e8261515f565b9050602081019050919050565b600067ffffffffffffffff821115614c6657614c65615117565b5b614c6f8261515f565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d5c82614e80565b9150614d6783614e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9c57614d9b61502c565b5b828201905092915050565b6000614db282614e80565b9150614dbd83614e80565b925082614dcd57614dcc61505b565b5b828204905092915050565b6000614de382614e80565b9150614dee83614e80565b925082821015614e0157614e0061502c565b5b828203905092915050565b6000614e1782614e60565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614ea282614ebb565b9050919050565b6000614eb482614e80565b9050919050565b6000614ec682614ecd565b9050919050565b6000614ed882614e60565b9050919050565b82818337600083830152505050565b60005b83811015614f0c578082015181840152602081019050614ef1565b83811115614f1b576000848401525b50505050565b60006002820490506001821680614f3957607f821691505b60208210811415614f4d57614f4c61508a565b5b50919050565b614f5c8261515f565b810181811067ffffffffffffffff82111715614f7b57614f7a615117565b5b80604052505050565b6000614f8f82614e80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fc257614fc161502c565b5b600182019050919050565b6000614fd882614fe9565b9050919050565b6000819050919050565b6000614ff482615170565b9050919050565b600061500682614e80565b915061501183614e80565b9250826150215761502061505b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b7f496e76616c6964206e6f64652074797065000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f7720616c6c6f77656420796574000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6156fa81614e0c565b811461570557600080fd5b50565b61571181614e1e565b811461571c57600080fd5b50565b61572881614e2a565b811461573357600080fd5b50565b61573f81614e34565b811461574a57600080fd5b50565b61575681614e80565b811461576157600080fd5b50565b61576d81614e8a565b811461577857600080fd5b5056fea264697066735822122025ba9a6eb1c6f67ab0417a2aa0e0c97f5e1f57b5a3d37508bda7dac27687e76c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be05c9775dbf9ecbbbd936999dd8750f7875505f0000000000000000000000000000000000000000000000000000000000000013506f6e7a6920506c756720496e75204e6f646500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000670704e6f646500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Ponzi Plug Inu Node
Arg [1] : _symbol (string): ppNode
Arg [2] : _initBaseURI (string):
Arg [3] : _revealTime (uint256): 0
Arg [4] : _xPpInuAddress (address): 0xbE05c9775dbF9ECbbbD936999Dd8750F7875505f
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000be05c9775dbf9ecbbbd936999dd8750f7875505f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [6] : 506f6e7a6920506c756720496e75204e6f646500000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 70704e6f64650000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
54418:6351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36476:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25333:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24856:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54738:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54880:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37279:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54661:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54833:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26392:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58524:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36860:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53759:613;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60574:192;;;:::i;:::-;;26839:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56950:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37469:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58253:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54987:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23247:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54801:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55681:83;;;;;;;;;;;;;:::i;:::-;;22890:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44554:94;;;;;;;;;;;;;:::i;:::-;;55888:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54695:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43903:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23809:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54962:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56353:580;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25713:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58008:235;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54766:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27095:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54575:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57348:652;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55999:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56218:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54619:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58365:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59220:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26111:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60329:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44803:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55772:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54519:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36476:300;36623:4;36680:35;36665:50;;;:11;:50;;;;:103;;;;36732:36;36756:11;36732:23;:36::i;:::-;36665:103;36645:123;;36476:300;;;:::o;23640:100::-;23694:13;23727:5;23720:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23640:100;:::o;25333:308::-;25454:7;25501:16;25509:7;25501;:16::i;:::-;25479:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25609:15;:24;25625:7;25609:24;;;;;;;;;;;;;;;;;;;;;25602:31;;25333:308;;;:::o;24856:411::-;24937:13;24953:23;24968:7;24953:14;:23::i;:::-;24937:39;;25001:5;24995:11;;:2;:11;;;;24987:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25095:5;25079:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25104:37;25121:5;25128:12;:10;:12::i;:::-;25104:16;:37::i;:::-;25079:62;25057:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25238:21;25247:2;25251:7;25238:8;:21::i;:::-;24926:341;24856:411;;:::o;54738:21::-;;;;;;;;;;;;;:::o;54880:41::-;;;;;;;;;;;;;:::o;37279:113::-;37340:7;37367:10;:17;;;;37360:24;;37279:113;:::o;54661:27::-;;;;:::o;54833:40::-;;;;;;;;;;;;;;;;;:::o;26392:376::-;26601:41;26620:12;:10;:12::i;:::-;26634:7;26601:18;:41::i;:::-;26579:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26732:28;26742:4;26748:2;26752:7;26732:9;:28::i;:::-;26392:376;;;:::o;58524:87::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58597:6:::1;58586:8;;:17;;;;;;;;;;;;;;;;;;58524:87:::0;:::o;36860:343::-;37002:7;37057:23;37074:5;37057:16;:23::i;:::-;37049:5;:31;37027:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;37169:12;:19;37182:5;37169:19;;;;;;;;;;;;;;;:26;37189:5;37169:26;;;;;;;;;;;;37162:33;;36860:343;;;;:::o;53759:613::-;53919:4;53943:15;53996:4;54003;53971:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53961:48;;;;;;53943:66;;54022:19;:56;;;;;;;;;;;;;;;;;;;54089:20;54139:6;54147:7;54122:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54112:44;;;;;;54089:67;;54185:18;54206:35;54216:12;54230:2;54234;54238;54206:35;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54185:56;;54267:10;54256:21;;:7;:5;:7::i;:::-;:21;;;54252:86;;;54318:4;54311:11;;;;;;;;54252:86;54359:5;54352:12;;;;;;53759:613;;;;;;;:::o;60574:192::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60631:12:::1;60657:10;60649:24;;60695:21;60649:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60630:101;;;60750:7;60742:16;;;::::0;::::1;;60619:147;60574:192::o:0;26839:185::-;26977:39;26994:4;27000:2;27004:7;26977:39;;;;;;;;;;;;:16;:39::i;:::-;26839:185;;;:::o;56950:390::-;57037:16;57071:23;57097:17;57107:6;57097:9;:17::i;:::-;57071:43;;57125:25;57167:15;57153:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57125:58;;57199:9;57194:113;57214:15;57210:1;:19;57194:113;;;57265:30;57285:6;57293:1;57265:19;:30::i;:::-;57251:8;57260:1;57251:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;57231:3;;;;;:::i;:::-;;;;57194:113;;;;57324:8;57317:15;;;;56950:390;;;:::o;37469:320::-;37589:7;37644:30;:28;:30::i;:::-;37636:5;:38;37614:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37764:10;37775:5;37764:17;;;;;;;;:::i;:::-;;;;;;;;;;37757:24;;37469:320;;;:::o;58253:104::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58338:11:::1;58328:7;:21;;;;;;;;;;;;:::i;:::-;;58253:104:::0;:::o;54987:40::-;;;;;;;;;;;;;;;;;;;;:::o;23247:326::-;23364:7;23389:13;23405:7;:16;23413:7;23405:16;;;;;;;;;;;;;;;;;;;;;23389:32;;23471:1;23454:19;;:5;:19;;;;23432:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23560:5;23553:12;;;23247:326;;;:::o;54801:25::-;;;;;;;;;;;;;:::o;55681:83::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55748:8:::1;;;;;;;;;;;55747:9;55736:8;;:20;;;;;;;;;;;;;;;;;;55681:83::o:0;22890:295::-;23007:7;23071:1;23054:19;;:5;:19;;;;23032:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23161:9;:16;23171:5;23161:16;;;;;;;;;;;;;;;;23154:23;;22890:295;;;:::o;44554:94::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44619:21:::1;44637:1;44619:9;:21::i;:::-;44554:94::o:0;55888:103::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55972:11:::1;55959:10;;:24;;;;;;;;;;;;;;;;;;55888:103:::0;:::o;54695:36::-;;;;:::o;43903:87::-;43949:7;43976:6;;;;;;;;;;;43969:13;;43903:87;:::o;23809:104::-;23865:13;23898:7;23891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23809:104;:::o;54962:18::-;;;;:::o;56353:580::-;56446:17;;56427:15;:36;;56405:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;56539:1;56533:5;:7;:19;;;;;56551:1;56544:5;:8;;56533:19;56525:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56585:13;56601:10;56618:1;56612:5;:7;;;;:::i;:::-;56601:19;;;;;;;:::i;:::-;;;;56585:35;;56631:14;56648:13;:11;:13::i;:::-;56631:30;;56693:5;56672:8;:18;56688:1;56681:6;:8;;;;:::i;:::-;56672:18;;;;;;;;;;;:26;;;;56724:6;;;;;;;;;;;56717:27;;;56745:10;56765:4;56772:5;56717:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56709:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;56819:8;;;;;;;;;;;56818:9;56810:18;;;;;;56861:9;;56856:1;56847:6;:10;;;;:::i;:::-;:23;;56839:32;;;;;;56892:33;56902:10;56923:1;56914:6;:10;;;;:::i;:::-;56892:9;:33::i;:::-;56394:539;;56353:580;:::o;25713:327::-;25860:12;:10;:12::i;:::-;25848:24;;:8;:24;;;;25840:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25960:8;25915:18;:32;25934:12;:10;:12::i;:::-;25915:32;;;;;;;;;;;;;;;:42;25948:8;25915:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26013:8;25984:48;;25999:12;:10;:12::i;:::-;25984:48;;;26023:8;25984:48;;;;;;:::i;:::-;;;;;;;;25713:327;;:::o;58008:235::-;58063:7;58105:17;;58087:15;:35;58083:153;;;58168:15;58147:17;;58146:37;;;;:::i;:::-;58139:44;;;;58083:153;58223:1;58216:8;;58008:235;;:::o;54766:28::-;;;;;;;;;;;;;:::o;27095:365::-;27284:41;27303:12;:10;:12::i;:::-;27317:7;27284:18;:41::i;:::-;27262:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27413:39;27427:4;27433:2;27437:7;27446:5;27413:13;:39::i;:::-;27095:365;;;;:::o;54575:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57348:652::-;57466:13;57519:16;57527:7;57519;:16::i;:::-;57497:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;57623:28;57654:10;:8;:10::i;:::-;57623:41;;57726:1;57701:14;57695:28;:32;:297;;;;;;;;;;;;;;;;;57819:14;57860:28;:8;:17;57869:7;57860:17;;;;;;;;;;;;:26;:28::i;:::-;57915:13;57776:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57695:297;57675:317;;;57348:652;;;:::o;55999:78::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56065:4:::1;56059:3;:10;;;;55999:78:::0;:::o;56218:112::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56308:14:::1;56299:6;;:23;;;;;;;;;;;;;;;;;;56218:112:::0;:::o;54619:35::-;;;;:::o;58365:151::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58491:17:::1;58475:13;:33;;;;;;;;;;;;:::i;:::-;;58365:151:::0;:::o;59220:590::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59345:21:::1;59383:1;59369:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59345:40;;59406:6;;;;;;;;;;;59396:4;59401:1;59396:7;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;::::0;::::1;59433:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59423:4;59428:1;59423:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;59475:6;;;;;;;;;;;59468:22;;;59499:15;;;;;;;;;;;59517:11;59468:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;59568:15;;;;;;;;;;;:66;;;59649:11;59675:1;59719:4;59746;59766:15;59568:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59272:538;59220:590:::0;:::o;26111:214::-;26253:4;26282:18;:25;26301:5;26282:25;;;;;;;;;;;;;;;:35;26308:8;26282:35;;;;;;;;;;;;;;;;;;;;;;;;;26275:42;;26111:214;;;;:::o;60329:235::-;60386:23;60412:21;60426:6;60412:13;:21::i;:::-;60386:47;;60449:9;60444:113;60464:6;:13;60460:1;:17;60444:113;;;60511:10;;;;;;;;;;;60499:35;;;60535:6;60542:1;60535:9;;;;;;;;:::i;:::-;;;;;;;;60499:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60479:3;;;;;:::i;:::-;;;;60444:113;;;;60375:189;60329:235;:::o;44803:229::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44926:1:::1;44906:22;;:8;:22;;;;44884:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45005:19;45015:8;45005:9;:19::i;:::-;44803:229:::0;:::o;55772:108::-;44134:12;:10;:12::i;:::-;44123:23;;:7;:5;:7::i;:::-;:23;;;44115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55865:7:::1;55852:10;:20;;;;;;;:::i;:::-;;55772:108:::0;:::o;54519:28::-;;;;;;;;;;;;;:::o;22471:355::-;22618:4;22675:25;22660:40;;;:11;:40;;;;:105;;;;22732:33;22717:48;;;:11;:48;;;;22660:105;:158;;;;22782:36;22806:11;22782:23;:36::i;:::-;22660:158;22640:178;;22471:355;;;:::o;29007:127::-;29072:4;29124:1;29096:30;;:7;:16;29104:7;29096:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29089:37;;29007:127;;;:::o;20945:98::-;20998:7;21025:10;21018:17;;20945:98;:::o;33130:174::-;33232:2;33205:15;:24;33221:7;33205:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33288:7;33284:2;33250:46;;33259:23;33274:7;33259:14;:23::i;:::-;33250:46;;;;;;;;;;;;33130:174;;:::o;29301:452::-;29430:4;29474:16;29482:7;29474;:16::i;:::-;29452:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29573:13;29589:23;29604:7;29589:14;:23::i;:::-;29573:39;;29642:5;29631:16;;:7;:16;;;:64;;;;29688:7;29664:31;;:20;29676:7;29664:11;:20::i;:::-;:31;;;29631:64;:113;;;;29712:32;29729:5;29736:7;29712:16;:32::i;:::-;29631:113;29623:122;;;29301:452;;;;:::o;32397:615::-;32570:4;32543:31;;:23;32558:7;32543:14;:23::i;:::-;:31;;;32521:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:1;32662:16;;:2;:16;;;;32654:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32732:39;32753:4;32759:2;32763:7;32732:20;:39::i;:::-;32836:29;32853:1;32857:7;32836:8;:29::i;:::-;32897:1;32878:9;:15;32888:4;32878:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32926:1;32909:9;:13;32919:2;32909:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32957:2;32938:7;:16;32946:7;32938:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32996:7;32992:2;32977:27;;32986:4;32977:27;;;;;;;;;;;;32397:615;;;:::o;45040:173::-;45096:16;45115:6;;;;;;;;;;;45096:25;;45141:8;45132:6;;:17;;;;;;;;;;;;;;;;;;45196:8;45165:40;;45186:8;45165:40;;;;;;;;;;;;45085:128;45040:173;:::o;30095:110::-;30171:26;30181:2;30185:7;30171:26;;;;;;;;;;;;:9;:26::i;:::-;30095:110;;:::o;28342:352::-;28499:28;28509:4;28515:2;28519:7;28499:9;:28::i;:::-;28560:48;28583:4;28589:2;28593:7;28602:5;28560:22;:48::i;:::-;28538:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28342:352;;;;:::o;56102:108::-;56162:13;56195:7;56188:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56102:108;:::o;8290:723::-;8346:13;8576:1;8567:5;:10;8563:53;;;8594:10;;;;;;;;;;;;;;;;;;;;;8563:53;8626:12;8641:5;8626:20;;8657:14;8682:78;8697:1;8689:4;:9;8682:78;;8715:8;;;;;:::i;:::-;;;;8746:2;8738:10;;;;;:::i;:::-;;;8682:78;;;8770:19;8802:6;8792:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8770:39;;8820:154;8836:1;8827:5;:10;8820:154;;8864:1;8854:11;;;;;:::i;:::-;;;8931:2;8923:5;:10;;;;:::i;:::-;8910:2;:24;;;;:::i;:::-;8897:39;;8880:6;8887;8880:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8960:2;8951:11;;;;;:::i;:::-;;;8820:154;;;8998:6;8984:21;;;;;8290:723;;;;:::o;7769:207::-;7899:4;7943:25;7928:40;;;:11;:40;;;;7921:47;;7769:207;;;:::o;59820:501::-;59964:45;59991:4;59997:2;60001:7;59964:26;:45::i;:::-;60040:1;60024:18;;:4;:18;;;60020:294;;;60071:10;;;;;;;;;;;60059:35;;;60095:7;60104:8;:17;60113:7;60104:17;;;;;;;;;;;;60123:2;60059:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60020:294;;;60164:2;60156:10;;:4;:10;;;60152:162;;60195:10;;;;;;;;;;;60183:35;;;60219:7;60183:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60262:10;;;;;;;;;;;60250:39;;;60290:7;60299:2;60250:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60152:162;60020:294;59820:501;;;:::o;30432:321::-;30562:18;30568:2;30572:7;30562:5;:18::i;:::-;30613:54;30644:1;30648:2;30652:7;30661:5;30613:22;:54::i;:::-;30591:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30432:321;;;:::o;33869:980::-;34024:4;34045:15;:2;:13;;;:15::i;:::-;34041:801;;;34114:2;34098:36;;;34157:12;:10;:12::i;:::-;34192:4;34219:7;34249:5;34098:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34077:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34473:1;34456:6;:13;:18;34452:320;;;34499:108;;;;;;;;;;:::i;:::-;;;;;;;;34452:320;34722:6;34716:13;34707:6;34703:2;34699:15;34692:38;34077:710;34347:41;;;34337:51;;;:6;:51;;;;34330:58;;;;;34041:801;34826:4;34819:11;;33869:980;;;;;;;:::o;38402:589::-;38546:45;38573:4;38579:2;38583:7;38546:26;:45::i;:::-;38624:1;38608:18;;:4;:18;;;38604:187;;;38643:40;38675:7;38643:31;:40::i;:::-;38604:187;;;38713:2;38705:10;;:4;:10;;;38701:90;;38732:47;38765:4;38771:7;38732:32;:47::i;:::-;38701:90;38604:187;38819:1;38805:16;;:2;:16;;;38801:183;;;38838:45;38875:7;38838:36;:45::i;:::-;38801:183;;;38911:4;38905:10;;:2;:10;;;38901:83;;38932:40;38960:2;38964:7;38932:27;:40::i;:::-;38901:83;38801:183;38402:589;;;:::o;31089:382::-;31183:1;31169:16;;:2;:16;;;;31161:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31242:16;31250:7;31242;:16::i;:::-;31241:17;31233:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31304:45;31333:1;31337:2;31341:7;31304:20;:45::i;:::-;31379:1;31362:9;:13;31372:2;31362:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31410:2;31391:7;:16;31399:7;31391:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31455:7;31451:2;31430:33;;31447:1;31430:33;;;;;;;;;;;;31089:382;;:::o;10843:387::-;10903:4;11111:12;11178:7;11166:20;11158:28;;11221:1;11214:4;:8;11207:15;;;10843:387;;;:::o;35421:126::-;;;;:::o;39714:164::-;39818:10;:17;;;;39791:15;:24;39807:7;39791:24;;;;;;;;;;;:44;;;;39846:10;39862:7;39846:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39714:164;:::o;40505:1002::-;40785:22;40835:1;40810:22;40827:4;40810:16;:22::i;:::-;:26;;;;:::i;:::-;40785:51;;40847:18;40868:17;:26;40886:7;40868:26;;;;;;;;;;;;40847:47;;41015:14;41001:10;:28;40997:328;;41046:19;41068:12;:18;41081:4;41068:18;;;;;;;;;;;;;;;:34;41087:14;41068:34;;;;;;;;;;;;41046:56;;41152:11;41119:12;:18;41132:4;41119:18;;;;;;;;;;;;;;;:30;41138:10;41119:30;;;;;;;;;;;:44;;;;41269:10;41236:17;:30;41254:11;41236:30;;;;;;;;;;;:43;;;;41031:294;40997:328;41421:17;:26;41439:7;41421:26;;;;;;;;;;;41414:33;;;41465:12;:18;41478:4;41465:18;;;;;;;;;;;;;;;:34;41484:14;41465:34;;;;;;;;;;;41458:41;;;40600:907;;40505:1002;;:::o;41802:1079::-;42055:22;42100:1;42080:10;:17;;;;:21;;;;:::i;:::-;42055:46;;42112:18;42133:15;:24;42149:7;42133:24;;;;;;;;;;;;42112:45;;42484:19;42506:10;42517:14;42506:26;;;;;;;;:::i;:::-;;;;;;;;;;42484:48;;42570:11;42545:10;42556;42545:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42681:10;42650:15;:28;42666:11;42650:28;;;;;;;;;;;:41;;;;42822:15;:24;42838:7;42822:24;;;;;;;;;;;42815:31;;;42857:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41873:1008;;;41802:1079;:::o;39292:221::-;39377:14;39394:20;39411:2;39394:16;:20::i;:::-;39377:37;;39452:7;39425:12;:16;39438:2;39425:16;;;;;;;;;;;;;;;:24;39442:6;39425:24;;;;;;;;;;;:34;;;;39499:6;39470:17;:26;39488:7;39470:26;;;;;;;;;;;:35;;;;39366:147;39292:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;25:655:1:-;119:5;144:79;160:62;215:6;160:62;:::i;:::-;144:79;:::i;:::-;135:88;;243:5;269:6;319:3;311:4;303:6;299:17;294:3;290:27;287:36;284:143;;;338:79;;:::i;:::-;284:143;451:1;436:238;461:6;458:1;455:13;436:238;;;529:3;558:37;591:3;579:10;558:37;:::i;:::-;553:3;546:50;625:4;620:3;616:14;609:21;;659:4;654:3;650:14;643:21;;496:178;483:1;480;476:9;471:14;;436:238;;;440:14;125:555;;25:655;;;;;:::o;686:410::-;763:5;788:65;804:48;845:6;804:48;:::i;:::-;788:65;:::i;:::-;779:74;;876:6;869:5;862:21;914:4;907:5;903:16;952:3;943:6;938:3;934:16;931:25;928:112;;;959:79;;:::i;:::-;928:112;1049:41;1083:6;1078:3;1073;1049:41;:::i;:::-;769:327;686:410;;;;;:::o;1102:412::-;1180:5;1205:66;1221:49;1263:6;1221:49;:::i;:::-;1205:66;:::i;:::-;1196:75;;1294:6;1287:5;1280:21;1332:4;1325:5;1321:16;1370:3;1361:6;1356:3;1352:16;1349:25;1346:112;;;1377:79;;:::i;:::-;1346:112;1467:41;1501:6;1496:3;1491;1467:41;:::i;:::-;1186:328;1102:412;;;;;:::o;1520:139::-;1566:5;1604:6;1591:20;1582:29;;1620:33;1647:5;1620:33;:::i;:::-;1520:139;;;;:::o;1665:143::-;1722:5;1753:6;1747:13;1738:22;;1769:33;1796:5;1769:33;:::i;:::-;1665:143;;;;:::o;1832:339::-;1901:5;1950:3;1943:4;1935:6;1931:17;1927:27;1917:122;;1958:79;;:::i;:::-;1917:122;2062:4;2084:81;2161:3;2153:6;2145;2084:81;:::i;:::-;2075:90;;1907:264;1832:339;;;;:::o;2177:133::-;2220:5;2258:6;2245:20;2236:29;;2274:30;2298:5;2274:30;:::i;:::-;2177:133;;;;:::o;2316:137::-;2370:5;2401:6;2395:13;2386:22;;2417:30;2441:5;2417:30;:::i;:::-;2316:137;;;;:::o;2459:139::-;2505:5;2543:6;2530:20;2521:29;;2559:33;2586:5;2559:33;:::i;:::-;2459:139;;;;:::o;2604:137::-;2649:5;2687:6;2674:20;2665:29;;2703:32;2729:5;2703:32;:::i;:::-;2604:137;;;;:::o;2747:141::-;2803:5;2834:6;2828:13;2819:22;;2850:32;2876:5;2850:32;:::i;:::-;2747:141;;;;:::o;2907:338::-;2962:5;3011:3;3004:4;2996:6;2992:17;2988:27;2978:122;;3019:79;;:::i;:::-;2978:122;3136:6;3123:20;3161:78;3235:3;3227:6;3220:4;3212:6;3208:17;3161:78;:::i;:::-;3152:87;;2968:277;2907:338;;;;:::o;3265:340::-;3321:5;3370:3;3363:4;3355:6;3351:17;3347:27;3337:122;;3378:79;;:::i;:::-;3337:122;3495:6;3482:20;3520:79;3595:3;3587:6;3580:4;3572:6;3568:17;3520:79;:::i;:::-;3511:88;;3327:278;3265:340;;;;:::o;3611:139::-;3657:5;3695:6;3682:20;3673:29;;3711:33;3738:5;3711:33;:::i;:::-;3611:139;;;;:::o;3756:135::-;3800:5;3838:6;3825:20;3816:29;;3854:31;3879:5;3854:31;:::i;:::-;3756:135;;;;:::o;3897:329::-;3956:6;4005:2;3993:9;3984:7;3980:23;3976:32;3973:119;;;4011:79;;:::i;:::-;3973:119;4131:1;4156:53;4201:7;4192:6;4181:9;4177:22;4156:53;:::i;:::-;4146:63;;4102:117;3897:329;;;;:::o;4232:351::-;4302:6;4351:2;4339:9;4330:7;4326:23;4322:32;4319:119;;;4357:79;;:::i;:::-;4319:119;4477:1;4502:64;4558:7;4549:6;4538:9;4534:22;4502:64;:::i;:::-;4492:74;;4448:128;4232:351;;;;:::o;4589:474::-;4657:6;4665;4714:2;4702:9;4693:7;4689:23;4685:32;4682:119;;;4720:79;;:::i;:::-;4682:119;4840:1;4865:53;4910:7;4901:6;4890:9;4886:22;4865:53;:::i;:::-;4855:63;;4811:117;4967:2;4993:53;5038:7;5029:6;5018:9;5014:22;4993:53;:::i;:::-;4983:63;;4938:118;4589:474;;;;;:::o;5069:619::-;5146:6;5154;5162;5211:2;5199:9;5190:7;5186:23;5182:32;5179:119;;;5217:79;;:::i;:::-;5179:119;5337:1;5362:53;5407:7;5398:6;5387:9;5383:22;5362:53;:::i;:::-;5352:63;;5308:117;5464:2;5490:53;5535:7;5526:6;5515:9;5511:22;5490:53;:::i;:::-;5480:63;;5435:118;5592:2;5618:53;5663:7;5654:6;5643:9;5639:22;5618:53;:::i;:::-;5608:63;;5563:118;5069:619;;;;;:::o;5694:943::-;5789:6;5797;5805;5813;5862:3;5850:9;5841:7;5837:23;5833:33;5830:120;;;5869:79;;:::i;:::-;5830:120;5989:1;6014:53;6059:7;6050:6;6039:9;6035:22;6014:53;:::i;:::-;6004:63;;5960:117;6116:2;6142:53;6187:7;6178:6;6167:9;6163:22;6142:53;:::i;:::-;6132:63;;6087:118;6244:2;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6215:118;6400:2;6389:9;6385:18;6372:32;6431:18;6423:6;6420:30;6417:117;;;6453:79;;:::i;:::-;6417:117;6558:62;6612:7;6603:6;6592:9;6588:22;6558:62;:::i;:::-;6548:72;;6343:287;5694:943;;;;;;;:::o;6643:468::-;6708:6;6716;6765:2;6753:9;6744:7;6740:23;6736:32;6733:119;;;6771:79;;:::i;:::-;6733:119;6891:1;6916:53;6961:7;6952:6;6941:9;6937:22;6916:53;:::i;:::-;6906:63;;6862:117;7018:2;7044:50;7086:7;7077:6;7066:9;7062:22;7044:50;:::i;:::-;7034:60;;6989:115;6643:468;;;;;:::o;7117:474::-;7185:6;7193;7242:2;7230:9;7221:7;7217:23;7213:32;7210:119;;;7248:79;;:::i;:::-;7210:119;7368:1;7393:53;7438:7;7429:6;7418:9;7414:22;7393:53;:::i;:::-;7383:63;;7339:117;7495:2;7521:53;7566:7;7557:6;7546:9;7542:22;7521:53;:::i;:::-;7511:63;;7466:118;7117:474;;;;;:::o;7597:761::-;7681:6;7689;7697;7705;7754:3;7742:9;7733:7;7729:23;7725:33;7722:120;;;7761:79;;:::i;:::-;7722:120;7881:1;7906:53;7951:7;7942:6;7931:9;7927:22;7906:53;:::i;:::-;7896:63;;7852:117;8008:2;8034:51;8077:7;8068:6;8057:9;8053:22;8034:51;:::i;:::-;8024:61;;7979:116;8134:2;8160:53;8205:7;8196:6;8185:9;8181:22;8160:53;:::i;:::-;8150:63;;8105:118;8262:2;8288:53;8333:7;8324:6;8313:9;8309:22;8288:53;:::i;:::-;8278:63;;8233:118;7597:761;;;;;;;:::o;8364:376::-;8446:6;8495:3;8483:9;8474:7;8470:23;8466:33;8463:120;;;8502:79;;:::i;:::-;8463:120;8622:1;8647:76;8715:7;8706:6;8695:9;8691:22;8647:76;:::i;:::-;8637:86;;8593:140;8364:376;;;;:::o;8746:323::-;8802:6;8851:2;8839:9;8830:7;8826:23;8822:32;8819:119;;;8857:79;;:::i;:::-;8819:119;8977:1;9002:50;9044:7;9035:6;9024:9;9020:22;9002:50;:::i;:::-;8992:60;;8948:114;8746:323;;;;:::o;9075:345::-;9142:6;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:61;9395:7;9386:6;9375:9;9371:22;9342:61;:::i;:::-;9332:71;;9288:125;9075:345;;;;:::o;9426:327::-;9484:6;9533:2;9521:9;9512:7;9508:23;9504:32;9501:119;;;9539:79;;:::i;:::-;9501:119;9659:1;9684:52;9728:7;9719:6;9708:9;9704:22;9684:52;:::i;:::-;9674:62;;9630:116;9426:327;;;;:::o;9759:349::-;9828:6;9877:2;9865:9;9856:7;9852:23;9848:32;9845:119;;;9883:79;;:::i;:::-;9845:119;10003:1;10028:63;10083:7;10074:6;10063:9;10059:22;10028:63;:::i;:::-;10018:73;;9974:127;9759:349;;;;:::o;10114:509::-;10183:6;10232:2;10220:9;10211:7;10207:23;10203:32;10200:119;;;10238:79;;:::i;:::-;10200:119;10386:1;10375:9;10371:17;10358:31;10416:18;10408:6;10405:30;10402:117;;;10438:79;;:::i;:::-;10402:117;10543:63;10598:7;10589:6;10578:9;10574:22;10543:63;:::i;:::-;10533:73;;10329:287;10114:509;;;;:::o;10629:329::-;10688:6;10737:2;10725:9;10716:7;10712:23;10708:32;10705:119;;;10743:79;;:::i;:::-;10705:119;10863:1;10888:53;10933:7;10924:6;10913:9;10909:22;10888:53;:::i;:::-;10878:63;;10834:117;10629:329;;;;:::o;10964:179::-;11033:10;11054:46;11096:3;11088:6;11054:46;:::i;:::-;11132:4;11127:3;11123:14;11109:28;;10964:179;;;;:::o;11149:::-;11218:10;11239:46;11281:3;11273:6;11239:46;:::i;:::-;11317:4;11312:3;11308:14;11294:28;;11149:179;;;;:::o;11334:108::-;11411:24;11429:5;11411:24;:::i;:::-;11406:3;11399:37;11334:108;;:::o;11448:118::-;11535:24;11553:5;11535:24;:::i;:::-;11530:3;11523:37;11448:118;;:::o;11572:157::-;11677:45;11697:24;11715:5;11697:24;:::i;:::-;11677:45;:::i;:::-;11672:3;11665:58;11572:157;;:::o;11765:732::-;11884:3;11913:54;11961:5;11913:54;:::i;:::-;11983:86;12062:6;12057:3;11983:86;:::i;:::-;11976:93;;12093:56;12143:5;12093:56;:::i;:::-;12172:7;12203:1;12188:284;12213:6;12210:1;12207:13;12188:284;;;12289:6;12283:13;12316:63;12375:3;12360:13;12316:63;:::i;:::-;12309:70;;12402:60;12455:6;12402:60;:::i;:::-;12392:70;;12248:224;12235:1;12232;12228:9;12223:14;;12188:284;;;12192:14;12488:3;12481:10;;11889:608;;;11765:732;;;;:::o;12533:::-;12652:3;12681:54;12729:5;12681:54;:::i;:::-;12751:86;12830:6;12825:3;12751:86;:::i;:::-;12744:93;;12861:56;12911:5;12861:56;:::i;:::-;12940:7;12971:1;12956:284;12981:6;12978:1;12975:13;12956:284;;;13057:6;13051:13;13084:63;13143:3;13128:13;13084:63;:::i;:::-;13077:70;;13170:60;13223:6;13170:60;:::i;:::-;13160:70;;13016:224;13003:1;13000;12996:9;12991:14;;12956:284;;;12960:14;13256:3;13249:10;;12657:608;;;12533:732;;;;:::o;13271:109::-;13352:21;13367:5;13352:21;:::i;:::-;13347:3;13340:34;13271:109;;:::o;13386:118::-;13473:24;13491:5;13473:24;:::i;:::-;13468:3;13461:37;13386:118;;:::o;13510:157::-;13615:45;13635:24;13653:5;13635:24;:::i;:::-;13615:45;:::i;:::-;13610:3;13603:58;13510:157;;:::o;13673:360::-;13759:3;13787:38;13819:5;13787:38;:::i;:::-;13841:70;13904:6;13899:3;13841:70;:::i;:::-;13834:77;;13920:52;13965:6;13960:3;13953:4;13946:5;13942:16;13920:52;:::i;:::-;13997:29;14019:6;13997:29;:::i;:::-;13992:3;13988:39;13981:46;;13763:270;13673:360;;;;:::o;14039:373::-;14143:3;14171:38;14203:5;14171:38;:::i;:::-;14225:88;14306:6;14301:3;14225:88;:::i;:::-;14218:95;;14322:52;14367:6;14362:3;14355:4;14348:5;14344:16;14322:52;:::i;:::-;14399:6;14394:3;14390:16;14383:23;;14147:265;14039:373;;;;:::o;14418:185::-;14532:64;14590:5;14532:64;:::i;:::-;14527:3;14520:77;14418:185;;:::o;14609:147::-;14704:45;14743:5;14704:45;:::i;:::-;14699:3;14692:58;14609:147;;:::o;14762:364::-;14850:3;14878:39;14911:5;14878:39;:::i;:::-;14933:71;14997:6;14992:3;14933:71;:::i;:::-;14926:78;;15013:52;15058:6;15053:3;15046:4;15039:5;15035:16;15013:52;:::i;:::-;15090:29;15112:6;15090:29;:::i;:::-;15085:3;15081:39;15074:46;;14854:272;14762:364;;;;:::o;15132:377::-;15238:3;15266:39;15299:5;15266:39;:::i;:::-;15321:89;15403:6;15398:3;15321:89;:::i;:::-;15314:96;;15419:52;15464:6;15459:3;15452:4;15445:5;15441:16;15419:52;:::i;:::-;15496:6;15491:3;15487:16;15480:23;;15242:267;15132:377;;;;:::o;15539:845::-;15642:3;15679:5;15673:12;15708:36;15734:9;15708:36;:::i;:::-;15760:89;15842:6;15837:3;15760:89;:::i;:::-;15753:96;;15880:1;15869:9;15865:17;15896:1;15891:137;;;;16042:1;16037:341;;;;15858:520;;15891:137;15975:4;15971:9;15960;15956:25;15951:3;15944:38;16011:6;16006:3;16002:16;15995:23;;15891:137;;16037:341;16104:38;16136:5;16104:38;:::i;:::-;16164:1;16178:154;16192:6;16189:1;16186:13;16178:154;;;16266:7;16260:14;16256:1;16251:3;16247:11;16240:35;16316:1;16307:7;16303:15;16292:26;;16214:4;16211:1;16207:12;16202:17;;16178:154;;;16361:6;16356:3;16352:16;16345:23;;16044:334;;15858:520;;15646:738;;15539:845;;;;:::o;16390:366::-;16532:3;16553:67;16617:2;16612:3;16553:67;:::i;:::-;16546:74;;16629:93;16718:3;16629:93;:::i;:::-;16747:2;16742:3;16738:12;16731:19;;16390:366;;;:::o;16762:::-;16904:3;16925:67;16989:2;16984:3;16925:67;:::i;:::-;16918:74;;17001:93;17090:3;17001:93;:::i;:::-;17119:2;17114:3;17110:12;17103:19;;16762:366;;;:::o;17134:::-;17276:3;17297:67;17361:2;17356:3;17297:67;:::i;:::-;17290:74;;17373:93;17462:3;17373:93;:::i;:::-;17491:2;17486:3;17482:12;17475:19;;17134:366;;;:::o;17506:::-;17648:3;17669:67;17733:2;17728:3;17669:67;:::i;:::-;17662:74;;17745:93;17834:3;17745:93;:::i;:::-;17863:2;17858:3;17854:12;17847:19;;17506:366;;;:::o;17878:::-;18020:3;18041:67;18105:2;18100:3;18041:67;:::i;:::-;18034:74;;18117:93;18206:3;18117:93;:::i;:::-;18235:2;18230:3;18226:12;18219:19;;17878:366;;;:::o;18250:::-;18392:3;18413:67;18477:2;18472:3;18413:67;:::i;:::-;18406:74;;18489:93;18578:3;18489:93;:::i;:::-;18607:2;18602:3;18598:12;18591:19;;18250:366;;;:::o;18622:::-;18764:3;18785:67;18849:2;18844:3;18785:67;:::i;:::-;18778:74;;18861:93;18950:3;18861:93;:::i;:::-;18979:2;18974:3;18970:12;18963:19;;18622:366;;;:::o;18994:::-;19136:3;19157:67;19221:2;19216:3;19157:67;:::i;:::-;19150:74;;19233:93;19322:3;19233:93;:::i;:::-;19351:2;19346:3;19342:12;19335:19;;18994:366;;;:::o;19366:::-;19508:3;19529:67;19593:2;19588:3;19529:67;:::i;:::-;19522:74;;19605:93;19694:3;19605:93;:::i;:::-;19723:2;19718:3;19714:12;19707:19;;19366:366;;;:::o;19738:::-;19880:3;19901:67;19965:2;19960:3;19901:67;:::i;:::-;19894:74;;19977:93;20066:3;19977:93;:::i;:::-;20095:2;20090:3;20086:12;20079:19;;19738:366;;;:::o;20110:::-;20252:3;20273:67;20337:2;20332:3;20273:67;:::i;:::-;20266:74;;20349:93;20438:3;20349:93;:::i;:::-;20467:2;20462:3;20458:12;20451:19;;20110:366;;;:::o;20482:::-;20624:3;20645:67;20709:2;20704:3;20645:67;:::i;:::-;20638:74;;20721:93;20810:3;20721:93;:::i;:::-;20839:2;20834:3;20830:12;20823:19;;20482:366;;;:::o;20854:::-;20996:3;21017:67;21081:2;21076:3;21017:67;:::i;:::-;21010:74;;21093:93;21182:3;21093:93;:::i;:::-;21211:2;21206:3;21202:12;21195:19;;20854:366;;;:::o;21226:::-;21368:3;21389:67;21453:2;21448:3;21389:67;:::i;:::-;21382:74;;21465:93;21554:3;21465:93;:::i;:::-;21583:2;21578:3;21574:12;21567:19;;21226:366;;;:::o;21598:::-;21740:3;21761:67;21825:2;21820:3;21761:67;:::i;:::-;21754:74;;21837:93;21926:3;21837:93;:::i;:::-;21955:2;21950:3;21946:12;21939:19;;21598:366;;;:::o;21970:::-;22112:3;22133:67;22197:2;22192:3;22133:67;:::i;:::-;22126:74;;22209:93;22298:3;22209:93;:::i;:::-;22327:2;22322:3;22318:12;22311:19;;21970:366;;;:::o;22342:::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:::-;22856:3;22877:67;22941:2;22936:3;22877:67;:::i;:::-;22870:74;;22953:93;23042:3;22953:93;:::i;:::-;23071:2;23066:3;23062:12;23055:19;;22714:366;;;:::o;23086:::-;23228:3;23249:67;23313:2;23308:3;23249:67;:::i;:::-;23242:74;;23325:93;23414:3;23325:93;:::i;:::-;23443:2;23438:3;23434:12;23427:19;;23086:366;;;:::o;23458:398::-;23617:3;23638:83;23719:1;23714:3;23638:83;:::i;:::-;23631:90;;23730:93;23819:3;23730:93;:::i;:::-;23848:1;23843:3;23839:11;23832:18;;23458:398;;;:::o;23862:366::-;24004:3;24025:67;24089:2;24084:3;24025:67;:::i;:::-;24018:74;;24101:93;24190:3;24101:93;:::i;:::-;24219:2;24214:3;24210:12;24203:19;;23862:366;;;:::o;24234:::-;24376:3;24397:67;24461:2;24456:3;24397:67;:::i;:::-;24390:74;;24473:93;24562:3;24473:93;:::i;:::-;24591:2;24586:3;24582:12;24575:19;;24234:366;;;:::o;24606:108::-;24683:24;24701:5;24683:24;:::i;:::-;24678:3;24671:37;24606:108;;:::o;24720:118::-;24807:24;24825:5;24807:24;:::i;:::-;24802:3;24795:37;24720:118;;:::o;24844:112::-;24927:22;24943:5;24927:22;:::i;:::-;24922:3;24915:35;24844:112;;:::o;24962:397::-;25102:3;25117:75;25188:3;25179:6;25117:75;:::i;:::-;25217:2;25212:3;25208:12;25201:19;;25230:75;25301:3;25292:6;25230:75;:::i;:::-;25330:2;25325:3;25321:12;25314:19;;25350:3;25343:10;;24962:397;;;;;:::o;25365:412::-;25523:3;25545:93;25634:3;25625:6;25545:93;:::i;:::-;25538:100;;25648:75;25719:3;25710:6;25648:75;:::i;:::-;25748:2;25743:3;25739:12;25732:19;;25768:3;25761:10;;25365:412;;;;;:::o;25783:589::-;26008:3;26030:95;26121:3;26112:6;26030:95;:::i;:::-;26023:102;;26142:95;26233:3;26224:6;26142:95;:::i;:::-;26135:102;;26254:92;26342:3;26333:6;26254:92;:::i;:::-;26247:99;;26363:3;26356:10;;25783:589;;;;;;:::o;26378:379::-;26562:3;26584:147;26727:3;26584:147;:::i;:::-;26577:154;;26748:3;26741:10;;26378:379;;;:::o;26763:222::-;26856:4;26894:2;26883:9;26879:18;26871:26;;26907:71;26975:1;26964:9;26960:17;26951:6;26907:71;:::i;:::-;26763:222;;;;:::o;26991:442::-;27140:4;27178:2;27167:9;27163:18;27155:26;;27191:71;27259:1;27248:9;27244:17;27235:6;27191:71;:::i;:::-;27272:72;27340:2;27329:9;27325:18;27316:6;27272:72;:::i;:::-;27354;27422:2;27411:9;27407:18;27398:6;27354:72;:::i;:::-;26991:442;;;;;;:::o;27439:640::-;27634:4;27672:3;27661:9;27657:19;27649:27;;27686:71;27754:1;27743:9;27739:17;27730:6;27686:71;:::i;:::-;27767:72;27835:2;27824:9;27820:18;27811:6;27767:72;:::i;:::-;27849;27917:2;27906:9;27902:18;27893:6;27849:72;:::i;:::-;27968:9;27962:4;27958:20;27953:2;27942:9;27938:18;27931:48;27996:76;28067:4;28058:6;27996:76;:::i;:::-;27988:84;;27439:640;;;;;;;:::o;28085:332::-;28206:4;28244:2;28233:9;28229:18;28221:26;;28257:71;28325:1;28314:9;28310:17;28301:6;28257:71;:::i;:::-;28338:72;28406:2;28395:9;28391:18;28382:6;28338:72;:::i;:::-;28085:332;;;;;:::o;28423:373::-;28566:4;28604:2;28593:9;28589:18;28581:26;;28653:9;28647:4;28643:20;28639:1;28628:9;28624:17;28617:47;28681:108;28784:4;28775:6;28681:108;:::i;:::-;28673:116;;28423:373;;;;:::o;28802:210::-;28889:4;28927:2;28916:9;28912:18;28904:26;;28940:65;29002:1;28991:9;28987:17;28978:6;28940:65;:::i;:::-;28802:210;;;;:::o;29018:545::-;29191:4;29229:3;29218:9;29214:19;29206:27;;29243:71;29311:1;29300:9;29296:17;29287:6;29243:71;:::i;:::-;29324:68;29388:2;29377:9;29373:18;29364:6;29324:68;:::i;:::-;29402:72;29470:2;29459:9;29455:18;29446:6;29402:72;:::i;:::-;29484;29552:2;29541:9;29537:18;29528:6;29484:72;:::i;:::-;29018:545;;;;;;;:::o;29569:276::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29740:98;29835:1;29824:9;29820:17;29811:6;29740:98;:::i;:::-;29569:276;;;;:::o;29851:313::-;29964:4;30002:2;29991:9;29987:18;29979:26;;30051:9;30045:4;30041:20;30037:1;30026:9;30022:17;30015:47;30079:78;30152:4;30143:6;30079:78;:::i;:::-;30071:86;;29851:313;;;;:::o;30170:419::-;30336:4;30374:2;30363:9;30359:18;30351:26;;30423:9;30417:4;30413:20;30409:1;30398:9;30394:17;30387:47;30451:131;30577:4;30451:131;:::i;:::-;30443:139;;30170:419;;;:::o;30595:::-;30761:4;30799:2;30788:9;30784:18;30776:26;;30848:9;30842:4;30838:20;30834:1;30823:9;30819:17;30812:47;30876:131;31002:4;30876:131;:::i;:::-;30868:139;;30595:419;;;:::o;31020:::-;31186:4;31224:2;31213:9;31209:18;31201:26;;31273:9;31267:4;31263:20;31259:1;31248:9;31244:17;31237:47;31301:131;31427:4;31301:131;:::i;:::-;31293:139;;31020:419;;;:::o;31445:::-;31611:4;31649:2;31638:9;31634:18;31626:26;;31698:9;31692:4;31688:20;31684:1;31673:9;31669:17;31662:47;31726:131;31852:4;31726:131;:::i;:::-;31718:139;;31445:419;;;:::o;31870:::-;32036:4;32074:2;32063:9;32059:18;32051:26;;32123:9;32117:4;32113:20;32109:1;32098:9;32094:17;32087:47;32151:131;32277:4;32151:131;:::i;:::-;32143:139;;31870:419;;;:::o;32295:::-;32461:4;32499:2;32488:9;32484:18;32476:26;;32548:9;32542:4;32538:20;32534:1;32523:9;32519:17;32512:47;32576:131;32702:4;32576:131;:::i;:::-;32568:139;;32295:419;;;:::o;32720:::-;32886:4;32924:2;32913:9;32909:18;32901:26;;32973:9;32967:4;32963:20;32959:1;32948:9;32944:17;32937:47;33001:131;33127:4;33001:131;:::i;:::-;32993:139;;32720:419;;;:::o;33145:::-;33311:4;33349:2;33338:9;33334:18;33326:26;;33398:9;33392:4;33388:20;33384:1;33373:9;33369:17;33362:47;33426:131;33552:4;33426:131;:::i;:::-;33418:139;;33145:419;;;:::o;33570:::-;33736:4;33774:2;33763:9;33759:18;33751:26;;33823:9;33817:4;33813:20;33809:1;33798:9;33794:17;33787:47;33851:131;33977:4;33851:131;:::i;:::-;33843:139;;33570:419;;;:::o;33995:::-;34161:4;34199:2;34188:9;34184:18;34176:26;;34248:9;34242:4;34238:20;34234:1;34223:9;34219:17;34212:47;34276:131;34402:4;34276:131;:::i;:::-;34268:139;;33995:419;;;:::o;34420:::-;34586:4;34624:2;34613:9;34609:18;34601:26;;34673:9;34667:4;34663:20;34659:1;34648:9;34644:17;34637:47;34701:131;34827:4;34701:131;:::i;:::-;34693:139;;34420:419;;;:::o;34845:::-;35011:4;35049:2;35038:9;35034:18;35026:26;;35098:9;35092:4;35088:20;35084:1;35073:9;35069:17;35062:47;35126:131;35252:4;35126:131;:::i;:::-;35118:139;;34845:419;;;:::o;35270:::-;35436:4;35474:2;35463:9;35459:18;35451:26;;35523:9;35517:4;35513:20;35509:1;35498:9;35494:17;35487:47;35551:131;35677:4;35551:131;:::i;:::-;35543:139;;35270:419;;;:::o;35695:::-;35861:4;35899:2;35888:9;35884:18;35876:26;;35948:9;35942:4;35938:20;35934:1;35923:9;35919:17;35912:47;35976:131;36102:4;35976:131;:::i;:::-;35968:139;;35695:419;;;:::o;36120:::-;36286:4;36324:2;36313:9;36309:18;36301:26;;36373:9;36367:4;36363:20;36359:1;36348:9;36344:17;36337:47;36401:131;36527:4;36401:131;:::i;:::-;36393:139;;36120:419;;;:::o;36545:::-;36711:4;36749:2;36738:9;36734:18;36726:26;;36798:9;36792:4;36788:20;36784:1;36773:9;36769:17;36762:47;36826:131;36952:4;36826:131;:::i;:::-;36818:139;;36545:419;;;:::o;36970:::-;37136:4;37174:2;37163:9;37159:18;37151:26;;37223:9;37217:4;37213:20;37209:1;37198:9;37194:17;37187:47;37251:131;37377:4;37251:131;:::i;:::-;37243:139;;36970:419;;;:::o;37395:::-;37561:4;37599:2;37588:9;37584:18;37576:26;;37648:9;37642:4;37638:20;37634:1;37623:9;37619:17;37612:47;37676:131;37802:4;37676:131;:::i;:::-;37668:139;;37395:419;;;:::o;37820:::-;37986:4;38024:2;38013:9;38009:18;38001:26;;38073:9;38067:4;38063:20;38059:1;38048:9;38044:17;38037:47;38101:131;38227:4;38101:131;:::i;:::-;38093:139;;37820:419;;;:::o;38245:::-;38411:4;38449:2;38438:9;38434:18;38426:26;;38498:9;38492:4;38488:20;38484:1;38473:9;38469:17;38462:47;38526:131;38652:4;38526:131;:::i;:::-;38518:139;;38245:419;;;:::o;38670:::-;38836:4;38874:2;38863:9;38859:18;38851:26;;38923:9;38917:4;38913:20;38909:1;38898:9;38894:17;38887:47;38951:131;39077:4;38951:131;:::i;:::-;38943:139;;38670:419;;;:::o;39095:222::-;39188:4;39226:2;39215:9;39211:18;39203:26;;39239:71;39307:1;39296:9;39292:17;39283:6;39239:71;:::i;:::-;39095:222;;;;:::o;39323:332::-;39444:4;39482:2;39471:9;39467:18;39459:26;;39495:71;39563:1;39552:9;39548:17;39539:6;39495:71;:::i;:::-;39576:72;39644:2;39633:9;39629:18;39620:6;39576:72;:::i;:::-;39323:332;;;;;:::o;39661:831::-;39924:4;39962:3;39951:9;39947:19;39939:27;;39976:71;40044:1;40033:9;40029:17;40020:6;39976:71;:::i;:::-;40057:80;40133:2;40122:9;40118:18;40109:6;40057:80;:::i;:::-;40184:9;40178:4;40174:20;40169:2;40158:9;40154:18;40147:48;40212:108;40315:4;40306:6;40212:108;:::i;:::-;40204:116;;40330:72;40398:2;40387:9;40383:18;40374:6;40330:72;:::i;:::-;40412:73;40480:3;40469:9;40465:19;40456:6;40412:73;:::i;:::-;39661:831;;;;;;;;:::o;40498:442::-;40647:4;40685:2;40674:9;40670:18;40662:26;;40698:71;40766:1;40755:9;40751:17;40742:6;40698:71;:::i;:::-;40779:72;40847:2;40836:9;40832:18;40823:6;40779:72;:::i;:::-;40861;40929:2;40918:9;40914:18;40905:6;40861:72;:::i;:::-;40498:442;;;;;;:::o;40946:129::-;40980:6;41007:20;;:::i;:::-;40997:30;;41036:33;41064:4;41056:6;41036:33;:::i;:::-;40946:129;;;:::o;41081:75::-;41114:6;41147:2;41141:9;41131:19;;41081:75;:::o;41162:249::-;41237:4;41327:18;41319:6;41316:30;41313:56;;;41349:18;;:::i;:::-;41313:56;41399:4;41391:6;41387:17;41379:25;;41162:249;;;:::o;41417:307::-;41478:4;41568:18;41560:6;41557:30;41554:56;;;41590:18;;:::i;:::-;41554:56;41628:29;41650:6;41628:29;:::i;:::-;41620:37;;41712:4;41706;41702:15;41694:23;;41417:307;;;:::o;41730:308::-;41792:4;41882:18;41874:6;41871:30;41868:56;;;41904:18;;:::i;:::-;41868:56;41942:29;41964:6;41942:29;:::i;:::-;41934:37;;42026:4;42020;42016:15;42008:23;;41730:308;;;:::o;42044:132::-;42111:4;42134:3;42126:11;;42164:4;42159:3;42155:14;42147:22;;42044:132;;;:::o;42182:::-;42249:4;42272:3;42264:11;;42302:4;42297:3;42293:14;42285:22;;42182:132;;;:::o;42320:141::-;42369:4;42392:3;42384:11;;42415:3;42412:1;42405:14;42449:4;42446:1;42436:18;42428:26;;42320:141;;;:::o;42467:114::-;42534:6;42568:5;42562:12;42552:22;;42467:114;;;:::o;42587:::-;42654:6;42688:5;42682:12;42672:22;;42587:114;;;:::o;42707:98::-;42758:6;42792:5;42786:12;42776:22;;42707:98;;;:::o;42811:99::-;42863:6;42897:5;42891:12;42881:22;;42811:99;;;:::o;42916:113::-;42986:4;43018;43013:3;43009:14;43001:22;;42916:113;;;:::o;43035:::-;43105:4;43137;43132:3;43128:14;43120:22;;43035:113;;;:::o;43154:184::-;43253:11;43287:6;43282:3;43275:19;43327:4;43322:3;43318:14;43303:29;;43154:184;;;;:::o;43344:::-;43443:11;43477:6;43472:3;43465:19;43517:4;43512:3;43508:14;43493:29;;43344:184;;;;:::o;43534:168::-;43617:11;43651:6;43646:3;43639:19;43691:4;43686:3;43682:14;43667:29;;43534:168;;;;:::o;43708:147::-;43809:11;43846:3;43831:18;;43708:147;;;;:::o;43861:169::-;43945:11;43979:6;43974:3;43967:19;44019:4;44014:3;44010:14;43995:29;;43861:169;;;;:::o;44036:148::-;44138:11;44175:3;44160:18;;44036:148;;;;:::o;44190:305::-;44230:3;44249:20;44267:1;44249:20;:::i;:::-;44244:25;;44283:20;44301:1;44283:20;:::i;:::-;44278:25;;44437:1;44369:66;44365:74;44362:1;44359:81;44356:107;;;44443:18;;:::i;:::-;44356:107;44487:1;44484;44480:9;44473:16;;44190:305;;;;:::o;44501:185::-;44541:1;44558:20;44576:1;44558:20;:::i;:::-;44553:25;;44592:20;44610:1;44592:20;:::i;:::-;44587:25;;44631:1;44621:35;;44636:18;;:::i;:::-;44621:35;44678:1;44675;44671:9;44666:14;;44501:185;;;;:::o;44692:191::-;44732:4;44752:20;44770:1;44752:20;:::i;:::-;44747:25;;44786:20;44804:1;44786:20;:::i;:::-;44781:25;;44825:1;44822;44819:8;44816:34;;;44830:18;;:::i;:::-;44816:34;44875:1;44872;44868:9;44860:17;;44692:191;;;;:::o;44889:96::-;44926:7;44955:24;44973:5;44955:24;:::i;:::-;44944:35;;44889:96;;;:::o;44991:90::-;45025:7;45068:5;45061:13;45054:21;45043:32;;44991:90;;;:::o;45087:77::-;45124:7;45153:5;45142:16;;45087:77;;;:::o;45170:149::-;45206:7;45246:66;45239:5;45235:78;45224:89;;45170:149;;;:::o;45325:126::-;45362:7;45402:42;45395:5;45391:54;45380:65;;45325:126;;;:::o;45457:77::-;45494:7;45523:5;45512:16;;45457:77;;;:::o;45540:86::-;45575:7;45615:4;45608:5;45604:16;45593:27;;45540:86;;;:::o;45632:153::-;45709:9;45742:37;45773:5;45742:37;:::i;:::-;45729:50;;45632:153;;;:::o;45791:121::-;45849:9;45882:24;45900:5;45882:24;:::i;:::-;45869:37;;45791:121;;;:::o;45918:126::-;45968:9;46001:37;46032:5;46001:37;:::i;:::-;45988:50;;45918:126;;;:::o;46050:113::-;46100:9;46133:24;46151:5;46133:24;:::i;:::-;46120:37;;46050:113;;;:::o;46169:154::-;46253:6;46248:3;46243;46230:30;46315:1;46306:6;46301:3;46297:16;46290:27;46169:154;;;:::o;46329:307::-;46397:1;46407:113;46421:6;46418:1;46415:13;46407:113;;;46506:1;46501:3;46497:11;46491:18;46487:1;46482:3;46478:11;46471:39;46443:2;46440:1;46436:10;46431:15;;46407:113;;;46538:6;46535:1;46532:13;46529:101;;;46618:1;46609:6;46604:3;46600:16;46593:27;46529:101;46378:258;46329:307;;;:::o;46642:320::-;46686:6;46723:1;46717:4;46713:12;46703:22;;46770:1;46764:4;46760:12;46791:18;46781:81;;46847:4;46839:6;46835:17;46825:27;;46781:81;46909:2;46901:6;46898:14;46878:18;46875:38;46872:84;;;46928:18;;:::i;:::-;46872:84;46693:269;46642:320;;;:::o;46968:281::-;47051:27;47073:4;47051:27;:::i;:::-;47043:6;47039:40;47181:6;47169:10;47166:22;47145:18;47133:10;47130:34;47127:62;47124:88;;;47192:18;;:::i;:::-;47124:88;47232:10;47228:2;47221:22;47011:238;46968:281;;:::o;47255:233::-;47294:3;47317:24;47335:5;47317:24;:::i;:::-;47308:33;;47363:66;47356:5;47353:77;47350:103;;;47433:18;;:::i;:::-;47350:103;47480:1;47473:5;47469:13;47462:20;;47255:233;;;:::o;47494:100::-;47533:7;47562:26;47582:5;47562:26;:::i;:::-;47551:37;;47494:100;;;:::o;47600:79::-;47639:7;47668:5;47657:16;;47600:79;;;:::o;47685:94::-;47724:7;47753:20;47767:5;47753:20;:::i;:::-;47742:31;;47685:94;;;:::o;47785:176::-;47817:1;47834:20;47852:1;47834:20;:::i;:::-;47829:25;;47868:20;47886:1;47868:20;:::i;:::-;47863:25;;47907:1;47897:35;;47912:18;;:::i;:::-;47897:35;47953:1;47950;47946:9;47941:14;;47785:176;;;;:::o;47967:180::-;48015:77;48012:1;48005:88;48112:4;48109:1;48102:15;48136:4;48133:1;48126:15;48153:180;48201:77;48198:1;48191:88;48298:4;48295:1;48288:15;48322:4;48319:1;48312:15;48339:180;48387:77;48384:1;48377:88;48484:4;48481:1;48474:15;48508:4;48505:1;48498:15;48525:180;48573:77;48570:1;48563:88;48670:4;48667:1;48660:15;48694:4;48691:1;48684:15;48711:180;48759:77;48756:1;48749:88;48856:4;48853:1;48846:15;48880:4;48877:1;48870:15;48897:180;48945:77;48942:1;48935:88;49042:4;49039:1;49032:15;49066:4;49063:1;49056:15;49083:117;49192:1;49189;49182:12;49206:117;49315:1;49312;49305:12;49329:117;49438:1;49435;49428:12;49452:117;49561:1;49558;49551:12;49575:117;49684:1;49681;49674:12;49698:102;49739:6;49790:2;49786:7;49781:2;49774:5;49770:14;49766:28;49756:38;;49698:102;;;:::o;49806:94::-;49839:8;49887:5;49883:2;49879:14;49858:35;;49806:94;;;:::o;49906:230::-;50046:34;50042:1;50034:6;50030:14;50023:58;50115:13;50110:2;50102:6;50098:15;50091:38;49906:230;:::o;50142:237::-;50282:34;50278:1;50270:6;50266:14;50259:58;50351:20;50346:2;50338:6;50334:15;50327:45;50142:237;:::o;50385:225::-;50525:34;50521:1;50513:6;50509:14;50502:58;50594:8;50589:2;50581:6;50577:15;50570:33;50385:225;:::o;50616:178::-;50756:30;50752:1;50744:6;50740:14;50733:54;50616:178;:::o;50800:166::-;50940:18;50936:1;50928:6;50924:14;50917:42;50800:166;:::o;50972:167::-;51112:19;51108:1;51100:6;51096:14;51089:43;50972:167;:::o;51145:223::-;51285:34;51281:1;51273:6;51269:14;51262:58;51354:6;51349:2;51341:6;51337:15;51330:31;51145:223;:::o;51374:175::-;51514:27;51510:1;51502:6;51498:14;51491:51;51374:175;:::o;51555:231::-;51695:34;51691:1;51683:6;51679:14;51672:58;51764:14;51759:2;51751:6;51747:15;51740:39;51555:231;:::o;51792:243::-;51932:34;51928:1;51920:6;51916:14;51909:58;52001:26;51996:2;51988:6;51984:15;51977:51;51792:243;:::o;52041:229::-;52181:34;52177:1;52169:6;52165:14;52158:58;52250:12;52245:2;52237:6;52233:15;52226:37;52041:229;:::o;52276:228::-;52416:34;52412:1;52404:6;52400:14;52393:58;52485:11;52480:2;52472:6;52468:15;52461:36;52276:228;:::o;52510:182::-;52650:34;52646:1;52638:6;52634:14;52627:58;52510:182;:::o;52698:231::-;52838:34;52834:1;52826:6;52822:14;52815:58;52907:14;52902:2;52894:6;52890:15;52883:39;52698:231;:::o;52935:182::-;53075:34;53071:1;53063:6;53059:14;53052:58;52935:182;:::o;53123:228::-;53263:34;53259:1;53251:6;53247:14;53240:58;53332:11;53327:2;53319:6;53315:15;53308:36;53123:228;:::o;53357:234::-;53497:34;53493:1;53485:6;53481:14;53474:58;53566:17;53561:2;53553:6;53549:15;53542:42;53357:234;:::o;53597:220::-;53737:34;53733:1;53725:6;53721:14;53714:58;53806:3;53801:2;53793:6;53789:15;53782:28;53597:220;:::o;53823:173::-;53963:25;53959:1;53951:6;53947:14;53940:49;53823:173;:::o;54002:114::-;;:::o;54122:236::-;54262:34;54258:1;54250:6;54246:14;54239:58;54331:19;54326:2;54318:6;54314:15;54307:44;54122:236;:::o;54364:231::-;54504:34;54500:1;54492:6;54488:14;54481:58;54573:14;54568:2;54560:6;54556:15;54549:39;54364:231;:::o;54601:122::-;54674:24;54692:5;54674:24;:::i;:::-;54667:5;54664:35;54654:63;;54713:1;54710;54703:12;54654:63;54601:122;:::o;54729:116::-;54799:21;54814:5;54799:21;:::i;:::-;54792:5;54789:32;54779:60;;54835:1;54832;54825:12;54779:60;54729:116;:::o;54851:122::-;54924:24;54942:5;54924:24;:::i;:::-;54917:5;54914:35;54904:63;;54963:1;54960;54953:12;54904:63;54851:122;:::o;54979:120::-;55051:23;55068:5;55051:23;:::i;:::-;55044:5;55041:34;55031:62;;55089:1;55086;55079:12;55031:62;54979:120;:::o;55105:122::-;55178:24;55196:5;55178:24;:::i;:::-;55171:5;55168:35;55158:63;;55217:1;55214;55207:12;55158:63;55105:122;:::o;55233:118::-;55304:22;55320:5;55304:22;:::i;:::-;55297:5;55294:33;55284:61;;55341:1;55338;55331:12;55284:61;55233:118;:::o
Swarm Source
ipfs://25ba9a6eb1c6f67ab0417a2aa0e0c97f5e1f57b5a3d37508bda7dac27687e76c
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.