Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,298 MRC
Holders
838
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MRCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaRichClub
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-27 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (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/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (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/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/metarichclub.sol pragma solidity >=0.7.0 <0.9.0; contract MetaRichClub is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.075 ether; uint256 public maxSupply = 5000; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); mint(msg.sender,55); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "the contract is paused"); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } 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" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; if(_state == true){ cost = 0.075 ether; }else{ cost = 0.1 ether; } } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public payable onlyOwner { (bool yb, ) = payable(0x9b3853a0cdc0B426F6dE88EbAD895224D6280c28).call{value: address(this).balance * 25 / 1000}(""); require(yb); (bool sg, ) = payable(0xf8E06D0B5581f1a76e2a82c038991D17B4BD7f9B).call{value: address(this).balance * 35 / 1000}(""); require(sg); (bool cl, ) = payable(0xF3d60cd7caBB2aaA081858CeC8C6C7DCe9232133).call{value: address(this).balance * 35 / 1000}(""); require(cl); (bool lc, ) = payable(0xBB68fA687C0bbdbe40feB2741D25Af4d89511C5B).call{value: address(this).balance * 4525 / 10000}(""); require(lc); (bool vl, ) = payable(0x373D05092fdE57314d6324EaD0C36AB8c84f1790).call{value: address(this).balance * 4525 / 10000}(""); require(vl); } }
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":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":[{"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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_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":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200115e565b5067010a741a46278000600e55611388600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff021916908315150217905550348015620000c257600080fd5b5060405162006b9438038062006b948339818101604052810190620000e89190620012c3565b83838160009080519060200190620001029291906200115e565b5080600190805190602001906200011b9291906200115e565b5050506200013e620001326200017d60201b60201c565b6200018560201b60201c565b6200014f826200024b60201b60201c565b6200016081620002f660201b60201c565b62000173336037620003a160201b60201c565b5050505062001ca1565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025b6200017d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000281620005f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d1906200167a565b60405180910390fd5b80600b9080519060200190620002f29291906200115e565b5050565b620003066200017d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032c620005f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037c906200167a565b60405180910390fd5b80600d90805190602001906200039d9291906200115e565b5050565b6000620003b36200062160201b60201c565b9050601060009054906101000a900460ff161562000408576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ff906200169c565b60405180910390fd5b600082116200044e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004459062001702565b60405180910390fd5b600f5482826200045f9190620017b0565b1115620004a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049a9062001636565b60405180910390fd5b620004b3620005f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005ad5760011515601060029054906101000a900460ff1615151415620005575762000514336200062e60201b60201c565b62000556576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054d90620016e0565b60405180910390fd5b5b81600e546200056791906200180d565b341015620005ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a390620016be565b60405180910390fd5b5b6000600190505b828111620005f157620005db848284620005cf9190620017b0565b6200070a60201b60201c565b8080620005e890620019b5565b915050620005b4565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b600080600090505b601180549050811015620006ff578273ffffffffffffffffffffffffffffffffffffffff166011828154811062000696577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620006e957600191505062000705565b8080620006f690620019b5565b91505062000636565b50600090505b919050565b6200072c8282604051806020016040528060008152506200073060201b60201c565b5050565b6200074283836200079e60201b60201c565b6200075760008484846200098460201b60201c565b62000799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079090620015d0565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008089062001658565b60405180910390fd5b620008228162000b3e60201b60201c565b1562000865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085c90620015f2565b60405180910390fd5b620008796000838362000baa60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008cb9190620017b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620009b28473ffffffffffffffffffffffffffffffffffffffff1662000cf160201b620022151760201c565b1562000b31578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009e46200017d60201b60201c565b8786866040518563ffffffff1660e01b815260040162000a0894939291906200157c565b602060405180830381600087803b15801562000a2357600080fd5b505af192505050801562000a5757506040513d601f19601f8201168201806040525081019062000a54919062001297565b60015b62000ae0573d806000811462000a8a576040519150601f19603f3d011682016040523d82523d6000602084013e62000a8f565b606091505b5060008151141562000ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000acf90620015d0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000b36565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000bc283838362000d0460201b620022281760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000c0f5762000c098162000d0960201b60201c565b62000c57565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c565762000c55838262000d5260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ca45762000c9e8162000ecf60201b60201c565b62000cec565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000ceb5762000cea82826200101760201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000d6c84620010a360201b620019711760201c565b62000d7891906200186e565b905060006007600084815260200190815260200160002054905081811462000e5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000ee591906200186e565b905060006009600084815260200190815260200160002054905060006008838154811062000f3c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000f85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006200102f83620010a360201b620019711760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200110e9062001614565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200116c9062001949565b90600052602060002090601f016020900481019282620011905760008555620011dc565b82601f10620011ab57805160ff1916838001178555620011dc565b82800160010185558215620011dc579182015b82811115620011db578251825591602001919060010190620011be565b5b509050620011eb9190620011ef565b5090565b5b808211156200120a576000816000905550600101620011f0565b5090565b6000620012256200121f846200174d565b62001724565b9050828152602081018484840111156200123e57600080fd5b6200124b84828562001913565b509392505050565b600081519050620012648162001c87565b92915050565b600082601f8301126200127c57600080fd5b81516200128e8482602086016200120e565b91505092915050565b600060208284031215620012aa57600080fd5b6000620012ba8482850162001253565b91505092915050565b60008060008060808587031215620012da57600080fd5b600085015167ffffffffffffffff811115620012f557600080fd5b62001303878288016200126a565b945050602085015167ffffffffffffffff8111156200132157600080fd5b6200132f878288016200126a565b935050604085015167ffffffffffffffff8111156200134d57600080fd5b6200135b878288016200126a565b925050606085015167ffffffffffffffff8111156200137957600080fd5b62001387878288016200126a565b91505092959194509250565b6200139e81620018a9565b82525050565b6000620013b18262001783565b620013bd81856200178e565b9350620013cf81856020860162001913565b620013da8162001a90565b840191505092915050565b6000620013f46032836200179f565b9150620014018262001aa1565b604082019050919050565b60006200141b601c836200179f565b9150620014288262001af0565b602082019050919050565b600062001442602a836200179f565b91506200144f8262001b19565b604082019050919050565b6000620014696016836200179f565b9150620014768262001b68565b602082019050919050565b6000620014906020836200179f565b91506200149d8262001b91565b602082019050919050565b6000620014b76020836200179f565b9150620014c48262001bba565b602082019050919050565b6000620014de6016836200179f565b9150620014eb8262001be3565b602082019050919050565b6000620015056012836200179f565b9150620015128262001c0c565b602082019050919050565b60006200152c6017836200179f565b9150620015398262001c35565b602082019050919050565b600062001553601b836200179f565b9150620015608262001c5e565b602082019050919050565b620015768162001909565b82525050565b600060808201905062001593600083018762001393565b620015a2602083018662001393565b620015b160408301856200156b565b8181036060830152620015c58184620013a4565b905095945050505050565b60006020820190508181036000830152620015eb81620013e5565b9050919050565b600060208201905081810360008301526200160d816200140c565b9050919050565b600060208201905081810360008301526200162f8162001433565b9050919050565b6000602082019050818103600083015262001651816200145a565b9050919050565b60006020820190508181036000830152620016738162001481565b9050919050565b600060208201905081810360008301526200169581620014a8565b9050919050565b60006020820190508181036000830152620016b781620014cf565b9050919050565b60006020820190508181036000830152620016d981620014f6565b9050919050565b60006020820190508181036000830152620016fb816200151d565b9050919050565b600060208201905081810360008301526200171d8162001544565b9050919050565b60006200173062001743565b90506200173e82826200197f565b919050565b6000604051905090565b600067ffffffffffffffff8211156200176b576200176a62001a61565b5b620017768262001a90565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620017bd8262001909565b9150620017ca8362001909565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001802576200180162001a03565b5b828201905092915050565b60006200181a8262001909565b9150620018278362001909565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001863576200186262001a03565b5b828202905092915050565b60006200187b8262001909565b9150620018888362001909565b9250828210156200189e576200189d62001a03565b5b828203905092915050565b6000620018b682620018e9565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200193357808201518184015260208101905062001916565b8381111562001943576000848401525b50505050565b600060028204905060018216806200196257607f821691505b6020821081141562001979576200197862001a32565b5b50919050565b6200198a8262001a90565b810181811067ffffffffffffffff82111715620019ac57620019ab62001a61565b5b80604052505050565b6000620019c28262001909565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620019f857620019f762001a03565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b62001c9281620018bd565b811462001c9e57600080fd5b50565b614ee38062001cb16000396000f3fe60806040526004361061023b5760003560e01c806355f804b31161012e578063b88d4fde116100ab578063da3ef23f1161006f578063da3ef23f1461087d578063e985e9c5146108a6578063edec5f27146108e3578063f2c4ce1e1461090c578063f2fde38b146109355761023b565b8063b88d4fde14610784578063ba4e5c49146107ad578063c6682862146107ea578063c87b56dd14610815578063d5abeb01146108525761023b565b80638da5cb5b116100f25780638da5cb5b146106c357806395d89b41146106ee5780639c70b51214610719578063a22cb46514610744578063a475b5dd1461076d5761023b565b806355f804b3146105de5780635c975abb146106075780636352211e1461063257806370a082311461066f578063715018a6146106ac5761023b565b80632f745c59116101bc57806342842e0e1161018057806342842e0e146104e7578063438b63001461051057806344a0d68a1461054d5780634f6ccce71461057657806351830227146105b35761023b565b80632f745c591461041e5780633af32abf1461045b5780633c952764146104985780633ccfd60b146104c157806340c10f19146104cb5761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d57806318cae269146103b857806323b872dd146103f55761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613a14565b61095e565b60405161027491906140bb565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906139eb565b6109d8565b005b3480156102b257600080fd5b506102bb610a71565b6040516102c891906140d6565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613aa7565b610b03565b6040516103059190614032565b60405180910390f35b34801561031a57600080fd5b50610323610b88565b60405161033091906140d6565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b919061396a565b610c16565b005b34801561036e57600080fd5b50610377610d2e565b60405161038491906143d8565b60405180910390f35b34801561039957600080fd5b506103a2610d34565b6040516103af91906143d8565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906137ff565b610d41565b6040516103ec91906143d8565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613864565b610d59565b005b34801561042a57600080fd5b506104456004803603810190610440919061396a565b610db9565b60405161045291906143d8565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906137ff565b610e5e565b60405161048f91906140bb565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906139eb565b610f33565b005b6104c9610ffd565b005b6104e560048036038101906104e0919061396a565b6113b1565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613864565b6115cc565b005b34801561051c57600080fd5b50610537600480360381019061053291906137ff565b6115ec565b6040516105449190614099565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190613aa7565b6116e6565b005b34801561058257600080fd5b5061059d60048036038101906105989190613aa7565b61176c565b6040516105aa91906143d8565b60405180910390f35b3480156105bf57600080fd5b506105c8611803565b6040516105d591906140bb565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613a66565b611816565b005b34801561061357600080fd5b5061061c6118ac565b60405161062991906140bb565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613aa7565b6118bf565b6040516106669190614032565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906137ff565b611971565b6040516106a391906143d8565b60405180910390f35b3480156106b857600080fd5b506106c1611a29565b005b3480156106cf57600080fd5b506106d8611ab1565b6040516106e59190614032565b60405180910390f35b3480156106fa57600080fd5b50610703611adb565b60405161071091906140d6565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b91906140bb565b60405180910390f35b34801561075057600080fd5b5061076b6004803603810190610766919061392e565b611b80565b005b34801561077957600080fd5b50610782611b96565b005b34801561079057600080fd5b506107ab60048036038101906107a691906138b3565b611c2f565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613aa7565b611c91565b6040516107e19190614032565b60405180910390f35b3480156107f657600080fd5b506107ff611cd0565b60405161080c91906140d6565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613aa7565b611d5e565b60405161084991906140d6565b60405180910390f35b34801561085e57600080fd5b50610867611eb7565b60405161087491906143d8565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613a66565b611ebd565b005b3480156108b257600080fd5b506108cd60048036038101906108c89190613828565b611f53565b6040516108da91906140bb565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906139a6565b611fe7565b005b34801561091857600080fd5b50610933600480360381019061092e9190613a66565b612087565b005b34801561094157600080fd5b5061095c600480360381019061095791906137ff565b61211d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d157506109d08261222d565b5b9050919050565b6109e061230f565b73ffffffffffffffffffffffffffffffffffffffff166109fe611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90614298565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a80906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac906146e1565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b6000610b0e82612317565b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490614278565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b95906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc1906146e1565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b505050505081565b6000610c21826118bf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990614318565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb161230f565b73ffffffffffffffffffffffffffffffffffffffff161480610ce05750610cdf81610cda61230f565b611f53565b5b610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906141d8565b60405180910390fd5b610d298383612383565b505050565b600e5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b610d6a610d6461230f565b8261243c565b610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090614358565b60405180910390fd5b610db483838361251a565b505050565b6000610dc483611971565b8210610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc906140f8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601180549050811015610f28578273ffffffffffffffffffffffffffffffffffffffff1660118281548110610ec4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f15576001915050610f2e565b8080610f2090614744565b915050610e66565b50600090505b919050565b610f3b61230f565b73ffffffffffffffffffffffffffffffffffffffff16610f59611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690614298565b60405180910390fd5b80601060026101000a81548160ff021916908315150217905550600115158115151415610fea5767010a741a46278000600e81905550610ffa565b67016345785d8a0000600e819055505b50565b61100561230f565b73ffffffffffffffffffffffffffffffffffffffff16611023611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090614298565b60405180910390fd5b6000739b3853a0cdc0b426f6de88ebad895224d6280c2873ffffffffffffffffffffffffffffffffffffffff166103e86019476110b6919061459d565b6110c0919061456c565b6040516110cc9061401d565b60006040518083038185875af1925050503d8060008114611109576040519150601f19603f3d011682016040523d82523d6000602084013e61110e565b606091505b505090508061111c57600080fd5b600073f8e06d0b5581f1a76e2a82c038991d17b4bd7f9b73ffffffffffffffffffffffffffffffffffffffff166103e8602347611159919061459d565b611163919061456c565b60405161116f9061401d565b60006040518083038185875af1925050503d80600081146111ac576040519150601f19603f3d011682016040523d82523d6000602084013e6111b1565b606091505b50509050806111bf57600080fd5b600073f3d60cd7cabb2aaa081858cec8c6c7dce923213373ffffffffffffffffffffffffffffffffffffffff166103e86023476111fc919061459d565b611206919061456c565b6040516112129061401d565b60006040518083038185875af1925050503d806000811461124f576040519150601f19603f3d011682016040523d82523d6000602084013e611254565b606091505b505090508061126257600080fd5b600073bb68fa687c0bbdbe40feb2741d25af4d89511c5b73ffffffffffffffffffffffffffffffffffffffff166127106111ad476112a0919061459d565b6112aa919061456c565b6040516112b69061401d565b60006040518083038185875af1925050503d80600081146112f3576040519150601f19603f3d011682016040523d82523d6000602084013e6112f8565b606091505b505090508061130657600080fd5b600073373d05092fde57314d6324ead0c36ab8c84f179073ffffffffffffffffffffffffffffffffffffffff166127106111ad47611344919061459d565b61134e919061456c565b60405161135a9061401d565b60006040518083038185875af1925050503d8060008114611397576040519150601f19603f3d011682016040523d82523d6000602084013e61139c565b606091505b50509050806113aa57600080fd5b5050505050565b60006113bb610d34565b9050601060009054906101000a900460ff161561140d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611404906142b8565b60405180910390fd5b60008211611450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611447906143b8565b60405180910390fd5b600f54828261145f9190614516565b11156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790614238565b60405180910390fd5b6114a8611ab1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115905760011515601060029054906101000a900460ff161515141561153f576114ff33610e5e565b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614398565b60405180910390fd5b5b81600e5461154d919061459d565b34101561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614338565b60405180910390fd5b5b6000600190505b8281116115c6576115b38482846115ae9190614516565b612776565b80806115be90614744565b915050611597565b50505050565b6115e783838360405180602001604052806000815250611c2f565b505050565b606060006115f983611971565b905060008167ffffffffffffffff81111561163d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561166b5781602001602082028036833780820191505090505b50905060005b828110156116db576116838582610db9565b8282815181106116bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806116d390614744565b915050611671565b508092505050919050565b6116ee61230f565b73ffffffffffffffffffffffffffffffffffffffff1661170c611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614298565b60405180910390fd5b80600e8190555050565b6000611776610d34565b82106117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614378565b60405180910390fd5b600882815481106117f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61181e61230f565b73ffffffffffffffffffffffffffffffffffffffff1661183c611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990614298565b60405180910390fd5b80600b90805190602001906118a8929190613518565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614218565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906141f8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3161230f565b73ffffffffffffffffffffffffffffffffffffffff16611a4f611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614298565b60405180910390fd5b611aaf6000612794565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611aea906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b16906146e1565b8015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b611b92611b8b61230f565b838361285a565b5050565b611b9e61230f565b73ffffffffffffffffffffffffffffffffffffffff16611bbc611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614298565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611c40611c3a61230f565b8361243c565b611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614358565b60405180910390fd5b611c8b848484846129c7565b50505050565b60118181548110611ca157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8054611cdd906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d09906146e1565b8015611d565780601f10611d2b57610100808354040283529160200191611d56565b820191906000526020600020905b815481529060010190602001808311611d3957829003601f168201915b505050505081565b6060611d6982612317565b611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f906142f8565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611e5657600d8054611dd1906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfd906146e1565b8015611e4a5780601f10611e1f57610100808354040283529160200191611e4a565b820191906000526020600020905b815481529060010190602001808311611e2d57829003601f168201915b50505050509050611eb2565b6000611e60612a23565b90506000815111611e805760405180602001604052806000815250611eae565b80611e8a84612ab5565b600c604051602001611e9e93929190613fec565b6040516020818303038152906040525b9150505b919050565b600f5481565b611ec561230f565b73ffffffffffffffffffffffffffffffffffffffff16611ee3611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614298565b60405180910390fd5b80600c9080519060200190611f4f929190613518565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fef61230f565b73ffffffffffffffffffffffffffffffffffffffff1661200d611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614298565b60405180910390fd5b60116000612071919061359e565b8181601191906120829291906135bf565b505050565b61208f61230f565b73ffffffffffffffffffffffffffffffffffffffff166120ad611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa90614298565b60405180910390fd5b80600d9080519060200190612119929190613518565b5050565b61212561230f565b73ffffffffffffffffffffffffffffffffffffffff16612143611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614298565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090614138565b60405180910390fd5b61221281612794565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612308575061230782612c62565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123f6836118bf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061244782612317565b612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906141b8565b60405180910390fd5b6000612491836118bf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250057508373ffffffffffffffffffffffffffffffffffffffff166124e884610b03565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251157506125108185611f53565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661253a826118bf565b73ffffffffffffffffffffffffffffffffffffffff1614612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906142d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614178565b60405180910390fd5b61260b838383612ccc565b612616600082612383565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266691906145f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126bd9190614516565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612790828260405180602001604052806000815250612de0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614198565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129ba91906140bb565b60405180910390a3505050565b6129d284848461251a565b6129de84848484612e3b565b612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1490614118565b60405180910390fd5b50505050565b6060600b8054612a32906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5e906146e1565b8015612aab5780601f10612a8057610100808354040283529160200191612aab565b820191906000526020600020905b815481529060010190602001808311612a8e57829003601f168201915b5050505050905090565b60606000821415612afd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c5d565b600082905060005b60008214612b2f578080612b1890614744565b915050600a82612b28919061456c565b9150612b05565b60008167ffffffffffffffff811115612b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ba35781602001600182028036833780820191505090505b5090505b60008514612c5657600182612bbc91906145f7565b9150600a85612bcb919061478d565b6030612bd79190614516565b60f81b818381518110612c13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c4f919061456c565b9450612ba7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cd7838383612228565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d1a57612d1581612fd2565b612d59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5857612d57838261301b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9c57612d9781613188565b612ddb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dda57612dd982826132cb565b5b5b505050565b612dea838361334a565b612df76000848484612e3b565b612e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2d90614118565b60405180910390fd5b505050565b6000612e5c8473ffffffffffffffffffffffffffffffffffffffff16612215565b15612fc5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e8561230f565b8786866040518563ffffffff1660e01b8152600401612ea7949392919061404d565b602060405180830381600087803b158015612ec157600080fd5b505af1925050508015612ef257506040513d601f19601f82011682018060405250810190612eef9190613a3d565b60015b612f75573d8060008114612f22576040519150601f19603f3d011682016040523d82523d6000602084013e612f27565b606091505b50600081511415612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490614118565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fca565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161302884611971565b61303291906145f7565b9050600060076000848152602001908152602001600020549050818114613117576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061319c91906145f7565b90506000600960008481526020019081526020016000205490506000600883815481106131f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061323a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006132d683611971565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b190614258565b60405180910390fd5b6133c381612317565b15613403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fa90614158565b60405180910390fd5b61340f60008383612ccc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345f9190614516565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613524906146e1565b90600052602060002090601f016020900481019282613546576000855561358d565b82601f1061355f57805160ff191683800117855561358d565b8280016001018555821561358d579182015b8281111561358c578251825591602001919060010190613571565b5b50905061359a919061365f565b5090565b50805460008255906000526020600020908101906135bc919061365f565b50565b82805482825590600052602060002090810192821561364e579160200282015b8281111561364d57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906135df565b5b50905061365b919061365f565b5090565b5b80821115613678576000816000905550600101613660565b5090565b600061368f61368a84614418565b6143f3565b9050828152602081018484840111156136a757600080fd5b6136b284828561469f565b509392505050565b60006136cd6136c884614449565b6143f3565b9050828152602081018484840111156136e557600080fd5b6136f084828561469f565b509392505050565b60008135905061370781614e51565b92915050565b60008083601f84011261371f57600080fd5b8235905067ffffffffffffffff81111561373857600080fd5b60208301915083602082028301111561375057600080fd5b9250929050565b60008135905061376681614e68565b92915050565b60008135905061377b81614e7f565b92915050565b60008151905061379081614e7f565b92915050565b600082601f8301126137a757600080fd5b81356137b784826020860161367c565b91505092915050565b600082601f8301126137d157600080fd5b81356137e18482602086016136ba565b91505092915050565b6000813590506137f981614e96565b92915050565b60006020828403121561381157600080fd5b600061381f848285016136f8565b91505092915050565b6000806040838503121561383b57600080fd5b6000613849858286016136f8565b925050602061385a858286016136f8565b9150509250929050565b60008060006060848603121561387957600080fd5b6000613887868287016136f8565b9350506020613898868287016136f8565b92505060406138a9868287016137ea565b9150509250925092565b600080600080608085870312156138c957600080fd5b60006138d7878288016136f8565b94505060206138e8878288016136f8565b93505060406138f9878288016137ea565b925050606085013567ffffffffffffffff81111561391657600080fd5b61392287828801613796565b91505092959194509250565b6000806040838503121561394157600080fd5b600061394f858286016136f8565b925050602061396085828601613757565b9150509250929050565b6000806040838503121561397d57600080fd5b600061398b858286016136f8565b925050602061399c858286016137ea565b9150509250929050565b600080602083850312156139b957600080fd5b600083013567ffffffffffffffff8111156139d357600080fd5b6139df8582860161370d565b92509250509250929050565b6000602082840312156139fd57600080fd5b6000613a0b84828501613757565b91505092915050565b600060208284031215613a2657600080fd5b6000613a348482850161376c565b91505092915050565b600060208284031215613a4f57600080fd5b6000613a5d84828501613781565b91505092915050565b600060208284031215613a7857600080fd5b600082013567ffffffffffffffff811115613a9257600080fd5b613a9e848285016137c0565b91505092915050565b600060208284031215613ab957600080fd5b6000613ac7848285016137ea565b91505092915050565b6000613adc8383613fce565b60208301905092915050565b613af18161462b565b82525050565b6000613b028261449f565b613b0c81856144cd565b9350613b178361447a565b8060005b83811015613b48578151613b2f8882613ad0565b9750613b3a836144c0565b925050600181019050613b1b565b5085935050505092915050565b613b5e8161463d565b82525050565b6000613b6f826144aa565b613b7981856144de565b9350613b898185602086016146ae565b613b928161487a565b840191505092915050565b6000613ba8826144b5565b613bb281856144fa565b9350613bc28185602086016146ae565b613bcb8161487a565b840191505092915050565b6000613be1826144b5565b613beb818561450b565b9350613bfb8185602086016146ae565b80840191505092915050565b60008154613c14816146e1565b613c1e818661450b565b94506001821660008114613c395760018114613c4a57613c7d565b60ff19831686528186019350613c7d565b613c538561448a565b60005b83811015613c7557815481890152600182019150602081019050613c56565b838801955050505b50505092915050565b6000613c93602b836144fa565b9150613c9e8261488b565b604082019050919050565b6000613cb66032836144fa565b9150613cc1826148da565b604082019050919050565b6000613cd96026836144fa565b9150613ce482614929565b604082019050919050565b6000613cfc601c836144fa565b9150613d0782614978565b602082019050919050565b6000613d1f6024836144fa565b9150613d2a826149a1565b604082019050919050565b6000613d426019836144fa565b9150613d4d826149f0565b602082019050919050565b6000613d65602c836144fa565b9150613d7082614a19565b604082019050919050565b6000613d886038836144fa565b9150613d9382614a68565b604082019050919050565b6000613dab602a836144fa565b9150613db682614ab7565b604082019050919050565b6000613dce6029836144fa565b9150613dd982614b06565b604082019050919050565b6000613df16016836144fa565b9150613dfc82614b55565b602082019050919050565b6000613e146020836144fa565b9150613e1f82614b7e565b602082019050919050565b6000613e37602c836144fa565b9150613e4282614ba7565b604082019050919050565b6000613e5a6020836144fa565b9150613e6582614bf6565b602082019050919050565b6000613e7d6016836144fa565b9150613e8882614c1f565b602082019050919050565b6000613ea06029836144fa565b9150613eab82614c48565b604082019050919050565b6000613ec3602f836144fa565b9150613ece82614c97565b604082019050919050565b6000613ee66021836144fa565b9150613ef182614ce6565b604082019050919050565b6000613f096000836144ef565b9150613f1482614d35565b600082019050919050565b6000613f2c6012836144fa565b9150613f3782614d38565b602082019050919050565b6000613f4f6031836144fa565b9150613f5a82614d61565b604082019050919050565b6000613f72602c836144fa565b9150613f7d82614db0565b604082019050919050565b6000613f956017836144fa565b9150613fa082614dff565b602082019050919050565b6000613fb8601b836144fa565b9150613fc382614e28565b602082019050919050565b613fd781614695565b82525050565b613fe681614695565b82525050565b6000613ff88286613bd6565b91506140048285613bd6565b91506140108284613c07565b9150819050949350505050565b600061402882613efc565b9150819050919050565b60006020820190506140476000830184613ae8565b92915050565b60006080820190506140626000830187613ae8565b61406f6020830186613ae8565b61407c6040830185613fdd565b818103606083015261408e8184613b64565b905095945050505050565b600060208201905081810360008301526140b38184613af7565b905092915050565b60006020820190506140d06000830184613b55565b92915050565b600060208201905081810360008301526140f08184613b9d565b905092915050565b6000602082019050818103600083015261411181613c86565b9050919050565b6000602082019050818103600083015261413181613ca9565b9050919050565b6000602082019050818103600083015261415181613ccc565b9050919050565b6000602082019050818103600083015261417181613cef565b9050919050565b6000602082019050818103600083015261419181613d12565b9050919050565b600060208201905081810360008301526141b181613d35565b9050919050565b600060208201905081810360008301526141d181613d58565b9050919050565b600060208201905081810360008301526141f181613d7b565b9050919050565b6000602082019050818103600083015261421181613d9e565b9050919050565b6000602082019050818103600083015261423181613dc1565b9050919050565b6000602082019050818103600083015261425181613de4565b9050919050565b6000602082019050818103600083015261427181613e07565b9050919050565b6000602082019050818103600083015261429181613e2a565b9050919050565b600060208201905081810360008301526142b181613e4d565b9050919050565b600060208201905081810360008301526142d181613e70565b9050919050565b600060208201905081810360008301526142f181613e93565b9050919050565b6000602082019050818103600083015261431181613eb6565b9050919050565b6000602082019050818103600083015261433181613ed9565b9050919050565b6000602082019050818103600083015261435181613f1f565b9050919050565b6000602082019050818103600083015261437181613f42565b9050919050565b6000602082019050818103600083015261439181613f65565b9050919050565b600060208201905081810360008301526143b181613f88565b9050919050565b600060208201905081810360008301526143d181613fab565b9050919050565b60006020820190506143ed6000830184613fdd565b92915050565b60006143fd61440e565b90506144098282614713565b919050565b6000604051905090565b600067ffffffffffffffff8211156144335761443261484b565b5b61443c8261487a565b9050602081019050919050565b600067ffffffffffffffff8211156144645761446361484b565b5b61446d8261487a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061452182614695565b915061452c83614695565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614561576145606147be565b5b828201905092915050565b600061457782614695565b915061458283614695565b925082614592576145916147ed565b5b828204905092915050565b60006145a882614695565b91506145b383614695565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ec576145eb6147be565b5b828202905092915050565b600061460282614695565b915061460d83614695565b9250828210156146205761461f6147be565b5b828203905092915050565b600061463682614675565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146cc5780820151818401526020810190506146b1565b838111156146db576000848401525b50505050565b600060028204905060018216806146f957607f821691505b6020821081141561470d5761470c61481c565b5b50919050565b61471c8261487a565b810181811067ffffffffffffffff8211171561473b5761473a61484b565b5b80604052505050565b600061474f82614695565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614782576147816147be565b5b600182019050919050565b600061479882614695565b91506147a383614695565b9250826147b3576147b26147ed565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614e5a8161462b565b8114614e6557600080fd5b50565b614e718161463d565b8114614e7c57600080fd5b50565b614e8881614649565b8114614e9357600080fd5b50565b614e9f81614695565b8114614eaa57600080fd5b5056fea2646970667358221220dc4b04a48b6d72f770c70d39c5f52b6872f0a33eca2f8bab3bbd24abe67f88e364736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e4d657461205269636820436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d524300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535732657a7372546543446a4166695a72346e764178363966374378354c4347727765596b77596864386f7a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d546b52744a4b4c6573514446554364397168386351585658594b71424c485256566f397a6a66444e54356b4d2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806355f804b31161012e578063b88d4fde116100ab578063da3ef23f1161006f578063da3ef23f1461087d578063e985e9c5146108a6578063edec5f27146108e3578063f2c4ce1e1461090c578063f2fde38b146109355761023b565b8063b88d4fde14610784578063ba4e5c49146107ad578063c6682862146107ea578063c87b56dd14610815578063d5abeb01146108525761023b565b80638da5cb5b116100f25780638da5cb5b146106c357806395d89b41146106ee5780639c70b51214610719578063a22cb46514610744578063a475b5dd1461076d5761023b565b806355f804b3146105de5780635c975abb146106075780636352211e1461063257806370a082311461066f578063715018a6146106ac5761023b565b80632f745c59116101bc57806342842e0e1161018057806342842e0e146104e7578063438b63001461051057806344a0d68a1461054d5780634f6ccce71461057657806351830227146105b35761023b565b80632f745c591461041e5780633af32abf1461045b5780633c952764146104985780633ccfd60b146104c157806340c10f19146104cb5761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d57806318cae269146103b857806323b872dd146103f55761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613a14565b61095e565b60405161027491906140bb565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906139eb565b6109d8565b005b3480156102b257600080fd5b506102bb610a71565b6040516102c891906140d6565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613aa7565b610b03565b6040516103059190614032565b60405180910390f35b34801561031a57600080fd5b50610323610b88565b60405161033091906140d6565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b919061396a565b610c16565b005b34801561036e57600080fd5b50610377610d2e565b60405161038491906143d8565b60405180910390f35b34801561039957600080fd5b506103a2610d34565b6040516103af91906143d8565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906137ff565b610d41565b6040516103ec91906143d8565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613864565b610d59565b005b34801561042a57600080fd5b506104456004803603810190610440919061396a565b610db9565b60405161045291906143d8565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906137ff565b610e5e565b60405161048f91906140bb565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906139eb565b610f33565b005b6104c9610ffd565b005b6104e560048036038101906104e0919061396a565b6113b1565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613864565b6115cc565b005b34801561051c57600080fd5b50610537600480360381019061053291906137ff565b6115ec565b6040516105449190614099565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190613aa7565b6116e6565b005b34801561058257600080fd5b5061059d60048036038101906105989190613aa7565b61176c565b6040516105aa91906143d8565b60405180910390f35b3480156105bf57600080fd5b506105c8611803565b6040516105d591906140bb565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613a66565b611816565b005b34801561061357600080fd5b5061061c6118ac565b60405161062991906140bb565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613aa7565b6118bf565b6040516106669190614032565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906137ff565b611971565b6040516106a391906143d8565b60405180910390f35b3480156106b857600080fd5b506106c1611a29565b005b3480156106cf57600080fd5b506106d8611ab1565b6040516106e59190614032565b60405180910390f35b3480156106fa57600080fd5b50610703611adb565b60405161071091906140d6565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b91906140bb565b60405180910390f35b34801561075057600080fd5b5061076b6004803603810190610766919061392e565b611b80565b005b34801561077957600080fd5b50610782611b96565b005b34801561079057600080fd5b506107ab60048036038101906107a691906138b3565b611c2f565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613aa7565b611c91565b6040516107e19190614032565b60405180910390f35b3480156107f657600080fd5b506107ff611cd0565b60405161080c91906140d6565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190613aa7565b611d5e565b60405161084991906140d6565b60405180910390f35b34801561085e57600080fd5b50610867611eb7565b60405161087491906143d8565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613a66565b611ebd565b005b3480156108b257600080fd5b506108cd60048036038101906108c89190613828565b611f53565b6040516108da91906140bb565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906139a6565b611fe7565b005b34801561091857600080fd5b50610933600480360381019061092e9190613a66565b612087565b005b34801561094157600080fd5b5061095c600480360381019061095791906137ff565b61211d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d157506109d08261222d565b5b9050919050565b6109e061230f565b73ffffffffffffffffffffffffffffffffffffffff166109fe611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90614298565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a80906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac906146e1565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b6000610b0e82612317565b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490614278565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b95906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc1906146e1565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b505050505081565b6000610c21826118bf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990614318565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb161230f565b73ffffffffffffffffffffffffffffffffffffffff161480610ce05750610cdf81610cda61230f565b611f53565b5b610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d16906141d8565b60405180910390fd5b610d298383612383565b505050565b600e5481565b6000600880549050905090565b60126020528060005260406000206000915090505481565b610d6a610d6461230f565b8261243c565b610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090614358565b60405180910390fd5b610db483838361251a565b505050565b6000610dc483611971565b8210610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc906140f8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601180549050811015610f28578273ffffffffffffffffffffffffffffffffffffffff1660118281548110610ec4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f15576001915050610f2e565b8080610f2090614744565b915050610e66565b50600090505b919050565b610f3b61230f565b73ffffffffffffffffffffffffffffffffffffffff16610f59611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690614298565b60405180910390fd5b80601060026101000a81548160ff021916908315150217905550600115158115151415610fea5767010a741a46278000600e81905550610ffa565b67016345785d8a0000600e819055505b50565b61100561230f565b73ffffffffffffffffffffffffffffffffffffffff16611023611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090614298565b60405180910390fd5b6000739b3853a0cdc0b426f6de88ebad895224d6280c2873ffffffffffffffffffffffffffffffffffffffff166103e86019476110b6919061459d565b6110c0919061456c565b6040516110cc9061401d565b60006040518083038185875af1925050503d8060008114611109576040519150601f19603f3d011682016040523d82523d6000602084013e61110e565b606091505b505090508061111c57600080fd5b600073f8e06d0b5581f1a76e2a82c038991d17b4bd7f9b73ffffffffffffffffffffffffffffffffffffffff166103e8602347611159919061459d565b611163919061456c565b60405161116f9061401d565b60006040518083038185875af1925050503d80600081146111ac576040519150601f19603f3d011682016040523d82523d6000602084013e6111b1565b606091505b50509050806111bf57600080fd5b600073f3d60cd7cabb2aaa081858cec8c6c7dce923213373ffffffffffffffffffffffffffffffffffffffff166103e86023476111fc919061459d565b611206919061456c565b6040516112129061401d565b60006040518083038185875af1925050503d806000811461124f576040519150601f19603f3d011682016040523d82523d6000602084013e611254565b606091505b505090508061126257600080fd5b600073bb68fa687c0bbdbe40feb2741d25af4d89511c5b73ffffffffffffffffffffffffffffffffffffffff166127106111ad476112a0919061459d565b6112aa919061456c565b6040516112b69061401d565b60006040518083038185875af1925050503d80600081146112f3576040519150601f19603f3d011682016040523d82523d6000602084013e6112f8565b606091505b505090508061130657600080fd5b600073373d05092fde57314d6324ead0c36ab8c84f179073ffffffffffffffffffffffffffffffffffffffff166127106111ad47611344919061459d565b61134e919061456c565b60405161135a9061401d565b60006040518083038185875af1925050503d8060008114611397576040519150601f19603f3d011682016040523d82523d6000602084013e61139c565b606091505b50509050806113aa57600080fd5b5050505050565b60006113bb610d34565b9050601060009054906101000a900460ff161561140d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611404906142b8565b60405180910390fd5b60008211611450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611447906143b8565b60405180910390fd5b600f54828261145f9190614516565b11156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790614238565b60405180910390fd5b6114a8611ab1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115905760011515601060029054906101000a900460ff161515141561153f576114ff33610e5e565b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614398565b60405180910390fd5b5b81600e5461154d919061459d565b34101561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614338565b60405180910390fd5b5b6000600190505b8281116115c6576115b38482846115ae9190614516565b612776565b80806115be90614744565b915050611597565b50505050565b6115e783838360405180602001604052806000815250611c2f565b505050565b606060006115f983611971565b905060008167ffffffffffffffff81111561163d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561166b5781602001602082028036833780820191505090505b50905060005b828110156116db576116838582610db9565b8282815181106116bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806116d390614744565b915050611671565b508092505050919050565b6116ee61230f565b73ffffffffffffffffffffffffffffffffffffffff1661170c611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614298565b60405180910390fd5b80600e8190555050565b6000611776610d34565b82106117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90614378565b60405180910390fd5b600882815481106117f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61181e61230f565b73ffffffffffffffffffffffffffffffffffffffff1661183c611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990614298565b60405180910390fd5b80600b90805190602001906118a8929190613518565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90614218565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906141f8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3161230f565b73ffffffffffffffffffffffffffffffffffffffff16611a4f611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614298565b60405180910390fd5b611aaf6000612794565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611aea906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b16906146e1565b8015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b601060029054906101000a900460ff1681565b611b92611b8b61230f565b838361285a565b5050565b611b9e61230f565b73ffffffffffffffffffffffffffffffffffffffff16611bbc611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0990614298565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611c40611c3a61230f565b8361243c565b611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614358565b60405180910390fd5b611c8b848484846129c7565b50505050565b60118181548110611ca157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8054611cdd906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d09906146e1565b8015611d565780601f10611d2b57610100808354040283529160200191611d56565b820191906000526020600020905b815481529060010190602001808311611d3957829003601f168201915b505050505081565b6060611d6982612317565b611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f906142f8565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611e5657600d8054611dd1906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfd906146e1565b8015611e4a5780601f10611e1f57610100808354040283529160200191611e4a565b820191906000526020600020905b815481529060010190602001808311611e2d57829003601f168201915b50505050509050611eb2565b6000611e60612a23565b90506000815111611e805760405180602001604052806000815250611eae565b80611e8a84612ab5565b600c604051602001611e9e93929190613fec565b6040516020818303038152906040525b9150505b919050565b600f5481565b611ec561230f565b73ffffffffffffffffffffffffffffffffffffffff16611ee3611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614298565b60405180910390fd5b80600c9080519060200190611f4f929190613518565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fef61230f565b73ffffffffffffffffffffffffffffffffffffffff1661200d611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614298565b60405180910390fd5b60116000612071919061359e565b8181601191906120829291906135bf565b505050565b61208f61230f565b73ffffffffffffffffffffffffffffffffffffffff166120ad611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa90614298565b60405180910390fd5b80600d9080519060200190612119929190613518565b5050565b61212561230f565b73ffffffffffffffffffffffffffffffffffffffff16612143611ab1565b73ffffffffffffffffffffffffffffffffffffffff1614612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614298565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090614138565b60405180910390fd5b61221281612794565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612308575061230782612c62565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123f6836118bf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061244782612317565b612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906141b8565b60405180910390fd5b6000612491836118bf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250057508373ffffffffffffffffffffffffffffffffffffffff166124e884610b03565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251157506125108185611f53565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661253a826118bf565b73ffffffffffffffffffffffffffffffffffffffff1614612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906142d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614178565b60405180910390fd5b61260b838383612ccc565b612616600082612383565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266691906145f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126bd9190614516565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612790828260405180602001604052806000815250612de0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614198565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129ba91906140bb565b60405180910390a3505050565b6129d284848461251a565b6129de84848484612e3b565b612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1490614118565b60405180910390fd5b50505050565b6060600b8054612a32906146e1565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5e906146e1565b8015612aab5780601f10612a8057610100808354040283529160200191612aab565b820191906000526020600020905b815481529060010190602001808311612a8e57829003601f168201915b5050505050905090565b60606000821415612afd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c5d565b600082905060005b60008214612b2f578080612b1890614744565b915050600a82612b28919061456c565b9150612b05565b60008167ffffffffffffffff811115612b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ba35781602001600182028036833780820191505090505b5090505b60008514612c5657600182612bbc91906145f7565b9150600a85612bcb919061478d565b6030612bd79190614516565b60f81b818381518110612c13577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c4f919061456c565b9450612ba7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cd7838383612228565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d1a57612d1581612fd2565b612d59565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5857612d57838261301b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9c57612d9781613188565b612ddb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dda57612dd982826132cb565b5b5b505050565b612dea838361334a565b612df76000848484612e3b565b612e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2d90614118565b60405180910390fd5b505050565b6000612e5c8473ffffffffffffffffffffffffffffffffffffffff16612215565b15612fc5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e8561230f565b8786866040518563ffffffff1660e01b8152600401612ea7949392919061404d565b602060405180830381600087803b158015612ec157600080fd5b505af1925050508015612ef257506040513d601f19601f82011682018060405250810190612eef9190613a3d565b60015b612f75573d8060008114612f22576040519150601f19603f3d011682016040523d82523d6000602084013e612f27565b606091505b50600081511415612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490614118565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fca565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161302884611971565b61303291906145f7565b9050600060076000848152602001908152602001600020549050818114613117576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061319c91906145f7565b90506000600960008481526020019081526020016000205490506000600883815481106131f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061323a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006132d683611971565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b190614258565b60405180910390fd5b6133c381612317565b15613403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fa90614158565b60405180910390fd5b61340f60008383612ccc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345f9190614516565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613524906146e1565b90600052602060002090601f016020900481019282613546576000855561358d565b82601f1061355f57805160ff191683800117855561358d565b8280016001018555821561358d579182015b8281111561358c578251825591602001919060010190613571565b5b50905061359a919061365f565b5090565b50805460008255906000526020600020908101906135bc919061365f565b50565b82805482825590600052602060002090810192821561364e579160200282015b8281111561364d57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906135df565b5b50905061365b919061365f565b5090565b5b80821115613678576000816000905550600101613660565b5090565b600061368f61368a84614418565b6143f3565b9050828152602081018484840111156136a757600080fd5b6136b284828561469f565b509392505050565b60006136cd6136c884614449565b6143f3565b9050828152602081018484840111156136e557600080fd5b6136f084828561469f565b509392505050565b60008135905061370781614e51565b92915050565b60008083601f84011261371f57600080fd5b8235905067ffffffffffffffff81111561373857600080fd5b60208301915083602082028301111561375057600080fd5b9250929050565b60008135905061376681614e68565b92915050565b60008135905061377b81614e7f565b92915050565b60008151905061379081614e7f565b92915050565b600082601f8301126137a757600080fd5b81356137b784826020860161367c565b91505092915050565b600082601f8301126137d157600080fd5b81356137e18482602086016136ba565b91505092915050565b6000813590506137f981614e96565b92915050565b60006020828403121561381157600080fd5b600061381f848285016136f8565b91505092915050565b6000806040838503121561383b57600080fd5b6000613849858286016136f8565b925050602061385a858286016136f8565b9150509250929050565b60008060006060848603121561387957600080fd5b6000613887868287016136f8565b9350506020613898868287016136f8565b92505060406138a9868287016137ea565b9150509250925092565b600080600080608085870312156138c957600080fd5b60006138d7878288016136f8565b94505060206138e8878288016136f8565b93505060406138f9878288016137ea565b925050606085013567ffffffffffffffff81111561391657600080fd5b61392287828801613796565b91505092959194509250565b6000806040838503121561394157600080fd5b600061394f858286016136f8565b925050602061396085828601613757565b9150509250929050565b6000806040838503121561397d57600080fd5b600061398b858286016136f8565b925050602061399c858286016137ea565b9150509250929050565b600080602083850312156139b957600080fd5b600083013567ffffffffffffffff8111156139d357600080fd5b6139df8582860161370d565b92509250509250929050565b6000602082840312156139fd57600080fd5b6000613a0b84828501613757565b91505092915050565b600060208284031215613a2657600080fd5b6000613a348482850161376c565b91505092915050565b600060208284031215613a4f57600080fd5b6000613a5d84828501613781565b91505092915050565b600060208284031215613a7857600080fd5b600082013567ffffffffffffffff811115613a9257600080fd5b613a9e848285016137c0565b91505092915050565b600060208284031215613ab957600080fd5b6000613ac7848285016137ea565b91505092915050565b6000613adc8383613fce565b60208301905092915050565b613af18161462b565b82525050565b6000613b028261449f565b613b0c81856144cd565b9350613b178361447a565b8060005b83811015613b48578151613b2f8882613ad0565b9750613b3a836144c0565b925050600181019050613b1b565b5085935050505092915050565b613b5e8161463d565b82525050565b6000613b6f826144aa565b613b7981856144de565b9350613b898185602086016146ae565b613b928161487a565b840191505092915050565b6000613ba8826144b5565b613bb281856144fa565b9350613bc28185602086016146ae565b613bcb8161487a565b840191505092915050565b6000613be1826144b5565b613beb818561450b565b9350613bfb8185602086016146ae565b80840191505092915050565b60008154613c14816146e1565b613c1e818661450b565b94506001821660008114613c395760018114613c4a57613c7d565b60ff19831686528186019350613c7d565b613c538561448a565b60005b83811015613c7557815481890152600182019150602081019050613c56565b838801955050505b50505092915050565b6000613c93602b836144fa565b9150613c9e8261488b565b604082019050919050565b6000613cb66032836144fa565b9150613cc1826148da565b604082019050919050565b6000613cd96026836144fa565b9150613ce482614929565b604082019050919050565b6000613cfc601c836144fa565b9150613d0782614978565b602082019050919050565b6000613d1f6024836144fa565b9150613d2a826149a1565b604082019050919050565b6000613d426019836144fa565b9150613d4d826149f0565b602082019050919050565b6000613d65602c836144fa565b9150613d7082614a19565b604082019050919050565b6000613d886038836144fa565b9150613d9382614a68565b604082019050919050565b6000613dab602a836144fa565b9150613db682614ab7565b604082019050919050565b6000613dce6029836144fa565b9150613dd982614b06565b604082019050919050565b6000613df16016836144fa565b9150613dfc82614b55565b602082019050919050565b6000613e146020836144fa565b9150613e1f82614b7e565b602082019050919050565b6000613e37602c836144fa565b9150613e4282614ba7565b604082019050919050565b6000613e5a6020836144fa565b9150613e6582614bf6565b602082019050919050565b6000613e7d6016836144fa565b9150613e8882614c1f565b602082019050919050565b6000613ea06029836144fa565b9150613eab82614c48565b604082019050919050565b6000613ec3602f836144fa565b9150613ece82614c97565b604082019050919050565b6000613ee66021836144fa565b9150613ef182614ce6565b604082019050919050565b6000613f096000836144ef565b9150613f1482614d35565b600082019050919050565b6000613f2c6012836144fa565b9150613f3782614d38565b602082019050919050565b6000613f4f6031836144fa565b9150613f5a82614d61565b604082019050919050565b6000613f72602c836144fa565b9150613f7d82614db0565b604082019050919050565b6000613f956017836144fa565b9150613fa082614dff565b602082019050919050565b6000613fb8601b836144fa565b9150613fc382614e28565b602082019050919050565b613fd781614695565b82525050565b613fe681614695565b82525050565b6000613ff88286613bd6565b91506140048285613bd6565b91506140108284613c07565b9150819050949350505050565b600061402882613efc565b9150819050919050565b60006020820190506140476000830184613ae8565b92915050565b60006080820190506140626000830187613ae8565b61406f6020830186613ae8565b61407c6040830185613fdd565b818103606083015261408e8184613b64565b905095945050505050565b600060208201905081810360008301526140b38184613af7565b905092915050565b60006020820190506140d06000830184613b55565b92915050565b600060208201905081810360008301526140f08184613b9d565b905092915050565b6000602082019050818103600083015261411181613c86565b9050919050565b6000602082019050818103600083015261413181613ca9565b9050919050565b6000602082019050818103600083015261415181613ccc565b9050919050565b6000602082019050818103600083015261417181613cef565b9050919050565b6000602082019050818103600083015261419181613d12565b9050919050565b600060208201905081810360008301526141b181613d35565b9050919050565b600060208201905081810360008301526141d181613d58565b9050919050565b600060208201905081810360008301526141f181613d7b565b9050919050565b6000602082019050818103600083015261421181613d9e565b9050919050565b6000602082019050818103600083015261423181613dc1565b9050919050565b6000602082019050818103600083015261425181613de4565b9050919050565b6000602082019050818103600083015261427181613e07565b9050919050565b6000602082019050818103600083015261429181613e2a565b9050919050565b600060208201905081810360008301526142b181613e4d565b9050919050565b600060208201905081810360008301526142d181613e70565b9050919050565b600060208201905081810360008301526142f181613e93565b9050919050565b6000602082019050818103600083015261431181613eb6565b9050919050565b6000602082019050818103600083015261433181613ed9565b9050919050565b6000602082019050818103600083015261435181613f1f565b9050919050565b6000602082019050818103600083015261437181613f42565b9050919050565b6000602082019050818103600083015261439181613f65565b9050919050565b600060208201905081810360008301526143b181613f88565b9050919050565b600060208201905081810360008301526143d181613fab565b9050919050565b60006020820190506143ed6000830184613fdd565b92915050565b60006143fd61440e565b90506144098282614713565b919050565b6000604051905090565b600067ffffffffffffffff8211156144335761443261484b565b5b61443c8261487a565b9050602081019050919050565b600067ffffffffffffffff8211156144645761446361484b565b5b61446d8261487a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061452182614695565b915061452c83614695565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614561576145606147be565b5b828201905092915050565b600061457782614695565b915061458283614695565b925082614592576145916147ed565b5b828204905092915050565b60006145a882614695565b91506145b383614695565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ec576145eb6147be565b5b828202905092915050565b600061460282614695565b915061460d83614695565b9250828210156146205761461f6147be565b5b828203905092915050565b600061463682614675565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146cc5780820151818401526020810190506146b1565b838111156146db576000848401525b50505050565b600060028204905060018216806146f957607f821691505b6020821081141561470d5761470c61481c565b5b50919050565b61471c8261487a565b810181811067ffffffffffffffff8211171561473b5761473a61484b565b5b80604052505050565b600061474f82614695565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614782576147816147be565b5b600182019050919050565b600061479882614695565b91506147a383614695565b9250826147b3576147b26147ed565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614e5a8161462b565b8114614e6557600080fd5b50565b614e718161463d565b8114614e7c57600080fd5b50565b614e8881614649565b8114614e9357600080fd5b50565b614e9f81614695565b8114614eaa57600080fd5b5056fea2646970667358221220dc4b04a48b6d72f770c70d39c5f52b6872f0a33eca2f8bab3bbd24abe67f88e364736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e4d657461205269636820436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d524300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d535732657a7372546543446a4166695a72346e764178363966374378354c4347727765596b77596864386f7a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d546b52744a4b4c6573514446554364397168386351585658594b71424c485256566f397a6a66444e54356b4d2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Meta Rich Club
Arg [1] : _symbol (string): MRC
Arg [2] : _initBaseURI (string): ipfs://QmSW2ezsrTeCDjAfiZr4nvAx69f7Cx5LCGrweYkwYhd8oz/
Arg [3] : _initNotRevealedUri (string): ipfs://QmTkRtJKLesQDFUCd9qh8cQXVXYKqBLHRVVo9zjfDNT5kM/hidden.json
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4d657461205269636820436c7562000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4d52430000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d535732657a7372546543446a4166695a72346e76417836
Arg [10] : 3966374378354c4347727765596b77596864386f7a2f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d546b52744a4b4c65735144465543643971683863515856
Arg [13] : 58594b71424c485256566f397a6a66444e54356b4d2f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44533:4355:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38303:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47889:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25797:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27356:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44680:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44713:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38943:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44932:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28106:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38611:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46043:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47692:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48123:762;;;:::i;:::-;;45411:628;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28516:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46288:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47244:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39133:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44818:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47332:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44787:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25491:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:103;;;;;;;;;;;;;:::i;:::-;;4116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25966:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44851:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27649:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47157:65;;;;;;;;;;;;;:::i;:::-;;28772:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44890:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44638;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46642:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44751:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47436:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27875:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47968:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47566:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38303:224;38405:4;38444:35;38429:50;;;:11;:50;;;;:90;;;;38483:36;38507:11;38483:23;:36::i;:::-;38429:90;38422:97;;38303:224;;;:::o;47889:73::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47950:6:::1;47941;;:15;;;;;;;;;;;;;;;;;;47889:73:::0;:::o;25797:100::-;25851:13;25884:5;25877:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25797:100;:::o;27356:221::-;27432:7;27460:16;27468:7;27460;:16::i;:::-;27452:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27545:15;:24;27561:7;27545:24;;;;;;;;;;;;;;;;;;;;;27538:31;;27356:221;;;:::o;44680:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26879:411::-;26960:13;26976:23;26991:7;26976:14;:23::i;:::-;26960:39;;27024:5;27018:11;;:2;:11;;;;27010:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27118:5;27102:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27127:37;27144:5;27151:12;:10;:12::i;:::-;27127:16;:37::i;:::-;27102:62;27080:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27261:21;27270:2;27274:7;27261:8;:21::i;:::-;26879:411;;;:::o;44713:33::-;;;;:::o;38943:113::-;39004:7;39031:10;:17;;;;39024:24;;38943:113;:::o;44932:55::-;;;;;;;;;;;;;;;;;:::o;28106:339::-;28301:41;28320:12;:10;:12::i;:::-;28334:7;28301:18;:41::i;:::-;28293:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28409:28;28419:4;28425:2;28429:7;28409:9;:28::i;:::-;28106:339;;;:::o;38611:256::-;38708:7;38744:23;38761:5;38744:16;:23::i;:::-;38736:5;:31;38728:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:12;:19;38846:5;38833:19;;;;;;;;;;;;;;;:26;38853:5;38833:26;;;;;;;;;;;;38826:33;;38611:256;;;;:::o;46043:239::-;46102:4;46120:6;46129:1;46120:10;;46115:143;46136:20;:27;;;;46132:1;:31;46115:143;;;46210:5;46183:32;;:20;46204:1;46183:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;46179:72;;;46237:4;46230:11;;;;;46179:72;46165:3;;;;;:::i;:::-;;;;46115:143;;;;46271:5;46264:12;;46043:239;;;;:::o;47692:191::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47775:6:::1;47757:15;;:24;;;;;;;;;;;;;;;;;;47801:4;47791:14;;:6;:14;;;47788:90;;;47822:11;47815:4;:18;;;;47788:90;;;47861:9;47854:4;:16;;;;47788:90;47692:191:::0;:::o;48123:762::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48176:7:::1;48197:42;48189:56;;48282:4;48277:2;48253:21;:26;;;;:::i;:::-;:33;;;;:::i;:::-;48189:102;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48175:116;;;48306:2;48298:11;;;::::0;::::1;;48317:7;48338:42;48330:56;;48423:4;48418:2;48394:21;:26;;;;:::i;:::-;:33;;;;:::i;:::-;48330:102;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48316:116;;;48447:2;48439:11;;;::::0;::::1;;48458:7;48479:42;48471:56;;48564:4;48559:2;48535:21;:26;;;;:::i;:::-;:33;;;;:::i;:::-;48471:102;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48457:116;;;48588:2;48580:11;;;::::0;::::1;;48599:7;48620:42;48612:56;;48707:5;48700:4;48676:21;:28;;;;:::i;:::-;:36;;;;:::i;:::-;48612:105;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48598:119;;;48732:2;48724:11;;;::::0;::::1;;48743:7;48764:42;48756:56;;48851:5;48844:4;48820:21;:28;;;;:::i;:::-;:36;;;;:::i;:::-;48756:105;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48742:119;;;48876:2;48868:11;;;::::0;::::1;;4407:1;;;;;48123:762::o:0;45411:628::-;45481:14;45498:13;:11;:13::i;:::-;45481:30;;45527:6;;;;;;;;;;;45526:7;45518:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45589:1;45575:11;:15;45567:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45661:9;;45646:11;45637:6;:20;;;;:::i;:::-;:33;;45629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45724:7;:5;:7::i;:::-;45710:21;;:10;:21;;;45706:234;;45766:4;45747:23;;:15;;;;;;;;;;;:23;;;45744:116;;;45795:25;45809:10;45795:13;:25::i;:::-;45787:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45744:116;45898:11;45891:4;;:18;;;;:::i;:::-;45878:9;:31;;45870:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45706:234;45953:9;45965:1;45953:13;;45948:86;45973:11;45968:1;:16;45948:86;;46000:26;46010:3;46024:1;46015:6;:10;;;;:::i;:::-;46000:9;:26::i;:::-;45986:3;;;;;:::i;:::-;;;;45948:86;;;;45411:628;;;:::o;28516:185::-;28654:39;28671:4;28677:2;28681:7;28654:39;;;;;;;;;;;;:16;:39::i;:::-;28516:185;;;:::o;46288:348::-;46363:16;46391:23;46417:17;46427:6;46417:9;:17::i;:::-;46391:43;;46441:25;46483:15;46469:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46441:58;;46511:9;46506:103;46526:15;46522:1;:19;46506:103;;;46571:30;46591:6;46599:1;46571:19;:30::i;:::-;46557:8;46566:1;46557:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;46543:3;;;;;:::i;:::-;;;;46506:103;;;;46622:8;46615:15;;;;46288:348;;;:::o;47244:80::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47310:8:::1;47303:4;:15;;;;47244:80:::0;:::o;39133:233::-;39208:7;39244:30;:28;:30::i;:::-;39236:5;:38;39228:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:10;39352:5;39341:17;;;;;;;;;;;;;;;;;;;;;;;;39334:24;;39133:233;;;:::o;44818:28::-;;;;;;;;;;;;;:::o;47332:98::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47413:11:::1;47403:7;:21;;;;;;;;;;;;:::i;:::-;;47332:98:::0;:::o;44787:26::-;;;;;;;;;;;;;:::o;25491:239::-;25563:7;25583:13;25599:7;:16;25607:7;25599:16;;;;;;;;;;;;;;;;;;;;;25583:32;;25651:1;25634:19;;:5;:19;;;;25626:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25717:5;25710:12;;;25491:239;;;:::o;25221:208::-;25293:7;25338:1;25321:19;;:5;:19;;;;25313:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25405:9;:16;25415:5;25405:16;;;;;;;;;;;;;;;;25398:23;;25221:208;;;:::o;4767:103::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;4116:87::-;4162:7;4189:6;;;;;;;;;;;4182:13;;4116:87;:::o;25966:104::-;26022:13;26055:7;26048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25966:104;:::o;44851:34::-;;;;;;;;;;;;;:::o;27649:155::-;27744:52;27763:12;:10;:12::i;:::-;27777:8;27787;27744:18;:52::i;:::-;27649:155;;:::o;47157:65::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47212:4:::1;47201:8;;:15;;;;;;;;;;;;;;;;;;47157:65::o:0;28772:328::-;28947:41;28966:12;:10;:12::i;:::-;28980:7;28947:18;:41::i;:::-;28939:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29053:39;29067:4;29073:2;29077:7;29086:5;29053:13;:39::i;:::-;28772:328;;;;:::o;44890:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44638:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46642:493::-;46740:13;46781:16;46789:7;46781;:16::i;:::-;46765:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46886:5;46874:17;;:8;;;;;;;;;;;:17;;;46871:62;;;46911:14;46904:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46871:62;46941:28;46972:10;:8;:10::i;:::-;46941:41;;47027:1;47002:14;46996:28;:32;:133;;;;;;;;;;;;;;;;;47064:14;47080:18;:7;:16;:18::i;:::-;47100:13;47047:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46996:133;46989:140;;;46642:493;;;;:::o;44751:31::-;;;;:::o;47436:122::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47535:17:::1;47519:13;:33;;;;;;;;;;;;:::i;:::-;;47436:122:::0;:::o;27875:164::-;27972:4;27996:18;:25;28015:5;27996:25;;;;;;;;;;;;;;;:35;28022:8;27996:35;;;;;;;;;;;;;;;;;;;;;;;;;27989:42;;27875:164;;;;:::o;47968:144::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48050:20:::1;;48043:27;;;;:::i;:::-;48100:6;;48077:20;:29;;;;;;;:::i;:::-;;47968:144:::0;;:::o;47566:120::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47665:15:::1;47648:14;:32;;;;;;;;;;;;:::i;:::-;;47566:120:::0;:::o;5025:201::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5134:1:::1;5114:22;;:8;:22;;;;5106:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;6404:387::-;6464:4;6672:12;6739:7;6727:20;6719:28;;6782:1;6775:4;:8;6768:15;;;6404:387;;;:::o;37159:126::-;;;;:::o;24852:305::-;24954:4;25006:25;24991:40;;;:11;:40;;;;:105;;;;25063:33;25048:48;;;:11;:48;;;;24991:105;:158;;;;25113:36;25137:11;25113:23;:36::i;:::-;24991:158;24971:178;;24852:305;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;30610:127::-;30675:4;30727:1;30699:30;;:7;:16;30707:7;30699:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30692:37;;30610:127;;;:::o;34592:174::-;34694:2;34667:15;:24;34683:7;34667:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34750:7;34746:2;34712:46;;34721:23;34736:7;34721:14;:23::i;:::-;34712:46;;;;;;;;;;;;34592:174;;:::o;30904:348::-;30997:4;31022:16;31030:7;31022;:16::i;:::-;31014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31098:13;31114:23;31129:7;31114:14;:23::i;:::-;31098:39;;31167:5;31156:16;;:7;:16;;;:51;;;;31200:7;31176:31;;:20;31188:7;31176:11;:20::i;:::-;:31;;;31156:51;:87;;;;31211:32;31228:5;31235:7;31211:16;:32::i;:::-;31156:87;31148:96;;;30904:348;;;;:::o;33896:578::-;34055:4;34028:31;;:23;34043:7;34028:14;:23::i;:::-;:31;;;34020:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34138:1;34124:16;;:2;:16;;;;34116:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34194:39;34215:4;34221:2;34225:7;34194:20;:39::i;:::-;34298:29;34315:1;34319:7;34298:8;:29::i;:::-;34359:1;34340:9;:15;34350:4;34340:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34388:1;34371:9;:13;34381:2;34371:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34419:2;34400:7;:16;34408:7;34400:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34458:7;34454:2;34439:27;;34448:4;34439:27;;;;;;;;;;;;33896:578;;;:::o;31594:110::-;31670:26;31680:2;31684:7;31670:26;;;;;;;;;;;;:9;:26::i;:::-;31594:110;;:::o;5386:191::-;5460:16;5479:6;;;;;;;;;;;5460:25;;5505:8;5496:6;;:17;;;;;;;;;;;;;;;;;;5560:8;5529:40;;5550:8;5529:40;;;;;;;;;;;;5386:191;;:::o;34908:315::-;35063:8;35054:17;;:5;:17;;;;35046:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35150:8;35112:18;:25;35131:5;35112:25;;;;;;;;;;;;;;;:35;35138:8;35112:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35196:8;35174:41;;35189:5;35174:41;;;35206:8;35174:41;;;;;;:::i;:::-;;;;;;;;34908:315;;;:::o;29982:::-;30139:28;30149:4;30155:2;30159:7;30139:9;:28::i;:::-;30186:48;30209:4;30215:2;30219:7;30228:5;30186:22;:48::i;:::-;30178:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:315;;;;:::o;45290:102::-;45350:13;45379:7;45372:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45290:102;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;16548:157::-;16633:4;16672:25;16657:40;;;:11;:40;;;;16650:47;;16548:157;;;:::o;39979:589::-;40123:45;40150:4;40156:2;40160:7;40123:26;:45::i;:::-;40201:1;40185:18;;:4;:18;;;40181:187;;;40220:40;40252:7;40220:31;:40::i;:::-;40181:187;;;40290:2;40282:10;;:4;:10;;;40278:90;;40309:47;40342:4;40348:7;40309:32;:47::i;:::-;40278:90;40181:187;40396:1;40382:16;;:2;:16;;;40378:183;;;40415:45;40452:7;40415:36;:45::i;:::-;40378:183;;;40488:4;40482:10;;:2;:10;;;40478:83;;40509:40;40537:2;40541:7;40509:27;:40::i;:::-;40478:83;40378:183;39979:589;;;:::o;31931:321::-;32061:18;32067:2;32071:7;32061:5;:18::i;:::-;32112:54;32143:1;32147:2;32151:7;32160:5;32112:22;:54::i;:::-;32090:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31931:321;;;:::o;35788:799::-;35943:4;35964:15;:2;:13;;;:15::i;:::-;35960:620;;;36016:2;36000:36;;;36037:12;:10;:12::i;:::-;36051:4;36057:7;36066:5;36000:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35996:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36259:1;36242:6;:13;:18;36238:272;;;36285:60;;;;;;;;;;:::i;:::-;;;;;;;;36238:272;36460:6;36454:13;36445:6;36441:2;36437:15;36430:38;35996:529;36133:41;;;36123:51;;;:6;:51;;;;36116:58;;;;;35960:620;36564:4;36557:11;;35788:799;;;;;;;:::o;41291:164::-;41395:10;:17;;;;41368:15;:24;41384:7;41368:24;;;;;;;;;;;:44;;;;41423:10;41439:7;41423:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41291:164;:::o;42082:988::-;42348:22;42398:1;42373:22;42390:4;42373:16;:22::i;:::-;:26;;;;:::i;:::-;42348:51;;42410:18;42431:17;:26;42449:7;42431:26;;;;;;;;;;;;42410:47;;42578:14;42564:10;:28;42560:328;;42609:19;42631:12;:18;42644:4;42631:18;;;;;;;;;;;;;;;:34;42650:14;42631:34;;;;;;;;;;;;42609:56;;42715:11;42682:12;:18;42695:4;42682:18;;;;;;;;;;;;;;;:30;42701:10;42682:30;;;;;;;;;;;:44;;;;42832:10;42799:17;:30;42817:11;42799:30;;;;;;;;;;;:43;;;;42560:328;;42984:17;:26;43002:7;42984:26;;;;;;;;;;;42977:33;;;43028:12;:18;43041:4;43028:18;;;;;;;;;;;;;;;:34;43047:14;43028:34;;;;;;;;;;;43021:41;;;42082:988;;;;:::o;43365:1079::-;43618:22;43663:1;43643:10;:17;;;;:21;;;;:::i;:::-;43618:46;;43675:18;43696:15;:24;43712:7;43696:24;;;;;;;;;;;;43675:45;;44047:19;44069:10;44080:14;44069:26;;;;;;;;;;;;;;;;;;;;;;;;44047:48;;44133:11;44108:10;44119;44108:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44244:10;44213:15;:28;44229:11;44213:28;;;;;;;;;;;:41;;;;44385:15;:24;44401:7;44385:24;;;;;;;;;;;44378:31;;;44420:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43365:1079;;;;:::o;40869:221::-;40954:14;40971:20;40988:2;40971:16;:20::i;:::-;40954:37;;41029:7;41002:12;:16;41015:2;41002:16;;;;;;;;;;;;;;;:24;41019:6;41002:24;;;;;;;;;;;:34;;;;41076:6;41047:17;:26;41065:7;41047:26;;;;;;;;;;;:35;;;;40869:221;;;:::o;32588:382::-;32682:1;32668:16;;:2;:16;;;;32660:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32741:16;32749:7;32741;:16::i;:::-;32740:17;32732:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32803:45;32832:1;32836:2;32840:7;32803:20;:45::i;:::-;32878:1;32861:9;:13;32871:2;32861:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32909:2;32890:7;:16;32898:7;32890:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32954:7;32950:2;32929:33;;32946:1;32929:33;;;;;;;;;;;;32588:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;1426:5;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;1580:5;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;1739:5;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1975:273::-;2031:5;2080:3;2073:4;2065:6;2061:17;2057:27;2047:2;;2098:1;2095;2088:12;2047:2;2138:6;2125:20;2163:79;2238:3;2230:6;2223:4;2215:6;2211:17;2163:79;:::i;:::-;2154:88;;2037:211;;;;;:::o;2254:139::-;2300:5;2338:6;2325:20;2316:29;;2354:33;2381:5;2354:33;:::i;:::-;2306:87;;;;:::o;2399:262::-;2458:6;2507:2;2495:9;2486:7;2482:23;2478:32;2475:2;;;2523:1;2520;2513:12;2475:2;2566:1;2591:53;2636:7;2627:6;2616:9;2612:22;2591:53;:::i;:::-;2581:63;;2537:117;2465:196;;;;:::o;2667:407::-;2735:6;2743;2792:2;2780:9;2771:7;2767:23;2763:32;2760:2;;;2808:1;2805;2798:12;2760:2;2851:1;2876:53;2921:7;2912:6;2901:9;2897:22;2876:53;:::i;:::-;2866:63;;2822:117;2978:2;3004:53;3049:7;3040:6;3029:9;3025:22;3004:53;:::i;:::-;2994:63;;2949:118;2750:324;;;;;:::o;3080:552::-;3157:6;3165;3173;3222:2;3210:9;3201:7;3197:23;3193:32;3190:2;;;3238:1;3235;3228:12;3190:2;3281:1;3306:53;3351:7;3342:6;3331:9;3327:22;3306:53;:::i;:::-;3296:63;;3252:117;3408:2;3434:53;3479:7;3470:6;3459:9;3455:22;3434:53;:::i;:::-;3424:63;;3379:118;3536:2;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3507:118;3180:452;;;;;:::o;3638:809::-;3733:6;3741;3749;3757;3806:3;3794:9;3785:7;3781:23;3777:33;3774:2;;;3823:1;3820;3813:12;3774:2;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;4277:2;4266:9;4262:18;4249:32;4308:18;4300:6;4297:30;4294:2;;;4340:1;4337;4330:12;4294:2;4368:62;4422:7;4413:6;4402:9;4398:22;4368:62;:::i;:::-;4358:72;;4220:220;3764:683;;;;;;;:::o;4453:401::-;4518:6;4526;4575:2;4563:9;4554:7;4550:23;4546:32;4543:2;;;4591:1;4588;4581:12;4543:2;4634:1;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4605:117;4761:2;4787:50;4829:7;4820:6;4809:9;4805:22;4787:50;:::i;:::-;4777:60;;4732:115;4533:321;;;;;:::o;4860:407::-;4928:6;4936;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5001:1;4998;4991:12;4953:2;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4943:324;;;;;:::o;5273:425::-;5359:6;5367;5416:2;5404:9;5395:7;5391:23;5387:32;5384:2;;;5432:1;5429;5422:12;5384:2;5503:1;5492:9;5488:17;5475:31;5533:18;5525:6;5522:30;5519:2;;;5565:1;5562;5555:12;5519:2;5601:80;5673:7;5664:6;5653:9;5649:22;5601:80;:::i;:::-;5583:98;;;;5446:245;5374:324;;;;;:::o;5704:256::-;5760:6;5809:2;5797:9;5788:7;5784:23;5780:32;5777:2;;;5825:1;5822;5815:12;5777:2;5868:1;5893:50;5935:7;5926:6;5915:9;5911:22;5893:50;:::i;:::-;5883:60;;5839:114;5767:193;;;;:::o;5966:260::-;6024:6;6073:2;6061:9;6052:7;6048:23;6044:32;6041:2;;;6089:1;6086;6079:12;6041:2;6132:1;6157:52;6201:7;6192:6;6181:9;6177:22;6157:52;:::i;:::-;6147:62;;6103:116;6031:195;;;;:::o;6232:282::-;6301:6;6350:2;6338:9;6329:7;6325:23;6321:32;6318:2;;;6366:1;6363;6356:12;6318:2;6409:1;6434:63;6489:7;6480:6;6469:9;6465:22;6434:63;:::i;:::-;6424:73;;6380:127;6308:206;;;;:::o;6520:375::-;6589:6;6638:2;6626:9;6617:7;6613:23;6609:32;6606:2;;;6654:1;6651;6644:12;6606:2;6725:1;6714:9;6710:17;6697:31;6755:18;6747:6;6744:30;6741:2;;;6787:1;6784;6777:12;6741:2;6815:63;6870:7;6861:6;6850:9;6846:22;6815:63;:::i;:::-;6805:73;;6668:220;6596:299;;;;:::o;6901:262::-;6960:6;7009:2;6997:9;6988:7;6984:23;6980:32;6977:2;;;7025:1;7022;7015:12;6977:2;7068:1;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7039:117;6967:196;;;;:::o;7169:179::-;7238:10;7259:46;7301:3;7293:6;7259:46;:::i;:::-;7337:4;7332:3;7328:14;7314:28;;7249:99;;;;:::o;7354:118::-;7441:24;7459:5;7441:24;:::i;:::-;7436:3;7429:37;7419:53;;:::o;7508:732::-;7627:3;7656:54;7704:5;7656:54;:::i;:::-;7726:86;7805:6;7800:3;7726:86;:::i;:::-;7719:93;;7836:56;7886:5;7836:56;:::i;:::-;7915:7;7946:1;7931:284;7956:6;7953:1;7950:13;7931:284;;;8032:6;8026:13;8059:63;8118:3;8103:13;8059:63;:::i;:::-;8052:70;;8145:60;8198:6;8145:60;:::i;:::-;8135:70;;7991:224;7978:1;7975;7971:9;7966:14;;7931:284;;;7935:14;8231:3;8224:10;;7632:608;;;;;;;:::o;8246:109::-;8327:21;8342:5;8327:21;:::i;:::-;8322:3;8315:34;8305:50;;:::o;8361:360::-;8447:3;8475:38;8507:5;8475:38;:::i;:::-;8529:70;8592:6;8587:3;8529:70;:::i;:::-;8522:77;;8608:52;8653:6;8648:3;8641:4;8634:5;8630:16;8608:52;:::i;:::-;8685:29;8707:6;8685:29;:::i;:::-;8680:3;8676:39;8669:46;;8451:270;;;;;:::o;8727:364::-;8815:3;8843:39;8876:5;8843:39;:::i;:::-;8898:71;8962:6;8957:3;8898:71;:::i;:::-;8891:78;;8978:52;9023:6;9018:3;9011:4;9004:5;9000:16;8978:52;:::i;:::-;9055:29;9077:6;9055:29;:::i;:::-;9050:3;9046:39;9039:46;;8819:272;;;;;:::o;9097:377::-;9203:3;9231:39;9264:5;9231:39;:::i;:::-;9286:89;9368:6;9363:3;9286:89;:::i;:::-;9279:96;;9384:52;9429:6;9424:3;9417:4;9410:5;9406:16;9384:52;:::i;:::-;9461:6;9456:3;9452:16;9445:23;;9207:267;;;;;:::o;9504:845::-;9607:3;9644:5;9638:12;9673:36;9699:9;9673:36;:::i;:::-;9725:89;9807:6;9802:3;9725:89;:::i;:::-;9718:96;;9845:1;9834:9;9830:17;9861:1;9856:137;;;;10007:1;10002:341;;;;9823:520;;9856:137;9940:4;9936:9;9925;9921:25;9916:3;9909:38;9976:6;9971:3;9967:16;9960:23;;9856:137;;10002:341;10069:38;10101:5;10069:38;:::i;:::-;10129:1;10143:154;10157:6;10154:1;10151:13;10143:154;;;10231:7;10225:14;10221:1;10216:3;10212:11;10205:35;10281:1;10272:7;10268:15;10257:26;;10179:4;10176:1;10172:12;10167:17;;10143:154;;;10326:6;10321:3;10317:16;10310:23;;10009:334;;9823:520;;9611:738;;;;;;:::o;10355:366::-;10497:3;10518:67;10582:2;10577:3;10518:67;:::i;:::-;10511:74;;10594:93;10683:3;10594:93;:::i;:::-;10712:2;10707:3;10703:12;10696:19;;10501:220;;;:::o;10727:366::-;10869:3;10890:67;10954:2;10949:3;10890:67;:::i;:::-;10883:74;;10966:93;11055:3;10966:93;:::i;:::-;11084:2;11079:3;11075:12;11068:19;;10873:220;;;:::o;11099:366::-;11241:3;11262:67;11326:2;11321:3;11262:67;:::i;:::-;11255:74;;11338:93;11427:3;11338:93;:::i;:::-;11456:2;11451:3;11447:12;11440:19;;11245:220;;;:::o;11471:366::-;11613:3;11634:67;11698:2;11693:3;11634:67;:::i;:::-;11627:74;;11710:93;11799:3;11710:93;:::i;:::-;11828:2;11823:3;11819:12;11812:19;;11617:220;;;:::o;11843:366::-;11985:3;12006:67;12070:2;12065:3;12006:67;:::i;:::-;11999:74;;12082:93;12171:3;12082:93;:::i;:::-;12200:2;12195:3;12191:12;12184:19;;11989:220;;;:::o;12215:366::-;12357:3;12378:67;12442:2;12437:3;12378:67;:::i;:::-;12371:74;;12454:93;12543:3;12454:93;:::i;:::-;12572:2;12567:3;12563:12;12556:19;;12361:220;;;:::o;12587:366::-;12729:3;12750:67;12814:2;12809:3;12750:67;:::i;:::-;12743:74;;12826:93;12915:3;12826:93;:::i;:::-;12944:2;12939:3;12935:12;12928:19;;12733:220;;;:::o;12959:366::-;13101:3;13122:67;13186:2;13181:3;13122:67;:::i;:::-;13115:74;;13198:93;13287:3;13198:93;:::i;:::-;13316:2;13311:3;13307:12;13300:19;;13105:220;;;:::o;13331:366::-;13473:3;13494:67;13558:2;13553:3;13494:67;:::i;:::-;13487:74;;13570:93;13659:3;13570:93;:::i;:::-;13688:2;13683:3;13679:12;13672:19;;13477:220;;;:::o;13703:366::-;13845:3;13866:67;13930:2;13925:3;13866:67;:::i;:::-;13859:74;;13942:93;14031:3;13942:93;:::i;:::-;14060:2;14055:3;14051:12;14044:19;;13849:220;;;:::o;14075:366::-;14217:3;14238:67;14302:2;14297:3;14238:67;:::i;:::-;14231:74;;14314:93;14403:3;14314:93;:::i;:::-;14432:2;14427:3;14423:12;14416:19;;14221:220;;;:::o;14447:366::-;14589:3;14610:67;14674:2;14669:3;14610:67;:::i;:::-;14603:74;;14686:93;14775:3;14686:93;:::i;:::-;14804:2;14799:3;14795:12;14788:19;;14593:220;;;:::o;14819:366::-;14961:3;14982:67;15046:2;15041:3;14982:67;:::i;:::-;14975:74;;15058:93;15147:3;15058:93;:::i;:::-;15176:2;15171:3;15167:12;15160:19;;14965:220;;;:::o;15191:366::-;15333:3;15354:67;15418:2;15413:3;15354:67;:::i;:::-;15347:74;;15430:93;15519:3;15430:93;:::i;:::-;15548:2;15543:3;15539:12;15532:19;;15337:220;;;:::o;15563:366::-;15705:3;15726:67;15790:2;15785:3;15726:67;:::i;:::-;15719:74;;15802:93;15891:3;15802:93;:::i;:::-;15920:2;15915:3;15911:12;15904:19;;15709:220;;;:::o;15935:366::-;16077:3;16098:67;16162:2;16157:3;16098:67;:::i;:::-;16091:74;;16174:93;16263:3;16174:93;:::i;:::-;16292:2;16287:3;16283:12;16276:19;;16081:220;;;:::o;16307:366::-;16449:3;16470:67;16534:2;16529:3;16470:67;:::i;:::-;16463:74;;16546:93;16635:3;16546:93;:::i;:::-;16664:2;16659:3;16655:12;16648:19;;16453:220;;;:::o;16679:366::-;16821:3;16842:67;16906:2;16901:3;16842:67;:::i;:::-;16835:74;;16918:93;17007:3;16918:93;:::i;:::-;17036:2;17031:3;17027:12;17020:19;;16825:220;;;:::o;17051:398::-;17210:3;17231:83;17312:1;17307:3;17231:83;:::i;:::-;17224:90;;17323:93;17412:3;17323:93;:::i;:::-;17441:1;17436:3;17432:11;17425:18;;17214:235;;;:::o;17455:366::-;17597:3;17618:67;17682:2;17677:3;17618:67;:::i;:::-;17611:74;;17694:93;17783:3;17694:93;:::i;:::-;17812:2;17807:3;17803:12;17796:19;;17601:220;;;:::o;17827:366::-;17969:3;17990:67;18054:2;18049:3;17990:67;:::i;:::-;17983:74;;18066:93;18155:3;18066:93;:::i;:::-;18184:2;18179:3;18175:12;18168:19;;17973:220;;;:::o;18199:366::-;18341:3;18362:67;18426:2;18421:3;18362:67;:::i;:::-;18355:74;;18438:93;18527:3;18438:93;:::i;:::-;18556:2;18551:3;18547:12;18540:19;;18345:220;;;:::o;18571:366::-;18713:3;18734:67;18798:2;18793:3;18734:67;:::i;:::-;18727:74;;18810:93;18899:3;18810:93;:::i;:::-;18928:2;18923:3;18919:12;18912:19;;18717:220;;;:::o;18943:366::-;19085:3;19106:67;19170:2;19165:3;19106:67;:::i;:::-;19099:74;;19182:93;19271:3;19182:93;:::i;:::-;19300:2;19295:3;19291:12;19284:19;;19089:220;;;:::o;19315:108::-;19392:24;19410:5;19392:24;:::i;:::-;19387:3;19380:37;19370:53;;:::o;19429:118::-;19516:24;19534:5;19516:24;:::i;:::-;19511:3;19504:37;19494:53;;:::o;19553:589::-;19778:3;19800:95;19891:3;19882:6;19800:95;:::i;:::-;19793:102;;19912:95;20003:3;19994:6;19912:95;:::i;:::-;19905:102;;20024:92;20112:3;20103:6;20024:92;:::i;:::-;20017:99;;20133:3;20126:10;;19782:360;;;;;;:::o;20148:379::-;20332:3;20354:147;20497:3;20354:147;:::i;:::-;20347:154;;20518:3;20511:10;;20336:191;;;:::o;20533:222::-;20626:4;20664:2;20653:9;20649:18;20641:26;;20677:71;20745:1;20734:9;20730:17;20721:6;20677:71;:::i;:::-;20631:124;;;;:::o;20761:640::-;20956:4;20994:3;20983:9;20979:19;20971:27;;21008:71;21076:1;21065:9;21061:17;21052:6;21008:71;:::i;:::-;21089:72;21157:2;21146:9;21142:18;21133:6;21089:72;:::i;:::-;21171;21239:2;21228:9;21224:18;21215:6;21171:72;:::i;:::-;21290:9;21284:4;21280:20;21275:2;21264:9;21260:18;21253:48;21318:76;21389:4;21380:6;21318:76;:::i;:::-;21310:84;;20961:440;;;;;;;:::o;21407:373::-;21550:4;21588:2;21577:9;21573:18;21565:26;;21637:9;21631:4;21627:20;21623:1;21612:9;21608:17;21601:47;21665:108;21768:4;21759:6;21665:108;:::i;:::-;21657:116;;21555:225;;;;:::o;21786:210::-;21873:4;21911:2;21900:9;21896:18;21888:26;;21924:65;21986:1;21975:9;21971:17;21962:6;21924:65;:::i;:::-;21878:118;;;;:::o;22002:313::-;22115:4;22153:2;22142:9;22138:18;22130:26;;22202:9;22196:4;22192:20;22188:1;22177:9;22173:17;22166:47;22230:78;22303:4;22294:6;22230:78;:::i;:::-;22222:86;;22120:195;;;;:::o;22321:419::-;22487:4;22525:2;22514:9;22510:18;22502:26;;22574:9;22568:4;22564:20;22560:1;22549:9;22545:17;22538:47;22602:131;22728:4;22602:131;:::i;:::-;22594:139;;22492:248;;;:::o;22746:419::-;22912:4;22950:2;22939:9;22935:18;22927:26;;22999:9;22993:4;22989:20;22985:1;22974:9;22970:17;22963:47;23027:131;23153:4;23027:131;:::i;:::-;23019:139;;22917:248;;;:::o;23171:419::-;23337:4;23375:2;23364:9;23360:18;23352:26;;23424:9;23418:4;23414:20;23410:1;23399:9;23395:17;23388:47;23452:131;23578:4;23452:131;:::i;:::-;23444:139;;23342:248;;;:::o;23596:419::-;23762:4;23800:2;23789:9;23785:18;23777:26;;23849:9;23843:4;23839:20;23835:1;23824:9;23820:17;23813:47;23877:131;24003:4;23877:131;:::i;:::-;23869:139;;23767:248;;;:::o;24021:419::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24274:9;24268:4;24264:20;24260:1;24249:9;24245:17;24238:47;24302:131;24428:4;24302:131;:::i;:::-;24294:139;;24192:248;;;:::o;24446:419::-;24612:4;24650:2;24639:9;24635:18;24627:26;;24699:9;24693:4;24689:20;24685:1;24674:9;24670:17;24663:47;24727:131;24853:4;24727:131;:::i;:::-;24719:139;;24617:248;;;:::o;24871:419::-;25037:4;25075:2;25064:9;25060:18;25052:26;;25124:9;25118:4;25114:20;25110:1;25099:9;25095:17;25088:47;25152:131;25278:4;25152:131;:::i;:::-;25144:139;;25042:248;;;:::o;25296:419::-;25462:4;25500:2;25489:9;25485:18;25477:26;;25549:9;25543:4;25539:20;25535:1;25524:9;25520:17;25513:47;25577:131;25703:4;25577:131;:::i;:::-;25569:139;;25467:248;;;:::o;25721:419::-;25887:4;25925:2;25914:9;25910:18;25902:26;;25974:9;25968:4;25964:20;25960:1;25949:9;25945:17;25938:47;26002:131;26128:4;26002:131;:::i;:::-;25994:139;;25892:248;;;:::o;26146:419::-;26312:4;26350:2;26339:9;26335:18;26327:26;;26399:9;26393:4;26389:20;26385:1;26374:9;26370:17;26363:47;26427:131;26553:4;26427:131;:::i;:::-;26419:139;;26317:248;;;:::o;26571:419::-;26737:4;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26742:248;;;:::o;26996:419::-;27162:4;27200:2;27189:9;27185:18;27177:26;;27249:9;27243:4;27239:20;27235:1;27224:9;27220:17;27213:47;27277:131;27403:4;27277:131;:::i;:::-;27269:139;;27167:248;;;:::o;27421:419::-;27587:4;27625:2;27614:9;27610:18;27602:26;;27674:9;27668:4;27664:20;27660:1;27649:9;27645:17;27638:47;27702:131;27828:4;27702:131;:::i;:::-;27694:139;;27592:248;;;:::o;27846:419::-;28012:4;28050:2;28039:9;28035:18;28027:26;;28099:9;28093:4;28089:20;28085:1;28074:9;28070:17;28063:47;28127:131;28253:4;28127:131;:::i;:::-;28119:139;;28017:248;;;:::o;28271:419::-;28437:4;28475:2;28464:9;28460:18;28452:26;;28524:9;28518:4;28514:20;28510:1;28499:9;28495:17;28488:47;28552:131;28678:4;28552:131;:::i;:::-;28544:139;;28442:248;;;:::o;28696:419::-;28862:4;28900:2;28889:9;28885:18;28877:26;;28949:9;28943:4;28939:20;28935:1;28924:9;28920:17;28913:47;28977:131;29103:4;28977:131;:::i;:::-;28969:139;;28867:248;;;:::o;29121:419::-;29287:4;29325:2;29314:9;29310:18;29302:26;;29374:9;29368:4;29364:20;29360:1;29349:9;29345:17;29338:47;29402:131;29528:4;29402:131;:::i;:::-;29394:139;;29292:248;;;:::o;29546:419::-;29712:4;29750:2;29739:9;29735:18;29727:26;;29799:9;29793:4;29789:20;29785:1;29774:9;29770:17;29763:47;29827:131;29953:4;29827:131;:::i;:::-;29819:139;;29717:248;;;:::o;29971:419::-;30137:4;30175:2;30164:9;30160:18;30152:26;;30224:9;30218:4;30214:20;30210:1;30199:9;30195:17;30188:47;30252:131;30378:4;30252:131;:::i;:::-;30244:139;;30142:248;;;:::o;30396:419::-;30562:4;30600:2;30589:9;30585:18;30577:26;;30649:9;30643:4;30639:20;30635:1;30624:9;30620:17;30613:47;30677:131;30803:4;30677:131;:::i;:::-;30669:139;;30567:248;;;:::o;30821:419::-;30987:4;31025:2;31014:9;31010:18;31002:26;;31074:9;31068:4;31064:20;31060:1;31049:9;31045:17;31038:47;31102:131;31228:4;31102:131;:::i;:::-;31094:139;;30992:248;;;:::o;31246:419::-;31412:4;31450:2;31439:9;31435:18;31427:26;;31499:9;31493:4;31489:20;31485:1;31474:9;31470:17;31463:47;31527:131;31653:4;31527:131;:::i;:::-;31519:139;;31417:248;;;:::o;31671:419::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31842:248;;;:::o;32096:222::-;32189:4;32227:2;32216:9;32212:18;32204:26;;32240:71;32308:1;32297:9;32293:17;32284:6;32240:71;:::i;:::-;32194:124;;;;:::o;32324:129::-;32358:6;32385:20;;:::i;:::-;32375:30;;32414:33;32442:4;32434:6;32414:33;:::i;:::-;32365:88;;;:::o;32459:75::-;32492:6;32525:2;32519:9;32509:19;;32499:35;:::o;32540:307::-;32601:4;32691:18;32683:6;32680:30;32677:2;;;32713:18;;:::i;:::-;32677:2;32751:29;32773:6;32751:29;:::i;:::-;32743:37;;32835:4;32829;32825:15;32817:23;;32606:241;;;:::o;32853:308::-;32915:4;33005:18;32997:6;32994:30;32991:2;;;33027:18;;:::i;:::-;32991:2;33065:29;33087:6;33065:29;:::i;:::-;33057:37;;33149:4;33143;33139:15;33131:23;;32920:241;;;:::o;33167:132::-;33234:4;33257:3;33249:11;;33287:4;33282:3;33278:14;33270:22;;33239:60;;;:::o;33305:141::-;33354:4;33377:3;33369:11;;33400:3;33397:1;33390:14;33434:4;33431:1;33421:18;33413:26;;33359:87;;;:::o;33452:114::-;33519:6;33553:5;33547:12;33537:22;;33526:40;;;:::o;33572:98::-;33623:6;33657:5;33651:12;33641:22;;33630:40;;;:::o;33676:99::-;33728:6;33762:5;33756:12;33746:22;;33735:40;;;:::o;33781:113::-;33851:4;33883;33878:3;33874:14;33866:22;;33856:38;;;:::o;33900:184::-;33999:11;34033:6;34028:3;34021:19;34073:4;34068:3;34064:14;34049:29;;34011:73;;;;:::o;34090:168::-;34173:11;34207:6;34202:3;34195:19;34247:4;34242:3;34238:14;34223:29;;34185:73;;;;:::o;34264:147::-;34365:11;34402:3;34387:18;;34377:34;;;;:::o;34417:169::-;34501:11;34535:6;34530:3;34523:19;34575:4;34570:3;34566:14;34551:29;;34513:73;;;;:::o;34592:148::-;34694:11;34731:3;34716:18;;34706:34;;;;:::o;34746:305::-;34786:3;34805:20;34823:1;34805:20;:::i;:::-;34800:25;;34839:20;34857:1;34839:20;:::i;:::-;34834:25;;34993:1;34925:66;34921:74;34918:1;34915:81;34912:2;;;34999:18;;:::i;:::-;34912:2;35043:1;35040;35036:9;35029:16;;34790:261;;;;:::o;35057:185::-;35097:1;35114:20;35132:1;35114:20;:::i;:::-;35109:25;;35148:20;35166:1;35148:20;:::i;:::-;35143:25;;35187:1;35177:2;;35192:18;;:::i;:::-;35177:2;35234:1;35231;35227:9;35222:14;;35099:143;;;;:::o;35248:348::-;35288:7;35311:20;35329:1;35311:20;:::i;:::-;35306:25;;35345:20;35363:1;35345:20;:::i;:::-;35340:25;;35533:1;35465:66;35461:74;35458:1;35455:81;35450:1;35443:9;35436:17;35432:105;35429:2;;;35540:18;;:::i;:::-;35429:2;35588:1;35585;35581:9;35570:20;;35296:300;;;;:::o;35602:191::-;35642:4;35662:20;35680:1;35662:20;:::i;:::-;35657:25;;35696:20;35714:1;35696:20;:::i;:::-;35691:25;;35735:1;35732;35729:8;35726:2;;;35740:18;;:::i;:::-;35726:2;35785:1;35782;35778:9;35770:17;;35647:146;;;;:::o;35799:96::-;35836:7;35865:24;35883:5;35865:24;:::i;:::-;35854:35;;35844:51;;;:::o;35901:90::-;35935:7;35978:5;35971:13;35964:21;35953:32;;35943:48;;;:::o;35997:149::-;36033:7;36073:66;36066:5;36062:78;36051:89;;36041:105;;;:::o;36152:126::-;36189:7;36229:42;36222:5;36218:54;36207:65;;36197:81;;;:::o;36284:77::-;36321:7;36350:5;36339:16;;36329:32;;;:::o;36367:154::-;36451:6;36446:3;36441;36428:30;36513:1;36504:6;36499:3;36495:16;36488:27;36418:103;;;:::o;36527:307::-;36595:1;36605:113;36619:6;36616:1;36613:13;36605:113;;;36704:1;36699:3;36695:11;36689:18;36685:1;36680:3;36676:11;36669:39;36641:2;36638:1;36634:10;36629:15;;36605:113;;;36736:6;36733:1;36730:13;36727:2;;;36816:1;36807:6;36802:3;36798:16;36791:27;36727:2;36576:258;;;;:::o;36840:320::-;36884:6;36921:1;36915:4;36911:12;36901:22;;36968:1;36962:4;36958:12;36989:18;36979:2;;37045:4;37037:6;37033:17;37023:27;;36979:2;37107;37099:6;37096:14;37076:18;37073:38;37070:2;;;37126:18;;:::i;:::-;37070:2;36891:269;;;;:::o;37166:281::-;37249:27;37271:4;37249:27;:::i;:::-;37241:6;37237:40;37379:6;37367:10;37364:22;37343:18;37331:10;37328:34;37325:62;37322:2;;;37390:18;;:::i;:::-;37322:2;37430:10;37426:2;37419:22;37209:238;;;:::o;37453:233::-;37492:3;37515:24;37533:5;37515:24;:::i;:::-;37506:33;;37561:66;37554:5;37551:77;37548:2;;;37631:18;;:::i;:::-;37548:2;37678:1;37671:5;37667:13;37660:20;;37496:190;;;:::o;37692:176::-;37724:1;37741:20;37759:1;37741:20;:::i;:::-;37736:25;;37775:20;37793:1;37775:20;:::i;:::-;37770:25;;37814:1;37804:2;;37819:18;;:::i;:::-;37804:2;37860:1;37857;37853:9;37848:14;;37726:142;;;;:::o;37874:180::-;37922:77;37919:1;37912:88;38019:4;38016:1;38009:15;38043:4;38040:1;38033:15;38060:180;38108:77;38105:1;38098:88;38205:4;38202:1;38195:15;38229:4;38226:1;38219:15;38246:180;38294:77;38291:1;38284:88;38391:4;38388:1;38381:15;38415:4;38412:1;38405:15;38432:180;38480:77;38477:1;38470:88;38577:4;38574:1;38567:15;38601:4;38598:1;38591:15;38618:102;38659:6;38710:2;38706:7;38701:2;38694:5;38690:14;38686:28;38676:38;;38666:54;;;:::o;38726:230::-;38866:34;38862:1;38854:6;38850:14;38843:58;38935:13;38930:2;38922:6;38918:15;38911:38;38832:124;:::o;38962:237::-;39102:34;39098:1;39090:6;39086:14;39079:58;39171:20;39166:2;39158:6;39154:15;39147:45;39068:131;:::o;39205:225::-;39345:34;39341:1;39333:6;39329:14;39322:58;39414:8;39409:2;39401:6;39397:15;39390:33;39311:119;:::o;39436:178::-;39576:30;39572:1;39564:6;39560:14;39553:54;39542:72;:::o;39620:223::-;39760:34;39756:1;39748:6;39744:14;39737:58;39829:6;39824:2;39816:6;39812:15;39805:31;39726:117;:::o;39849:175::-;39989:27;39985:1;39977:6;39973:14;39966:51;39955:69;:::o;40030:231::-;40170:34;40166:1;40158:6;40154:14;40147:58;40239:14;40234:2;40226:6;40222:15;40215:39;40136:125;:::o;40267:243::-;40407:34;40403:1;40395:6;40391:14;40384:58;40476:26;40471:2;40463:6;40459:15;40452:51;40373:137;:::o;40516:229::-;40656:34;40652:1;40644:6;40640:14;40633:58;40725:12;40720:2;40712:6;40708:15;40701:37;40622:123;:::o;40751:228::-;40891:34;40887:1;40879:6;40875:14;40868:58;40960:11;40955:2;40947:6;40943:15;40936:36;40857:122;:::o;40985:172::-;41125:24;41121:1;41113:6;41109:14;41102:48;41091:66;:::o;41163:182::-;41303:34;41299:1;41291:6;41287:14;41280:58;41269:76;:::o;41351:231::-;41491:34;41487:1;41479:6;41475:14;41468:58;41560:14;41555:2;41547:6;41543:15;41536:39;41457:125;:::o;41588:182::-;41728:34;41724:1;41716:6;41712:14;41705:58;41694:76;:::o;41776:172::-;41916:24;41912:1;41904:6;41900:14;41893:48;41882:66;:::o;41954:228::-;42094:34;42090:1;42082:6;42078:14;42071:58;42163:11;42158:2;42150:6;42146:15;42139:36;42060:122;:::o;42188:234::-;42328:34;42324:1;42316:6;42312:14;42305:58;42397:17;42392:2;42384:6;42380:15;42373:42;42294:128;:::o;42428:220::-;42568:34;42564:1;42556:6;42552:14;42545:58;42637:3;42632:2;42624:6;42620:15;42613:28;42534:114;:::o;42654:::-;42760:8;:::o;42774:168::-;42914:20;42910:1;42902:6;42898:14;42891:44;42880:62;:::o;42948:236::-;43088:34;43084:1;43076:6;43072:14;43065:58;43157:19;43152:2;43144:6;43140:15;43133:44;43054:130;:::o;43190:231::-;43330:34;43326:1;43318:6;43314:14;43307:58;43399:14;43394:2;43386:6;43382:15;43375:39;43296:125;:::o;43427:173::-;43567:25;43563:1;43555:6;43551:14;43544:49;43533:67;:::o;43606:177::-;43746:29;43742:1;43734:6;43730:14;43723:53;43712:71;:::o;43789:122::-;43862:24;43880:5;43862:24;:::i;:::-;43855:5;43852:35;43842:2;;43901:1;43898;43891:12;43842:2;43832:79;:::o;43917:116::-;43987:21;44002:5;43987:21;:::i;:::-;43980:5;43977:32;43967:2;;44023:1;44020;44013:12;43967:2;43957:76;:::o;44039:120::-;44111:23;44128:5;44111:23;:::i;:::-;44104:5;44101:34;44091:2;;44149:1;44146;44139:12;44091:2;44081:78;:::o;44165:122::-;44238:24;44256:5;44238:24;:::i;:::-;44231:5;44228:35;44218:2;;44277:1;44274;44267:12;44218:2;44208:79;:::o
Swarm Source
ipfs://dc4b04a48b6d72f770c70d39c5f52b6872f0a33eca2f8bab3bbd24abe67f88e3
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.