Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
2,000 HOA
Holders
764
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 HOALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HOA
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-05 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev Edit for rawOwnerOf token */ function rawOwnerOf(uint256 tokenId) public view returns (address) { return _owners[tokenId]; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); address to = address(0); _beforeTokenTransfer(owner, to, tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, to, tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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(); } } // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // @author: Patrick ///////////////////////////////////////////////////////////////////////////////////// // // // // // // // @@ @@ @@ @@@ // // @@ @@ @ @ @@ @@ // // @@ @@ @ @ @@ @@ // // @@ @@ @ @ @@ @@ // // @@@@@@@@@@@@@@ @ @@ @ @@@@@@@@@@@@@ // // @@ @@ @ @ @@ @@ // // @@ @@ @ @ @@ @@ // // @@ @@ @ @ @@ @@ // // @@ @@ @@ @@ @@ // // // // // // // ///////////////////////////////////////////////////////////////////////////////////// contract HOA is ERC721Enumerable, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; using Strings for uint256; uint256 public MAX_ELEMENTS = 10000; uint256 public PRICE = 0.15 ether; uint256 public constant START_AT = 1; bool private PAUSE = true; Counters.Counter private _tokenIdTracker; string public baseTokenURI; bool public META_REVEAL = false; uint256 public HIDE_FROM = 1; uint256 public HIDE_TO = 10000; string public sampleTokenURI; address public constant creatorAddress = 0x12673391A96EC59A7d2c56C555EAfe51a3C543cF; mapping (address => uint) public ownWallet; event PauseEvent(bool pause); event welcomeToHOA(uint256 indexed id); event NewPriceEvent(uint256 price); event NewMaxElement(uint256 max); bytes32 public merkleRoot; constructor(string memory baseURI, string memory sampleURI) ERC721("House of Assets", "HOA"){ setBaseURI(baseURI); setSampleURI(sampleURI); } modifier saleIsOpen { require(totalToken() <= MAX_ELEMENTS, "Soldout!"); require(!PAUSE, "Sales not open"); _; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setSampleURI(string memory sampleURI) public onlyOwner { sampleTokenURI = sampleURI; } function totalToken() public view returns (uint256) { return _tokenIdTracker.current(); } function isStatus() public view returns (uint256) { if(block.timestamp < 1654441060) { return 0; // Before Mint } else if(block.timestamp >= 1654441060 && block.timestamp < 1654441060 + 1 days) { return 1; // Allowlist Sale Period } else { return 2; // Public Sale Period } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if(!META_REVEAL && tokenId >= HIDE_FROM && tokenId <= HIDE_TO) return sampleTokenURI; string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function whitelistMint(uint256 _tokenAmount, bytes32[] memory _merkleProof) public payable saleIsOpen { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid proof"); uint256 total = totalToken(); require(_tokenAmount <= 10, "Max limit a wallet"); require(ownWallet[msg.sender] + _tokenAmount <= 10, "Maxium is 10"); require(total + _tokenAmount <= 7500, "Max limit"); require(msg.value >= price(_tokenAmount), "Value below price"); address wallet = _msgSender(); for(uint8 i = 1; i <= _tokenAmount; i++){ _mintAnElement(wallet, total + i); } } function mintItem(uint256 _tokenAmount) public payable saleIsOpen { uint256 total = totalToken(); require(_tokenAmount <= 2, "Max limit a wallet"); require(ownWallet[msg.sender] + _tokenAmount <= 2, "Maxium is 2"); require(total + _tokenAmount <= MAX_ELEMENTS, "Max limit"); require(msg.value >= price(_tokenAmount), "Value below price"); address wallet = _msgSender(); for(uint8 i = 1; i <= _tokenAmount; i++){ _mintAnElement(wallet, total + i); } } function giftMint(uint256 _tokenAmount) public onlyOwner saleIsOpen { uint256 total = totalToken(); require(_tokenAmount <= 100, "Max limit a wallet"); require(ownWallet[msg.sender] + _tokenAmount <= 100, "Maxium is 100"); require(total + _tokenAmount <= MAX_ELEMENTS, "Max limit"); address wallet = _msgSender(); for(uint8 i = 1; i <= _tokenAmount; i++){ _mintAnElement(wallet, total + i); } } function _mintAnElement(address _to, uint256 _tokenId) private { _tokenIdTracker.increment(); ownWallet[_to]++; _safeMint(_to, _tokenId); emit welcomeToHOA(_tokenId); } function price(uint256 _count) public view returns (uint256) { return PRICE.mul(_count); } function setPause(bool _pause) public onlyOwner{ PAUSE = _pause; emit PauseEvent(PAUSE); } function setPrice(uint256 _price) public onlyOwner{ PRICE = _price; emit NewPriceEvent(PRICE); } function setMaxElement(uint256 _max) public onlyOwner{ MAX_ELEMENTS = _max; emit NewMaxElement(MAX_ELEMENTS); } function setMetaReveal(bool _reveal, uint256 _from, uint256 _to) public onlyOwner{ META_REVEAL = _reveal; HIDE_FROM = _from; HIDE_TO = _to; } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _widthdraw(creatorAddress, address(this).balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function isWhitelist(bytes32[] memory _merkleProof) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); return MerkleProof.verify(_merkleProof, merkleRoot, leaf); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"sampleURI","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":false,"internalType":"uint256","name":"max","type":"uint256"}],"name":"NewMaxElement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"NewPriceEvent","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":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"PauseEvent","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"welcomeToHOA","type":"event"},{"inputs":[],"name":"HIDE_FROM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HIDE_TO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"META_REVEAL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_AT","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"giftMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"mintItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"rawOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sampleTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxElement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"},{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"setMetaReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"sampleURI","type":"string"}],"name":"setSampleURI","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":[],"name":"totalToken","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":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052612710600b55670214e8348c4f0000600c556001600d60006101000a81548160ff0219169083151502179055506000601060006101000a81548160ff02191690831515021790555060016011556127106012553480156200006457600080fd5b5060405162005d8a38038062005d8a83398181016040528101906200008a9190620004f0565b6040518060400160405280600f81526020017f486f757365206f662041737365747300000000000000000000000000000000008152506040518060400160405280600381526020017f484f41000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010e929190620003c2565b50806001908051906020019062000127929190620003c2565b5050506200014a6200013e6200017460201b60201c565b6200017c60201b60201c565b6200015b826200024260201b60201c565b6200016c81620002ed60201b60201c565b50506200077c565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002526200017460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002786200039860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c8906200059c565b60405180910390fd5b80600f9080519060200190620002e9929190620003c2565b5050565b620002fd6200017460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003236200039860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000373906200059c565b60405180910390fd5b806013908051906020019062000394929190620003c2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003d09062000664565b90600052602060002090601f016020900481019282620003f4576000855562000440565b82601f106200040f57805160ff191683800117855562000440565b8280016001018555821562000440579182015b828111156200043f57825182559160200191906001019062000422565b5b5090506200044f919062000453565b5090565b5b808211156200046e57600081600090555060010162000454565b5090565b6000620004896200048384620005e7565b620005be565b905082815260208101848484011115620004a857620004a762000733565b5b620004b58482856200062e565b509392505050565b600082601f830112620004d557620004d46200072e565b5b8151620004e784826020860162000472565b91505092915050565b600080604083850312156200050a57620005096200073d565b5b600083015167ffffffffffffffff8111156200052b576200052a62000738565b5b6200053985828601620004bd565b925050602083015167ffffffffffffffff8111156200055d576200055c62000738565b5b6200056b85828601620004bd565b9150509250929050565b6000620005846020836200061d565b9150620005918262000753565b602082019050919050565b60006020820190508181036000830152620005b78162000575565b9050919050565b6000620005ca620005dd565b9050620005d882826200069a565b919050565b6000604051905090565b600067ffffffffffffffff821115620006055762000604620006ff565b5b620006108262000742565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200064e57808201518184015260208101905062000631565b838111156200065e576000848401525b50505050565b600060028204905060018216806200067d57607f821691505b60208210811415620006945762000693620006d0565b5b50919050565b620006a58262000742565b810181811067ffffffffffffffff82111715620006c757620006c6620006ff565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6155fe806200078c6000396000f3fe60806040526004361061027d5760003560e01c80637f81be691161014f578063bedb86fb116100c1578063e2b4db971161007a578063e2b4db9714610990578063e927fc5c146109b9578063e985e9c5146109e4578063ed475f6314610a21578063ee53408314610a5e578063f2fde38b14610a895761027d565b8063bedb86fb1461088d578063bf7b766d146108b6578063c7427093146108e1578063c87b56dd1461090c578063d2cab05614610949578063d547cfb7146109655761027d565b806391b7f5ed1161011357806391b7f5ed1461079357806395d89b41146107bc578063a22cb465146107e7578063b88d4fde14610810578063b8ea3cb014610839578063bc13a688146108625761027d565b80637f81be69146106c0578063853828b6146106fd57806389ece941146107145780638d859f3e1461073d5780638da5cb5b146107685761027d565b80632eb4a7ab116101f35780635d7cf6a3116101ac5780635d7cf6a31461059e578063626be567146105db5780636352211e1461060657806370a0823114610643578063715018a6146106805780637cb64759146106975761027d565b80632eb4a7ab1461047c5780632f745c59146104a75780633502a716146104e457806342842e0e1461050f5780634f6ccce71461053857806355f804b3146105755761027d565b806312c2449f1161024557806312c2449f1461037b57806317fb8594146103a457806318160ddd146103c05780631ec858ec146103eb57806323b872dd1461041657806326a49e371461043f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b314610327578063103c4b5314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613e9c565b610ab2565b6040516102b69190614570565b60405180910390f35b3480156102cb57600080fd5b506102d4610b2c565b6040516102e191906145a6565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613f3f565b610bbe565b60405161031e9190614509565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613d66565b610c43565b005b34801561035c57600080fd5b50610365610d5b565b60405161037291906145a6565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613e1c565b610de9565b005b6103be60048036038101906103b99190613f3f565b610e92565b005b3480156103cc57600080fd5b506103d56110f5565b6040516103e29190614948565b60405180910390f35b3480156103f757600080fd5b50610400611102565b60405161040d9190614948565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613c50565b611108565b005b34801561044b57600080fd5b5061046660048036038101906104619190613f3f565b611168565b6040516104739190614948565b60405180910390f35b34801561048857600080fd5b50610491611186565b60405161049e919061458b565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613d66565b61118c565b6040516104db9190614948565b60405180910390f35b3480156104f057600080fd5b506104f9611231565b6040516105069190614948565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190613c50565b611237565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613f3f565b611257565b60405161056c9190614948565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613ef6565b6112c8565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190613be3565b61135e565b6040516105d29190614948565b60405180910390f35b3480156105e757600080fd5b506105f0611376565b6040516105fd9190614948565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613f3f565b611387565b60405161063a9190614509565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190613be3565b611439565b6040516106779190614948565b60405180910390f35b34801561068c57600080fd5b506106956114f1565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613e6f565b611579565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613f3f565b6115ff565b6040516106f49190614509565b60405180910390f35b34801561070957600080fd5b5061071261163c565b005b34801561072057600080fd5b5061073b60048036038101906107369190613ef6565b6116eb565b005b34801561074957600080fd5b50610752611781565b60405161075f9190614948565b60405180910390f35b34801561077457600080fd5b5061077d611787565b60405161078a9190614509565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613f3f565b6117b1565b005b3480156107c857600080fd5b506107d1611870565b6040516107de91906145a6565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613d26565b611902565b005b34801561081c57600080fd5b5061083760048036038101906108329190613ca3565b611a83565b005b34801561084557600080fd5b50610860600480360381019061085b9190613f3f565b611ae5565b005b34801561086e57600080fd5b50610877611ba4565b6040516108849190614570565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613def565b611bb7565b005b3480156108c257600080fd5b506108cb611c96565b6040516108d89190614948565b60405180910390f35b3480156108ed57600080fd5b506108f6611c9b565b6040516109039190614948565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613f3f565b611ca1565b60405161094091906145a6565b60405180910390f35b610963600480360381019061095e9190613f6c565b611e0d565b005b34801561097157600080fd5b5061097a6120e9565b60405161098791906145a6565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190613f3f565b612177565b005b3480156109c557600080fd5b506109ce61240b565b6040516109db9190614509565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190613c10565b612423565b604051610a189190614570565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613da6565b6124b7565b604051610a559190614570565b60405180910390f35b348015610a6a57600080fd5b50610a736124f8565b604051610a809190614948565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613be3565b61253c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b255750610b2482612634565b5b9050919050565b606060008054610b3b90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790614c46565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b6000610bc982612716565b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614788565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4e82611387565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb690614828565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cde612782565b73ffffffffffffffffffffffffffffffffffffffff161480610d0d5750610d0c81610d07612782565b612423565b5b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390614708565b60405180910390fd5b610d56838361278a565b505050565b60138054610d6890614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490614c46565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b505050505081565b610df1612782565b73ffffffffffffffffffffffffffffffffffffffff16610e0f611787565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c906147a8565b60405180910390fd5b82601060006101000a81548160ff0219169083151502179055508160118190555080601281905550505050565b600b54610e9d611376565b1115610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614928565b60405180910390fd5b600d60009054906101000a900460ff1615610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614848565b60405180910390fd5b6000610f38611376565b90506002821115610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590614868565b60405180910390fd5b600282601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190614a64565b111561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906145c8565b60405180910390fd5b600b54828261101b9190614a64565b111561105c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611053906146a8565b60405180910390fd5b61106582611168565b3410156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90614808565b60405180910390fd5b60006110b1612782565b90506000600190505b838160ff16116110ef576110dc828260ff16856110d79190614a64565b612843565b80806110e790614cf2565b9150506110ba565b50505050565b6000600880549050905090565b60115481565b611119611113612782565b826128dd565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906148a8565b60405180910390fd5b6111638383836129bb565b505050565b600061117f82600c54612c1790919063ffffffff16565b9050919050565b60155481565b600061119783611439565b82106111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf906145e8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61125283838360405180602001604052806000815250611a83565b505050565b60006112616110f5565b82106112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906148c8565b60405180910390fd5b600882815481106112b6576112b5614e2d565b5b90600052602060002001549050919050565b6112d0612782565b73ffffffffffffffffffffffffffffffffffffffff166112ee611787565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906147a8565b60405180910390fd5b80600f908051906020019061135a929190613944565b5050565b60146020528060005260406000206000915090505481565b6000611382600e612c2d565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790614748565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614728565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f9612782565b73ffffffffffffffffffffffffffffffffffffffff16611517611787565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906147a8565b60405180910390fd5b6115776000612c3b565b565b611581612782565b73ffffffffffffffffffffffffffffffffffffffff1661159f611787565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec906147a8565b60405180910390fd5b8060158190555050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611644612782565b73ffffffffffffffffffffffffffffffffffffffff16611662611787565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af906147a8565b60405180910390fd5b6000479050600081116116ca57600080fd5b6116e87312673391a96ec59a7d2c56c555eafe51a3c543cf47612d01565b50565b6116f3612782565b73ffffffffffffffffffffffffffffffffffffffff16611711611787565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906147a8565b60405180910390fd5b806013908051906020019061177d929190613944565b5050565b600c5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117b9612782565b73ffffffffffffffffffffffffffffffffffffffff166117d7611787565b73ffffffffffffffffffffffffffffffffffffffff161461182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906147a8565b60405180910390fd5b80600c819055507f0e4af3870af723022c49a1ebcf7379a14fa7732c2dc92925407b8d219116a26b600c546040516118659190614948565b60405180910390a150565b60606001805461187f90614c46565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90614c46565b80156118f85780601f106118cd576101008083540402835291602001916118f8565b820191906000526020600020905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b61190a612782565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614688565b60405180910390fd5b8060056000611985612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a32612782565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a779190614570565b60405180910390a35050565b611a94611a8e612782565b836128dd565b611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca906148a8565b60405180910390fd5b611adf84848484612db2565b50505050565b611aed612782565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611787565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906147a8565b60405180910390fd5b80600b819055507fc83d13efd20405bd69a6e26fd71d067b31246b9fe9ad2b945536dd1770330d48600b54604051611b999190614948565b60405180910390a150565b601060009054906101000a900460ff1681565b611bbf612782565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611787565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a906147a8565b60405180910390fd5b80600d60006101000a81548160ff0219169083151502179055507f10e1c3fcaff06b68391033547e8f9bb8067d7c4a2e32659b0629153814d242d3600d60009054906101000a900460ff16604051611c8b9190614570565b60405180910390a150565b600181565b60125481565b6060611cac82612716565b611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce2906147e8565b60405180910390fd5b601060009054906101000a900460ff16158015611d0a57506011548210155b8015611d1857506012548211155b15611daf5760138054611d2a90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5690614c46565b8015611da35780601f10611d7857610100808354040283529160200191611da3565b820191906000526020600020905b815481529060010190602001808311611d8657829003601f168201915b50505050509050611e08565b6000611db9612e0e565b90506000815111611dd95760405180602001604052806000815250611e04565b80611de384612ea0565b604051602001611df49291906144d0565b6040516020818303038152906040525b9150505b919050565b600b54611e18611376565b1115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614928565b60405180910390fd5b600d60009054906101000a900460ff1615611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614848565b60405180910390fd5b600033604051602001611ebc91906144b5565b604051602081830303815290604052805190602001209050611ee18260155483613001565b611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f17906148e8565b60405180910390fd5b6000611f2a611376565b9050600a841115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614868565b60405180910390fd5b600a84601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fbd9190614a64565b1115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614908565b60405180910390fd5b611d4c848261200d9190614a64565b111561204e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612045906146a8565b60405180910390fd5b61205784611168565b341015612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614808565b60405180910390fd5b60006120a3612782565b90506000600190505b858160ff16116120e1576120ce828260ff16856120c99190614a64565b612843565b80806120d990614cf2565b9150506120ac565b505050505050565b600f80546120f690614c46565b80601f016020809104026020016040519081016040528092919081815260200182805461212290614c46565b801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b505050505081565b61217f612782565b73ffffffffffffffffffffffffffffffffffffffff1661219d611787565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea906147a8565b60405180910390fd5b600b546121fe611376565b111561223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690614928565b60405180910390fd5b600d60009054906101000a900460ff161561228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614848565b60405180910390fd5b6000612299611376565b905060648211156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690614868565b60405180910390fd5b606482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232c9190614a64565b111561236d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612364906146e8565b60405180910390fd5b600b54828261237c9190614a64565b11156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b4906146a8565b60405180910390fd5b60006123c7612782565b90506000600190505b838160ff1611612405576123f2828260ff16856123ed9190614a64565b612843565b80806123fd90614cf2565b9150506123d0565b50505050565b7312673391a96ec59a7d2c56c555eafe51a3c543cf81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080336040516020016124cb91906144b5565b6040516020818303038152906040528051906020012090506124f08360155483613001565b915050919050565b600063629cc46442101561250f5760009050612539565b63629cc4644210158015612526575063629e15e442105b156125345760019050612539565b600290505b90565b612544612782565b73ffffffffffffffffffffffffffffffffffffffff16612562611787565b73ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906147a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614628565b60405180910390fd5b61263181612c3b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061270f575061270e82613018565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127fd83611387565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61284d600e613082565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061289d90614ca9565b91905055506128ac8282613098565b807f7de9ff3a06537ba46c8a2243263d06a06584838cb3077f70fb2d379fa82b5c7c60405160405180910390a25050565b60006128e882612716565b612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e906146c8565b60405180910390fd5b600061293283611387565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129a157508373ffffffffffffffffffffffffffffffffffffffff1661298984610bbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806129b257506129b18185612423565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129db82611387565b73ffffffffffffffffffffffffffffffffffffffff1614612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906147c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9890614668565b60405180910390fd5b612aac8383836130b6565b612ab760008261278a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b079190614b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b5e9190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612c259190614aeb565b905092915050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612d27906144f4565b60006040518083038185875af1925050503d8060008114612d64576040519150601f19603f3d011682016040523d82523d6000602084013e612d69565b606091505b5050905080612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614888565b60405180910390fd5b505050565b612dbd8484846129bb565b612dc9848484846131ca565b612e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dff90614608565b60405180910390fd5b50505050565b6060600f8054612e1d90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054612e4990614c46565b8015612e965780601f10612e6b57610100808354040283529160200191612e96565b820191906000526020600020905b815481529060010190602001808311612e7957829003601f168201915b5050505050905090565b60606000821415612ee8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ffc565b600082905060005b60008214612f1a578080612f0390614ca9565b915050600a82612f139190614aba565b9150612ef0565b60008167ffffffffffffffff811115612f3657612f35614e5c565b5b6040519080825280601f01601f191660200182016040528015612f685781602001600182028036833780820191505090505b5090505b60008514612ff557600182612f819190614b45565b9150600a85612f909190614d40565b6030612f9c9190614a64565b60f81b818381518110612fb257612fb1614e2d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fee9190614aba565b9450612f6c565b8093505050505b919050565b60008261300e8584613361565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b6130b28282604051806020016040528060008152506133d6565b5050565b6130c1838383613431565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613104576130ff81613436565b613143565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461314257613141838261347f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318657613181816135ec565b6131c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146131c4576131c382826136bd565b5b5b505050565b60006131eb8473ffffffffffffffffffffffffffffffffffffffff1661373c565b15613354578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613214612782565b8786866040518563ffffffff1660e01b81526004016132369493929190614524565b602060405180830381600087803b15801561325057600080fd5b505af192505050801561328157506040513d601f19601f8201168201806040525081019061327e9190613ec9565b60015b613304573d80600081146132b1576040519150601f19603f3d011682016040523d82523d6000602084013e6132b6565b606091505b506000815114156132fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f390614608565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613359565b600190505b949350505050565b60008082905060005b84518110156133cb57600085828151811061338857613387614e2d565b5b602002602001015190508083116133aa576133a3838261375f565b92506133b7565b6133b4818461375f565b92505b5080806133c390614ca9565b91505061336a565b508091505092915050565b6133e08383613776565b6133ed60008484846131ca565b61342c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342390614608565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161348c84611439565b6134969190614b45565b905060006007600084815260200190815260200160002054905081811461357b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136009190614b45565b90506000600960008481526020019081526020016000205490506000600883815481106136305761362f614e2d565b5b90600052602060002001549050806008838154811061365257613651614e2d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806136a1576136a0614dfe565b5b6001900381819060005260206000200160009055905550505050565b60006136c883611439565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137dd90614768565b60405180910390fd5b6137ef81612716565b1561382f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382690614648565b60405180910390fd5b61383b600083836130b6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461388b9190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461395090614c46565b90600052602060002090601f01602090048101928261397257600085556139b9565b82601f1061398b57805160ff19168380011785556139b9565b828001600101855582156139b9579182015b828111156139b857825182559160200191906001019061399d565b5b5090506139c691906139ca565b5090565b5b808211156139e35760008160009055506001016139cb565b5090565b60006139fa6139f584614988565b614963565b90508083825260208201905082856020860282011115613a1d57613a1c614e90565b5b60005b85811015613a4d5781613a338882613b33565b845260208401935060208301925050600181019050613a20565b5050509392505050565b6000613a6a613a65846149b4565b614963565b905082815260208101848484011115613a8657613a85614e95565b5b613a91848285614c04565b509392505050565b6000613aac613aa7846149e5565b614963565b905082815260208101848484011115613ac857613ac7614e95565b5b613ad3848285614c04565b509392505050565b600081359050613aea81615555565b92915050565b600082601f830112613b0557613b04614e8b565b5b8135613b158482602086016139e7565b91505092915050565b600081359050613b2d8161556c565b92915050565b600081359050613b4281615583565b92915050565b600081359050613b578161559a565b92915050565b600081519050613b6c8161559a565b92915050565b600082601f830112613b8757613b86614e8b565b5b8135613b97848260208601613a57565b91505092915050565b600082601f830112613bb557613bb4614e8b565b5b8135613bc5848260208601613a99565b91505092915050565b600081359050613bdd816155b1565b92915050565b600060208284031215613bf957613bf8614e9f565b5b6000613c0784828501613adb565b91505092915050565b60008060408385031215613c2757613c26614e9f565b5b6000613c3585828601613adb565b9250506020613c4685828601613adb565b9150509250929050565b600080600060608486031215613c6957613c68614e9f565b5b6000613c7786828701613adb565b9350506020613c8886828701613adb565b9250506040613c9986828701613bce565b9150509250925092565b60008060008060808587031215613cbd57613cbc614e9f565b5b6000613ccb87828801613adb565b9450506020613cdc87828801613adb565b9350506040613ced87828801613bce565b925050606085013567ffffffffffffffff811115613d0e57613d0d614e9a565b5b613d1a87828801613b72565b91505092959194509250565b60008060408385031215613d3d57613d3c614e9f565b5b6000613d4b85828601613adb565b9250506020613d5c85828601613b1e565b9150509250929050565b60008060408385031215613d7d57613d7c614e9f565b5b6000613d8b85828601613adb565b9250506020613d9c85828601613bce565b9150509250929050565b600060208284031215613dbc57613dbb614e9f565b5b600082013567ffffffffffffffff811115613dda57613dd9614e9a565b5b613de684828501613af0565b91505092915050565b600060208284031215613e0557613e04614e9f565b5b6000613e1384828501613b1e565b91505092915050565b600080600060608486031215613e3557613e34614e9f565b5b6000613e4386828701613b1e565b9350506020613e5486828701613bce565b9250506040613e6586828701613bce565b9150509250925092565b600060208284031215613e8557613e84614e9f565b5b6000613e9384828501613b33565b91505092915050565b600060208284031215613eb257613eb1614e9f565b5b6000613ec084828501613b48565b91505092915050565b600060208284031215613edf57613ede614e9f565b5b6000613eed84828501613b5d565b91505092915050565b600060208284031215613f0c57613f0b614e9f565b5b600082013567ffffffffffffffff811115613f2a57613f29614e9a565b5b613f3684828501613ba0565b91505092915050565b600060208284031215613f5557613f54614e9f565b5b6000613f6384828501613bce565b91505092915050565b60008060408385031215613f8357613f82614e9f565b5b6000613f9185828601613bce565b925050602083013567ffffffffffffffff811115613fb257613fb1614e9a565b5b613fbe85828601613af0565b9150509250929050565b613fd181614b79565b82525050565b613fe8613fe382614b79565b614d1c565b82525050565b613ff781614b8b565b82525050565b61400681614b97565b82525050565b600061401782614a16565b6140218185614a2c565b9350614031818560208601614c13565b61403a81614ea4565b840191505092915050565b600061405082614a21565b61405a8185614a48565b935061406a818560208601614c13565b61407381614ea4565b840191505092915050565b600061408982614a21565b6140938185614a59565b93506140a3818560208601614c13565b80840191505092915050565b60006140bc600b83614a48565b91506140c782614ec2565b602082019050919050565b60006140df602b83614a48565b91506140ea82614eeb565b604082019050919050565b6000614102603283614a48565b915061410d82614f3a565b604082019050919050565b6000614125602683614a48565b915061413082614f89565b604082019050919050565b6000614148601c83614a48565b915061415382614fd8565b602082019050919050565b600061416b602483614a48565b915061417682615001565b604082019050919050565b600061418e601983614a48565b915061419982615050565b602082019050919050565b60006141b1600983614a48565b91506141bc82615079565b602082019050919050565b60006141d4602c83614a48565b91506141df826150a2565b604082019050919050565b60006141f7600d83614a48565b9150614202826150f1565b602082019050919050565b600061421a603883614a48565b91506142258261511a565b604082019050919050565b600061423d602a83614a48565b915061424882615169565b604082019050919050565b6000614260602983614a48565b915061426b826151b8565b604082019050919050565b6000614283602083614a48565b915061428e82615207565b602082019050919050565b60006142a6602c83614a48565b91506142b182615230565b604082019050919050565b60006142c9602083614a48565b91506142d48261527f565b602082019050919050565b60006142ec602983614a48565b91506142f7826152a8565b604082019050919050565b600061430f602f83614a48565b915061431a826152f7565b604082019050919050565b6000614332601183614a48565b915061433d82615346565b602082019050919050565b6000614355602183614a48565b91506143608261536f565b604082019050919050565b6000614378600e83614a48565b9150614383826153be565b602082019050919050565b600061439b601283614a48565b91506143a6826153e7565b602082019050919050565b60006143be600083614a3d565b91506143c982615410565b600082019050919050565b60006143e1601083614a48565b91506143ec82615413565b602082019050919050565b6000614404603183614a48565b915061440f8261543c565b604082019050919050565b6000614427602c83614a48565b91506144328261548b565b604082019050919050565b600061444a600d83614a48565b9150614455826154da565b602082019050919050565b600061446d600c83614a48565b915061447882615503565b602082019050919050565b6000614490600883614a48565b915061449b8261552c565b602082019050919050565b6144af81614bed565b82525050565b60006144c18284613fd7565b60148201915081905092915050565b60006144dc828561407e565b91506144e8828461407e565b91508190509392505050565b60006144ff826143b1565b9150819050919050565b600060208201905061451e6000830184613fc8565b92915050565b60006080820190506145396000830187613fc8565b6145466020830186613fc8565b61455360408301856144a6565b8181036060830152614565818461400c565b905095945050505050565b60006020820190506145856000830184613fee565b92915050565b60006020820190506145a06000830184613ffd565b92915050565b600060208201905081810360008301526145c08184614045565b905092915050565b600060208201905081810360008301526145e1816140af565b9050919050565b60006020820190508181036000830152614601816140d2565b9050919050565b60006020820190508181036000830152614621816140f5565b9050919050565b6000602082019050818103600083015261464181614118565b9050919050565b600060208201905081810360008301526146618161413b565b9050919050565b600060208201905081810360008301526146818161415e565b9050919050565b600060208201905081810360008301526146a181614181565b9050919050565b600060208201905081810360008301526146c1816141a4565b9050919050565b600060208201905081810360008301526146e1816141c7565b9050919050565b60006020820190508181036000830152614701816141ea565b9050919050565b600060208201905081810360008301526147218161420d565b9050919050565b6000602082019050818103600083015261474181614230565b9050919050565b6000602082019050818103600083015261476181614253565b9050919050565b6000602082019050818103600083015261478181614276565b9050919050565b600060208201905081810360008301526147a181614299565b9050919050565b600060208201905081810360008301526147c1816142bc565b9050919050565b600060208201905081810360008301526147e1816142df565b9050919050565b6000602082019050818103600083015261480181614302565b9050919050565b6000602082019050818103600083015261482181614325565b9050919050565b6000602082019050818103600083015261484181614348565b9050919050565b600060208201905081810360008301526148618161436b565b9050919050565b600060208201905081810360008301526148818161438e565b9050919050565b600060208201905081810360008301526148a1816143d4565b9050919050565b600060208201905081810360008301526148c1816143f7565b9050919050565b600060208201905081810360008301526148e18161441a565b9050919050565b600060208201905081810360008301526149018161443d565b9050919050565b6000602082019050818103600083015261492181614460565b9050919050565b6000602082019050818103600083015261494181614483565b9050919050565b600060208201905061495d60008301846144a6565b92915050565b600061496d61497e565b90506149798282614c78565b919050565b6000604051905090565b600067ffffffffffffffff8211156149a3576149a2614e5c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149cf576149ce614e5c565b5b6149d882614ea4565b9050602081019050919050565b600067ffffffffffffffff821115614a00576149ff614e5c565b5b614a0982614ea4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a6f82614bed565b9150614a7a83614bed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aaf57614aae614d71565b5b828201905092915050565b6000614ac582614bed565b9150614ad083614bed565b925082614ae057614adf614da0565b5b828204905092915050565b6000614af682614bed565b9150614b0183614bed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3a57614b39614d71565b5b828202905092915050565b6000614b5082614bed565b9150614b5b83614bed565b925082821015614b6e57614b6d614d71565b5b828203905092915050565b6000614b8482614bcd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614c31578082015181840152602081019050614c16565b83811115614c40576000848401525b50505050565b60006002820490506001821680614c5e57607f821691505b60208210811415614c7257614c71614dcf565b5b50919050565b614c8182614ea4565b810181811067ffffffffffffffff82111715614ca057614c9f614e5c565b5b80604052505050565b6000614cb482614bed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ce757614ce6614d71565b5b600182019050919050565b6000614cfd82614bf7565b915060ff821415614d1157614d10614d71565b5b600182019050919050565b6000614d2782614d2e565b9050919050565b6000614d3982614eb5565b9050919050565b6000614d4b82614bed565b9150614d5683614bed565b925082614d6657614d65614da0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d617869756d2069732032000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617869756d2069732031303000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6573206e6f74206f70656e000000000000000000000000000000000000600082015250565b7f4d6178206c696d697420612077616c6c65740000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f4d617869756d2069732031300000000000000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b61555e81614b79565b811461556957600080fd5b50565b61557581614b8b565b811461558057600080fd5b50565b61558c81614b97565b811461559757600080fd5b50565b6155a381614ba1565b81146155ae57600080fd5b50565b6155ba81614bed565b81146155c557600080fd5b5056fea2646970667358221220f7d395dee1fe3aec9a8dc879cdf4db8d93e963ad64850fc7db564e140b1769b164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6639353332484331437a7253676445657248664e354d62686e43745642425347325a666f5a334c4c7265584e2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f697066732e696f2f697066732f516d5670544e50375857395a6a6b6867426d5a674d7146665a534b62334e7a4e48415146446936357657344445682f72657665616c00000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80637f81be691161014f578063bedb86fb116100c1578063e2b4db971161007a578063e2b4db9714610990578063e927fc5c146109b9578063e985e9c5146109e4578063ed475f6314610a21578063ee53408314610a5e578063f2fde38b14610a895761027d565b8063bedb86fb1461088d578063bf7b766d146108b6578063c7427093146108e1578063c87b56dd1461090c578063d2cab05614610949578063d547cfb7146109655761027d565b806391b7f5ed1161011357806391b7f5ed1461079357806395d89b41146107bc578063a22cb465146107e7578063b88d4fde14610810578063b8ea3cb014610839578063bc13a688146108625761027d565b80637f81be69146106c0578063853828b6146106fd57806389ece941146107145780638d859f3e1461073d5780638da5cb5b146107685761027d565b80632eb4a7ab116101f35780635d7cf6a3116101ac5780635d7cf6a31461059e578063626be567146105db5780636352211e1461060657806370a0823114610643578063715018a6146106805780637cb64759146106975761027d565b80632eb4a7ab1461047c5780632f745c59146104a75780633502a716146104e457806342842e0e1461050f5780634f6ccce71461053857806355f804b3146105755761027d565b806312c2449f1161024557806312c2449f1461037b57806317fb8594146103a457806318160ddd146103c05780631ec858ec146103eb57806323b872dd1461041657806326a49e371461043f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b314610327578063103c4b5314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613e9c565b610ab2565b6040516102b69190614570565b60405180910390f35b3480156102cb57600080fd5b506102d4610b2c565b6040516102e191906145a6565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613f3f565b610bbe565b60405161031e9190614509565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613d66565b610c43565b005b34801561035c57600080fd5b50610365610d5b565b60405161037291906145a6565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613e1c565b610de9565b005b6103be60048036038101906103b99190613f3f565b610e92565b005b3480156103cc57600080fd5b506103d56110f5565b6040516103e29190614948565b60405180910390f35b3480156103f757600080fd5b50610400611102565b60405161040d9190614948565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613c50565b611108565b005b34801561044b57600080fd5b5061046660048036038101906104619190613f3f565b611168565b6040516104739190614948565b60405180910390f35b34801561048857600080fd5b50610491611186565b60405161049e919061458b565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613d66565b61118c565b6040516104db9190614948565b60405180910390f35b3480156104f057600080fd5b506104f9611231565b6040516105069190614948565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190613c50565b611237565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613f3f565b611257565b60405161056c9190614948565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613ef6565b6112c8565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190613be3565b61135e565b6040516105d29190614948565b60405180910390f35b3480156105e757600080fd5b506105f0611376565b6040516105fd9190614948565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613f3f565b611387565b60405161063a9190614509565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190613be3565b611439565b6040516106779190614948565b60405180910390f35b34801561068c57600080fd5b506106956114f1565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613e6f565b611579565b005b3480156106cc57600080fd5b506106e760048036038101906106e29190613f3f565b6115ff565b6040516106f49190614509565b60405180910390f35b34801561070957600080fd5b5061071261163c565b005b34801561072057600080fd5b5061073b60048036038101906107369190613ef6565b6116eb565b005b34801561074957600080fd5b50610752611781565b60405161075f9190614948565b60405180910390f35b34801561077457600080fd5b5061077d611787565b60405161078a9190614509565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613f3f565b6117b1565b005b3480156107c857600080fd5b506107d1611870565b6040516107de91906145a6565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613d26565b611902565b005b34801561081c57600080fd5b5061083760048036038101906108329190613ca3565b611a83565b005b34801561084557600080fd5b50610860600480360381019061085b9190613f3f565b611ae5565b005b34801561086e57600080fd5b50610877611ba4565b6040516108849190614570565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613def565b611bb7565b005b3480156108c257600080fd5b506108cb611c96565b6040516108d89190614948565b60405180910390f35b3480156108ed57600080fd5b506108f6611c9b565b6040516109039190614948565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613f3f565b611ca1565b60405161094091906145a6565b60405180910390f35b610963600480360381019061095e9190613f6c565b611e0d565b005b34801561097157600080fd5b5061097a6120e9565b60405161098791906145a6565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190613f3f565b612177565b005b3480156109c557600080fd5b506109ce61240b565b6040516109db9190614509565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190613c10565b612423565b604051610a189190614570565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613da6565b6124b7565b604051610a559190614570565b60405180910390f35b348015610a6a57600080fd5b50610a736124f8565b604051610a809190614948565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613be3565b61253c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b255750610b2482612634565b5b9050919050565b606060008054610b3b90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790614c46565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b6000610bc982612716565b610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614788565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4e82611387565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb690614828565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cde612782565b73ffffffffffffffffffffffffffffffffffffffff161480610d0d5750610d0c81610d07612782565b612423565b5b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390614708565b60405180910390fd5b610d56838361278a565b505050565b60138054610d6890614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9490614c46565b8015610de15780601f10610db657610100808354040283529160200191610de1565b820191906000526020600020905b815481529060010190602001808311610dc457829003601f168201915b505050505081565b610df1612782565b73ffffffffffffffffffffffffffffffffffffffff16610e0f611787565b73ffffffffffffffffffffffffffffffffffffffff1614610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c906147a8565b60405180910390fd5b82601060006101000a81548160ff0219169083151502179055508160118190555080601281905550505050565b600b54610e9d611376565b1115610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614928565b60405180910390fd5b600d60009054906101000a900460ff1615610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614848565b60405180910390fd5b6000610f38611376565b90506002821115610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590614868565b60405180910390fd5b600282601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcb9190614a64565b111561100c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611003906145c8565b60405180910390fd5b600b54828261101b9190614a64565b111561105c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611053906146a8565b60405180910390fd5b61106582611168565b3410156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90614808565b60405180910390fd5b60006110b1612782565b90506000600190505b838160ff16116110ef576110dc828260ff16856110d79190614a64565b612843565b80806110e790614cf2565b9150506110ba565b50505050565b6000600880549050905090565b60115481565b611119611113612782565b826128dd565b611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f906148a8565b60405180910390fd5b6111638383836129bb565b505050565b600061117f82600c54612c1790919063ffffffff16565b9050919050565b60155481565b600061119783611439565b82106111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf906145e8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61125283838360405180602001604052806000815250611a83565b505050565b60006112616110f5565b82106112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906148c8565b60405180910390fd5b600882815481106112b6576112b5614e2d565b5b90600052602060002001549050919050565b6112d0612782565b73ffffffffffffffffffffffffffffffffffffffff166112ee611787565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906147a8565b60405180910390fd5b80600f908051906020019061135a929190613944565b5050565b60146020528060005260406000206000915090505481565b6000611382600e612c2d565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790614748565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190614728565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f9612782565b73ffffffffffffffffffffffffffffffffffffffff16611517611787565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906147a8565b60405180910390fd5b6115776000612c3b565b565b611581612782565b73ffffffffffffffffffffffffffffffffffffffff1661159f611787565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec906147a8565b60405180910390fd5b8060158190555050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611644612782565b73ffffffffffffffffffffffffffffffffffffffff16611662611787565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af906147a8565b60405180910390fd5b6000479050600081116116ca57600080fd5b6116e87312673391a96ec59a7d2c56c555eafe51a3c543cf47612d01565b50565b6116f3612782565b73ffffffffffffffffffffffffffffffffffffffff16611711611787565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906147a8565b60405180910390fd5b806013908051906020019061177d929190613944565b5050565b600c5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117b9612782565b73ffffffffffffffffffffffffffffffffffffffff166117d7611787565b73ffffffffffffffffffffffffffffffffffffffff161461182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906147a8565b60405180910390fd5b80600c819055507f0e4af3870af723022c49a1ebcf7379a14fa7732c2dc92925407b8d219116a26b600c546040516118659190614948565b60405180910390a150565b60606001805461187f90614c46565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90614c46565b80156118f85780601f106118cd576101008083540402835291602001916118f8565b820191906000526020600020905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b61190a612782565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614688565b60405180910390fd5b8060056000611985612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a32612782565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a779190614570565b60405180910390a35050565b611a94611a8e612782565b836128dd565b611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca906148a8565b60405180910390fd5b611adf84848484612db2565b50505050565b611aed612782565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611787565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906147a8565b60405180910390fd5b80600b819055507fc83d13efd20405bd69a6e26fd71d067b31246b9fe9ad2b945536dd1770330d48600b54604051611b999190614948565b60405180910390a150565b601060009054906101000a900460ff1681565b611bbf612782565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611787565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a906147a8565b60405180910390fd5b80600d60006101000a81548160ff0219169083151502179055507f10e1c3fcaff06b68391033547e8f9bb8067d7c4a2e32659b0629153814d242d3600d60009054906101000a900460ff16604051611c8b9190614570565b60405180910390a150565b600181565b60125481565b6060611cac82612716565b611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce2906147e8565b60405180910390fd5b601060009054906101000a900460ff16158015611d0a57506011548210155b8015611d1857506012548211155b15611daf5760138054611d2a90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5690614c46565b8015611da35780601f10611d7857610100808354040283529160200191611da3565b820191906000526020600020905b815481529060010190602001808311611d8657829003601f168201915b50505050509050611e08565b6000611db9612e0e565b90506000815111611dd95760405180602001604052806000815250611e04565b80611de384612ea0565b604051602001611df49291906144d0565b6040516020818303038152906040525b9150505b919050565b600b54611e18611376565b1115611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090614928565b60405180910390fd5b600d60009054906101000a900460ff1615611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614848565b60405180910390fd5b600033604051602001611ebc91906144b5565b604051602081830303815290604052805190602001209050611ee18260155483613001565b611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f17906148e8565b60405180910390fd5b6000611f2a611376565b9050600a841115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614868565b60405180910390fd5b600a84601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fbd9190614a64565b1115611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614908565b60405180910390fd5b611d4c848261200d9190614a64565b111561204e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612045906146a8565b60405180910390fd5b61205784611168565b341015612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614808565b60405180910390fd5b60006120a3612782565b90506000600190505b858160ff16116120e1576120ce828260ff16856120c99190614a64565b612843565b80806120d990614cf2565b9150506120ac565b505050505050565b600f80546120f690614c46565b80601f016020809104026020016040519081016040528092919081815260200182805461212290614c46565b801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b505050505081565b61217f612782565b73ffffffffffffffffffffffffffffffffffffffff1661219d611787565b73ffffffffffffffffffffffffffffffffffffffff16146121f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ea906147a8565b60405180910390fd5b600b546121fe611376565b111561223f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223690614928565b60405180910390fd5b600d60009054906101000a900460ff161561228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228690614848565b60405180910390fd5b6000612299611376565b905060648211156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690614868565b60405180910390fd5b606482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461232c9190614a64565b111561236d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612364906146e8565b60405180910390fd5b600b54828261237c9190614a64565b11156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b4906146a8565b60405180910390fd5b60006123c7612782565b90506000600190505b838160ff1611612405576123f2828260ff16856123ed9190614a64565b612843565b80806123fd90614cf2565b9150506123d0565b50505050565b7312673391a96ec59a7d2c56c555eafe51a3c543cf81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080336040516020016124cb91906144b5565b6040516020818303038152906040528051906020012090506124f08360155483613001565b915050919050565b600063629cc46442101561250f5760009050612539565b63629cc4644210158015612526575063629e15e442105b156125345760019050612539565b600290505b90565b612544612782565b73ffffffffffffffffffffffffffffffffffffffff16612562611787565b73ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906147a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614628565b60405180910390fd5b61263181612c3b565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126ff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061270f575061270e82613018565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127fd83611387565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61284d600e613082565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061289d90614ca9565b91905055506128ac8282613098565b807f7de9ff3a06537ba46c8a2243263d06a06584838cb3077f70fb2d379fa82b5c7c60405160405180910390a25050565b60006128e882612716565b612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e906146c8565b60405180910390fd5b600061293283611387565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129a157508373ffffffffffffffffffffffffffffffffffffffff1661298984610bbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806129b257506129b18185612423565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129db82611387565b73ffffffffffffffffffffffffffffffffffffffff1614612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906147c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9890614668565b60405180910390fd5b612aac8383836130b6565b612ab760008261278a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b079190614b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b5e9190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612c259190614aeb565b905092915050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612d27906144f4565b60006040518083038185875af1925050503d8060008114612d64576040519150601f19603f3d011682016040523d82523d6000602084013e612d69565b606091505b5050905080612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614888565b60405180910390fd5b505050565b612dbd8484846129bb565b612dc9848484846131ca565b612e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dff90614608565b60405180910390fd5b50505050565b6060600f8054612e1d90614c46565b80601f0160208091040260200160405190810160405280929190818152602001828054612e4990614c46565b8015612e965780601f10612e6b57610100808354040283529160200191612e96565b820191906000526020600020905b815481529060010190602001808311612e7957829003601f168201915b5050505050905090565b60606000821415612ee8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ffc565b600082905060005b60008214612f1a578080612f0390614ca9565b915050600a82612f139190614aba565b9150612ef0565b60008167ffffffffffffffff811115612f3657612f35614e5c565b5b6040519080825280601f01601f191660200182016040528015612f685781602001600182028036833780820191505090505b5090505b60008514612ff557600182612f819190614b45565b9150600a85612f909190614d40565b6030612f9c9190614a64565b60f81b818381518110612fb257612fb1614e2d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fee9190614aba565b9450612f6c565b8093505050505b919050565b60008261300e8584613361565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b6130b28282604051806020016040528060008152506133d6565b5050565b6130c1838383613431565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613104576130ff81613436565b613143565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461314257613141838261347f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318657613181816135ec565b6131c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146131c4576131c382826136bd565b5b5b505050565b60006131eb8473ffffffffffffffffffffffffffffffffffffffff1661373c565b15613354578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613214612782565b8786866040518563ffffffff1660e01b81526004016132369493929190614524565b602060405180830381600087803b15801561325057600080fd5b505af192505050801561328157506040513d601f19601f8201168201806040525081019061327e9190613ec9565b60015b613304573d80600081146132b1576040519150601f19603f3d011682016040523d82523d6000602084013e6132b6565b606091505b506000815114156132fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f390614608565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613359565b600190505b949350505050565b60008082905060005b84518110156133cb57600085828151811061338857613387614e2d565b5b602002602001015190508083116133aa576133a3838261375f565b92506133b7565b6133b4818461375f565b92505b5080806133c390614ca9565b91505061336a565b508091505092915050565b6133e08383613776565b6133ed60008484846131ca565b61342c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342390614608565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161348c84611439565b6134969190614b45565b905060006007600084815260200190815260200160002054905081811461357b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136009190614b45565b90506000600960008481526020019081526020016000205490506000600883815481106136305761362f614e2d565b5b90600052602060002001549050806008838154811061365257613651614e2d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806136a1576136a0614dfe565b5b6001900381819060005260206000200160009055905550505050565b60006136c883611439565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137dd90614768565b60405180910390fd5b6137ef81612716565b1561382f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382690614648565b60405180910390fd5b61383b600083836130b6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461388b9190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461395090614c46565b90600052602060002090601f01602090048101928261397257600085556139b9565b82601f1061398b57805160ff19168380011785556139b9565b828001600101855582156139b9579182015b828111156139b857825182559160200191906001019061399d565b5b5090506139c691906139ca565b5090565b5b808211156139e35760008160009055506001016139cb565b5090565b60006139fa6139f584614988565b614963565b90508083825260208201905082856020860282011115613a1d57613a1c614e90565b5b60005b85811015613a4d5781613a338882613b33565b845260208401935060208301925050600181019050613a20565b5050509392505050565b6000613a6a613a65846149b4565b614963565b905082815260208101848484011115613a8657613a85614e95565b5b613a91848285614c04565b509392505050565b6000613aac613aa7846149e5565b614963565b905082815260208101848484011115613ac857613ac7614e95565b5b613ad3848285614c04565b509392505050565b600081359050613aea81615555565b92915050565b600082601f830112613b0557613b04614e8b565b5b8135613b158482602086016139e7565b91505092915050565b600081359050613b2d8161556c565b92915050565b600081359050613b4281615583565b92915050565b600081359050613b578161559a565b92915050565b600081519050613b6c8161559a565b92915050565b600082601f830112613b8757613b86614e8b565b5b8135613b97848260208601613a57565b91505092915050565b600082601f830112613bb557613bb4614e8b565b5b8135613bc5848260208601613a99565b91505092915050565b600081359050613bdd816155b1565b92915050565b600060208284031215613bf957613bf8614e9f565b5b6000613c0784828501613adb565b91505092915050565b60008060408385031215613c2757613c26614e9f565b5b6000613c3585828601613adb565b9250506020613c4685828601613adb565b9150509250929050565b600080600060608486031215613c6957613c68614e9f565b5b6000613c7786828701613adb565b9350506020613c8886828701613adb565b9250506040613c9986828701613bce565b9150509250925092565b60008060008060808587031215613cbd57613cbc614e9f565b5b6000613ccb87828801613adb565b9450506020613cdc87828801613adb565b9350506040613ced87828801613bce565b925050606085013567ffffffffffffffff811115613d0e57613d0d614e9a565b5b613d1a87828801613b72565b91505092959194509250565b60008060408385031215613d3d57613d3c614e9f565b5b6000613d4b85828601613adb565b9250506020613d5c85828601613b1e565b9150509250929050565b60008060408385031215613d7d57613d7c614e9f565b5b6000613d8b85828601613adb565b9250506020613d9c85828601613bce565b9150509250929050565b600060208284031215613dbc57613dbb614e9f565b5b600082013567ffffffffffffffff811115613dda57613dd9614e9a565b5b613de684828501613af0565b91505092915050565b600060208284031215613e0557613e04614e9f565b5b6000613e1384828501613b1e565b91505092915050565b600080600060608486031215613e3557613e34614e9f565b5b6000613e4386828701613b1e565b9350506020613e5486828701613bce565b9250506040613e6586828701613bce565b9150509250925092565b600060208284031215613e8557613e84614e9f565b5b6000613e9384828501613b33565b91505092915050565b600060208284031215613eb257613eb1614e9f565b5b6000613ec084828501613b48565b91505092915050565b600060208284031215613edf57613ede614e9f565b5b6000613eed84828501613b5d565b91505092915050565b600060208284031215613f0c57613f0b614e9f565b5b600082013567ffffffffffffffff811115613f2a57613f29614e9a565b5b613f3684828501613ba0565b91505092915050565b600060208284031215613f5557613f54614e9f565b5b6000613f6384828501613bce565b91505092915050565b60008060408385031215613f8357613f82614e9f565b5b6000613f9185828601613bce565b925050602083013567ffffffffffffffff811115613fb257613fb1614e9a565b5b613fbe85828601613af0565b9150509250929050565b613fd181614b79565b82525050565b613fe8613fe382614b79565b614d1c565b82525050565b613ff781614b8b565b82525050565b61400681614b97565b82525050565b600061401782614a16565b6140218185614a2c565b9350614031818560208601614c13565b61403a81614ea4565b840191505092915050565b600061405082614a21565b61405a8185614a48565b935061406a818560208601614c13565b61407381614ea4565b840191505092915050565b600061408982614a21565b6140938185614a59565b93506140a3818560208601614c13565b80840191505092915050565b60006140bc600b83614a48565b91506140c782614ec2565b602082019050919050565b60006140df602b83614a48565b91506140ea82614eeb565b604082019050919050565b6000614102603283614a48565b915061410d82614f3a565b604082019050919050565b6000614125602683614a48565b915061413082614f89565b604082019050919050565b6000614148601c83614a48565b915061415382614fd8565b602082019050919050565b600061416b602483614a48565b915061417682615001565b604082019050919050565b600061418e601983614a48565b915061419982615050565b602082019050919050565b60006141b1600983614a48565b91506141bc82615079565b602082019050919050565b60006141d4602c83614a48565b91506141df826150a2565b604082019050919050565b60006141f7600d83614a48565b9150614202826150f1565b602082019050919050565b600061421a603883614a48565b91506142258261511a565b604082019050919050565b600061423d602a83614a48565b915061424882615169565b604082019050919050565b6000614260602983614a48565b915061426b826151b8565b604082019050919050565b6000614283602083614a48565b915061428e82615207565b602082019050919050565b60006142a6602c83614a48565b91506142b182615230565b604082019050919050565b60006142c9602083614a48565b91506142d48261527f565b602082019050919050565b60006142ec602983614a48565b91506142f7826152a8565b604082019050919050565b600061430f602f83614a48565b915061431a826152f7565b604082019050919050565b6000614332601183614a48565b915061433d82615346565b602082019050919050565b6000614355602183614a48565b91506143608261536f565b604082019050919050565b6000614378600e83614a48565b9150614383826153be565b602082019050919050565b600061439b601283614a48565b91506143a6826153e7565b602082019050919050565b60006143be600083614a3d565b91506143c982615410565b600082019050919050565b60006143e1601083614a48565b91506143ec82615413565b602082019050919050565b6000614404603183614a48565b915061440f8261543c565b604082019050919050565b6000614427602c83614a48565b91506144328261548b565b604082019050919050565b600061444a600d83614a48565b9150614455826154da565b602082019050919050565b600061446d600c83614a48565b915061447882615503565b602082019050919050565b6000614490600883614a48565b915061449b8261552c565b602082019050919050565b6144af81614bed565b82525050565b60006144c18284613fd7565b60148201915081905092915050565b60006144dc828561407e565b91506144e8828461407e565b91508190509392505050565b60006144ff826143b1565b9150819050919050565b600060208201905061451e6000830184613fc8565b92915050565b60006080820190506145396000830187613fc8565b6145466020830186613fc8565b61455360408301856144a6565b8181036060830152614565818461400c565b905095945050505050565b60006020820190506145856000830184613fee565b92915050565b60006020820190506145a06000830184613ffd565b92915050565b600060208201905081810360008301526145c08184614045565b905092915050565b600060208201905081810360008301526145e1816140af565b9050919050565b60006020820190508181036000830152614601816140d2565b9050919050565b60006020820190508181036000830152614621816140f5565b9050919050565b6000602082019050818103600083015261464181614118565b9050919050565b600060208201905081810360008301526146618161413b565b9050919050565b600060208201905081810360008301526146818161415e565b9050919050565b600060208201905081810360008301526146a181614181565b9050919050565b600060208201905081810360008301526146c1816141a4565b9050919050565b600060208201905081810360008301526146e1816141c7565b9050919050565b60006020820190508181036000830152614701816141ea565b9050919050565b600060208201905081810360008301526147218161420d565b9050919050565b6000602082019050818103600083015261474181614230565b9050919050565b6000602082019050818103600083015261476181614253565b9050919050565b6000602082019050818103600083015261478181614276565b9050919050565b600060208201905081810360008301526147a181614299565b9050919050565b600060208201905081810360008301526147c1816142bc565b9050919050565b600060208201905081810360008301526147e1816142df565b9050919050565b6000602082019050818103600083015261480181614302565b9050919050565b6000602082019050818103600083015261482181614325565b9050919050565b6000602082019050818103600083015261484181614348565b9050919050565b600060208201905081810360008301526148618161436b565b9050919050565b600060208201905081810360008301526148818161438e565b9050919050565b600060208201905081810360008301526148a1816143d4565b9050919050565b600060208201905081810360008301526148c1816143f7565b9050919050565b600060208201905081810360008301526148e18161441a565b9050919050565b600060208201905081810360008301526149018161443d565b9050919050565b6000602082019050818103600083015261492181614460565b9050919050565b6000602082019050818103600083015261494181614483565b9050919050565b600060208201905061495d60008301846144a6565b92915050565b600061496d61497e565b90506149798282614c78565b919050565b6000604051905090565b600067ffffffffffffffff8211156149a3576149a2614e5c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149cf576149ce614e5c565b5b6149d882614ea4565b9050602081019050919050565b600067ffffffffffffffff821115614a00576149ff614e5c565b5b614a0982614ea4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a6f82614bed565b9150614a7a83614bed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aaf57614aae614d71565b5b828201905092915050565b6000614ac582614bed565b9150614ad083614bed565b925082614ae057614adf614da0565b5b828204905092915050565b6000614af682614bed565b9150614b0183614bed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3a57614b39614d71565b5b828202905092915050565b6000614b5082614bed565b9150614b5b83614bed565b925082821015614b6e57614b6d614d71565b5b828203905092915050565b6000614b8482614bcd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614c31578082015181840152602081019050614c16565b83811115614c40576000848401525b50505050565b60006002820490506001821680614c5e57607f821691505b60208210811415614c7257614c71614dcf565b5b50919050565b614c8182614ea4565b810181811067ffffffffffffffff82111715614ca057614c9f614e5c565b5b80604052505050565b6000614cb482614bed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ce757614ce6614d71565b5b600182019050919050565b6000614cfd82614bf7565b915060ff821415614d1157614d10614d71565b5b600182019050919050565b6000614d2782614d2e565b9050919050565b6000614d3982614eb5565b9050919050565b6000614d4b82614bed565b9150614d5683614bed565b925082614d6657614d65614da0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d617869756d2069732032000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617869756d2069732031303000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6573206e6f74206f70656e000000000000000000000000000000000000600082015250565b7f4d6178206c696d697420612077616c6c65740000000000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f4d617869756d2069732031300000000000000000000000000000000000000000600082015250565b7f536f6c646f757421000000000000000000000000000000000000000000000000600082015250565b61555e81614b79565b811461556957600080fd5b50565b61557581614b8b565b811461558057600080fd5b50565b61558c81614b97565b811461559757600080fd5b50565b6155a381614ba1565b81146155ae57600080fd5b50565b6155ba81614bed565b81146155c557600080fd5b5056fea2646970667358221220f7d395dee1fe3aec9a8dc879cdf4db8d93e963ad64850fc7db564e140b1769b164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6639353332484331437a7253676445657248664e354d62686e43745642425347325a666f5a334c4c7265584e2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f697066732e696f2f697066732f516d5670544e50375857395a6a6b6867426d5a674d7146665a534b62334e7a4e48415146446936357657344445682f72657665616c00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://ipfs.io/ipfs/Qmf9532HC1CzrSgdEerHfN5MbhnCtVBBSG2ZfoZ3LLreXN/
Arg [1] : sampleURI (string): https://ipfs.io/ipfs/QmVpTNP7XW9ZjkhgBmZgMqFfZSKb3NzNHAQFDi65vW4DEh/reveal
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [3] : 68747470733a2f2f697066732e696f2f697066732f516d663935333248433143
Arg [4] : 7a7253676445657248664e354d62686e43745642425347325a666f5a334c4c72
Arg [5] : 65584e2f00000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [7] : 68747470733a2f2f697066732e696f2f697066732f516d5670544e5037585739
Arg [8] : 5a6a6b6867426d5a674d7146665a534b62334e7a4e4841514644693635765734
Arg [9] : 4445682f72657665616c00000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
55506:5902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34806:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21823:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23382:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22905:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56019:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60504:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58738:548;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35446:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55947:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24272:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60002:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56359:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35114:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55664:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24682:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35636:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56838:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56146:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57064:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21343:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21073:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43962:103;;;;;;;;;;;;;:::i;:::-;;61071:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21647:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60685:189;;;;;;;;;;;;;:::i;:::-;;56947:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55706:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43311:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60235:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21992:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23675:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24938:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60362:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55909:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60114:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55746:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55982:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57538:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57999:727;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55874:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59294:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56056:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24041:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61185:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57175:355;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44220:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34806:224;34908:4;34947:35;34932:50;;;:11;:50;;;;:90;;;;34986:36;35010:11;34986:23;:36::i;:::-;34932:90;34925:97;;34806:224;;;:::o;21823:100::-;21877:13;21910:5;21903:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21823:100;:::o;23382:221::-;23458:7;23486:16;23494:7;23486;:16::i;:::-;23478:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23571:15;:24;23587:7;23571:24;;;;;;;;;;;;;;;;;;;;;23564:31;;23382:221;;;:::o;22905:411::-;22986:13;23002:23;23017:7;23002:14;:23::i;:::-;22986:39;;23050:5;23044:11;;:2;:11;;;;23036:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23144:5;23128:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23153:37;23170:5;23177:12;:10;:12::i;:::-;23153:16;:37::i;:::-;23128:62;23106:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23287:21;23296:2;23300:7;23287:8;:21::i;:::-;22975:341;22905:411;;:::o;56019:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;60504:173::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60610:7:::1;60596:11;;:21;;;;;;;;;;;;;;;;;;60640:5;60628:9;:17;;;;60666:3;60656:7;:13;;;;60504:173:::0;;;:::o;58738:548::-;56620:12;;56604;:10;:12::i;:::-;:28;;56596:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56665:5;;;;;;;;;;;56664:6;56656:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;58817:13:::1;58833:12;:10;:12::i;:::-;58817:28;;58880:1;58864:12;:17;;58856:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;58963:1;58947:12;58923:9;:21;58933:10;58923:21;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:41;;58915:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;59023:12;;59007;58999:5;:20;;;;:::i;:::-;:36;;58991:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;59081:19;59087:12;59081:5;:19::i;:::-;59068:9;:32;;59060:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;59135:14;59152:12;:10;:12::i;:::-;59135:29;;59181:7;59191:1;59181:11;;59177:100;59199:12;59194:1;:17;;;59177:100;;59232:33;59247:6;59263:1;59255:9;;:5;:9;;;;:::i;:::-;59232:14;:33::i;:::-;59213:3;;;;;:::i;:::-;;;;59177:100;;;;58804:482;;58738:548:::0;:::o;35446:113::-;35507:7;35534:10;:17;;;;35527:24;;35446:113;:::o;55947:28::-;;;;:::o;24272:339::-;24467:41;24486:12;:10;:12::i;:::-;24500:7;24467:18;:41::i;:::-;24459:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24575:28;24585:4;24591:2;24595:7;24575:9;:28::i;:::-;24272:339;;;:::o;60002:104::-;60054:7;60081:17;60091:6;60081:5;;:9;;:17;;;;:::i;:::-;60074:24;;60002:104;;;:::o;56359:25::-;;;;:::o;35114:256::-;35211:7;35247:23;35264:5;35247:16;:23::i;:::-;35239:5;:31;35231:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35336:12;:19;35349:5;35336:19;;;;;;;;;;;;;;;:26;35356:5;35336:26;;;;;;;;;;;;35329:33;;35114:256;;;;:::o;55664:35::-;;;;:::o;24682:185::-;24820:39;24837:4;24843:2;24847:7;24820:39;;;;;;;;;;;;:16;:39::i;:::-;24682:185;;;:::o;35636:233::-;35711:7;35747:30;:28;:30::i;:::-;35739:5;:38;35731:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:10;35855:5;35844:17;;;;;;;;:::i;:::-;;;;;;;;;;35837:24;;35636:233;;;:::o;56838:101::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56924:7:::1;56909:12;:22;;;;;;;;;;;;:::i;:::-;;56838:101:::0;:::o;56146:42::-;;;;;;;;;;;;;;;;;:::o;57064:103::-;57107:7;57134:25;:15;:23;:25::i;:::-;57127:32;;57064:103;:::o;21343:239::-;21415:7;21435:13;21451:7;:16;21459:7;21451:16;;;;;;;;;;;;;;;;;;;;;21435:32;;21503:1;21486:19;;:5;:19;;;;21478:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21569:5;21562:12;;;21343:239;;;:::o;21073:208::-;21145:7;21190:1;21173:19;;:5;:19;;;;21165:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21257:9;:16;21267:5;21257:16;;;;;;;;;;;;;;;;21250:23;;21073:208;;;:::o;43962:103::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44027:30:::1;44054:1;44027:18;:30::i;:::-;43962:103::o:0;61071:106::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61158:11:::1;61145:10;:24;;;;61071:106:::0;:::o;21647:109::-;21705:7;21732;:16;21740:7;21732:16;;;;;;;;;;;;;;;;;;;;;21725:23;;21647:109;;;:::o;60685:189::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60736:15:::1;60754:21;60736:39;;60804:1;60794:7;:11;60786:20;;;::::0;::::1;;60817:49;56097:42;60844:21;60817:10;:49::i;:::-;60725:149;60685:189::o:0;56947:109::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57039:9:::1;57022:14;:26;;;;;;;;;;;;:::i;:::-;;56947:109:::0;:::o;55706:33::-;;;;:::o;43311:87::-;43357:7;43384:6;;;;;;;;;;;43377:13;;43311:87;:::o;60235:119::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60304:6:::1;60296:5;:14;;;;60326:20;60340:5;;60326:20;;;;;;:::i;:::-;;;;;;;;60235:119:::0;:::o;21992:104::-;22048:13;22081:7;22074:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21992:104;:::o;23675:295::-;23790:12;:10;:12::i;:::-;23778:24;;:8;:24;;;;23770:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:8;23845:18;:32;23864:12;:10;:12::i;:::-;23845:32;;;;;;;;;;;;;;;:42;23878:8;23845:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23943:8;23914:48;;23929:12;:10;:12::i;:::-;23914:48;;;23953:8;23914:48;;;;;;:::i;:::-;;;;;;;;23675:295;;:::o;24938:328::-;25113:41;25132:12;:10;:12::i;:::-;25146:7;25113:18;:41::i;:::-;25105:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25219:39;25233:4;25239:2;25243:7;25252:5;25219:13;:39::i;:::-;24938:328;;;;:::o;60362:134::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60441:4:::1;60426:12;:19;;;;60461:27;60475:12;;60461:27;;;;;;:::i;:::-;;;;;;;;60362:134:::0;:::o;55909:31::-;;;;;;;;;;;;;:::o;60114:113::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60180:6:::1;60172:5;;:14;;;;;;;;;;;;;;;;;;60202:17;60213:5;;;;;;;;;;;60202:17;;;;;;:::i;:::-;;;;;;;;60114:113:::0;:::o;55746:36::-;55781:1;55746:36;:::o;55982:30::-;;;;:::o;57538:453::-;57611:13;57645:16;57653:7;57645;:16::i;:::-;57637:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;57730:11;;;;;;;;;;;57729:12;:36;;;;;57756:9;;57745:7;:20;;57729:36;:58;;;;;57780:7;;57769;:18;;57729:58;57726:98;;;57810:14;57803:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57726:98;57845:21;57869:10;:8;:10::i;:::-;57845:34;;57921:1;57903:7;57897:21;:25;:86;;;;;;;;;;;;;;;;;57949:7;57958:18;:7;:16;:18::i;:::-;57932:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57897:86;57890:93;;;57538:453;;;;:::o;57999:727::-;56620:12;;56604;:10;:12::i;:::-;:28;;56596:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56665:5;;;;;;;;;;;56664:6;56656:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;58112:12:::1;58154:10;58137:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;58127:39;;;;;;58112:54;;58185:50;58204:12;58218:10;;58230:4;58185:18;:50::i;:::-;58177:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;58264:13;58280:12;:10;:12::i;:::-;58264:28;;58327:2;58311:12;:18;;58303:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;58411:2;58395:12;58371:9;:21;58381:10;58371:21;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:42;;58363:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;58473:4;58457:12;58449:5;:20;;;;:::i;:::-;:28;;58441:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;58523:19;58529:12;58523:5;:19::i;:::-;58510:9;:32;;58502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;58577:14;58594:12;:10;:12::i;:::-;58577:29;;58623:7;58633:1;58623:11;;58619:100;58641:12;58636:1;:17;;;58619:100;;58674:33;58689:6;58705:1;58697:9;;:5;:9;;;;:::i;:::-;58674:14;:33::i;:::-;58655:3;;;;;:::i;:::-;;;;58619:100;;;;58101:625;;;57999:727:::0;;:::o;55874:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59294:479::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56620:12:::1;;56604;:10;:12::i;:::-;:28;;56596:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56665:5;;;;;;;;;;;56664:6;56656:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;59373:13:::2;59389:12;:10;:12::i;:::-;59373:28;;59436:3;59420:12;:19;;59412:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;59521:3;59505:12;59481:9;:21;59491:10;59481:21;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:43;;59473:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;59585:12;;59569;59561:5;:20;;;;:::i;:::-;:36;;59553:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;59624:14;59641:12;:10;:12::i;:::-;59624:29;;59670:7;59680:1;59670:11;;59666:100;59688:12;59683:1;:17;;;59666:100;;59721:33;59736:6;59752:1;59744:9;;:5;:9;;;;:::i;:::-;59721:14;:33::i;:::-;59702:3;;;;;:::i;:::-;;;;59666:100;;;;59362:411;;59294:479:::0;:::o;56056:83::-;56097:42;56056:83;:::o;24041:164::-;24138:4;24162:18;:25;24181:5;24162:25;;;;;;;;;;;;;;;:35;24188:8;24162:35;;;;;;;;;;;;;;;;;;;;;;;;;24155:42;;24041:164;;;;:::o;61185:218::-;61258:4;61274:12;61316:10;61299:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;61289:39;;;;;;61274:54;;61345:50;61364:12;61378:10;;61390:4;61345:18;:50::i;:::-;61338:57;;;61185:218;;;:::o;57175:355::-;57216:7;57257:10;57239:15;:28;57236:287;;;57291:1;57284:8;;;;57236:287;57347:10;57328:15;:29;;:70;;;;;57379:19;57361:15;:37;57328:70;57325:198;;;57422:1;57415:8;;;;57325:198;57488:1;57481:8;;57175:355;;:::o;44220:201::-;43542:12;:10;:12::i;:::-;43531:23;;:7;:5;:7::i;:::-;:23;;;43523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44329:1:::1;44309:22;;:8;:22;;;;44301:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44385:28;44404:8;44385:18;:28::i;:::-;44220:201:::0;:::o;20716:293::-;20818:4;20866:25;20851:40;;;:11;:40;;;;:101;;;;20919:33;20904:48;;;:11;:48;;;;20851:101;:150;;;;20965:36;20989:11;20965:23;:36::i;:::-;20851:150;20835:166;;20716:293;;;:::o;26776:127::-;26841:4;26893:1;26865:30;;:7;:16;26873:7;26865:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26858:37;;26776:127;;;:::o;16301:98::-;16354:7;16381:10;16374:17;;16301:98;:::o;30776:174::-;30878:2;30851:15;:24;30867:7;30851:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30934:7;30930:2;30896:46;;30905:23;30920:7;30905:14;:23::i;:::-;30896:46;;;;;;;;;;;;30776:174;;:::o;59781:213::-;59857:27;:15;:25;:27::i;:::-;59895:9;:14;59905:3;59895:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;;59922:24;59932:3;59937:8;59922:9;:24::i;:::-;59977:8;59964:22;;;;;;;;;;59781:213;;:::o;27070:348::-;27163:4;27188:16;27196:7;27188;:16::i;:::-;27180:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27264:13;27280:23;27295:7;27280:14;:23::i;:::-;27264:39;;27333:5;27322:16;;:7;:16;;;:51;;;;27366:7;27342:31;;:20;27354:7;27342:11;:20::i;:::-;:31;;;27322:51;:87;;;;27377:32;27394:5;27401:7;27377:16;:32::i;:::-;27322:87;27314:96;;;27070:348;;;;:::o;30080:578::-;30239:4;30212:31;;:23;30227:7;30212:14;:23::i;:::-;:31;;;30204:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30322:1;30308:16;;:2;:16;;;;30300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30378:39;30399:4;30405:2;30409:7;30378:20;:39::i;:::-;30482:29;30499:1;30503:7;30482:8;:29::i;:::-;30543:1;30524:9;:15;30534:4;30524:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30572:1;30555:9;:13;30565:2;30555:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30603:2;30584:7;:16;30592:7;30584:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30642:7;30638:2;30623:27;;30632:4;30623:27;;;;;;;;;;;;30080:578;;;:::o;48288:98::-;48346:7;48377:1;48373;:5;;;;:::i;:::-;48366:12;;48288:98;;;;:::o;41742:114::-;41807:7;41834;:14;;;41827:21;;41742:114;;;:::o;44581:191::-;44655:16;44674:6;;;;;;;;;;;44655:25;;44700:8;44691:6;;:17;;;;;;;;;;;;;;;;;;44755:8;44724:40;;44745:8;44724:40;;;;;;;;;;;;44644:128;44581:191;:::o;60882:181::-;60957:12;60975:8;:13;;60996:7;60975:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60956:52;;;61027:7;61019:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;60945:118;60882:181;;:::o;26148:315::-;26305:28;26315:4;26321:2;26325:7;26305:9;:28::i;:::-;26352:48;26375:4;26381:2;26385:7;26394:5;26352:22;:48::i;:::-;26344:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26148:315;;;;:::o;56717:113::-;56777:13;56810:12;56803:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56717:113;:::o;16797:723::-;16853:13;17083:1;17074:5;:10;17070:53;;;17101:10;;;;;;;;;;;;;;;;;;;;;17070:53;17133:12;17148:5;17133:20;;17164:14;17189:78;17204:1;17196:4;:9;17189:78;;17222:8;;;;;:::i;:::-;;;;17253:2;17245:10;;;;;:::i;:::-;;;17189:78;;;17277:19;17309:6;17299:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17277:39;;17327:154;17343:1;17334:5;:10;17327:154;;17371:1;17361:11;;;;;:::i;:::-;;;17438:2;17430:5;:10;;;;:::i;:::-;17417:2;:24;;;;:::i;:::-;17404:39;;17387:6;17394;17387:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17467:2;17458:11;;;;;:::i;:::-;;;17327:154;;;17505:6;17491:21;;;;;16797:723;;;;:::o;52538:190::-;52663:4;52716;52687:25;52700:5;52707:4;52687:12;:25::i;:::-;:33;52680:40;;52538:190;;;;;:::o;19323:157::-;19408:4;19447:25;19432:40;;;:11;:40;;;;19425:47;;19323:157;;;:::o;41864:127::-;41971:1;41953:7;:14;;;:19;;;;;;;;;;;41864:127;:::o;27760:110::-;27836:26;27846:2;27850:7;27836:26;;;;;;;;;;;;:9;:26::i;:::-;27760:110;;:::o;36482:589::-;36626:45;36653:4;36659:2;36663:7;36626:26;:45::i;:::-;36704:1;36688:18;;:4;:18;;;36684:187;;;36723:40;36755:7;36723:31;:40::i;:::-;36684:187;;;36793:2;36785:10;;:4;:10;;;36781:90;;36812:47;36845:4;36851:7;36812:32;:47::i;:::-;36781:90;36684:187;36899:1;36885:16;;:2;:16;;;36881:183;;;36918:45;36955:7;36918:36;:45::i;:::-;36881:183;;;36991:4;36985:10;;:2;:10;;;36981:83;;37012:40;37040:2;37044:7;37012:27;:40::i;:::-;36981:83;36881:183;36482:589;;;:::o;31515:803::-;31670:4;31691:15;:2;:13;;;:15::i;:::-;31687:624;;;31743:2;31727:36;;;31764:12;:10;:12::i;:::-;31778:4;31784:7;31793:5;31727:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31723:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31990:1;31973:6;:13;:18;31969:272;;;32016:60;;;;;;;;;;:::i;:::-;;;;;;;;31969:272;32191:6;32185:13;32176:6;32172:2;32168:15;32161:38;31723:533;31860:45;;;31850:55;;;:6;:55;;;;31843:62;;;;;31687:624;32295:4;32288:11;;31515:803;;;;;;;:::o;53090:675::-;53173:7;53193:20;53216:4;53193:27;;53236:9;53231:497;53255:5;:12;53251:1;:16;53231:497;;;53289:20;53312:5;53318:1;53312:8;;;;;;;;:::i;:::-;;;;;;;;53289:31;;53355:12;53339;:28;53335:382;;53482:42;53497:12;53511;53482:14;:42::i;:::-;53467:57;;53335:382;;;53659:42;53674:12;53688;53659:14;:42::i;:::-;53644:57;;53335:382;53274:454;53269:3;;;;;:::i;:::-;;;;53231:497;;;;53745:12;53738:19;;;53090:675;;;;:::o;28097:321::-;28227:18;28233:2;28237:7;28227:5;:18::i;:::-;28278:54;28309:1;28313:2;28317:7;28326:5;28278:22;:54::i;:::-;28256:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28097:321;;;:::o;32890:126::-;;;;:::o;37794:164::-;37898:10;:17;;;;37871:15;:24;37887:7;37871:24;;;;;;;;;;;:44;;;;37926:10;37942:7;37926:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37794:164;:::o;38585:988::-;38851:22;38901:1;38876:22;38893:4;38876:16;:22::i;:::-;:26;;;;:::i;:::-;38851:51;;38913:18;38934:17;:26;38952:7;38934:26;;;;;;;;;;;;38913:47;;39081:14;39067:10;:28;39063:328;;39112:19;39134:12;:18;39147:4;39134:18;;;;;;;;;;;;;;;:34;39153:14;39134:34;;;;;;;;;;;;39112:56;;39218:11;39185:12;:18;39198:4;39185:18;;;;;;;;;;;;;;;:30;39204:10;39185:30;;;;;;;;;;;:44;;;;39335:10;39302:17;:30;39320:11;39302:30;;;;;;;;;;;:43;;;;39097:294;39063:328;39487:17;:26;39505:7;39487:26;;;;;;;;;;;39480:33;;;39531:12;:18;39544:4;39531:18;;;;;;;;;;;;;;;:34;39550:14;39531:34;;;;;;;;;;;39524:41;;;38666:907;;38585:988;;:::o;39868:1079::-;40121:22;40166:1;40146:10;:17;;;;:21;;;;:::i;:::-;40121:46;;40178:18;40199:15;:24;40215:7;40199:24;;;;;;;;;;;;40178:45;;40550:19;40572:10;40583:14;40572:26;;;;;;;;:::i;:::-;;;;;;;;;;40550:48;;40636:11;40611:10;40622;40611:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40747:10;40716:15;:28;40732:11;40716:28;;;;;;;;;;;:41;;;;40888:15;:24;40904:7;40888:24;;;;;;;;;;;40881:31;;;40923:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39939:1008;;;39868:1079;:::o;37372:221::-;37457:14;37474:20;37491:2;37474:16;:20::i;:::-;37457:37;;37532:7;37505:12;:16;37518:2;37505:16;;;;;;;;;;;;;;;:24;37522:6;37505:24;;;;;;;;;;;:34;;;;37579:6;37550:17;:26;37568:7;37550:26;;;;;;;;;;;:35;;;;37446:147;37372:221;;:::o;8435:326::-;8495:4;8752:1;8730:7;:19;;;:23;8723:30;;8435:326;;;:::o;53773:224::-;53841:13;53904:1;53898:4;53891:15;53933:1;53927:4;53920:15;53974:4;53968;53958:21;53949:30;;53773:224;;;;:::o;28754:382::-;28848:1;28834:16;;:2;:16;;;;28826:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28907:16;28915:7;28907;:16::i;:::-;28906:17;28898:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28969:45;28998:1;29002:2;29006:7;28969:20;:45::i;:::-;29044:1;29027:9;:13;29037:2;29027:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29075:2;29056:7;:16;29064:7;29056:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29120:7;29116:2;29095:33;;29112:1;29095:33;;;;;;;;;;;;28754:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:329::-;3619:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:119;;;3674:79;;:::i;:::-;3636:119;3794:1;3819:53;3864:7;3855:6;3844:9;3840:22;3819:53;:::i;:::-;3809:63;;3765:117;3560:329;;;;:::o;3895:474::-;3963:6;3971;4020:2;4008:9;3999:7;3995:23;3991:32;3988:119;;;4026:79;;:::i;:::-;3988:119;4146:1;4171:53;4216:7;4207:6;4196:9;4192:22;4171:53;:::i;:::-;4161:63;;4117:117;4273:2;4299:53;4344:7;4335:6;4324:9;4320:22;4299:53;:::i;:::-;4289:63;;4244:118;3895:474;;;;;:::o;4375:619::-;4452:6;4460;4468;4517:2;4505:9;4496:7;4492:23;4488:32;4485:119;;;4523:79;;:::i;:::-;4485:119;4643:1;4668:53;4713:7;4704:6;4693:9;4689:22;4668:53;:::i;:::-;4658:63;;4614:117;4770:2;4796:53;4841:7;4832:6;4821:9;4817:22;4796:53;:::i;:::-;4786:63;;4741:118;4898:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4869:118;4375:619;;;;;:::o;5000:943::-;5095:6;5103;5111;5119;5168:3;5156:9;5147:7;5143:23;5139:33;5136:120;;;5175:79;;:::i;:::-;5136:120;5295:1;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5266:117;5422:2;5448:53;5493:7;5484:6;5473:9;5469:22;5448:53;:::i;:::-;5438:63;;5393:118;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;5706:2;5695:9;5691:18;5678:32;5737:18;5729:6;5726:30;5723:117;;;5759:79;;:::i;:::-;5723:117;5864:62;5918:7;5909:6;5898:9;5894:22;5864:62;:::i;:::-;5854:72;;5649:287;5000:943;;;;;;;:::o;5949:468::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:50;6392:7;6383:6;6372:9;6368:22;6350:50;:::i;:::-;6340:60;;6295:115;5949:468;;;;;:::o;6423:474::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:53;6872:7;6863:6;6852:9;6848:22;6827:53;:::i;:::-;6817:63;;6772:118;6423:474;;;;;:::o;6903:539::-;6987:6;7036:2;7024:9;7015:7;7011:23;7007:32;7004:119;;;7042:79;;:::i;:::-;7004:119;7190:1;7179:9;7175:17;7162:31;7220:18;7212:6;7209:30;7206:117;;;7242:79;;:::i;:::-;7206:117;7347:78;7417:7;7408:6;7397:9;7393:22;7347:78;:::i;:::-;7337:88;;7133:302;6903:539;;;;:::o;7448:323::-;7504:6;7553:2;7541:9;7532:7;7528:23;7524:32;7521:119;;;7559:79;;:::i;:::-;7521:119;7679:1;7704:50;7746:7;7737:6;7726:9;7722:22;7704:50;:::i;:::-;7694:60;;7650:114;7448:323;;;;:::o;7777:613::-;7851:6;7859;7867;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:50;8109:7;8100:6;8089:9;8085:22;8067:50;:::i;:::-;8057:60;;8013:114;8166:2;8192:53;8237:7;8228:6;8217:9;8213:22;8192:53;:::i;:::-;8182:63;;8137:118;8294:2;8320:53;8365:7;8356:6;8345:9;8341:22;8320:53;:::i;:::-;8310:63;;8265:118;7777:613;;;;;:::o;8396:329::-;8455:6;8504:2;8492:9;8483:7;8479:23;8475:32;8472:119;;;8510:79;;:::i;:::-;8472:119;8630:1;8655:53;8700:7;8691:6;8680:9;8676:22;8655:53;:::i;:::-;8645:63;;8601:117;8396:329;;;;:::o;8731:327::-;8789:6;8838:2;8826:9;8817:7;8813:23;8809:32;8806:119;;;8844:79;;:::i;:::-;8806:119;8964:1;8989:52;9033:7;9024:6;9013:9;9009:22;8989:52;:::i;:::-;8979:62;;8935:116;8731:327;;;;:::o;9064:349::-;9133:6;9182:2;9170:9;9161:7;9157:23;9153:32;9150:119;;;9188:79;;:::i;:::-;9150:119;9308:1;9333:63;9388:7;9379:6;9368:9;9364:22;9333:63;:::i;:::-;9323:73;;9279:127;9064:349;;;;:::o;9419:509::-;9488:6;9537:2;9525:9;9516:7;9512:23;9508:32;9505:119;;;9543:79;;:::i;:::-;9505:119;9691:1;9680:9;9676:17;9663:31;9721:18;9713:6;9710:30;9707:117;;;9743:79;;:::i;:::-;9707:117;9848:63;9903:7;9894:6;9883:9;9879:22;9848:63;:::i;:::-;9838:73;;9634:287;9419:509;;;;:::o;9934:329::-;9993:6;10042:2;10030:9;10021:7;10017:23;10013:32;10010:119;;;10048:79;;:::i;:::-;10010:119;10168:1;10193:53;10238:7;10229:6;10218:9;10214:22;10193:53;:::i;:::-;10183:63;;10139:117;9934:329;;;;:::o;10269:684::-;10362:6;10370;10419:2;10407:9;10398:7;10394:23;10390:32;10387:119;;;10425:79;;:::i;:::-;10387:119;10545:1;10570:53;10615:7;10606:6;10595:9;10591:22;10570:53;:::i;:::-;10560:63;;10516:117;10700:2;10689:9;10685:18;10672:32;10731:18;10723:6;10720:30;10717:117;;;10753:79;;:::i;:::-;10717:117;10858:78;10928:7;10919:6;10908:9;10904:22;10858:78;:::i;:::-;10848:88;;10643:303;10269:684;;;;;:::o;10959:118::-;11046:24;11064:5;11046:24;:::i;:::-;11041:3;11034:37;10959:118;;:::o;11083:157::-;11188:45;11208:24;11226:5;11208:24;:::i;:::-;11188:45;:::i;:::-;11183:3;11176:58;11083:157;;:::o;11246:109::-;11327:21;11342:5;11327:21;:::i;:::-;11322:3;11315:34;11246:109;;:::o;11361:118::-;11448:24;11466:5;11448:24;:::i;:::-;11443:3;11436:37;11361:118;;:::o;11485:360::-;11571:3;11599:38;11631:5;11599:38;:::i;:::-;11653:70;11716:6;11711:3;11653:70;:::i;:::-;11646:77;;11732:52;11777:6;11772:3;11765:4;11758:5;11754:16;11732:52;:::i;:::-;11809:29;11831:6;11809:29;:::i;:::-;11804:3;11800:39;11793:46;;11575:270;11485:360;;;;:::o;11851:364::-;11939:3;11967:39;12000:5;11967:39;:::i;:::-;12022:71;12086:6;12081:3;12022:71;:::i;:::-;12015:78;;12102:52;12147:6;12142:3;12135:4;12128:5;12124:16;12102:52;:::i;:::-;12179:29;12201:6;12179:29;:::i;:::-;12174:3;12170:39;12163:46;;11943:272;11851:364;;;;:::o;12221:377::-;12327:3;12355:39;12388:5;12355:39;:::i;:::-;12410:89;12492:6;12487:3;12410:89;:::i;:::-;12403:96;;12508:52;12553:6;12548:3;12541:4;12534:5;12530:16;12508:52;:::i;:::-;12585:6;12580:3;12576:16;12569:23;;12331:267;12221:377;;;;:::o;12604:366::-;12746:3;12767:67;12831:2;12826:3;12767:67;:::i;:::-;12760:74;;12843:93;12932:3;12843:93;:::i;:::-;12961:2;12956:3;12952:12;12945:19;;12604:366;;;:::o;12976:::-;13118:3;13139:67;13203:2;13198:3;13139:67;:::i;:::-;13132:74;;13215:93;13304:3;13215:93;:::i;:::-;13333:2;13328:3;13324:12;13317:19;;12976:366;;;:::o;13348:::-;13490:3;13511:67;13575:2;13570:3;13511:67;:::i;:::-;13504:74;;13587:93;13676:3;13587:93;:::i;:::-;13705:2;13700:3;13696:12;13689:19;;13348:366;;;:::o;13720:::-;13862:3;13883:67;13947:2;13942:3;13883:67;:::i;:::-;13876:74;;13959:93;14048:3;13959:93;:::i;:::-;14077:2;14072:3;14068:12;14061:19;;13720:366;;;:::o;14092:::-;14234:3;14255:67;14319:2;14314:3;14255:67;:::i;:::-;14248:74;;14331:93;14420:3;14331:93;:::i;:::-;14449:2;14444:3;14440:12;14433:19;;14092:366;;;:::o;14464:::-;14606:3;14627:67;14691:2;14686:3;14627:67;:::i;:::-;14620:74;;14703:93;14792:3;14703:93;:::i;:::-;14821:2;14816:3;14812:12;14805:19;;14464:366;;;:::o;14836:::-;14978:3;14999:67;15063:2;15058:3;14999:67;:::i;:::-;14992:74;;15075:93;15164:3;15075:93;:::i;:::-;15193:2;15188:3;15184:12;15177:19;;14836:366;;;:::o;15208:365::-;15350:3;15371:66;15435:1;15430:3;15371:66;:::i;:::-;15364:73;;15446:93;15535:3;15446:93;:::i;:::-;15564:2;15559:3;15555:12;15548:19;;15208:365;;;:::o;15579:366::-;15721:3;15742:67;15806:2;15801:3;15742:67;:::i;:::-;15735:74;;15818:93;15907:3;15818:93;:::i;:::-;15936:2;15931:3;15927:12;15920:19;;15579:366;;;:::o;15951:::-;16093:3;16114:67;16178:2;16173:3;16114:67;:::i;:::-;16107:74;;16190:93;16279:3;16190:93;:::i;:::-;16308:2;16303:3;16299:12;16292:19;;15951:366;;;:::o;16323:::-;16465:3;16486:67;16550:2;16545:3;16486:67;:::i;:::-;16479:74;;16562:93;16651:3;16562:93;:::i;:::-;16680:2;16675:3;16671:12;16664:19;;16323:366;;;:::o;16695:::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16695:366;;;:::o;17067:::-;17209:3;17230:67;17294:2;17289:3;17230:67;:::i;:::-;17223:74;;17306:93;17395:3;17306:93;:::i;:::-;17424:2;17419:3;17415:12;17408:19;;17067:366;;;:::o;17439:::-;17581:3;17602:67;17666:2;17661:3;17602:67;:::i;:::-;17595:74;;17678:93;17767:3;17678:93;:::i;:::-;17796:2;17791:3;17787:12;17780:19;;17439:366;;;:::o;17811:::-;17953:3;17974:67;18038:2;18033:3;17974:67;:::i;:::-;17967:74;;18050:93;18139:3;18050:93;:::i;:::-;18168:2;18163:3;18159:12;18152:19;;17811:366;;;:::o;18183:::-;18325:3;18346:67;18410:2;18405:3;18346:67;:::i;:::-;18339:74;;18422:93;18511:3;18422:93;:::i;:::-;18540:2;18535:3;18531:12;18524:19;;18183:366;;;:::o;18555:::-;18697:3;18718:67;18782:2;18777:3;18718:67;:::i;:::-;18711:74;;18794:93;18883:3;18794:93;:::i;:::-;18912:2;18907:3;18903:12;18896:19;;18555:366;;;:::o;18927:::-;19069:3;19090:67;19154:2;19149:3;19090:67;:::i;:::-;19083:74;;19166:93;19255:3;19166:93;:::i;:::-;19284:2;19279:3;19275:12;19268:19;;18927:366;;;:::o;19299:::-;19441:3;19462:67;19526:2;19521:3;19462:67;:::i;:::-;19455:74;;19538:93;19627:3;19538:93;:::i;:::-;19656:2;19651:3;19647:12;19640:19;;19299:366;;;:::o;19671:::-;19813:3;19834:67;19898:2;19893:3;19834:67;:::i;:::-;19827:74;;19910:93;19999:3;19910:93;:::i;:::-;20028:2;20023:3;20019:12;20012:19;;19671:366;;;:::o;20043:::-;20185:3;20206:67;20270:2;20265:3;20206:67;:::i;:::-;20199:74;;20282:93;20371:3;20282:93;:::i;:::-;20400:2;20395:3;20391:12;20384:19;;20043:366;;;:::o;20415:::-;20557:3;20578:67;20642:2;20637:3;20578:67;:::i;:::-;20571:74;;20654:93;20743:3;20654:93;:::i;:::-;20772:2;20767:3;20763:12;20756:19;;20415:366;;;:::o;20787:398::-;20946:3;20967:83;21048:1;21043:3;20967:83;:::i;:::-;20960:90;;21059:93;21148:3;21059:93;:::i;:::-;21177:1;21172:3;21168:11;21161:18;;20787:398;;;:::o;21191:366::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:::-;21705:3;21726:67;21790:2;21785:3;21726:67;:::i;:::-;21719:74;;21802:93;21891:3;21802:93;:::i;:::-;21920:2;21915:3;21911:12;21904:19;;21563:366;;;:::o;21935:::-;22077:3;22098:67;22162:2;22157:3;22098:67;:::i;:::-;22091:74;;22174:93;22263:3;22174:93;:::i;:::-;22292:2;22287:3;22283:12;22276:19;;21935:366;;;:::o;22307:::-;22449:3;22470:67;22534:2;22529:3;22470:67;:::i;:::-;22463:74;;22546:93;22635:3;22546:93;:::i;:::-;22664:2;22659:3;22655:12;22648:19;;22307:366;;;:::o;22679:::-;22821:3;22842:67;22906:2;22901:3;22842:67;:::i;:::-;22835:74;;22918:93;23007:3;22918:93;:::i;:::-;23036:2;23031:3;23027:12;23020:19;;22679:366;;;:::o;23051:365::-;23193:3;23214:66;23278:1;23273:3;23214:66;:::i;:::-;23207:73;;23289:93;23378:3;23289:93;:::i;:::-;23407:2;23402:3;23398:12;23391:19;;23051:365;;;:::o;23422:118::-;23509:24;23527:5;23509:24;:::i;:::-;23504:3;23497:37;23422:118;;:::o;23546:256::-;23658:3;23673:75;23744:3;23735:6;23673:75;:::i;:::-;23773:2;23768:3;23764:12;23757:19;;23793:3;23786:10;;23546:256;;;;:::o;23808:435::-;23988:3;24010:95;24101:3;24092:6;24010:95;:::i;:::-;24003:102;;24122:95;24213:3;24204:6;24122:95;:::i;:::-;24115:102;;24234:3;24227:10;;23808:435;;;;;:::o;24249:379::-;24433:3;24455:147;24598:3;24455:147;:::i;:::-;24448:154;;24619:3;24612:10;;24249:379;;;:::o;24634:222::-;24727:4;24765:2;24754:9;24750:18;24742:26;;24778:71;24846:1;24835:9;24831:17;24822:6;24778:71;:::i;:::-;24634:222;;;;:::o;24862:640::-;25057:4;25095:3;25084:9;25080:19;25072:27;;25109:71;25177:1;25166:9;25162:17;25153:6;25109:71;:::i;:::-;25190:72;25258:2;25247:9;25243:18;25234:6;25190:72;:::i;:::-;25272;25340:2;25329:9;25325:18;25316:6;25272:72;:::i;:::-;25391:9;25385:4;25381:20;25376:2;25365:9;25361:18;25354:48;25419:76;25490:4;25481:6;25419:76;:::i;:::-;25411:84;;24862:640;;;;;;;:::o;25508:210::-;25595:4;25633:2;25622:9;25618:18;25610:26;;25646:65;25708:1;25697:9;25693:17;25684:6;25646:65;:::i;:::-;25508:210;;;;:::o;25724:222::-;25817:4;25855:2;25844:9;25840:18;25832:26;;25868:71;25936:1;25925:9;25921:17;25912:6;25868:71;:::i;:::-;25724:222;;;;:::o;25952:313::-;26065:4;26103:2;26092:9;26088:18;26080:26;;26152:9;26146:4;26142:20;26138:1;26127:9;26123:17;26116:47;26180:78;26253:4;26244:6;26180:78;:::i;:::-;26172:86;;25952:313;;;;:::o;26271:419::-;26437:4;26475:2;26464:9;26460:18;26452:26;;26524:9;26518:4;26514:20;26510:1;26499:9;26495:17;26488:47;26552:131;26678:4;26552:131;:::i;:::-;26544:139;;26271:419;;;:::o;26696:::-;26862:4;26900:2;26889:9;26885:18;26877:26;;26949:9;26943:4;26939:20;26935:1;26924:9;26920:17;26913:47;26977:131;27103:4;26977:131;:::i;:::-;26969:139;;26696:419;;;:::o;27121:::-;27287:4;27325:2;27314:9;27310:18;27302:26;;27374:9;27368:4;27364:20;27360:1;27349:9;27345:17;27338:47;27402:131;27528:4;27402:131;:::i;:::-;27394:139;;27121:419;;;:::o;27546:::-;27712:4;27750:2;27739:9;27735:18;27727:26;;27799:9;27793:4;27789:20;27785:1;27774:9;27770:17;27763:47;27827:131;27953:4;27827:131;:::i;:::-;27819:139;;27546:419;;;:::o;27971:::-;28137:4;28175:2;28164:9;28160:18;28152:26;;28224:9;28218:4;28214:20;28210:1;28199:9;28195:17;28188:47;28252:131;28378:4;28252:131;:::i;:::-;28244:139;;27971:419;;;:::o;28396:::-;28562:4;28600:2;28589:9;28585:18;28577:26;;28649:9;28643:4;28639:20;28635:1;28624:9;28620:17;28613:47;28677:131;28803:4;28677:131;:::i;:::-;28669:139;;28396:419;;;:::o;28821:::-;28987:4;29025:2;29014:9;29010:18;29002:26;;29074:9;29068:4;29064:20;29060:1;29049:9;29045:17;29038:47;29102:131;29228:4;29102:131;:::i;:::-;29094:139;;28821:419;;;:::o;29246:::-;29412:4;29450:2;29439:9;29435:18;29427:26;;29499:9;29493:4;29489:20;29485:1;29474:9;29470:17;29463:47;29527:131;29653:4;29527:131;:::i;:::-;29519:139;;29246:419;;;:::o;29671:::-;29837:4;29875:2;29864:9;29860:18;29852:26;;29924:9;29918:4;29914:20;29910:1;29899:9;29895:17;29888:47;29952:131;30078:4;29952:131;:::i;:::-;29944:139;;29671:419;;;:::o;30096:::-;30262:4;30300:2;30289:9;30285:18;30277:26;;30349:9;30343:4;30339:20;30335:1;30324:9;30320:17;30313:47;30377:131;30503:4;30377:131;:::i;:::-;30369:139;;30096:419;;;:::o;30521:::-;30687:4;30725:2;30714:9;30710:18;30702:26;;30774:9;30768:4;30764:20;30760:1;30749:9;30745:17;30738:47;30802:131;30928:4;30802:131;:::i;:::-;30794:139;;30521:419;;;:::o;30946:::-;31112:4;31150:2;31139:9;31135:18;31127:26;;31199:9;31193:4;31189:20;31185:1;31174:9;31170:17;31163:47;31227:131;31353:4;31227:131;:::i;:::-;31219:139;;30946:419;;;:::o;31371:::-;31537:4;31575:2;31564:9;31560:18;31552:26;;31624:9;31618:4;31614:20;31610:1;31599:9;31595:17;31588:47;31652:131;31778:4;31652:131;:::i;:::-;31644:139;;31371:419;;;:::o;31796:::-;31962:4;32000:2;31989:9;31985:18;31977:26;;32049:9;32043:4;32039:20;32035:1;32024:9;32020:17;32013:47;32077:131;32203:4;32077:131;:::i;:::-;32069:139;;31796:419;;;:::o;32221:::-;32387:4;32425:2;32414:9;32410:18;32402:26;;32474:9;32468:4;32464:20;32460:1;32449:9;32445:17;32438:47;32502:131;32628:4;32502:131;:::i;:::-;32494:139;;32221:419;;;:::o;32646:::-;32812:4;32850:2;32839:9;32835:18;32827:26;;32899:9;32893:4;32889:20;32885:1;32874:9;32870:17;32863:47;32927:131;33053:4;32927:131;:::i;:::-;32919:139;;32646:419;;;:::o;33071:::-;33237:4;33275:2;33264:9;33260:18;33252:26;;33324:9;33318:4;33314:20;33310:1;33299:9;33295:17;33288:47;33352:131;33478:4;33352:131;:::i;:::-;33344:139;;33071:419;;;:::o;33496:::-;33662:4;33700:2;33689:9;33685:18;33677:26;;33749:9;33743:4;33739:20;33735:1;33724:9;33720:17;33713:47;33777:131;33903:4;33777:131;:::i;:::-;33769:139;;33496:419;;;:::o;33921:::-;34087:4;34125:2;34114:9;34110:18;34102:26;;34174:9;34168:4;34164:20;34160:1;34149:9;34145:17;34138:47;34202:131;34328:4;34202:131;:::i;:::-;34194:139;;33921:419;;;:::o;34346:::-;34512:4;34550:2;34539:9;34535:18;34527:26;;34599:9;34593:4;34589:20;34585:1;34574:9;34570:17;34563:47;34627:131;34753:4;34627:131;:::i;:::-;34619:139;;34346:419;;;:::o;34771:::-;34937:4;34975:2;34964:9;34960:18;34952:26;;35024:9;35018:4;35014:20;35010:1;34999:9;34995:17;34988:47;35052:131;35178:4;35052:131;:::i;:::-;35044:139;;34771:419;;;:::o;35196:::-;35362:4;35400:2;35389:9;35385:18;35377:26;;35449:9;35443:4;35439:20;35435:1;35424:9;35420:17;35413:47;35477:131;35603:4;35477:131;:::i;:::-;35469:139;;35196:419;;;:::o;35621:::-;35787:4;35825:2;35814:9;35810:18;35802:26;;35874:9;35868:4;35864:20;35860:1;35849:9;35845:17;35838:47;35902:131;36028:4;35902:131;:::i;:::-;35894:139;;35621:419;;;:::o;36046:::-;36212:4;36250:2;36239:9;36235:18;36227:26;;36299:9;36293:4;36289:20;36285:1;36274:9;36270:17;36263:47;36327:131;36453:4;36327:131;:::i;:::-;36319:139;;36046:419;;;:::o;36471:::-;36637:4;36675:2;36664:9;36660:18;36652:26;;36724:9;36718:4;36714:20;36710:1;36699:9;36695:17;36688:47;36752:131;36878:4;36752:131;:::i;:::-;36744:139;;36471:419;;;:::o;36896:::-;37062:4;37100:2;37089:9;37085:18;37077:26;;37149:9;37143:4;37139:20;37135:1;37124:9;37120:17;37113:47;37177:131;37303:4;37177:131;:::i;:::-;37169:139;;36896:419;;;:::o;37321:::-;37487:4;37525:2;37514:9;37510:18;37502:26;;37574:9;37568:4;37564:20;37560:1;37549:9;37545:17;37538:47;37602:131;37728:4;37602:131;:::i;:::-;37594:139;;37321:419;;;:::o;37746:::-;37912:4;37950:2;37939:9;37935:18;37927:26;;37999:9;37993:4;37989:20;37985:1;37974:9;37970:17;37963:47;38027:131;38153:4;38027:131;:::i;:::-;38019:139;;37746:419;;;:::o;38171:222::-;38264:4;38302:2;38291:9;38287:18;38279:26;;38315:71;38383:1;38372:9;38368:17;38359:6;38315:71;:::i;:::-;38171:222;;;;:::o;38399:129::-;38433:6;38460:20;;:::i;:::-;38450:30;;38489:33;38517:4;38509:6;38489:33;:::i;:::-;38399:129;;;:::o;38534:75::-;38567:6;38600:2;38594:9;38584:19;;38534:75;:::o;38615:311::-;38692:4;38782:18;38774:6;38771:30;38768:56;;;38804:18;;:::i;:::-;38768:56;38854:4;38846:6;38842:17;38834:25;;38914:4;38908;38904:15;38896:23;;38615:311;;;:::o;38932:307::-;38993:4;39083:18;39075:6;39072:30;39069:56;;;39105:18;;:::i;:::-;39069:56;39143:29;39165:6;39143:29;:::i;:::-;39135:37;;39227:4;39221;39217:15;39209:23;;38932:307;;;:::o;39245:308::-;39307:4;39397:18;39389:6;39386:30;39383:56;;;39419:18;;:::i;:::-;39383:56;39457:29;39479:6;39457:29;:::i;:::-;39449:37;;39541:4;39535;39531:15;39523:23;;39245:308;;;:::o;39559:98::-;39610:6;39644:5;39638:12;39628:22;;39559:98;;;:::o;39663:99::-;39715:6;39749:5;39743:12;39733:22;;39663:99;;;:::o;39768:168::-;39851:11;39885:6;39880:3;39873:19;39925:4;39920:3;39916:14;39901:29;;39768:168;;;;:::o;39942:147::-;40043:11;40080:3;40065:18;;39942:147;;;;:::o;40095:169::-;40179:11;40213:6;40208:3;40201:19;40253:4;40248:3;40244:14;40229:29;;40095:169;;;;:::o;40270:148::-;40372:11;40409:3;40394:18;;40270:148;;;;:::o;40424:305::-;40464:3;40483:20;40501:1;40483:20;:::i;:::-;40478:25;;40517:20;40535:1;40517:20;:::i;:::-;40512:25;;40671:1;40603:66;40599:74;40596:1;40593:81;40590:107;;;40677:18;;:::i;:::-;40590:107;40721:1;40718;40714:9;40707:16;;40424:305;;;;:::o;40735:185::-;40775:1;40792:20;40810:1;40792:20;:::i;:::-;40787:25;;40826:20;40844:1;40826:20;:::i;:::-;40821:25;;40865:1;40855:35;;40870:18;;:::i;:::-;40855:35;40912:1;40909;40905:9;40900:14;;40735:185;;;;:::o;40926:348::-;40966:7;40989:20;41007:1;40989:20;:::i;:::-;40984:25;;41023:20;41041:1;41023:20;:::i;:::-;41018:25;;41211:1;41143:66;41139:74;41136:1;41133:81;41128:1;41121:9;41114:17;41110:105;41107:131;;;41218:18;;:::i;:::-;41107:131;41266:1;41263;41259:9;41248:20;;40926:348;;;;:::o;41280:191::-;41320:4;41340:20;41358:1;41340:20;:::i;:::-;41335:25;;41374:20;41392:1;41374:20;:::i;:::-;41369:25;;41413:1;41410;41407:8;41404:34;;;41418:18;;:::i;:::-;41404:34;41463:1;41460;41456:9;41448:17;;41280:191;;;;:::o;41477:96::-;41514:7;41543:24;41561:5;41543:24;:::i;:::-;41532:35;;41477:96;;;:::o;41579:90::-;41613:7;41656:5;41649:13;41642:21;41631:32;;41579:90;;;:::o;41675:77::-;41712:7;41741:5;41730:16;;41675:77;;;:::o;41758:149::-;41794:7;41834:66;41827:5;41823:78;41812:89;;41758:149;;;:::o;41913:126::-;41950:7;41990:42;41983:5;41979:54;41968:65;;41913:126;;;:::o;42045:77::-;42082:7;42111:5;42100:16;;42045:77;;;:::o;42128:86::-;42163:7;42203:4;42196:5;42192:16;42181:27;;42128:86;;;:::o;42220:154::-;42304:6;42299:3;42294;42281:30;42366:1;42357:6;42352:3;42348:16;42341:27;42220:154;;;:::o;42380:307::-;42448:1;42458:113;42472:6;42469:1;42466:13;42458:113;;;42557:1;42552:3;42548:11;42542:18;42538:1;42533:3;42529:11;42522:39;42494:2;42491:1;42487:10;42482:15;;42458:113;;;42589:6;42586:1;42583:13;42580:101;;;42669:1;42660:6;42655:3;42651:16;42644:27;42580:101;42429:258;42380:307;;;:::o;42693:320::-;42737:6;42774:1;42768:4;42764:12;42754:22;;42821:1;42815:4;42811:12;42842:18;42832:81;;42898:4;42890:6;42886:17;42876:27;;42832:81;42960:2;42952:6;42949:14;42929:18;42926:38;42923:84;;;42979:18;;:::i;:::-;42923:84;42744:269;42693:320;;;:::o;43019:281::-;43102:27;43124:4;43102:27;:::i;:::-;43094:6;43090:40;43232:6;43220:10;43217:22;43196:18;43184:10;43181:34;43178:62;43175:88;;;43243:18;;:::i;:::-;43175:88;43283:10;43279:2;43272:22;43062:238;43019:281;;:::o;43306:233::-;43345:3;43368:24;43386:5;43368:24;:::i;:::-;43359:33;;43414:66;43407:5;43404:77;43401:103;;;43484:18;;:::i;:::-;43401:103;43531:1;43524:5;43520:13;43513:20;;43306:233;;;:::o;43545:167::-;43582:3;43605:22;43621:5;43605:22;:::i;:::-;43596:31;;43649:4;43642:5;43639:15;43636:41;;;43657:18;;:::i;:::-;43636:41;43704:1;43697:5;43693:13;43686:20;;43545:167;;;:::o;43718:100::-;43757:7;43786:26;43806:5;43786:26;:::i;:::-;43775:37;;43718:100;;;:::o;43824:94::-;43863:7;43892:20;43906:5;43892:20;:::i;:::-;43881:31;;43824:94;;;:::o;43924:176::-;43956:1;43973:20;43991:1;43973:20;:::i;:::-;43968:25;;44007:20;44025:1;44007:20;:::i;:::-;44002:25;;44046:1;44036:35;;44051:18;;:::i;:::-;44036:35;44092:1;44089;44085:9;44080:14;;43924:176;;;;:::o;44106:180::-;44154:77;44151:1;44144:88;44251:4;44248:1;44241:15;44275:4;44272:1;44265:15;44292:180;44340:77;44337:1;44330:88;44437:4;44434:1;44427:15;44461:4;44458:1;44451:15;44478:180;44526:77;44523:1;44516:88;44623:4;44620:1;44613:15;44647:4;44644:1;44637:15;44664:180;44712:77;44709:1;44702:88;44809:4;44806:1;44799:15;44833:4;44830:1;44823:15;44850:180;44898:77;44895:1;44888:88;44995:4;44992:1;44985:15;45019:4;45016:1;45009:15;45036:180;45084:77;45081:1;45074:88;45181:4;45178:1;45171:15;45205:4;45202:1;45195:15;45222:117;45331:1;45328;45321:12;45345:117;45454:1;45451;45444:12;45468:117;45577:1;45574;45567:12;45591:117;45700:1;45697;45690:12;45714:117;45823:1;45820;45813:12;45837:102;45878:6;45929:2;45925:7;45920:2;45913:5;45909:14;45905:28;45895:38;;45837:102;;;:::o;45945:94::-;45978:8;46026:5;46022:2;46018:14;45997:35;;45945:94;;;:::o;46045:161::-;46185:13;46181:1;46173:6;46169:14;46162:37;46045:161;:::o;46212:230::-;46352:34;46348:1;46340:6;46336:14;46329:58;46421:13;46416:2;46408:6;46404:15;46397:38;46212:230;:::o;46448:237::-;46588:34;46584:1;46576:6;46572:14;46565:58;46657:20;46652:2;46644:6;46640:15;46633:45;46448:237;:::o;46691:225::-;46831:34;46827:1;46819:6;46815:14;46808:58;46900:8;46895:2;46887:6;46883:15;46876:33;46691:225;:::o;46922:178::-;47062:30;47058:1;47050:6;47046:14;47039:54;46922:178;:::o;47106:223::-;47246:34;47242:1;47234:6;47230:14;47223:58;47315:6;47310:2;47302:6;47298:15;47291:31;47106:223;:::o;47335:175::-;47475:27;47471:1;47463:6;47459:14;47452:51;47335:175;:::o;47516:159::-;47656:11;47652:1;47644:6;47640:14;47633:35;47516:159;:::o;47681:231::-;47821:34;47817:1;47809:6;47805:14;47798:58;47890:14;47885:2;47877:6;47873:15;47866:39;47681:231;:::o;47918:163::-;48058:15;48054:1;48046:6;48042:14;48035:39;47918:163;:::o;48087:243::-;48227:34;48223:1;48215:6;48211:14;48204:58;48296:26;48291:2;48283:6;48279:15;48272:51;48087:243;:::o;48336:229::-;48476:34;48472:1;48464:6;48460:14;48453:58;48545:12;48540:2;48532:6;48528:15;48521:37;48336:229;:::o;48571:228::-;48711:34;48707:1;48699:6;48695:14;48688:58;48780:11;48775:2;48767:6;48763:15;48756:36;48571:228;:::o;48805:182::-;48945:34;48941:1;48933:6;48929:14;48922:58;48805:182;:::o;48993:231::-;49133:34;49129:1;49121:6;49117:14;49110:58;49202:14;49197:2;49189:6;49185:15;49178:39;48993:231;:::o;49230:182::-;49370:34;49366:1;49358:6;49354:14;49347:58;49230:182;:::o;49418:228::-;49558:34;49554:1;49546:6;49542:14;49535:58;49627:11;49622:2;49614:6;49610:15;49603:36;49418:228;:::o;49652:234::-;49792:34;49788:1;49780:6;49776:14;49769:58;49861:17;49856:2;49848:6;49844:15;49837:42;49652:234;:::o;49892:167::-;50032:19;50028:1;50020:6;50016:14;50009:43;49892:167;:::o;50065:220::-;50205:34;50201:1;50193:6;50189:14;50182:58;50274:3;50269:2;50261:6;50257:15;50250:28;50065:220;:::o;50291:164::-;50431:16;50427:1;50419:6;50415:14;50408:40;50291:164;:::o;50461:168::-;50601:20;50597:1;50589:6;50585:14;50578:44;50461:168;:::o;50635:114::-;;:::o;50755:166::-;50895:18;50891:1;50883:6;50879:14;50872:42;50755:166;:::o;50927:236::-;51067:34;51063:1;51055:6;51051:14;51044:58;51136:19;51131:2;51123:6;51119:15;51112:44;50927:236;:::o;51169:231::-;51309:34;51305:1;51297:6;51293:14;51286:58;51378:14;51373:2;51365:6;51361:15;51354:39;51169:231;:::o;51406:163::-;51546:15;51542:1;51534:6;51530:14;51523:39;51406:163;:::o;51575:162::-;51715:14;51711:1;51703:6;51699:14;51692:38;51575:162;:::o;51743:158::-;51883:10;51879:1;51871:6;51867:14;51860:34;51743:158;:::o;51907:122::-;51980:24;51998:5;51980:24;:::i;:::-;51973:5;51970:35;51960:63;;52019:1;52016;52009:12;51960:63;51907:122;:::o;52035:116::-;52105:21;52120:5;52105:21;:::i;:::-;52098:5;52095:32;52085:60;;52141:1;52138;52131:12;52085:60;52035:116;:::o;52157:122::-;52230:24;52248:5;52230:24;:::i;:::-;52223:5;52220:35;52210:63;;52269:1;52266;52259:12;52210:63;52157:122;:::o;52285:120::-;52357:23;52374:5;52357:23;:::i;:::-;52350:5;52347:34;52337:62;;52395:1;52392;52385:12;52337:62;52285:120;:::o;52411:122::-;52484:24;52502:5;52484:24;:::i;:::-;52477:5;52474:35;52464:63;;52523:1;52520;52513:12;52464:63;52411:122;:::o
Swarm Source
ipfs://f7d395dee1fe3aec9a8dc879cdf4db8d93e963ad64850fc7db564e140b1769b1
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.