ERC-721
Overview
Max Total Supply
145 KCC
Holders
115
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 KCCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KingCrocodileClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-29 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/KingCrocodileClub.sol pragma solidity ^0.8.7; contract KingCrocodileClub is ERC721Enumerable, Ownable, ReentrancyGuard { using Counters for Counters.Counter; using Strings for uint256; bytes32 public merkleRoot; Counters.Counter private _nftIdCounter; uint public constant MAX_SUPPLY = 2222; uint public priceSale = 0.15 ether; string public baseURI; string public notRevealedURI; string public baseExtension = ".json"; bool public revealed = false; bool public paused = true; enum Steps { Before, Presale, Sale, SoldOut, Reveal } Steps public sellingStep; address private _owner; mapping(address => uint) nftsPerWallet; mapping(address => uint) nftsPerWalletWhitelist; constructor(string memory _theBaseURI, string memory _notRevealedURI, bytes32 _merkleRoot) ERC721("King Crocodile Club", "KCC") { _nftIdCounter.increment(); transferOwnership(msg.sender); sellingStep = Steps.Before; baseURI = _theBaseURI; notRevealedURI = _notRevealedURI; merkleRoot = _merkleRoot; } function changeMerkleRoot(bytes32 _newMerkleRoot) external onlyOwner { merkleRoot = _newMerkleRoot; } function setPaused(bool _paused) external onlyOwner { paused = _paused; } function changePriceSale(uint _priceSale) external onlyOwner { priceSale = _priceSale; } function setBaseUri(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function setNotRevealURI(string memory _notRevealedURI) external onlyOwner { notRevealedURI = _notRevealedURI; } function reveal() external onlyOwner{ revealed = !revealed; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseExtension(string memory _baseExtension) external onlyOwner { baseExtension = _baseExtension; } function setUpPresale() external onlyOwner { sellingStep = Steps.Presale; } function setUpSale() external onlyOwner { require(sellingStep == Steps.Presale, "First the presale, then the sale."); sellingStep = Steps.Sale; } function privateMint(address _account, bytes32[] calldata _proof, uint _ammount) external payable nonReentrant { uint numberNftSold = totalSupply(); //paused require (paused == false, "Mint is in pause !"); require(_ammount <=2,"You can't mint more than 2 NFT at the same time"); //Is this user on the whitelist ? require(isWhiteListed(_account, _proof), "Not on the whitelist"); //Are we in Presale ? require(sellingStep == Steps.Presale, "Presale has not started yet."); //Did this account already mint an NFT from the whitelist? require((nftsPerWalletWhitelist[_account]+_ammount) <= 2, "You can only get 2 NFT on the Presale"); //Did the user send enought Ethers ? require(msg.value == priceSale* _ammount, "Please send correct ammount."); //If the user try to mint any non-existent token require(numberNftSold + _ammount <= MAX_SUPPLY, "Sale is almost done and we don't have enought NFTs left."); //Increment the number of NFTs this user minted nftsPerWalletWhitelist[_account] += _ammount; //Mint the user NFT for(uint i = 1 ; i <= _ammount ; i++) { _safeMint(msg.sender, numberNftSold + i); } //Increment the Id of the next NFT to mint _nftIdCounter.increment(); } function publicMint(uint256 _ammount) external payable nonReentrant { //Get the number of NFT sold uint numberNftSold = totalSupply(); require (paused == false, "Mint is in pause !"); //If everything has been bought require(_ammount <=2,"You can't mint more than 2 NFT at the same time"); require(sellingStep != Steps.SoldOut, "Sorry, no NFTs left."); //If Sale didn't start yet require(sellingStep == Steps.Sale, "Sorry, sale has not started yet."); //Did this account already mint an NFT from the whitelist? require((nftsPerWallet[msg.sender]+_ammount) <= 2, "You can only get 2 NFT on Public Sale"); //Did the user then enought Ethers to buy ammount NFTs ? require(msg.value == priceSale * _ammount, "Please send correct ammount."); //If the user try to mint any non-existent token require(numberNftSold + _ammount <= MAX_SUPPLY, "Sale is almost done and we don't have enought NFTs left."); //Add the ammount of NFTs minted by the user to the total he minted nftsPerWallet[msg.sender] += _ammount; //If this account minted the last NFTs available if(numberNftSold + _ammount == MAX_SUPPLY) { sellingStep = Steps.SoldOut; } //Minting all the account NFTs for(uint i = 1 ; i <= _ammount ; i++) { _safeMint(msg.sender, numberNftSold + i); } } function isWhiteListed(address account, bytes32[] calldata proof) internal view returns(bool) { return _verify(_leaf(account), proof); } function _leaf(address account) internal pure returns(bytes32) { return keccak256(abi.encodePacked(account)); } function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns(bool) { return MerkleProof.verify(proof, merkleRoot, leaf); } function tokenURI(uint _nftId) public view override(ERC721) returns (string memory) { require(_exists(_nftId), "This NFT doesn't exist."); if(revealed == false) { return notRevealedURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _nftId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_theBaseURI","type":"string"},{"internalType":"string","name":"_notRevealedURI","type":"string"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newMerkleRoot","type":"bytes32"}],"name":"changeMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceSale","type":"uint256"}],"name":"changePriceSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_ammount","type":"uint256"}],"name":"privateMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ammount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellingStep","outputs":[{"internalType":"enum KingCrocodileClub.Steps","name":"","type":"uint8"}],"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":"_baseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setUpPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setUpSale","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":"_nftId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670214e8348c4f0000600e556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601190805190602001906200005d9291906200044b565b506000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000a157600080fd5b5060405162005ef238038062005ef28339818101604052810190620000c7919062000590565b6040518060400160405280601381526020017f4b696e672043726f636f64696c6520436c7562000000000000000000000000008152506040518060400160405280600381526020017f4b4343000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014b9291906200044b565b508060019080519060200190620001649291906200044b565b505050620001876200017b6200022760201b60201c565b6200022f60201b60201c565b6001600b81905550620001a6600d620002f560201b6200237c1760201c565b620001b7336200030b60201b60201c565b6000601260026101000a81548160ff02191690836004811115620001e057620001df620007d8565b5b021790555082600f9080519060200190620001fd9291906200044b565b508160109080519060200190620002169291906200044b565b5080600c819055505050506200091c565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6200031b6200022760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003416200042160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000391906200069a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200040d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004049062000678565b60405180910390fd5b6200041e816200022f60201b60201c565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000459906200076c565b90600052602060002090601f0160209004810192826200047d5760008555620004c9565b82601f106200049857805160ff1916838001178555620004c9565b82800160010185558215620004c9579182015b82811115620004c8578251825591602001919060010190620004ab565b5b509050620004d89190620004dc565b5090565b5b80821115620004f7576000816000905550600101620004dd565b5090565b6000620005126200050c84620006e5565b620006bc565b9050828152602081018484840111156200053157620005306200086a565b5b6200053e84828562000736565b509392505050565b600081519050620005578162000902565b92915050565b600082601f83011262000575576200057462000865565b5b815162000587848260208601620004fb565b91505092915050565b600080600060608486031215620005ac57620005ab62000874565b5b600084015167ffffffffffffffff811115620005cd57620005cc6200086f565b5b620005db868287016200055d565b935050602084015167ffffffffffffffff811115620005ff57620005fe6200086f565b5b6200060d868287016200055d565b9250506040620006208682870162000546565b9150509250925092565b6000620006396026836200071b565b915062000646826200088a565b604082019050919050565b6000620006606020836200071b565b91506200066d82620008d9565b602082019050919050565b6000602082019050818103600083015262000693816200062a565b9050919050565b60006020820190508181036000830152620006b58162000651565b9050919050565b6000620006c8620006db565b9050620006d68282620007a2565b919050565b6000604051905090565b600067ffffffffffffffff82111562000703576200070262000836565b5b6200070e8262000879565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b838110156200075657808201518184015260208101905062000739565b8381111562000766576000848401525b50505050565b600060028204905060018216806200078557607f821691505b602082108114156200079c576200079b62000807565b5b50919050565b620007ad8262000879565b810181811067ffffffffffffffff82111715620007cf57620007ce62000836565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200090d816200072c565b81146200091957600080fd5b50565b6155c6806200092c6000396000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e578063a22cb465116100ab578063cbccefb21161006f578063cbccefb21461080b578063da3ef23f14610836578063e985e9c51461085f578063ebcea3db1461089c578063f2fde38b146108c55761023b565b8063a22cb4651461073a578063a475b5dd14610763578063b88d4fde1461077a578063c6682862146107a3578063c87b56dd146107ce5761023b565b80637340c4df116100f25780637340c4df1461067457806381a7927e146106905780638da5cb5b146106bb57806395d89b41146106e6578063a0bcfc7f146107115761023b565b80636352211e1461058d5780636c0360eb146105ca57806370a08231146105f5578063715018a61461063257806372250380146106495761023b565b80632db11544116101bc57806342842e0e1161018057806342842e0e146104a85780634f6ccce7146104d1578063518302271461050e5780635accac99146105395780635c975abb146105625761023b565b80632db11544146103e25780632eb4a7ab146103fe5780632f745c591461042957806332cb6b0c146104665780633ccfd60b146104915761023b565b806316c38b3c1161020357806316c38b3c1461032557806318160ddd1461034e5780631dcfab39146103795780631f2898c3146103a257806323b872dd146103b95761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806315c316fc1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c2e565b6108ee565b60405161027491906143ca565b60405180910390f35b34801561028957600080fd5b50610292610968565b60405161029f919061441b565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613cd1565b6109fa565b6040516102dc9190614363565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613b94565b610a7f565b005b34801561031a57600080fd5b50610323610b97565b005b34801561033157600080fd5b5061034c60048036038101906103479190613bd4565b610c40565b005b34801561035a57600080fd5b50610363610cd9565b60405161037091906147fd565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613cd1565b610ce6565b005b3480156103ae57600080fd5b506103b7610d6c565b005b3480156103c557600080fd5b506103e060048036038101906103db9190613a0a565b610e8b565b005b6103fc60048036038101906103f79190613cd1565b610eeb565b005b34801561040a57600080fd5b506104136112d3565b60405161042091906143e5565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613b94565b6112d9565b60405161045d91906147fd565b60405180910390f35b34801561047257600080fd5b5061047b61137e565b60405161048891906147fd565b60405180910390f35b34801561049d57600080fd5b506104a6611384565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613a0a565b611480565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613cd1565b6114a0565b60405161050591906147fd565b60405180910390f35b34801561051a57600080fd5b50610523611511565b60405161053091906143ca565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613c88565b611524565b005b34801561056e57600080fd5b506105776115ba565b60405161058491906143ca565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613cd1565b6115cd565b6040516105c19190614363565b60405180910390f35b3480156105d657600080fd5b506105df61167f565b6040516105ec919061441b565b60405180910390f35b34801561060157600080fd5b5061061c6004803603810190610617919061399d565b61170d565b60405161062991906147fd565b60405180910390f35b34801561063e57600080fd5b506106476117c5565b005b34801561065557600080fd5b5061065e61184d565b60405161066b919061441b565b60405180910390f35b61068e60048036038101906106899190613ae0565b6118db565b005b34801561069c57600080fd5b506106a5611c62565b6040516106b291906147fd565b60405180910390f35b3480156106c757600080fd5b506106d0611c68565b6040516106dd9190614363565b60405180910390f35b3480156106f257600080fd5b506106fb611c92565b604051610708919061441b565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613c88565b611d24565b005b34801561074657600080fd5b50610761600480360381019061075c9190613b54565b611dba565b005b34801561076f57600080fd5b50610778611dd0565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613a5d565b611e78565b005b3480156107af57600080fd5b506107b8611eda565b6040516107c5919061441b565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613cd1565b611f68565b604051610802919061441b565b60405180910390f35b34801561081757600080fd5b506108206120c1565b60405161082d9190614400565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190613c88565b6120d4565b005b34801561086b57600080fd5b50610886600480360381019061088191906139ca565b61216a565b60405161089391906143ca565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be9190613c01565b6121fe565b005b3480156108d157600080fd5b506108ec60048036038101906108e7919061399d565b612284565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610961575061096082612392565b5b9050919050565b60606000805461097790614afc565b80601f01602080910402602001604051908101604052809291908181526020018280546109a390614afc565b80156109f05780601f106109c5576101008083540402835291602001916109f0565b820191906000526020600020905b8154815290600101906020018083116109d357829003601f168201915b5050505050905090565b6000610a0582612474565b610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b9061465d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8a826115cd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af29061471d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1a6124e0565b73ffffffffffffffffffffffffffffffffffffffff161480610b495750610b4881610b436124e0565b61216a565b5b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906145bd565b60405180910390fd5b610b9283836124e8565b505050565b610b9f6124e0565b73ffffffffffffffffffffffffffffffffffffffff16610bbd611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906146dd565b60405180910390fd5b6001601260026101000a81548160ff02191690836004811115610c3957610c38614c65565b5b0217905550565b610c486124e0565b73ffffffffffffffffffffffffffffffffffffffff16610c66611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906146dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600880549050905090565b610cee6124e0565b73ffffffffffffffffffffffffffffffffffffffff16610d0c611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906146dd565b60405180910390fd5b80600e8190555050565b610d746124e0565b73ffffffffffffffffffffffffffffffffffffffff16610d92611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906146dd565b60405180910390fd5b60016004811115610dfc57610dfb614c65565b5b601260029054906101000a900460ff166004811115610e1e57610e1d614c65565b5b14610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e559061457d565b60405180910390fd5b6002601260026101000a81548160ff02191690836004811115610e8457610e83614c65565b5b0217905550565b610e9c610e966124e0565b826125a1565b610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed29061473d565b60405180910390fd5b610ee683838361267f565b505050565b6002600b541415610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906147bd565b60405180910390fd5b6002600b819055506000610f43610cd9565b905060001515601260019054906101000a900460ff16151514610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f929061445d565b60405180910390fd5b6002821115610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd69061443d565b60405180910390fd5b60036004811115610ff357610ff2614c65565b5b601260029054906101000a900460ff16600481111561101557611014614c65565b5b1415611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d9061467d565b60405180910390fd5b6002600481111561106a57611069614c65565b5b601260029054906101000a900460ff16600481111561108c5761108b614c65565b5b146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906147dd565b60405180910390fd5b600282601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111199190614902565b111561115a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111519061463d565b60405180910390fd5b81600e546111689190614989565b34146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061479d565b60405180910390fd5b6108ae82826111b89190614902565b11156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061469d565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112489190614902565b925050819055506108ae828261125e9190614902565b1415611290576003601260026101000a81548160ff0219169083600481111561128a57611289614c65565b5b02179055505b6000600190505b8281116112c6576112b33382846112ae9190614902565b6128db565b80806112be90614b5f565b915050611297565b50506001600b8190555050565b600c5481565b60006112e48361170d565b8210611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c9061447d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6108ae81565b61138c6124e0565b73ffffffffffffffffffffffffffffffffffffffff166113aa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906146dd565b60405180910390fd5b600061140a611c68565b73ffffffffffffffffffffffffffffffffffffffff164760405161142d9061434e565b60006040518083038185875af1925050503d806000811461146a576040519150601f19603f3d011682016040523d82523d6000602084013e61146f565b606091505b505090508061147d57600080fd5b50565b61149b83838360405180602001604052806000815250611e78565b505050565b60006114aa610cd9565b82106114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e29061477d565b60405180910390fd5b600882815481106114ff576114fe614cf2565b5b90600052602060002001549050919050565b601260009054906101000a900460ff1681565b61152c6124e0565b73ffffffffffffffffffffffffffffffffffffffff1661154a611c68565b73ffffffffffffffffffffffffffffffffffffffff16146115a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611597906146dd565b60405180910390fd5b80601090805190602001906115b6929190613746565b5050565b601260019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906145fd565b60405180910390fd5b80915050919050565b600f805461168c90614afc565b80601f01602080910402602001604051908101604052809291908181526020018280546116b890614afc565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906145dd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117cd6124e0565b73ffffffffffffffffffffffffffffffffffffffff166117eb611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906146dd565b60405180910390fd5b61184b60006128f9565b565b6010805461185a90614afc565b80601f016020809104026020016040519081016040528092919081815260200182805461188690614afc565b80156118d35780601f106118a8576101008083540402835291602001916118d3565b820191906000526020600020905b8154815290600101906020018083116118b657829003601f168201915b505050505081565b6002600b541415611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906147bd565b60405180910390fd5b6002600b819055506000611933610cd9565b905060001515601260019054906101000a900460ff1615151461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061445d565b60405180910390fd5b60028211156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c69061443d565b60405180910390fd5b6119da8585856129bf565b611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906144dd565b60405180910390fd5b60016004811115611a2d57611a2c614c65565b5b601260029054906101000a900460ff166004811115611a4f57611a4e614c65565b5b14611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a86906146bd565b60405180910390fd5b600282601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611adc9190614902565b1115611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061475d565b60405180910390fd5b81600e54611b2b9190614989565b3414611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b639061479d565b60405180910390fd5b6108ae8282611b7b9190614902565b1115611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb39061469d565b60405180910390fd5b81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0b9190614902565b925050819055506000600190505b828111611c4857611c35338284611c309190614902565b6128db565b8080611c4090614b5f565b915050611c19565b50611c53600d61237c565b506001600b8190555050505050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ca190614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccd90614afc565b8015611d1a5780601f10611cef57610100808354040283529160200191611d1a565b820191906000526020600020905b815481529060010190602001808311611cfd57829003601f168201915b5050505050905090565b611d2c6124e0565b73ffffffffffffffffffffffffffffffffffffffff16611d4a611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906146dd565b60405180910390fd5b80600f9080519060200190611db6929190613746565b5050565b611dcc611dc56124e0565b8383612a1d565b5050565b611dd86124e0565b73ffffffffffffffffffffffffffffffffffffffff16611df6611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e43906146dd565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b611e89611e836124e0565b836125a1565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061473d565b60405180910390fd5b611ed484848484612b8a565b50505050565b60118054611ee790614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1390614afc565b8015611f605780601f10611f3557610100808354040283529160200191611f60565b820191906000526020600020905b815481529060010190602001808311611f4357829003601f168201915b505050505081565b6060611f7382612474565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906144fd565b60405180910390fd5b60001515601260009054906101000a900460ff16151514156120605760108054611fdb90614afc565b80601f016020809104026020016040519081016040528092919081815260200182805461200790614afc565b80156120545780601f1061202957610100808354040283529160200191612054565b820191906000526020600020905b81548152906001019060200180831161203757829003601f168201915b505050505090506120bc565b600061206a612be6565b9050600081511161208a57604051806020016040528060008152506120b8565b8061209484612c78565b60116040516020016120a89392919061431d565b6040516020818303038152906040525b9150505b919050565b601260029054906101000a900460ff1681565b6120dc6124e0565b73ffffffffffffffffffffffffffffffffffffffff166120fa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906146dd565b60405180910390fd5b8060119080519060200190612166929190613746565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122066124e0565b73ffffffffffffffffffffffffffffffffffffffff16612224611c68565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906146dd565b60405180910390fd5b80600c8190555050565b61228c6124e0565b73ffffffffffffffffffffffffffffffffffffffff166122aa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f7906146dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612367906144bd565b60405180910390fd5b612379816128f9565b50565b6001816000016000828254019250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061245d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061246d575061246c82612dd9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661255b836115cd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125ac82612474565b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e29061459d565b60405180910390fd5b60006125f6836115cd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266557508373ffffffffffffffffffffffffffffffffffffffff1661264d846109fa565b73ffffffffffffffffffffffffffffffffffffffff16145b806126765750612675818561216a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661269f826115cd565b73ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec906146fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c9061453d565b60405180910390fd5b612770838383612e43565b61277b6000826124e8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127cb91906149e3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128229190614902565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128f5828260405180602001604052806000815250612f57565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a146129cd85612fb2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612fe2565b90509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a839061455d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b7d91906143ca565b60405180910390a3505050565b612b9584848461267f565b612ba184848484612ff9565b612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd79061449d565b60405180910390fd5b50505050565b6060600f8054612bf590614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2190614afc565b8015612c6e5780601f10612c4357610100808354040283529160200191612c6e565b820191906000526020600020905b815481529060010190602001808311612c5157829003601f168201915b5050505050905090565b60606000821415612cc0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dd4565b600082905060005b60008214612cf2578080612cdb90614b5f565b915050600a82612ceb9190614958565b9150612cc8565b60008167ffffffffffffffff811115612d0e57612d0d614d21565b5b6040519080825280601f01601f191660200182016040528015612d405781602001600182028036833780820191505090505b5090505b60008514612dcd57600182612d5991906149e3565b9150600a85612d689190614bd6565b6030612d749190614902565b60f81b818381518110612d8a57612d89614cf2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dc69190614958565b9450612d44565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e4e838383613190565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e9157612e8c81613195565b612ed0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ecf57612ece83826131de565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1357612f0e8161334b565b612f52565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f5157612f50828261341c565b5b5b505050565b612f61838361349b565b612f6e6000848484612ff9565b612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa49061449d565b60405180910390fd5b505050565b600081604051602001612fc591906142d6565b604051602081830303815290604052805190602001209050919050565b6000612ff182600c5485613669565b905092915050565b600061301a8473ffffffffffffffffffffffffffffffffffffffff16613680565b15613183578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130436124e0565b8786866040518563ffffffff1660e01b8152600401613065949392919061437e565b602060405180830381600087803b15801561307f57600080fd5b505af19250505080156130b057506040513d601f19601f820116820180604052508101906130ad9190613c5b565b60015b613133573d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b5060008151141561312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061449d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613188565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131eb8461170d565b6131f591906149e3565b90506000600760008481526020019081526020016000205490508181146132da576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061335f91906149e3565b905060006009600084815260200190815260200160002054905060006008838154811061338f5761338e614cf2565b5b9060005260206000200154905080600883815481106133b1576133b0614cf2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613400576133ff614cc3565b5b6001900381819060005260206000200160009055905550505050565b60006134278361170d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561350b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135029061461d565b60405180910390fd5b61351481612474565b15613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b9061451d565b60405180910390fd5b61356060008383612e43565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135b09190614902565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000826136768584613693565b1490509392505050565b600080823b905060008111915050919050565b60008082905060005b845181101561373b5760008582815181106136ba576136b9614cf2565b5b602002602001015190508083116136fb5782816040516020016136de9291906142f1565b604051602081830303815290604052805190602001209250613727565b808360405160200161370e9291906142f1565b6040516020818303038152906040528051906020012092505b50808061373390614b5f565b91505061369c565b508091505092915050565b82805461375290614afc565b90600052602060002090601f01602090048101928261377457600085556137bb565b82601f1061378d57805160ff19168380011785556137bb565b828001600101855582156137bb579182015b828111156137ba57825182559160200191906001019061379f565b5b5090506137c891906137cc565b5090565b5b808211156137e55760008160009055506001016137cd565b5090565b60006137fc6137f78461483d565b614818565b90508281526020810184848401111561381857613817614d5f565b5b613823848285614aba565b509392505050565b600061383e6138398461486e565b614818565b90508281526020810184848401111561385a57613859614d5f565b5b613865848285614aba565b509392505050565b60008135905061387c8161551d565b92915050565b60008083601f84011261389857613897614d55565b5b8235905067ffffffffffffffff8111156138b5576138b4614d50565b5b6020830191508360208202830111156138d1576138d0614d5a565b5b9250929050565b6000813590506138e781615534565b92915050565b6000813590506138fc8161554b565b92915050565b60008135905061391181615562565b92915050565b60008151905061392681615562565b92915050565b600082601f83011261394157613940614d55565b5b81356139518482602086016137e9565b91505092915050565b600082601f83011261396f5761396e614d55565b5b813561397f84826020860161382b565b91505092915050565b60008135905061399781615579565b92915050565b6000602082840312156139b3576139b2614d69565b5b60006139c18482850161386d565b91505092915050565b600080604083850312156139e1576139e0614d69565b5b60006139ef8582860161386d565b9250506020613a008582860161386d565b9150509250929050565b600080600060608486031215613a2357613a22614d69565b5b6000613a318682870161386d565b9350506020613a428682870161386d565b9250506040613a5386828701613988565b9150509250925092565b60008060008060808587031215613a7757613a76614d69565b5b6000613a858782880161386d565b9450506020613a968782880161386d565b9350506040613aa787828801613988565b925050606085013567ffffffffffffffff811115613ac857613ac7614d64565b5b613ad48782880161392c565b91505092959194509250565b60008060008060608587031215613afa57613af9614d69565b5b6000613b088782880161386d565b945050602085013567ffffffffffffffff811115613b2957613b28614d64565b5b613b3587828801613882565b93509350506040613b4887828801613988565b91505092959194509250565b60008060408385031215613b6b57613b6a614d69565b5b6000613b798582860161386d565b9250506020613b8a858286016138d8565b9150509250929050565b60008060408385031215613bab57613baa614d69565b5b6000613bb98582860161386d565b9250506020613bca85828601613988565b9150509250929050565b600060208284031215613bea57613be9614d69565b5b6000613bf8848285016138d8565b91505092915050565b600060208284031215613c1757613c16614d69565b5b6000613c25848285016138ed565b91505092915050565b600060208284031215613c4457613c43614d69565b5b6000613c5284828501613902565b91505092915050565b600060208284031215613c7157613c70614d69565b5b6000613c7f84828501613917565b91505092915050565b600060208284031215613c9e57613c9d614d69565b5b600082013567ffffffffffffffff811115613cbc57613cbb614d64565b5b613cc88482850161395a565b91505092915050565b600060208284031215613ce757613ce6614d69565b5b6000613cf584828501613988565b91505092915050565b613d0781614a17565b82525050565b613d1e613d1982614a17565b614ba8565b82525050565b613d2d81614a29565b82525050565b613d3c81614a35565b82525050565b613d53613d4e82614a35565b614bba565b82525050565b6000613d64826148b4565b613d6e81856148ca565b9350613d7e818560208601614ac9565b613d8781614d6e565b840191505092915050565b613d9b81614aa8565b82525050565b6000613dac826148bf565b613db681856148e6565b9350613dc6818560208601614ac9565b613dcf81614d6e565b840191505092915050565b6000613de5826148bf565b613def81856148f7565b9350613dff818560208601614ac9565b80840191505092915050565b60008154613e1881614afc565b613e2281866148f7565b94506001821660008114613e3d5760018114613e4e57613e81565b60ff19831686528186019350613e81565b613e578561489f565b60005b83811015613e7957815481890152600182019150602081019050613e5a565b838801955050505b50505092915050565b6000613e97602f836148e6565b9150613ea282614d8c565b604082019050919050565b6000613eba6012836148e6565b9150613ec582614ddb565b602082019050919050565b6000613edd602b836148e6565b9150613ee882614e04565b604082019050919050565b6000613f006032836148e6565b9150613f0b82614e53565b604082019050919050565b6000613f236026836148e6565b9150613f2e82614ea2565b604082019050919050565b6000613f466014836148e6565b9150613f5182614ef1565b602082019050919050565b6000613f696017836148e6565b9150613f7482614f1a565b602082019050919050565b6000613f8c601c836148e6565b9150613f9782614f43565b602082019050919050565b6000613faf6024836148e6565b9150613fba82614f6c565b604082019050919050565b6000613fd26019836148e6565b9150613fdd82614fbb565b602082019050919050565b6000613ff56021836148e6565b915061400082614fe4565b604082019050919050565b6000614018602c836148e6565b915061402382615033565b604082019050919050565b600061403b6038836148e6565b915061404682615082565b604082019050919050565b600061405e602a836148e6565b9150614069826150d1565b604082019050919050565b60006140816029836148e6565b915061408c82615120565b604082019050919050565b60006140a46020836148e6565b91506140af8261516f565b602082019050919050565b60006140c76025836148e6565b91506140d282615198565b604082019050919050565b60006140ea602c836148e6565b91506140f5826151e7565b604082019050919050565b600061410d6014836148e6565b915061411882615236565b602082019050919050565b60006141306038836148e6565b915061413b8261525f565b604082019050919050565b6000614153601c836148e6565b915061415e826152ae565b602082019050919050565b60006141766020836148e6565b9150614181826152d7565b602082019050919050565b60006141996029836148e6565b91506141a482615300565b604082019050919050565b60006141bc6021836148e6565b91506141c78261534f565b604082019050919050565b60006141df6000836148db565b91506141ea8261539e565b600082019050919050565b60006142026031836148e6565b915061420d826153a1565b604082019050919050565b60006142256025836148e6565b9150614230826153f0565b604082019050919050565b6000614248602c836148e6565b91506142538261543f565b604082019050919050565b600061426b601c836148e6565b91506142768261548e565b602082019050919050565b600061428e601f836148e6565b9150614299826154b7565b602082019050919050565b60006142b16020836148e6565b91506142bc826154e0565b602082019050919050565b6142d081614a9e565b82525050565b60006142e28284613d0d565b60148201915081905092915050565b60006142fd8285613d42565b60208201915061430d8284613d42565b6020820191508190509392505050565b60006143298286613dda565b91506143358285613dda565b91506143418284613e0b565b9150819050949350505050565b6000614359826141d2565b9150819050919050565b60006020820190506143786000830184613cfe565b92915050565b60006080820190506143936000830187613cfe565b6143a06020830186613cfe565b6143ad60408301856142c7565b81810360608301526143bf8184613d59565b905095945050505050565b60006020820190506143df6000830184613d24565b92915050565b60006020820190506143fa6000830184613d33565b92915050565b60006020820190506144156000830184613d92565b92915050565b600060208201905081810360008301526144358184613da1565b905092915050565b6000602082019050818103600083015261445681613e8a565b9050919050565b6000602082019050818103600083015261447681613ead565b9050919050565b6000602082019050818103600083015261449681613ed0565b9050919050565b600060208201905081810360008301526144b681613ef3565b9050919050565b600060208201905081810360008301526144d681613f16565b9050919050565b600060208201905081810360008301526144f681613f39565b9050919050565b6000602082019050818103600083015261451681613f5c565b9050919050565b6000602082019050818103600083015261453681613f7f565b9050919050565b6000602082019050818103600083015261455681613fa2565b9050919050565b6000602082019050818103600083015261457681613fc5565b9050919050565b6000602082019050818103600083015261459681613fe8565b9050919050565b600060208201905081810360008301526145b68161400b565b9050919050565b600060208201905081810360008301526145d68161402e565b9050919050565b600060208201905081810360008301526145f681614051565b9050919050565b6000602082019050818103600083015261461681614074565b9050919050565b6000602082019050818103600083015261463681614097565b9050919050565b60006020820190508181036000830152614656816140ba565b9050919050565b60006020820190508181036000830152614676816140dd565b9050919050565b6000602082019050818103600083015261469681614100565b9050919050565b600060208201905081810360008301526146b681614123565b9050919050565b600060208201905081810360008301526146d681614146565b9050919050565b600060208201905081810360008301526146f681614169565b9050919050565b600060208201905081810360008301526147168161418c565b9050919050565b60006020820190508181036000830152614736816141af565b9050919050565b60006020820190508181036000830152614756816141f5565b9050919050565b6000602082019050818103600083015261477681614218565b9050919050565b600060208201905081810360008301526147968161423b565b9050919050565b600060208201905081810360008301526147b68161425e565b9050919050565b600060208201905081810360008301526147d681614281565b9050919050565b600060208201905081810360008301526147f6816142a4565b9050919050565b600060208201905061481260008301846142c7565b92915050565b6000614822614833565b905061482e8282614b2e565b919050565b6000604051905090565b600067ffffffffffffffff82111561485857614857614d21565b5b61486182614d6e565b9050602081019050919050565b600067ffffffffffffffff82111561488957614888614d21565b5b61489282614d6e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490d82614a9e565b915061491883614a9e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561494d5761494c614c07565b5b828201905092915050565b600061496382614a9e565b915061496e83614a9e565b92508261497e5761497d614c36565b5b828204905092915050565b600061499482614a9e565b915061499f83614a9e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149d8576149d7614c07565b5b828202905092915050565b60006149ee82614a9e565b91506149f983614a9e565b925082821015614a0c57614a0b614c07565b5b828203905092915050565b6000614a2282614a7e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614a7982615509565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614ab382614a6b565b9050919050565b82818337600083830152505050565b60005b83811015614ae7578082015181840152602081019050614acc565b83811115614af6576000848401525b50505050565b60006002820490506001821680614b1457607f821691505b60208210811415614b2857614b27614c94565b5b50919050565b614b3782614d6e565b810181811067ffffffffffffffff82111715614b5657614b55614d21565b5b80604052505050565b6000614b6a82614a9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9d57614b9c614c07565b5b600182019050919050565b6000614bb382614bc4565b9050919050565b6000819050919050565b6000614bcf82614d7f565b9050919050565b6000614be182614a9e565b9150614bec83614a9e565b925082614bfc57614bfb614c36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f752063616e2774206d696e74206d6f7265207468616e2032204e4654206160008201527f74207468652073616d652074696d650000000000000000000000000000000000602082015250565b7f4d696e7420697320696e20706175736520210000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f6e207468652077686974656c697374000000000000000000000000600082015250565b7f54686973204e465420646f65736e27742065786973742e000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4669727374207468652070726573616c652c207468656e207468652073616c6560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206765742032204e4654206f6e205075626c696360008201527f2053616c65000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f536f7272792c206e6f204e465473206c6566742e000000000000000000000000600082015250565b7f53616c6520697320616c6d6f737420646f6e6520616e6420776520646f6e277460008201527f206861766520656e6f75676874204e465473206c6566742e0000000000000000602082015250565b7f50726573616c6520686173206e6f742073746172746564207965742e00000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206765742032204e4654206f6e2074686520507260008201527f6573616c65000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f506c656173652073656e6420636f727265637420616d6d6f756e742e00000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f536f7272792c2073616c6520686173206e6f742073746172746564207965742e600082015250565b6005811061551a57615519614c65565b5b50565b61552681614a17565b811461553157600080fd5b50565b61553d81614a29565b811461554857600080fd5b50565b61555481614a35565b811461555f57600080fd5b50565b61556b81614a3f565b811461557657600080fd5b50565b61558281614a9e565b811461558d57600080fd5b5056fea26469706673582212201dec675803c34a387b3d53280e34d217b906e1f785009897d9a352d0ca330a2664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c034b9846f8d3e020d6d5e2d3b54f99a2d913b84b0969d76ddf1017de98274df530000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54634a79546e50644d393278654344514231586775686f5453445a38435a363978383732764c57516f3275702f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d664c7a35796f50445479384167774b664b71534c39595832637967777452484a35714634333243466d4869382f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c80636352211e1161012e578063a22cb465116100ab578063cbccefb21161006f578063cbccefb21461080b578063da3ef23f14610836578063e985e9c51461085f578063ebcea3db1461089c578063f2fde38b146108c55761023b565b8063a22cb4651461073a578063a475b5dd14610763578063b88d4fde1461077a578063c6682862146107a3578063c87b56dd146107ce5761023b565b80637340c4df116100f25780637340c4df1461067457806381a7927e146106905780638da5cb5b146106bb57806395d89b41146106e6578063a0bcfc7f146107115761023b565b80636352211e1461058d5780636c0360eb146105ca57806370a08231146105f5578063715018a61461063257806372250380146106495761023b565b80632db11544116101bc57806342842e0e1161018057806342842e0e146104a85780634f6ccce7146104d1578063518302271461050e5780635accac99146105395780635c975abb146105625761023b565b80632db11544146103e25780632eb4a7ab146103fe5780632f745c591461042957806332cb6b0c146104665780633ccfd60b146104915761023b565b806316c38b3c1161020357806316c38b3c1461032557806318160ddd1461034e5780631dcfab39146103795780631f2898c3146103a257806323b872dd146103b95761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806315c316fc1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c2e565b6108ee565b60405161027491906143ca565b60405180910390f35b34801561028957600080fd5b50610292610968565b60405161029f919061441b565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613cd1565b6109fa565b6040516102dc9190614363565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613b94565b610a7f565b005b34801561031a57600080fd5b50610323610b97565b005b34801561033157600080fd5b5061034c60048036038101906103479190613bd4565b610c40565b005b34801561035a57600080fd5b50610363610cd9565b60405161037091906147fd565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613cd1565b610ce6565b005b3480156103ae57600080fd5b506103b7610d6c565b005b3480156103c557600080fd5b506103e060048036038101906103db9190613a0a565b610e8b565b005b6103fc60048036038101906103f79190613cd1565b610eeb565b005b34801561040a57600080fd5b506104136112d3565b60405161042091906143e5565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613b94565b6112d9565b60405161045d91906147fd565b60405180910390f35b34801561047257600080fd5b5061047b61137e565b60405161048891906147fd565b60405180910390f35b34801561049d57600080fd5b506104a6611384565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613a0a565b611480565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613cd1565b6114a0565b60405161050591906147fd565b60405180910390f35b34801561051a57600080fd5b50610523611511565b60405161053091906143ca565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613c88565b611524565b005b34801561056e57600080fd5b506105776115ba565b60405161058491906143ca565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613cd1565b6115cd565b6040516105c19190614363565b60405180910390f35b3480156105d657600080fd5b506105df61167f565b6040516105ec919061441b565b60405180910390f35b34801561060157600080fd5b5061061c6004803603810190610617919061399d565b61170d565b60405161062991906147fd565b60405180910390f35b34801561063e57600080fd5b506106476117c5565b005b34801561065557600080fd5b5061065e61184d565b60405161066b919061441b565b60405180910390f35b61068e60048036038101906106899190613ae0565b6118db565b005b34801561069c57600080fd5b506106a5611c62565b6040516106b291906147fd565b60405180910390f35b3480156106c757600080fd5b506106d0611c68565b6040516106dd9190614363565b60405180910390f35b3480156106f257600080fd5b506106fb611c92565b604051610708919061441b565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613c88565b611d24565b005b34801561074657600080fd5b50610761600480360381019061075c9190613b54565b611dba565b005b34801561076f57600080fd5b50610778611dd0565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613a5d565b611e78565b005b3480156107af57600080fd5b506107b8611eda565b6040516107c5919061441b565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613cd1565b611f68565b604051610802919061441b565b60405180910390f35b34801561081757600080fd5b506108206120c1565b60405161082d9190614400565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190613c88565b6120d4565b005b34801561086b57600080fd5b50610886600480360381019061088191906139ca565b61216a565b60405161089391906143ca565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be9190613c01565b6121fe565b005b3480156108d157600080fd5b506108ec60048036038101906108e7919061399d565b612284565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610961575061096082612392565b5b9050919050565b60606000805461097790614afc565b80601f01602080910402602001604051908101604052809291908181526020018280546109a390614afc565b80156109f05780601f106109c5576101008083540402835291602001916109f0565b820191906000526020600020905b8154815290600101906020018083116109d357829003601f168201915b5050505050905090565b6000610a0582612474565b610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b9061465d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8a826115cd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af29061471d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1a6124e0565b73ffffffffffffffffffffffffffffffffffffffff161480610b495750610b4881610b436124e0565b61216a565b5b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906145bd565b60405180910390fd5b610b9283836124e8565b505050565b610b9f6124e0565b73ffffffffffffffffffffffffffffffffffffffff16610bbd611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906146dd565b60405180910390fd5b6001601260026101000a81548160ff02191690836004811115610c3957610c38614c65565b5b0217905550565b610c486124e0565b73ffffffffffffffffffffffffffffffffffffffff16610c66611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906146dd565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600880549050905090565b610cee6124e0565b73ffffffffffffffffffffffffffffffffffffffff16610d0c611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906146dd565b60405180910390fd5b80600e8190555050565b610d746124e0565b73ffffffffffffffffffffffffffffffffffffffff16610d92611c68565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf906146dd565b60405180910390fd5b60016004811115610dfc57610dfb614c65565b5b601260029054906101000a900460ff166004811115610e1e57610e1d614c65565b5b14610e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e559061457d565b60405180910390fd5b6002601260026101000a81548160ff02191690836004811115610e8457610e83614c65565b5b0217905550565b610e9c610e966124e0565b826125a1565b610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed29061473d565b60405180910390fd5b610ee683838361267f565b505050565b6002600b541415610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906147bd565b60405180910390fd5b6002600b819055506000610f43610cd9565b905060001515601260019054906101000a900460ff16151514610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f929061445d565b60405180910390fd5b6002821115610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd69061443d565b60405180910390fd5b60036004811115610ff357610ff2614c65565b5b601260029054906101000a900460ff16600481111561101557611014614c65565b5b1415611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d9061467d565b60405180910390fd5b6002600481111561106a57611069614c65565b5b601260029054906101000a900460ff16600481111561108c5761108b614c65565b5b146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c3906147dd565b60405180910390fd5b600282601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111199190614902565b111561115a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111519061463d565b60405180910390fd5b81600e546111689190614989565b34146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061479d565b60405180910390fd5b6108ae82826111b89190614902565b11156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061469d565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112489190614902565b925050819055506108ae828261125e9190614902565b1415611290576003601260026101000a81548160ff0219169083600481111561128a57611289614c65565b5b02179055505b6000600190505b8281116112c6576112b33382846112ae9190614902565b6128db565b80806112be90614b5f565b915050611297565b50506001600b8190555050565b600c5481565b60006112e48361170d565b8210611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c9061447d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6108ae81565b61138c6124e0565b73ffffffffffffffffffffffffffffffffffffffff166113aa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906146dd565b60405180910390fd5b600061140a611c68565b73ffffffffffffffffffffffffffffffffffffffff164760405161142d9061434e565b60006040518083038185875af1925050503d806000811461146a576040519150601f19603f3d011682016040523d82523d6000602084013e61146f565b606091505b505090508061147d57600080fd5b50565b61149b83838360405180602001604052806000815250611e78565b505050565b60006114aa610cd9565b82106114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e29061477d565b60405180910390fd5b600882815481106114ff576114fe614cf2565b5b90600052602060002001549050919050565b601260009054906101000a900460ff1681565b61152c6124e0565b73ffffffffffffffffffffffffffffffffffffffff1661154a611c68565b73ffffffffffffffffffffffffffffffffffffffff16146115a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611597906146dd565b60405180910390fd5b80601090805190602001906115b6929190613746565b5050565b601260019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906145fd565b60405180910390fd5b80915050919050565b600f805461168c90614afc565b80601f01602080910402602001604051908101604052809291908181526020018280546116b890614afc565b80156117055780601f106116da57610100808354040283529160200191611705565b820191906000526020600020905b8154815290600101906020018083116116e857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906145dd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117cd6124e0565b73ffffffffffffffffffffffffffffffffffffffff166117eb611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906146dd565b60405180910390fd5b61184b60006128f9565b565b6010805461185a90614afc565b80601f016020809104026020016040519081016040528092919081815260200182805461188690614afc565b80156118d35780601f106118a8576101008083540402835291602001916118d3565b820191906000526020600020905b8154815290600101906020018083116118b657829003601f168201915b505050505081565b6002600b541415611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906147bd565b60405180910390fd5b6002600b819055506000611933610cd9565b905060001515601260019054906101000a900460ff1615151461198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061445d565b60405180910390fd5b60028211156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c69061443d565b60405180910390fd5b6119da8585856129bf565b611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906144dd565b60405180910390fd5b60016004811115611a2d57611a2c614c65565b5b601260029054906101000a900460ff166004811115611a4f57611a4e614c65565b5b14611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a86906146bd565b60405180910390fd5b600282601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611adc9190614902565b1115611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061475d565b60405180910390fd5b81600e54611b2b9190614989565b3414611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b639061479d565b60405180910390fd5b6108ae8282611b7b9190614902565b1115611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb39061469d565b60405180910390fd5b81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0b9190614902565b925050819055506000600190505b828111611c4857611c35338284611c309190614902565b6128db565b8080611c4090614b5f565b915050611c19565b50611c53600d61237c565b506001600b8190555050505050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ca190614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccd90614afc565b8015611d1a5780601f10611cef57610100808354040283529160200191611d1a565b820191906000526020600020905b815481529060010190602001808311611cfd57829003601f168201915b5050505050905090565b611d2c6124e0565b73ffffffffffffffffffffffffffffffffffffffff16611d4a611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906146dd565b60405180910390fd5b80600f9080519060200190611db6929190613746565b5050565b611dcc611dc56124e0565b8383612a1d565b5050565b611dd86124e0565b73ffffffffffffffffffffffffffffffffffffffff16611df6611c68565b73ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e43906146dd565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b611e89611e836124e0565b836125a1565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061473d565b60405180910390fd5b611ed484848484612b8a565b50505050565b60118054611ee790614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1390614afc565b8015611f605780601f10611f3557610100808354040283529160200191611f60565b820191906000526020600020905b815481529060010190602001808311611f4357829003601f168201915b505050505081565b6060611f7382612474565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906144fd565b60405180910390fd5b60001515601260009054906101000a900460ff16151514156120605760108054611fdb90614afc565b80601f016020809104026020016040519081016040528092919081815260200182805461200790614afc565b80156120545780601f1061202957610100808354040283529160200191612054565b820191906000526020600020905b81548152906001019060200180831161203757829003601f168201915b505050505090506120bc565b600061206a612be6565b9050600081511161208a57604051806020016040528060008152506120b8565b8061209484612c78565b60116040516020016120a89392919061431d565b6040516020818303038152906040525b9150505b919050565b601260029054906101000a900460ff1681565b6120dc6124e0565b73ffffffffffffffffffffffffffffffffffffffff166120fa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906146dd565b60405180910390fd5b8060119080519060200190612166929190613746565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122066124e0565b73ffffffffffffffffffffffffffffffffffffffff16612224611c68565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612271906146dd565b60405180910390fd5b80600c8190555050565b61228c6124e0565b73ffffffffffffffffffffffffffffffffffffffff166122aa611c68565b73ffffffffffffffffffffffffffffffffffffffff1614612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f7906146dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612367906144bd565b60405180910390fd5b612379816128f9565b50565b6001816000016000828254019250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061245d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061246d575061246c82612dd9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661255b836115cd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125ac82612474565b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e29061459d565b60405180910390fd5b60006125f6836115cd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266557508373ffffffffffffffffffffffffffffffffffffffff1661264d846109fa565b73ffffffffffffffffffffffffffffffffffffffff16145b806126765750612675818561216a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661269f826115cd565b73ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec906146fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c9061453d565b60405180910390fd5b612770838383612e43565b61277b6000826124e8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127cb91906149e3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128229190614902565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6128f5828260405180602001604052806000815250612f57565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612a146129cd85612fb2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612fe2565b90509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a839061455d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b7d91906143ca565b60405180910390a3505050565b612b9584848461267f565b612ba184848484612ff9565b612be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd79061449d565b60405180910390fd5b50505050565b6060600f8054612bf590614afc565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2190614afc565b8015612c6e5780601f10612c4357610100808354040283529160200191612c6e565b820191906000526020600020905b815481529060010190602001808311612c5157829003601f168201915b5050505050905090565b60606000821415612cc0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dd4565b600082905060005b60008214612cf2578080612cdb90614b5f565b915050600a82612ceb9190614958565b9150612cc8565b60008167ffffffffffffffff811115612d0e57612d0d614d21565b5b6040519080825280601f01601f191660200182016040528015612d405781602001600182028036833780820191505090505b5090505b60008514612dcd57600182612d5991906149e3565b9150600a85612d689190614bd6565b6030612d749190614902565b60f81b818381518110612d8a57612d89614cf2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dc69190614958565b9450612d44565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e4e838383613190565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e9157612e8c81613195565b612ed0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ecf57612ece83826131de565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f1357612f0e8161334b565b612f52565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f5157612f50828261341c565b5b5b505050565b612f61838361349b565b612f6e6000848484612ff9565b612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa49061449d565b60405180910390fd5b505050565b600081604051602001612fc591906142d6565b604051602081830303815290604052805190602001209050919050565b6000612ff182600c5485613669565b905092915050565b600061301a8473ffffffffffffffffffffffffffffffffffffffff16613680565b15613183578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130436124e0565b8786866040518563ffffffff1660e01b8152600401613065949392919061437e565b602060405180830381600087803b15801561307f57600080fd5b505af19250505080156130b057506040513d601f19601f820116820180604052508101906130ad9190613c5b565b60015b613133573d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b5060008151141561312b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131229061449d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613188565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131eb8461170d565b6131f591906149e3565b90506000600760008481526020019081526020016000205490508181146132da576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061335f91906149e3565b905060006009600084815260200190815260200160002054905060006008838154811061338f5761338e614cf2565b5b9060005260206000200154905080600883815481106133b1576133b0614cf2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613400576133ff614cc3565b5b6001900381819060005260206000200160009055905550505050565b60006134278361170d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561350b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135029061461d565b60405180910390fd5b61351481612474565b15613554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354b9061451d565b60405180910390fd5b61356060008383612e43565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135b09190614902565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000826136768584613693565b1490509392505050565b600080823b905060008111915050919050565b60008082905060005b845181101561373b5760008582815181106136ba576136b9614cf2565b5b602002602001015190508083116136fb5782816040516020016136de9291906142f1565b604051602081830303815290604052805190602001209250613727565b808360405160200161370e9291906142f1565b6040516020818303038152906040528051906020012092505b50808061373390614b5f565b91505061369c565b508091505092915050565b82805461375290614afc565b90600052602060002090601f01602090048101928261377457600085556137bb565b82601f1061378d57805160ff19168380011785556137bb565b828001600101855582156137bb579182015b828111156137ba57825182559160200191906001019061379f565b5b5090506137c891906137cc565b5090565b5b808211156137e55760008160009055506001016137cd565b5090565b60006137fc6137f78461483d565b614818565b90508281526020810184848401111561381857613817614d5f565b5b613823848285614aba565b509392505050565b600061383e6138398461486e565b614818565b90508281526020810184848401111561385a57613859614d5f565b5b613865848285614aba565b509392505050565b60008135905061387c8161551d565b92915050565b60008083601f84011261389857613897614d55565b5b8235905067ffffffffffffffff8111156138b5576138b4614d50565b5b6020830191508360208202830111156138d1576138d0614d5a565b5b9250929050565b6000813590506138e781615534565b92915050565b6000813590506138fc8161554b565b92915050565b60008135905061391181615562565b92915050565b60008151905061392681615562565b92915050565b600082601f83011261394157613940614d55565b5b81356139518482602086016137e9565b91505092915050565b600082601f83011261396f5761396e614d55565b5b813561397f84826020860161382b565b91505092915050565b60008135905061399781615579565b92915050565b6000602082840312156139b3576139b2614d69565b5b60006139c18482850161386d565b91505092915050565b600080604083850312156139e1576139e0614d69565b5b60006139ef8582860161386d565b9250506020613a008582860161386d565b9150509250929050565b600080600060608486031215613a2357613a22614d69565b5b6000613a318682870161386d565b9350506020613a428682870161386d565b9250506040613a5386828701613988565b9150509250925092565b60008060008060808587031215613a7757613a76614d69565b5b6000613a858782880161386d565b9450506020613a968782880161386d565b9350506040613aa787828801613988565b925050606085013567ffffffffffffffff811115613ac857613ac7614d64565b5b613ad48782880161392c565b91505092959194509250565b60008060008060608587031215613afa57613af9614d69565b5b6000613b088782880161386d565b945050602085013567ffffffffffffffff811115613b2957613b28614d64565b5b613b3587828801613882565b93509350506040613b4887828801613988565b91505092959194509250565b60008060408385031215613b6b57613b6a614d69565b5b6000613b798582860161386d565b9250506020613b8a858286016138d8565b9150509250929050565b60008060408385031215613bab57613baa614d69565b5b6000613bb98582860161386d565b9250506020613bca85828601613988565b9150509250929050565b600060208284031215613bea57613be9614d69565b5b6000613bf8848285016138d8565b91505092915050565b600060208284031215613c1757613c16614d69565b5b6000613c25848285016138ed565b91505092915050565b600060208284031215613c4457613c43614d69565b5b6000613c5284828501613902565b91505092915050565b600060208284031215613c7157613c70614d69565b5b6000613c7f84828501613917565b91505092915050565b600060208284031215613c9e57613c9d614d69565b5b600082013567ffffffffffffffff811115613cbc57613cbb614d64565b5b613cc88482850161395a565b91505092915050565b600060208284031215613ce757613ce6614d69565b5b6000613cf584828501613988565b91505092915050565b613d0781614a17565b82525050565b613d1e613d1982614a17565b614ba8565b82525050565b613d2d81614a29565b82525050565b613d3c81614a35565b82525050565b613d53613d4e82614a35565b614bba565b82525050565b6000613d64826148b4565b613d6e81856148ca565b9350613d7e818560208601614ac9565b613d8781614d6e565b840191505092915050565b613d9b81614aa8565b82525050565b6000613dac826148bf565b613db681856148e6565b9350613dc6818560208601614ac9565b613dcf81614d6e565b840191505092915050565b6000613de5826148bf565b613def81856148f7565b9350613dff818560208601614ac9565b80840191505092915050565b60008154613e1881614afc565b613e2281866148f7565b94506001821660008114613e3d5760018114613e4e57613e81565b60ff19831686528186019350613e81565b613e578561489f565b60005b83811015613e7957815481890152600182019150602081019050613e5a565b838801955050505b50505092915050565b6000613e97602f836148e6565b9150613ea282614d8c565b604082019050919050565b6000613eba6012836148e6565b9150613ec582614ddb565b602082019050919050565b6000613edd602b836148e6565b9150613ee882614e04565b604082019050919050565b6000613f006032836148e6565b9150613f0b82614e53565b604082019050919050565b6000613f236026836148e6565b9150613f2e82614ea2565b604082019050919050565b6000613f466014836148e6565b9150613f5182614ef1565b602082019050919050565b6000613f696017836148e6565b9150613f7482614f1a565b602082019050919050565b6000613f8c601c836148e6565b9150613f9782614f43565b602082019050919050565b6000613faf6024836148e6565b9150613fba82614f6c565b604082019050919050565b6000613fd26019836148e6565b9150613fdd82614fbb565b602082019050919050565b6000613ff56021836148e6565b915061400082614fe4565b604082019050919050565b6000614018602c836148e6565b915061402382615033565b604082019050919050565b600061403b6038836148e6565b915061404682615082565b604082019050919050565b600061405e602a836148e6565b9150614069826150d1565b604082019050919050565b60006140816029836148e6565b915061408c82615120565b604082019050919050565b60006140a46020836148e6565b91506140af8261516f565b602082019050919050565b60006140c76025836148e6565b91506140d282615198565b604082019050919050565b60006140ea602c836148e6565b91506140f5826151e7565b604082019050919050565b600061410d6014836148e6565b915061411882615236565b602082019050919050565b60006141306038836148e6565b915061413b8261525f565b604082019050919050565b6000614153601c836148e6565b915061415e826152ae565b602082019050919050565b60006141766020836148e6565b9150614181826152d7565b602082019050919050565b60006141996029836148e6565b91506141a482615300565b604082019050919050565b60006141bc6021836148e6565b91506141c78261534f565b604082019050919050565b60006141df6000836148db565b91506141ea8261539e565b600082019050919050565b60006142026031836148e6565b915061420d826153a1565b604082019050919050565b60006142256025836148e6565b9150614230826153f0565b604082019050919050565b6000614248602c836148e6565b91506142538261543f565b604082019050919050565b600061426b601c836148e6565b91506142768261548e565b602082019050919050565b600061428e601f836148e6565b9150614299826154b7565b602082019050919050565b60006142b16020836148e6565b91506142bc826154e0565b602082019050919050565b6142d081614a9e565b82525050565b60006142e28284613d0d565b60148201915081905092915050565b60006142fd8285613d42565b60208201915061430d8284613d42565b6020820191508190509392505050565b60006143298286613dda565b91506143358285613dda565b91506143418284613e0b565b9150819050949350505050565b6000614359826141d2565b9150819050919050565b60006020820190506143786000830184613cfe565b92915050565b60006080820190506143936000830187613cfe565b6143a06020830186613cfe565b6143ad60408301856142c7565b81810360608301526143bf8184613d59565b905095945050505050565b60006020820190506143df6000830184613d24565b92915050565b60006020820190506143fa6000830184613d33565b92915050565b60006020820190506144156000830184613d92565b92915050565b600060208201905081810360008301526144358184613da1565b905092915050565b6000602082019050818103600083015261445681613e8a565b9050919050565b6000602082019050818103600083015261447681613ead565b9050919050565b6000602082019050818103600083015261449681613ed0565b9050919050565b600060208201905081810360008301526144b681613ef3565b9050919050565b600060208201905081810360008301526144d681613f16565b9050919050565b600060208201905081810360008301526144f681613f39565b9050919050565b6000602082019050818103600083015261451681613f5c565b9050919050565b6000602082019050818103600083015261453681613f7f565b9050919050565b6000602082019050818103600083015261455681613fa2565b9050919050565b6000602082019050818103600083015261457681613fc5565b9050919050565b6000602082019050818103600083015261459681613fe8565b9050919050565b600060208201905081810360008301526145b68161400b565b9050919050565b600060208201905081810360008301526145d68161402e565b9050919050565b600060208201905081810360008301526145f681614051565b9050919050565b6000602082019050818103600083015261461681614074565b9050919050565b6000602082019050818103600083015261463681614097565b9050919050565b60006020820190508181036000830152614656816140ba565b9050919050565b60006020820190508181036000830152614676816140dd565b9050919050565b6000602082019050818103600083015261469681614100565b9050919050565b600060208201905081810360008301526146b681614123565b9050919050565b600060208201905081810360008301526146d681614146565b9050919050565b600060208201905081810360008301526146f681614169565b9050919050565b600060208201905081810360008301526147168161418c565b9050919050565b60006020820190508181036000830152614736816141af565b9050919050565b60006020820190508181036000830152614756816141f5565b9050919050565b6000602082019050818103600083015261477681614218565b9050919050565b600060208201905081810360008301526147968161423b565b9050919050565b600060208201905081810360008301526147b68161425e565b9050919050565b600060208201905081810360008301526147d681614281565b9050919050565b600060208201905081810360008301526147f6816142a4565b9050919050565b600060208201905061481260008301846142c7565b92915050565b6000614822614833565b905061482e8282614b2e565b919050565b6000604051905090565b600067ffffffffffffffff82111561485857614857614d21565b5b61486182614d6e565b9050602081019050919050565b600067ffffffffffffffff82111561488957614888614d21565b5b61489282614d6e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490d82614a9e565b915061491883614a9e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561494d5761494c614c07565b5b828201905092915050565b600061496382614a9e565b915061496e83614a9e565b92508261497e5761497d614c36565b5b828204905092915050565b600061499482614a9e565b915061499f83614a9e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149d8576149d7614c07565b5b828202905092915050565b60006149ee82614a9e565b91506149f983614a9e565b925082821015614a0c57614a0b614c07565b5b828203905092915050565b6000614a2282614a7e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614a7982615509565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614ab382614a6b565b9050919050565b82818337600083830152505050565b60005b83811015614ae7578082015181840152602081019050614acc565b83811115614af6576000848401525b50505050565b60006002820490506001821680614b1457607f821691505b60208210811415614b2857614b27614c94565b5b50919050565b614b3782614d6e565b810181811067ffffffffffffffff82111715614b5657614b55614d21565b5b80604052505050565b6000614b6a82614a9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9d57614b9c614c07565b5b600182019050919050565b6000614bb382614bc4565b9050919050565b6000819050919050565b6000614bcf82614d7f565b9050919050565b6000614be182614a9e565b9150614bec83614a9e565b925082614bfc57614bfb614c36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f752063616e2774206d696e74206d6f7265207468616e2032204e4654206160008201527f74207468652073616d652074696d650000000000000000000000000000000000602082015250565b7f4d696e7420697320696e20706175736520210000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f6e207468652077686974656c697374000000000000000000000000600082015250565b7f54686973204e465420646f65736e27742065786973742e000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4669727374207468652070726573616c652c207468656e207468652073616c6560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206765742032204e4654206f6e205075626c696360008201527f2053616c65000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f536f7272792c206e6f204e465473206c6566742e000000000000000000000000600082015250565b7f53616c6520697320616c6d6f737420646f6e6520616e6420776520646f6e277460008201527f206861766520656e6f75676874204e465473206c6566742e0000000000000000602082015250565b7f50726573616c6520686173206e6f742073746172746564207965742e00000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206765742032204e4654206f6e2074686520507260008201527f6573616c65000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f506c656173652073656e6420636f727265637420616d6d6f756e742e00000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f536f7272792c2073616c6520686173206e6f742073746172746564207965742e600082015250565b6005811061551a57615519614c65565b5b50565b61552681614a17565b811461553157600080fd5b50565b61553d81614a29565b811461554857600080fd5b50565b61555481614a35565b811461555f57600080fd5b50565b61556b81614a3f565b811461557657600080fd5b50565b61558281614a9e565b811461558d57600080fd5b5056fea26469706673582212201dec675803c34a387b3d53280e34d217b906e1f785009897d9a352d0ca330a2664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c034b9846f8d3e020d6d5e2d3b54f99a2d913b84b0969d76ddf1017de98274df530000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54634a79546e50644d393278654344514231586775686f5453445a38435a363978383732764c57516f3275702f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d664c7a35796f50445479384167774b664b71534c39595832637967777452484a35714634333243466d4869382f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _theBaseURI (string): ipfs://QmTcJyTnPdM92xeCDQB1XguhoTSDZ8CZ69x872vLWQo2up/
Arg [1] : _notRevealedURI (string): ipfs://QmfLz5yoPDTy8AgwKfKqSL9YX2cygwtRHJ5qF432CFmHi8/hidden.json
Arg [2] : _merkleRoot (bytes32): 0x34b9846f8d3e020d6d5e2d3b54f99a2d913b84b0969d76ddf1017de98274df53
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 34b9846f8d3e020d6d5e2d3b54f99a2d913b84b0969d76ddf1017de98274df53
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d54634a79546e50644d393278654344514231586775686f
Arg [5] : 5453445a38435a363978383732764c57516f3275702f00000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [7] : 697066733a2f2f516d664c7a35796f50445479384167774b664b71534c395958
Arg [8] : 32637967777452484a35714634333243466d4869382f68696464656e2e6a736f
Arg [9] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50893:6313:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44658:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52975:89;;;;;;;;;;;;;:::i;:::-;;52175:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45298:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52276:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53074:168;;;;;;;;;;;;;:::i;:::-;;34461:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54638:1478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51054:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44966:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51135:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57058:143;;;;;;;;;;;;;:::i;:::-;;34871:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45488:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51328:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52504:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51363:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31846:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51221:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31576:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11122:103;;;;;;;;;;;;;:::i;:::-;;51249:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53252:1378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51180:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10471:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52388:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34004:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52638:75;;;;;;;;;;;;;:::i;:::-;;35127:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51284:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56581:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51508:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52841:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34230:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52050:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11380:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44658:224;44760:4;44799:35;44784:50;;;:11;:50;;;;:90;;;;44838:36;44862:11;44838:23;:36::i;:::-;44784:90;44777:97;;44658:224;;;:::o;32152:100::-;32206:13;32239:5;32232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32152:100;:::o;33711:221::-;33787:7;33815:16;33823:7;33815;:16::i;:::-;33807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33900:15;:24;33916:7;33900:24;;;;;;;;;;;;;;;;;;;;;33893:31;;33711:221;;;:::o;33234:411::-;33315:13;33331:23;33346:7;33331:14;:23::i;:::-;33315:39;;33379:5;33373:11;;:2;:11;;;;33365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33473:5;33457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33482:37;33499:5;33506:12;:10;:12::i;:::-;33482:16;:37::i;:::-;33457:62;33435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33616:21;33625:2;33629:7;33616:8;:21::i;:::-;33304:341;33234:411;;:::o;52975:89::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53043:13:::1;53029:11;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;52975:89::o:0;52175:87::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52247:7:::1;52238:6;;:16;;;;;;;;;;;;;;;;;;52175:87:::0;:::o;45298:113::-;45359:7;45386:10;:17;;;;45379:24;;45298:113;:::o;52276:102::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52360:10:::1;52348:9;:22;;;;52276:102:::0;:::o;53074:168::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53148:13:::1;53133:28;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;53125:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;53224:10;53210:11;;:24;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;53074:168::o:0;34461:339::-;34656:41;34675:12;:10;:12::i;:::-;34689:7;34656:18;:41::i;:::-;34648:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34764:28;34774:4;34780:2;34784:7;34764:9;:28::i;:::-;34461:339;;;:::o;54638:1478::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;54757::::1;54778:13;:11;:13::i;:::-;54757:34;;54821:5;54811:15;;:6;;;;;;;;;;;:15;;;54802:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;54920:1;54909:8;:12;;54901:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;55008:13;54993:28;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;;54985:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;55116:10;55101:25;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:25;;;;;;;;:::i;:::-;;;55093:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;55290:1;55277:8;55251:13;:25;55265:10;55251:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;55250:41;;55242:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;55443:8;55431:9;;:20;;;;:::i;:::-;55418:9;:33;55410:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51169:4;55577:8;55561:13;:24;;;;:::i;:::-;:38;;55553:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;55777:8;55748:13;:25;55762:10;55748:25;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;51169:4;55873:8;55857:13;:24;;;;:::i;:::-;:38;55854:100;;;55926:13;55912:11;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;55854:100;56008:6;56017:1;56008:10;;56004:105;56026:8;56021:1;:13;56004:105;;56057:40;56067:10;56095:1;56079:13;:17;;;;:::i;:::-;56057:9;:40::i;:::-;56037:3;;;;;:::i;:::-;;;;56004:105;;;;54706:1410;1768:1:::0;2722:7;:22;;;;54638:1478;:::o;51054:25::-;;;;:::o;44966:256::-;45063:7;45099:23;45116:5;45099:16;:23::i;:::-;45091:5;:31;45083:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45188:12;:19;45201:5;45188:19;;;;;;;;;;;;;;;:26;45208:5;45188:26;;;;;;;;;;;;45181:33;;44966:256;;;;:::o;51135:38::-;51169:4;51135:38;:::o;57058:143::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57109:7:::1;57130;:5;:7::i;:::-;57122:21;;57151;57122:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57108:69;;;57192:2;57184:11;;;::::0;::::1;;57095:106;57058:143::o:0;34871:185::-;35009:39;35026:4;35032:2;35036:7;35009:39;;;;;;;;;;;;:16;:39::i;:::-;34871:185;;;:::o;45488:233::-;45563:7;45599:30;:28;:30::i;:::-;45591:5;:38;45583:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45696:10;45707:5;45696:17;;;;;;;;:::i;:::-;;;;;;;;;;45689:24;;45488:233;;;:::o;51328:28::-;;;;;;;;;;;;;:::o;52504:126::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52607:15:::1;52590:14;:32;;;;;;;;;;;;:::i;:::-;;52504:126:::0;:::o;51363:25::-;;;;;;;;;;;;;:::o;31846:239::-;31918:7;31938:13;31954:7;:16;31962:7;31954:16;;;;;;;;;;;;;;;;;;;;;31938:32;;32006:1;31989:19;;:5;:19;;;;31981:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32072:5;32065:12;;;31846:239;;;:::o;51221:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31576:208::-;31648:7;31693:1;31676:19;;:5;:19;;;;31668:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31760:9;:16;31770:5;31760:16;;;;;;;;;;;;;;;;31753:23;;31576:208;;;:::o;11122:103::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11187:30:::1;11214:1;11187:18;:30::i;:::-;11122:103::o:0;51249:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53252:1378::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;53374::::1;53395:13;:11;:13::i;:::-;53374:34;;53456:5;53446:15;;:6;;;;;;;;;;;:15;;;53437:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;53514:1;53503:8;:12;;53495:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53628:31;53642:8;53652:6;;53628:13;:31::i;:::-;53620:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;53749:13;53734:28;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;53726:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53929:1;53916:8;53883:22;:32;53906:8;53883:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;53882:48;;53874:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;54061:8;54050:9;;:19;;;;:::i;:::-;54037:9;:32;54029:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51169:4;54195:8;54179:13;:24;;;;:::i;:::-;:38;;54171:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;54382:8;54346:22;:32;54369:8;54346:32;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;54434:6;54443:1;54434:10;;54430:105;54452:8;54447:1;:13;54430:105;;54483:40;54493:10;54521:1;54505:13;:17;;;;:::i;:::-;54483:9;:40::i;:::-;54463:3;;;;;:::i;:::-;;;;54430:105;;;;54597:25;:13;:23;:25::i;:::-;53363:1267;1768:1:::0;2722:7;:22;;;;53252:1378;;;;:::o;51180:34::-;;;;:::o;10471:87::-;10517:7;10544:6;;;;;;;;;;;10537:13;;10471:87;:::o;32321:104::-;32377:13;32410:7;32403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32321:104;:::o;52388:106::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52475:11:::1;52465:7;:21;;;;;;;;;;;;:::i;:::-;;52388:106:::0;:::o;34004:155::-;34099:52;34118:12;:10;:12::i;:::-;34132:8;34142;34099:18;:52::i;:::-;34004:155;;:::o;52638:75::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52697:8:::1;;;;;;;;;;;52696:9;52685:8;;:20;;;;;;;;;;;;;;;;;;52638:75::o:0;35127:328::-;35302:41;35321:12;:10;:12::i;:::-;35335:7;35302:18;:41::i;:::-;35294:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35408:39;35422:4;35428:2;35432:7;35441:5;35408:13;:39::i;:::-;35127:328;;;;:::o;51284:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56581:469::-;56650:13;56684:15;56692:6;56684:7;:15::i;:::-;56676:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;56753:5;56741:17;;:8;;;;;;;;;;;:17;;;56738:70;;;56782:14;56775:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56738:70;56828:28;56859:10;:8;:10::i;:::-;56828:41;;56932:1;56907:14;56901:28;:32;:141;;;;;;;;;;;;;;;;;56974:14;56990:17;:6;:15;:17::i;:::-;57009:13;56957:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56901:141;56880:162;;;56581:469;;;;:::o;51508:24::-;;;;;;;;;;;;;:::o;52841:124::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52943:14:::1;52927:13;:30;;;;;;;;;;;;:::i;:::-;;52841:124:::0;:::o;34230:164::-;34327:4;34351:18;:25;34370:5;34351:25;;;;;;;;;;;;;;;:35;34377:8;34351:35;;;;;;;;;;;;;;;;;;;;;;;;;34344:42;;34230:164;;;;:::o;52050:115::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52143:14:::1;52130:10;:27;;;;52050:115:::0;:::o;11380:201::-;10702:12;:10;:12::i;:::-;10691:23;;:7;:5;:7::i;:::-;:23;;;10683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11489:1:::1;11469:22;;:8;:22;;;;11461:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11545:28;11564:8;11545:18;:28::i;:::-;11380:201:::0;:::o;3753:127::-;3860:1;3842:7;:14;;;:19;;;;;;;;;;;3753:127;:::o;31207:305::-;31309:4;31361:25;31346:40;;;:11;:40;;;;:105;;;;31418:33;31403:48;;;:11;:48;;;;31346:105;:158;;;;31468:36;31492:11;31468:23;:36::i;:::-;31346:158;31326:178;;31207:305;;;:::o;36965:127::-;37030:4;37082:1;37054:30;;:7;:16;37062:7;37054:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37047:37;;36965:127;;;:::o;9195:98::-;9248:7;9275:10;9268:17;;9195:98;:::o;40947:174::-;41049:2;41022:15;:24;41038:7;41022:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41105:7;41101:2;41067:46;;41076:23;41091:7;41076:14;:23::i;:::-;41067:46;;;;;;;;;;;;40947:174;;:::o;37259:348::-;37352:4;37377:16;37385:7;37377;:16::i;:::-;37369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37453:13;37469:23;37484:7;37469:14;:23::i;:::-;37453:39;;37522:5;37511:16;;:7;:16;;;:51;;;;37555:7;37531:31;;:20;37543:7;37531:11;:20::i;:::-;:31;;;37511:51;:87;;;;37566:32;37583:5;37590:7;37566:16;:32::i;:::-;37511:87;37503:96;;;37259:348;;;;:::o;40251:578::-;40410:4;40383:31;;:23;40398:7;40383:14;:23::i;:::-;:31;;;40375:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40493:1;40479:16;;:2;:16;;;;40471:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40549:39;40570:4;40576:2;40580:7;40549:20;:39::i;:::-;40653:29;40670:1;40674:7;40653:8;:29::i;:::-;40714:1;40695:9;:15;40705:4;40695:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40743:1;40726:9;:13;40736:2;40726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40774:2;40755:7;:16;40763:7;40755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40813:7;40809:2;40794:27;;40803:4;40794:27;;;;;;;;;;;;40251:578;;;:::o;37949:110::-;38025:26;38035:2;38039:7;38025:26;;;;;;;;;;;;:9;:26::i;:::-;37949:110;;:::o;11741:191::-;11815:16;11834:6;;;;;;;;;;;11815:25;;11860:8;11851:6;;:17;;;;;;;;;;;;;;;;;;11915:8;11884:40;;11905:8;11884:40;;;;;;;;;;;;11804:128;11741:191;:::o;56124:150::-;56212:4;56236:30;56244:14;56250:7;56244:5;:14::i;:::-;56260:5;;56236:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:30::i;:::-;56229:37;;56124:150;;;;;:::o;41263:315::-;41418:8;41409:17;;:5;:17;;;;41401:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41505:8;41467:18;:25;41486:5;41467:25;;;;;;;;;;;;;;;:35;41493:8;41467:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41551:8;41529:41;;41544:5;41529:41;;;41561:8;41529:41;;;;;;:::i;:::-;;;;;;;;41263:315;;;:::o;36337:::-;36494:28;36504:4;36510:2;36514:7;36494:9;:28::i;:::-;36541:48;36564:4;36570:2;36574:7;36583:5;36541:22;:48::i;:::-;36533:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36337:315;;;;:::o;52723:108::-;52783:13;52816:7;52809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52723:108;:::o;6757:723::-;6813:13;7043:1;7034:5;:10;7030:53;;;7061:10;;;;;;;;;;;;;;;;;;;;;7030:53;7093:12;7108:5;7093:20;;7124:14;7149:78;7164:1;7156:4;:9;7149:78;;7182:8;;;;;:::i;:::-;;;;7213:2;7205:10;;;;;:::i;:::-;;;7149:78;;;7237:19;7269:6;7259:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7237:39;;7287:154;7303:1;7294:5;:10;7287:154;;7331:1;7321:11;;;;;:::i;:::-;;;7398:2;7390:5;:10;;;;:::i;:::-;7377:2;:24;;;;:::i;:::-;7364:39;;7347:6;7354;7347:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7427:2;7418:11;;;;;:::i;:::-;;;7287:154;;;7465:6;7451:21;;;;;6757:723;;;;:::o;22903:157::-;22988:4;23027:25;23012:40;;;:11;:40;;;;23005:47;;22903:157;;;:::o;46334:589::-;46478:45;46505:4;46511:2;46515:7;46478:26;:45::i;:::-;46556:1;46540:18;;:4;:18;;;46536:187;;;46575:40;46607:7;46575:31;:40::i;:::-;46536:187;;;46645:2;46637:10;;:4;:10;;;46633:90;;46664:47;46697:4;46703:7;46664:32;:47::i;:::-;46633:90;46536:187;46751:1;46737:16;;:2;:16;;;46733:183;;;46770:45;46807:7;46770:36;:45::i;:::-;46733:183;;;46843:4;46837:10;;:2;:10;;;46833:83;;46864:40;46892:2;46896:7;46864:27;:40::i;:::-;46833:83;46733:183;46334:589;;;:::o;38286:321::-;38416:18;38422:2;38426:7;38416:5;:18::i;:::-;38467:54;38498:1;38502:2;38506:7;38515:5;38467:22;:54::i;:::-;38445:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38286:321;;;:::o;56284:125::-;56338:7;56392;56375:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;56365:36;;;;;;56358:43;;56284:125;;;:::o;56419:152::-;56496:4;56520:43;56539:5;56546:10;;56558:4;56520:18;:43::i;:::-;56513:50;;56419:152;;;;:::o;42143:799::-;42298:4;42319:15;:2;:13;;;:15::i;:::-;42315:620;;;42371:2;42355:36;;;42392:12;:10;:12::i;:::-;42406:4;42412:7;42421:5;42355:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42351:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42614:1;42597:6;:13;:18;42593:272;;;42640:60;;;;;;;;;;:::i;:::-;;;;;;;;42593:272;42815:6;42809:13;42800:6;42796:2;42792:15;42785:38;42351:529;42488:41;;;42478:51;;;:6;:51;;;;42471:58;;;;;42315:620;42919:4;42912:11;;42143:799;;;;;;;:::o;43514:126::-;;;;:::o;47646:164::-;47750:10;:17;;;;47723:15;:24;47739:7;47723:24;;;;;;;;;;;:44;;;;47778:10;47794:7;47778:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47646:164;:::o;48437:988::-;48703:22;48753:1;48728:22;48745:4;48728:16;:22::i;:::-;:26;;;;:::i;:::-;48703:51;;48765:18;48786:17;:26;48804:7;48786:26;;;;;;;;;;;;48765:47;;48933:14;48919:10;:28;48915:328;;48964:19;48986:12;:18;48999:4;48986:18;;;;;;;;;;;;;;;:34;49005:14;48986:34;;;;;;;;;;;;48964:56;;49070:11;49037:12;:18;49050:4;49037:18;;;;;;;;;;;;;;;:30;49056:10;49037:30;;;;;;;;;;;:44;;;;49187:10;49154:17;:30;49172:11;49154:30;;;;;;;;;;;:43;;;;48949:294;48915:328;49339:17;:26;49357:7;49339:26;;;;;;;;;;;49332:33;;;49383:12;:18;49396:4;49383:18;;;;;;;;;;;;;;;:34;49402:14;49383:34;;;;;;;;;;;49376:41;;;48518:907;;48437:988;;:::o;49720:1079::-;49973:22;50018:1;49998:10;:17;;;;:21;;;;:::i;:::-;49973:46;;50030:18;50051:15;:24;50067:7;50051:24;;;;;;;;;;;;50030:45;;50402:19;50424:10;50435:14;50424:26;;;;;;;;:::i;:::-;;;;;;;;;;50402:48;;50488:11;50463:10;50474;50463:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;50599:10;50568:15;:28;50584:11;50568:28;;;;;;;;;;;:41;;;;50740:15;:24;50756:7;50740:24;;;;;;;;;;;50733:31;;;50775:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49791:1008;;;49720:1079;:::o;47224:221::-;47309:14;47326:20;47343:2;47326:16;:20::i;:::-;47309:37;;47384:7;47357:12;:16;47370:2;47357:16;;;;;;;;;;;;;;;:24;47374:6;47357:24;;;;;;;;;;;:34;;;;47431:6;47402:17;:26;47420:7;47402:26;;;;;;;;;;;:35;;;;47298:147;47224:221;;:::o;38943:382::-;39037:1;39023:16;;:2;:16;;;;39015:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39096:16;39104:7;39096;:16::i;:::-;39095:17;39087:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39158:45;39187:1;39191:2;39195:7;39158:20;:45::i;:::-;39233:1;39216:9;:13;39226:2;39216:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39264:2;39245:7;:16;39253:7;39245:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39309:7;39305:2;39284:33;;39301:1;39284:33;;;;;;;;;;;;38943:382;;:::o;5132:190::-;5257:4;5310;5281:25;5294:5;5301:4;5281:12;:25::i;:::-;:33;5274:40;;5132:190;;;;;:::o;12759:387::-;12819:4;13027:12;13094:7;13082:20;13074:28;;13137:1;13130:4;:8;13123:15;;;12759:387;;;:::o;5684:701::-;5767:7;5787:20;5810:4;5787:27;;5830:9;5825:523;5849:5;:12;5845:1;:16;5825:523;;;5883:20;5906:5;5912:1;5906:8;;;;;;;;:::i;:::-;;;;;;;;5883:31;;5949:12;5933;:28;5929:408;;6103:12;6117;6086:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6076:55;;;;;;6061:70;;5929:408;;;6293:12;6307;6276:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6266:55;;;;;;6251:70;;5929:408;5868:480;5863:3;;;;;:::i;:::-;;;;5825:523;;;;6365:12;6358:19;;;5684:701;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:849::-;5506:6;5514;5522;5530;5579:2;5567:9;5558:7;5554:23;5550:32;5547:119;;;5585:79;;:::i;:::-;5547:119;5705:1;5730:53;5775:7;5766:6;5755:9;5751:22;5730:53;:::i;:::-;5720:63;;5676:117;5860:2;5849:9;5845:18;5832:32;5891:18;5883:6;5880:30;5877:117;;;5913:79;;:::i;:::-;5877:117;6026:80;6098:7;6089:6;6078:9;6074:22;6026:80;:::i;:::-;6008:98;;;;5803:313;6155:2;6181:53;6226:7;6217:6;6206:9;6202:22;6181:53;:::i;:::-;6171:63;;6126:118;5402:849;;;;;;;:::o;6257:468::-;6322:6;6330;6379:2;6367:9;6358:7;6354:23;6350:32;6347:119;;;6385:79;;:::i;:::-;6347:119;6505:1;6530:53;6575:7;6566:6;6555:9;6551:22;6530:53;:::i;:::-;6520:63;;6476:117;6632:2;6658:50;6700:7;6691:6;6680:9;6676:22;6658:50;:::i;:::-;6648:60;;6603:115;6257:468;;;;;:::o;6731:474::-;6799:6;6807;6856:2;6844:9;6835:7;6831:23;6827:32;6824:119;;;6862:79;;:::i;:::-;6824:119;6982:1;7007:53;7052:7;7043:6;7032:9;7028:22;7007:53;:::i;:::-;6997:63;;6953:117;7109:2;7135:53;7180:7;7171:6;7160:9;7156:22;7135:53;:::i;:::-;7125:63;;7080:118;6731:474;;;;;:::o;7211:323::-;7267:6;7316:2;7304:9;7295:7;7291:23;7287:32;7284:119;;;7322:79;;:::i;:::-;7284:119;7442:1;7467:50;7509:7;7500:6;7489:9;7485:22;7467:50;:::i;:::-;7457:60;;7413:114;7211:323;;;;:::o;7540:329::-;7599:6;7648:2;7636:9;7627:7;7623:23;7619:32;7616:119;;;7654:79;;:::i;:::-;7616:119;7774:1;7799:53;7844:7;7835:6;7824:9;7820:22;7799:53;:::i;:::-;7789:63;;7745:117;7540:329;;;;:::o;7875:327::-;7933:6;7982:2;7970:9;7961:7;7957:23;7953:32;7950:119;;;7988:79;;:::i;:::-;7950:119;8108:1;8133:52;8177:7;8168:6;8157:9;8153:22;8133:52;:::i;:::-;8123:62;;8079:116;7875:327;;;;:::o;8208:349::-;8277:6;8326:2;8314:9;8305:7;8301:23;8297:32;8294:119;;;8332:79;;:::i;:::-;8294:119;8452:1;8477:63;8532:7;8523:6;8512:9;8508:22;8477:63;:::i;:::-;8467:73;;8423:127;8208:349;;;;:::o;8563:509::-;8632:6;8681:2;8669:9;8660:7;8656:23;8652:32;8649:119;;;8687:79;;:::i;:::-;8649:119;8835:1;8824:9;8820:17;8807:31;8865:18;8857:6;8854:30;8851:117;;;8887:79;;:::i;:::-;8851:117;8992:63;9047:7;9038:6;9027:9;9023:22;8992:63;:::i;:::-;8982:73;;8778:287;8563:509;;;;:::o;9078:329::-;9137:6;9186:2;9174:9;9165:7;9161:23;9157:32;9154:119;;;9192:79;;:::i;:::-;9154:119;9312:1;9337:53;9382:7;9373:6;9362:9;9358:22;9337:53;:::i;:::-;9327:63;;9283:117;9078:329;;;;:::o;9413:118::-;9500:24;9518:5;9500:24;:::i;:::-;9495:3;9488:37;9413:118;;:::o;9537:157::-;9642:45;9662:24;9680:5;9662:24;:::i;:::-;9642:45;:::i;:::-;9637:3;9630:58;9537:157;;:::o;9700:109::-;9781:21;9796:5;9781:21;:::i;:::-;9776:3;9769:34;9700:109;;:::o;9815:118::-;9902:24;9920:5;9902:24;:::i;:::-;9897:3;9890:37;9815:118;;:::o;9939:157::-;10044:45;10064:24;10082:5;10064:24;:::i;:::-;10044:45;:::i;:::-;10039:3;10032:58;9939:157;;:::o;10102:360::-;10188:3;10216:38;10248:5;10216:38;:::i;:::-;10270:70;10333:6;10328:3;10270:70;:::i;:::-;10263:77;;10349:52;10394:6;10389:3;10382:4;10375:5;10371:16;10349:52;:::i;:::-;10426:29;10448:6;10426:29;:::i;:::-;10421:3;10417:39;10410:46;;10192:270;10102:360;;;;:::o;10468:147::-;10563:45;10602:5;10563:45;:::i;:::-;10558:3;10551:58;10468:147;;:::o;10621:364::-;10709:3;10737:39;10770:5;10737:39;:::i;:::-;10792:71;10856:6;10851:3;10792:71;:::i;:::-;10785:78;;10872:52;10917:6;10912:3;10905:4;10898:5;10894:16;10872:52;:::i;:::-;10949:29;10971:6;10949:29;:::i;:::-;10944:3;10940:39;10933:46;;10713:272;10621:364;;;;:::o;10991:377::-;11097:3;11125:39;11158:5;11125:39;:::i;:::-;11180:89;11262:6;11257:3;11180:89;:::i;:::-;11173:96;;11278:52;11323:6;11318:3;11311:4;11304:5;11300:16;11278:52;:::i;:::-;11355:6;11350:3;11346:16;11339:23;;11101:267;10991:377;;;;:::o;11398:845::-;11501:3;11538:5;11532:12;11567:36;11593:9;11567:36;:::i;:::-;11619:89;11701:6;11696:3;11619:89;:::i;:::-;11612:96;;11739:1;11728:9;11724:17;11755:1;11750:137;;;;11901:1;11896:341;;;;11717:520;;11750:137;11834:4;11830:9;11819;11815:25;11810:3;11803:38;11870:6;11865:3;11861:16;11854:23;;11750:137;;11896:341;11963:38;11995:5;11963:38;:::i;:::-;12023:1;12037:154;12051:6;12048:1;12045:13;12037:154;;;12125:7;12119:14;12115:1;12110:3;12106:11;12099:35;12175:1;12166:7;12162:15;12151:26;;12073:4;12070:1;12066:12;12061:17;;12037:154;;;12220:6;12215:3;12211:16;12204:23;;11903:334;;11717:520;;11505:738;;11398:845;;;;:::o;12249:366::-;12391:3;12412:67;12476:2;12471:3;12412:67;:::i;:::-;12405:74;;12488:93;12577:3;12488:93;:::i;:::-;12606:2;12601:3;12597:12;12590:19;;12249:366;;;:::o;12621:::-;12763:3;12784:67;12848:2;12843:3;12784:67;:::i;:::-;12777:74;;12860:93;12949:3;12860:93;:::i;:::-;12978:2;12973:3;12969:12;12962:19;;12621:366;;;:::o;12993:::-;13135:3;13156:67;13220:2;13215:3;13156:67;:::i;:::-;13149:74;;13232:93;13321:3;13232:93;:::i;:::-;13350:2;13345:3;13341:12;13334:19;;12993:366;;;:::o;13365:::-;13507:3;13528:67;13592:2;13587:3;13528:67;:::i;:::-;13521:74;;13604:93;13693:3;13604:93;:::i;:::-;13722:2;13717:3;13713:12;13706:19;;13365:366;;;:::o;13737:::-;13879:3;13900:67;13964:2;13959:3;13900:67;:::i;:::-;13893:74;;13976:93;14065:3;13976:93;:::i;:::-;14094:2;14089:3;14085:12;14078:19;;13737:366;;;:::o;14109:::-;14251:3;14272:67;14336:2;14331:3;14272:67;:::i;:::-;14265:74;;14348:93;14437:3;14348:93;:::i;:::-;14466:2;14461:3;14457:12;14450:19;;14109:366;;;:::o;14481:::-;14623:3;14644:67;14708:2;14703:3;14644:67;:::i;:::-;14637:74;;14720:93;14809:3;14720:93;:::i;:::-;14838:2;14833:3;14829:12;14822:19;;14481:366;;;:::o;14853:::-;14995:3;15016:67;15080:2;15075:3;15016:67;:::i;:::-;15009:74;;15092:93;15181:3;15092:93;:::i;:::-;15210:2;15205:3;15201:12;15194:19;;14853:366;;;:::o;15225:::-;15367:3;15388:67;15452:2;15447:3;15388:67;:::i;:::-;15381:74;;15464:93;15553:3;15464:93;:::i;:::-;15582:2;15577:3;15573:12;15566:19;;15225:366;;;:::o;15597:::-;15739:3;15760:67;15824:2;15819:3;15760:67;:::i;:::-;15753:74;;15836:93;15925:3;15836:93;:::i;:::-;15954:2;15949:3;15945:12;15938:19;;15597:366;;;:::o;15969:::-;16111:3;16132:67;16196:2;16191:3;16132:67;:::i;:::-;16125:74;;16208:93;16297:3;16208:93;:::i;:::-;16326:2;16321:3;16317:12;16310:19;;15969:366;;;:::o;16341:::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:::-;16855:3;16876:67;16940:2;16935:3;16876:67;:::i;:::-;16869:74;;16952:93;17041:3;16952:93;:::i;:::-;17070:2;17065:3;17061:12;17054:19;;16713:366;;;:::o;17085:::-;17227:3;17248:67;17312:2;17307:3;17248:67;:::i;:::-;17241:74;;17324:93;17413:3;17324:93;:::i;:::-;17442:2;17437:3;17433:12;17426:19;;17085:366;;;:::o;17457:::-;17599:3;17620:67;17684:2;17679:3;17620:67;:::i;:::-;17613:74;;17696:93;17785:3;17696:93;:::i;:::-;17814:2;17809:3;17805:12;17798:19;;17457:366;;;:::o;17829:::-;17971:3;17992:67;18056:2;18051:3;17992:67;:::i;:::-;17985:74;;18068:93;18157:3;18068:93;:::i;:::-;18186:2;18181:3;18177:12;18170:19;;17829:366;;;:::o;18201:::-;18343:3;18364:67;18428:2;18423:3;18364:67;:::i;:::-;18357:74;;18440:93;18529:3;18440:93;:::i;:::-;18558:2;18553:3;18549:12;18542:19;;18201:366;;;:::o;18573:::-;18715:3;18736:67;18800:2;18795:3;18736:67;:::i;:::-;18729:74;;18812:93;18901:3;18812:93;:::i;:::-;18930:2;18925:3;18921:12;18914:19;;18573:366;;;:::o;18945:::-;19087:3;19108:67;19172:2;19167:3;19108:67;:::i;:::-;19101:74;;19184:93;19273:3;19184:93;:::i;:::-;19302:2;19297:3;19293:12;19286:19;;18945:366;;;:::o;19317:::-;19459:3;19480:67;19544:2;19539:3;19480:67;:::i;:::-;19473:74;;19556:93;19645:3;19556:93;:::i;:::-;19674:2;19669:3;19665:12;19658:19;;19317:366;;;:::o;19689:::-;19831:3;19852:67;19916:2;19911:3;19852:67;:::i;:::-;19845:74;;19928:93;20017:3;19928:93;:::i;:::-;20046:2;20041:3;20037:12;20030:19;;19689:366;;;:::o;20061:::-;20203:3;20224:67;20288:2;20283:3;20224:67;:::i;:::-;20217:74;;20300:93;20389:3;20300:93;:::i;:::-;20418:2;20413:3;20409:12;20402:19;;20061:366;;;:::o;20433:::-;20575:3;20596:67;20660:2;20655:3;20596:67;:::i;:::-;20589:74;;20672:93;20761:3;20672:93;:::i;:::-;20790:2;20785:3;20781:12;20774:19;;20433:366;;;:::o;20805:::-;20947:3;20968:67;21032:2;21027:3;20968:67;:::i;:::-;20961:74;;21044:93;21133:3;21044:93;:::i;:::-;21162:2;21157:3;21153:12;21146:19;;20805:366;;;:::o;21177:398::-;21336:3;21357:83;21438:1;21433:3;21357:83;:::i;:::-;21350:90;;21449:93;21538:3;21449:93;:::i;:::-;21567:1;21562:3;21558:11;21551:18;;21177:398;;;:::o;21581:366::-;21723:3;21744:67;21808:2;21803:3;21744:67;:::i;:::-;21737:74;;21820:93;21909:3;21820:93;:::i;:::-;21938:2;21933:3;21929:12;21922:19;;21581:366;;;:::o;21953:::-;22095:3;22116:67;22180:2;22175:3;22116:67;:::i;:::-;22109:74;;22192:93;22281:3;22192:93;:::i;:::-;22310:2;22305:3;22301:12;22294:19;;21953:366;;;:::o;22325:::-;22467:3;22488:67;22552:2;22547:3;22488:67;:::i;:::-;22481:74;;22564:93;22653:3;22564:93;:::i;:::-;22682:2;22677:3;22673:12;22666:19;;22325:366;;;:::o;22697:::-;22839:3;22860:67;22924:2;22919:3;22860:67;:::i;:::-;22853:74;;22936:93;23025:3;22936:93;:::i;:::-;23054:2;23049:3;23045:12;23038:19;;22697:366;;;:::o;23069:::-;23211:3;23232:67;23296:2;23291:3;23232:67;:::i;:::-;23225:74;;23308:93;23397:3;23308:93;:::i;:::-;23426:2;23421:3;23417:12;23410:19;;23069:366;;;:::o;23441:::-;23583:3;23604:67;23668:2;23663:3;23604:67;:::i;:::-;23597:74;;23680:93;23769:3;23680:93;:::i;:::-;23798:2;23793:3;23789:12;23782:19;;23441:366;;;:::o;23813:118::-;23900:24;23918:5;23900:24;:::i;:::-;23895:3;23888:37;23813:118;;:::o;23937:256::-;24049:3;24064:75;24135:3;24126:6;24064:75;:::i;:::-;24164:2;24159:3;24155:12;24148:19;;24184:3;24177:10;;23937:256;;;;:::o;24199:397::-;24339:3;24354:75;24425:3;24416:6;24354:75;:::i;:::-;24454:2;24449:3;24445:12;24438:19;;24467:75;24538:3;24529:6;24467:75;:::i;:::-;24567:2;24562:3;24558:12;24551:19;;24587:3;24580:10;;24199:397;;;;;:::o;24602:589::-;24827:3;24849:95;24940:3;24931:6;24849:95;:::i;:::-;24842:102;;24961:95;25052:3;25043:6;24961:95;:::i;:::-;24954:102;;25073:92;25161:3;25152:6;25073:92;:::i;:::-;25066:99;;25182:3;25175:10;;24602:589;;;;;;:::o;25197:379::-;25381:3;25403:147;25546:3;25403:147;:::i;:::-;25396:154;;25567:3;25560:10;;25197:379;;;:::o;25582:222::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25726:71;25794:1;25783:9;25779:17;25770:6;25726:71;:::i;:::-;25582:222;;;;:::o;25810:640::-;26005:4;26043:3;26032:9;26028:19;26020:27;;26057:71;26125:1;26114:9;26110:17;26101:6;26057:71;:::i;:::-;26138:72;26206:2;26195:9;26191:18;26182:6;26138:72;:::i;:::-;26220;26288:2;26277:9;26273:18;26264:6;26220:72;:::i;:::-;26339:9;26333:4;26329:20;26324:2;26313:9;26309:18;26302:48;26367:76;26438:4;26429:6;26367:76;:::i;:::-;26359:84;;25810:640;;;;;;;:::o;26456:210::-;26543:4;26581:2;26570:9;26566:18;26558:26;;26594:65;26656:1;26645:9;26641:17;26632:6;26594:65;:::i;:::-;26456:210;;;;:::o;26672:222::-;26765:4;26803:2;26792:9;26788:18;26780:26;;26816:71;26884:1;26873:9;26869:17;26860:6;26816:71;:::i;:::-;26672:222;;;;:::o;26900:238::-;27001:4;27039:2;27028:9;27024:18;27016:26;;27052:79;27128:1;27117:9;27113:17;27104:6;27052:79;:::i;:::-;26900:238;;;;:::o;27144:313::-;27257:4;27295:2;27284:9;27280:18;27272:26;;27344:9;27338:4;27334:20;27330:1;27319:9;27315:17;27308:47;27372:78;27445:4;27436:6;27372:78;:::i;:::-;27364:86;;27144:313;;;;:::o;27463:419::-;27629:4;27667:2;27656:9;27652:18;27644:26;;27716:9;27710:4;27706:20;27702:1;27691:9;27687:17;27680:47;27744:131;27870:4;27744:131;:::i;:::-;27736:139;;27463:419;;;:::o;27888:::-;28054:4;28092:2;28081:9;28077:18;28069:26;;28141:9;28135:4;28131:20;28127:1;28116:9;28112:17;28105:47;28169:131;28295:4;28169:131;:::i;:::-;28161:139;;27888:419;;;:::o;28313:::-;28479:4;28517:2;28506:9;28502:18;28494:26;;28566:9;28560:4;28556:20;28552:1;28541:9;28537:17;28530:47;28594:131;28720:4;28594:131;:::i;:::-;28586:139;;28313:419;;;:::o;28738:::-;28904:4;28942:2;28931:9;28927:18;28919:26;;28991:9;28985:4;28981:20;28977:1;28966:9;28962:17;28955:47;29019:131;29145:4;29019:131;:::i;:::-;29011:139;;28738:419;;;:::o;29163:::-;29329:4;29367:2;29356:9;29352:18;29344:26;;29416:9;29410:4;29406:20;29402:1;29391:9;29387:17;29380:47;29444:131;29570:4;29444:131;:::i;:::-;29436:139;;29163:419;;;:::o;29588:::-;29754:4;29792:2;29781:9;29777:18;29769:26;;29841:9;29835:4;29831:20;29827:1;29816:9;29812:17;29805:47;29869:131;29995:4;29869:131;:::i;:::-;29861:139;;29588:419;;;:::o;30013:::-;30179:4;30217:2;30206:9;30202:18;30194:26;;30266:9;30260:4;30256:20;30252:1;30241:9;30237:17;30230:47;30294:131;30420:4;30294:131;:::i;:::-;30286:139;;30013:419;;;:::o;30438:::-;30604:4;30642:2;30631:9;30627:18;30619:26;;30691:9;30685:4;30681:20;30677:1;30666:9;30662:17;30655:47;30719:131;30845:4;30719:131;:::i;:::-;30711:139;;30438:419;;;:::o;30863:::-;31029:4;31067:2;31056:9;31052:18;31044:26;;31116:9;31110:4;31106:20;31102:1;31091:9;31087:17;31080:47;31144:131;31270:4;31144:131;:::i;:::-;31136:139;;30863:419;;;:::o;31288:::-;31454:4;31492:2;31481:9;31477:18;31469:26;;31541:9;31535:4;31531:20;31527:1;31516:9;31512:17;31505:47;31569:131;31695:4;31569:131;:::i;:::-;31561:139;;31288:419;;;:::o;31713:::-;31879:4;31917:2;31906:9;31902:18;31894:26;;31966:9;31960:4;31956:20;31952:1;31941:9;31937:17;31930:47;31994:131;32120:4;31994:131;:::i;:::-;31986:139;;31713:419;;;:::o;32138:::-;32304:4;32342:2;32331:9;32327:18;32319:26;;32391:9;32385:4;32381:20;32377:1;32366:9;32362:17;32355:47;32419:131;32545:4;32419:131;:::i;:::-;32411:139;;32138:419;;;:::o;32563:::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32816:9;32810:4;32806:20;32802:1;32791:9;32787:17;32780:47;32844:131;32970:4;32844:131;:::i;:::-;32836:139;;32563:419;;;:::o;32988:::-;33154:4;33192:2;33181:9;33177:18;33169:26;;33241:9;33235:4;33231:20;33227:1;33216:9;33212:17;33205:47;33269:131;33395:4;33269:131;:::i;:::-;33261:139;;32988:419;;;:::o;33413:::-;33579:4;33617:2;33606:9;33602:18;33594:26;;33666:9;33660:4;33656:20;33652:1;33641:9;33637:17;33630:47;33694:131;33820:4;33694:131;:::i;:::-;33686:139;;33413:419;;;:::o;33838:::-;34004:4;34042:2;34031:9;34027:18;34019:26;;34091:9;34085:4;34081:20;34077:1;34066:9;34062:17;34055:47;34119:131;34245:4;34119:131;:::i;:::-;34111:139;;33838:419;;;:::o;34263:::-;34429:4;34467:2;34456:9;34452:18;34444:26;;34516:9;34510:4;34506:20;34502:1;34491:9;34487:17;34480:47;34544:131;34670:4;34544:131;:::i;:::-;34536:139;;34263:419;;;:::o;34688:::-;34854:4;34892:2;34881:9;34877:18;34869:26;;34941:9;34935:4;34931:20;34927:1;34916:9;34912:17;34905:47;34969:131;35095:4;34969:131;:::i;:::-;34961:139;;34688:419;;;:::o;35113:::-;35279:4;35317:2;35306:9;35302:18;35294:26;;35366:9;35360:4;35356:20;35352:1;35341:9;35337:17;35330:47;35394:131;35520:4;35394:131;:::i;:::-;35386:139;;35113:419;;;:::o;35538:::-;35704:4;35742:2;35731:9;35727:18;35719:26;;35791:9;35785:4;35781:20;35777:1;35766:9;35762:17;35755:47;35819:131;35945:4;35819:131;:::i;:::-;35811:139;;35538:419;;;:::o;35963:::-;36129:4;36167:2;36156:9;36152:18;36144:26;;36216:9;36210:4;36206:20;36202:1;36191:9;36187:17;36180:47;36244:131;36370:4;36244:131;:::i;:::-;36236:139;;35963:419;;;:::o;36388:::-;36554:4;36592:2;36581:9;36577:18;36569:26;;36641:9;36635:4;36631:20;36627:1;36616:9;36612:17;36605:47;36669:131;36795:4;36669:131;:::i;:::-;36661:139;;36388:419;;;:::o;36813:::-;36979:4;37017:2;37006:9;37002:18;36994:26;;37066:9;37060:4;37056:20;37052:1;37041:9;37037:17;37030:47;37094:131;37220:4;37094:131;:::i;:::-;37086:139;;36813:419;;;:::o;37238:::-;37404:4;37442:2;37431:9;37427:18;37419:26;;37491:9;37485:4;37481:20;37477:1;37466:9;37462:17;37455:47;37519:131;37645:4;37519:131;:::i;:::-;37511:139;;37238:419;;;:::o;37663:::-;37829:4;37867:2;37856:9;37852:18;37844:26;;37916:9;37910:4;37906:20;37902:1;37891:9;37887:17;37880:47;37944:131;38070:4;37944:131;:::i;:::-;37936:139;;37663:419;;;:::o;38088:::-;38254:4;38292:2;38281:9;38277:18;38269:26;;38341:9;38335:4;38331:20;38327:1;38316:9;38312:17;38305:47;38369:131;38495:4;38369:131;:::i;:::-;38361:139;;38088:419;;;:::o;38513:::-;38679:4;38717:2;38706:9;38702:18;38694:26;;38766:9;38760:4;38756:20;38752:1;38741:9;38737:17;38730:47;38794:131;38920:4;38794:131;:::i;:::-;38786:139;;38513:419;;;:::o;38938:::-;39104:4;39142:2;39131:9;39127:18;39119:26;;39191:9;39185:4;39181:20;39177:1;39166:9;39162:17;39155:47;39219:131;39345:4;39219:131;:::i;:::-;39211:139;;38938:419;;;:::o;39363:::-;39529:4;39567:2;39556:9;39552:18;39544:26;;39616:9;39610:4;39606:20;39602:1;39591:9;39587:17;39580:47;39644:131;39770:4;39644:131;:::i;:::-;39636:139;;39363:419;;;:::o;39788:::-;39954:4;39992:2;39981:9;39977:18;39969:26;;40041:9;40035:4;40031:20;40027:1;40016:9;40012:17;40005:47;40069:131;40195:4;40069:131;:::i;:::-;40061:139;;39788:419;;;:::o;40213:222::-;40306:4;40344:2;40333:9;40329:18;40321:26;;40357:71;40425:1;40414:9;40410:17;40401:6;40357:71;:::i;:::-;40213:222;;;;:::o;40441:129::-;40475:6;40502:20;;:::i;:::-;40492:30;;40531:33;40559:4;40551:6;40531:33;:::i;:::-;40441:129;;;:::o;40576:75::-;40609:6;40642:2;40636:9;40626:19;;40576:75;:::o;40657:307::-;40718:4;40808:18;40800:6;40797:30;40794:56;;;40830:18;;:::i;:::-;40794:56;40868:29;40890:6;40868:29;:::i;:::-;40860:37;;40952:4;40946;40942:15;40934:23;;40657:307;;;:::o;40970:308::-;41032:4;41122:18;41114:6;41111:30;41108:56;;;41144:18;;:::i;:::-;41108:56;41182:29;41204:6;41182:29;:::i;:::-;41174:37;;41266:4;41260;41256:15;41248:23;;40970:308;;;:::o;41284:141::-;41333:4;41356:3;41348:11;;41379:3;41376:1;41369:14;41413:4;41410:1;41400:18;41392:26;;41284:141;;;:::o;41431:98::-;41482:6;41516:5;41510:12;41500:22;;41431:98;;;:::o;41535:99::-;41587:6;41621:5;41615:12;41605:22;;41535:99;;;:::o;41640:168::-;41723:11;41757:6;41752:3;41745:19;41797:4;41792:3;41788:14;41773:29;;41640:168;;;;:::o;41814:147::-;41915:11;41952:3;41937:18;;41814:147;;;;:::o;41967:169::-;42051:11;42085:6;42080:3;42073:19;42125:4;42120:3;42116:14;42101:29;;41967:169;;;;:::o;42142:148::-;42244:11;42281:3;42266:18;;42142:148;;;;:::o;42296:305::-;42336:3;42355:20;42373:1;42355:20;:::i;:::-;42350:25;;42389:20;42407:1;42389:20;:::i;:::-;42384:25;;42543:1;42475:66;42471:74;42468:1;42465:81;42462:107;;;42549:18;;:::i;:::-;42462:107;42593:1;42590;42586:9;42579:16;;42296:305;;;;:::o;42607:185::-;42647:1;42664:20;42682:1;42664:20;:::i;:::-;42659:25;;42698:20;42716:1;42698:20;:::i;:::-;42693:25;;42737:1;42727:35;;42742:18;;:::i;:::-;42727:35;42784:1;42781;42777:9;42772:14;;42607:185;;;;:::o;42798:348::-;42838:7;42861:20;42879:1;42861:20;:::i;:::-;42856:25;;42895:20;42913:1;42895:20;:::i;:::-;42890:25;;43083:1;43015:66;43011:74;43008:1;43005:81;43000:1;42993:9;42986:17;42982:105;42979:131;;;43090:18;;:::i;:::-;42979:131;43138:1;43135;43131:9;43120:20;;42798:348;;;;:::o;43152:191::-;43192:4;43212:20;43230:1;43212:20;:::i;:::-;43207:25;;43246:20;43264:1;43246:20;:::i;:::-;43241:25;;43285:1;43282;43279:8;43276:34;;;43290:18;;:::i;:::-;43276:34;43335:1;43332;43328:9;43320:17;;43152:191;;;;:::o;43349:96::-;43386:7;43415:24;43433:5;43415:24;:::i;:::-;43404:35;;43349:96;;;:::o;43451:90::-;43485:7;43528:5;43521:13;43514:21;43503:32;;43451:90;;;:::o;43547:77::-;43584:7;43613:5;43602:16;;43547:77;;;:::o;43630:149::-;43666:7;43706:66;43699:5;43695:78;43684:89;;43630:149;;;:::o;43785:131::-;43832:7;43861:5;43850:16;;43867:43;43904:5;43867:43;:::i;:::-;43785:131;;;:::o;43922:126::-;43959:7;43999:42;43992:5;43988:54;43977:65;;43922:126;;;:::o;44054:77::-;44091:7;44120:5;44109:16;;44054:77;;;:::o;44137:131::-;44195:9;44228:34;44256:5;44228:34;:::i;:::-;44215:47;;44137:131;;;:::o;44274:154::-;44358:6;44353:3;44348;44335:30;44420:1;44411:6;44406:3;44402:16;44395:27;44274:154;;;:::o;44434:307::-;44502:1;44512:113;44526:6;44523:1;44520:13;44512:113;;;44611:1;44606:3;44602:11;44596:18;44592:1;44587:3;44583:11;44576:39;44548:2;44545:1;44541:10;44536:15;;44512:113;;;44643:6;44640:1;44637:13;44634:101;;;44723:1;44714:6;44709:3;44705:16;44698:27;44634:101;44483:258;44434:307;;;:::o;44747:320::-;44791:6;44828:1;44822:4;44818:12;44808:22;;44875:1;44869:4;44865:12;44896:18;44886:81;;44952:4;44944:6;44940:17;44930:27;;44886:81;45014:2;45006:6;45003:14;44983:18;44980:38;44977:84;;;45033:18;;:::i;:::-;44977:84;44798:269;44747:320;;;:::o;45073:281::-;45156:27;45178:4;45156:27;:::i;:::-;45148:6;45144:40;45286:6;45274:10;45271:22;45250:18;45238:10;45235:34;45232:62;45229:88;;;45297:18;;:::i;:::-;45229:88;45337:10;45333:2;45326:22;45116:238;45073:281;;:::o;45360:233::-;45399:3;45422:24;45440:5;45422:24;:::i;:::-;45413:33;;45468:66;45461:5;45458:77;45455:103;;;45538:18;;:::i;:::-;45455:103;45585:1;45578:5;45574:13;45567:20;;45360:233;;;:::o;45599:100::-;45638:7;45667:26;45687:5;45667:26;:::i;:::-;45656:37;;45599:100;;;:::o;45705:79::-;45744:7;45773:5;45762:16;;45705:79;;;:::o;45790:94::-;45829:7;45858:20;45872:5;45858:20;:::i;:::-;45847:31;;45790:94;;;:::o;45890:176::-;45922:1;45939:20;45957:1;45939:20;:::i;:::-;45934:25;;45973:20;45991:1;45973:20;:::i;:::-;45968:25;;46012:1;46002:35;;46017:18;;:::i;:::-;46002:35;46058:1;46055;46051:9;46046:14;;45890:176;;;;:::o;46072:180::-;46120:77;46117:1;46110:88;46217:4;46214:1;46207:15;46241:4;46238:1;46231:15;46258:180;46306:77;46303:1;46296:88;46403:4;46400:1;46393:15;46427:4;46424:1;46417:15;46444:180;46492:77;46489:1;46482:88;46589:4;46586:1;46579:15;46613:4;46610:1;46603:15;46630:180;46678:77;46675:1;46668:88;46775:4;46772:1;46765:15;46799:4;46796:1;46789:15;46816:180;46864:77;46861:1;46854:88;46961:4;46958:1;46951:15;46985:4;46982:1;46975:15;47002:180;47050:77;47047:1;47040:88;47147:4;47144:1;47137:15;47171:4;47168:1;47161:15;47188:180;47236:77;47233:1;47226:88;47333:4;47330:1;47323:15;47357:4;47354:1;47347:15;47374:117;47483:1;47480;47473:12;47497:117;47606:1;47603;47596:12;47620:117;47729:1;47726;47719:12;47743:117;47852:1;47849;47842:12;47866:117;47975:1;47972;47965:12;47989:117;48098:1;48095;48088:12;48112:102;48153:6;48204:2;48200:7;48195:2;48188:5;48184:14;48180:28;48170:38;;48112:102;;;:::o;48220:94::-;48253:8;48301:5;48297:2;48293:14;48272:35;;48220:94;;;:::o;48320:234::-;48460:34;48456:1;48448:6;48444:14;48437:58;48529:17;48524:2;48516:6;48512:15;48505:42;48320:234;:::o;48560:168::-;48700:20;48696:1;48688:6;48684:14;48677:44;48560:168;:::o;48734:230::-;48874:34;48870:1;48862:6;48858:14;48851:58;48943:13;48938:2;48930:6;48926:15;48919:38;48734:230;:::o;48970:237::-;49110:34;49106:1;49098:6;49094:14;49087:58;49179:20;49174:2;49166:6;49162:15;49155:45;48970:237;:::o;49213:225::-;49353:34;49349:1;49341:6;49337:14;49330:58;49422:8;49417:2;49409:6;49405:15;49398:33;49213:225;:::o;49444:170::-;49584:22;49580:1;49572:6;49568:14;49561:46;49444:170;:::o;49620:173::-;49760:25;49756:1;49748:6;49744:14;49737:49;49620:173;:::o;49799:178::-;49939:30;49935:1;49927:6;49923:14;49916:54;49799:178;:::o;49983:223::-;50123:34;50119:1;50111:6;50107:14;50100:58;50192:6;50187:2;50179:6;50175:15;50168:31;49983:223;:::o;50212:175::-;50352:27;50348:1;50340:6;50336:14;50329:51;50212:175;:::o;50393:220::-;50533:34;50529:1;50521:6;50517:14;50510:58;50602:3;50597:2;50589:6;50585:15;50578:28;50393:220;:::o;50619:231::-;50759:34;50755:1;50747:6;50743:14;50736:58;50828:14;50823:2;50815:6;50811:15;50804:39;50619:231;:::o;50856:243::-;50996:34;50992:1;50984:6;50980:14;50973:58;51065:26;51060:2;51052:6;51048:15;51041:51;50856:243;:::o;51105:229::-;51245:34;51241:1;51233:6;51229:14;51222:58;51314:12;51309:2;51301:6;51297:15;51290:37;51105:229;:::o;51340:228::-;51480:34;51476:1;51468:6;51464:14;51457:58;51549:11;51544:2;51536:6;51532:15;51525:36;51340:228;:::o;51574:182::-;51714:34;51710:1;51702:6;51698:14;51691:58;51574:182;:::o;51762:224::-;51902:34;51898:1;51890:6;51886:14;51879:58;51971:7;51966:2;51958:6;51954:15;51947:32;51762:224;:::o;51992:231::-;52132:34;52128:1;52120:6;52116:14;52109:58;52201:14;52196:2;52188:6;52184:15;52177:39;51992:231;:::o;52229:170::-;52369:22;52365:1;52357:6;52353:14;52346:46;52229:170;:::o;52405:243::-;52545:34;52541:1;52533:6;52529:14;52522:58;52614:26;52609:2;52601:6;52597:15;52590:51;52405:243;:::o;52654:178::-;52794:30;52790:1;52782:6;52778:14;52771:54;52654:178;:::o;52838:182::-;52978:34;52974:1;52966:6;52962:14;52955:58;52838:182;:::o;53026:228::-;53166:34;53162:1;53154:6;53150:14;53143:58;53235:11;53230:2;53222:6;53218:15;53211:36;53026:228;:::o;53260:220::-;53400:34;53396:1;53388:6;53384:14;53377:58;53469:3;53464:2;53456:6;53452:15;53445:28;53260:220;:::o;53486:114::-;;:::o;53606:236::-;53746:34;53742:1;53734:6;53730:14;53723:58;53815:19;53810:2;53802:6;53798:15;53791:44;53606:236;:::o;53848:224::-;53988:34;53984:1;53976:6;53972:14;53965:58;54057:7;54052:2;54044:6;54040:15;54033:32;53848:224;:::o;54078:231::-;54218:34;54214:1;54206:6;54202:14;54195:58;54287:14;54282:2;54274:6;54270:15;54263:39;54078:231;:::o;54315:178::-;54455:30;54451:1;54443:6;54439:14;54432:54;54315:178;:::o;54499:181::-;54639:33;54635:1;54627:6;54623:14;54616:57;54499:181;:::o;54686:182::-;54826:34;54822:1;54814:6;54810:14;54803:58;54686:182;:::o;54874:115::-;54957:1;54950:5;54947:12;54937:46;;54963:18;;:::i;:::-;54937:46;54874:115;:::o;54995:122::-;55068:24;55086:5;55068:24;:::i;:::-;55061:5;55058:35;55048:63;;55107:1;55104;55097:12;55048:63;54995:122;:::o;55123:116::-;55193:21;55208:5;55193:21;:::i;:::-;55186:5;55183:32;55173:60;;55229:1;55226;55219:12;55173:60;55123:116;:::o;55245:122::-;55318:24;55336:5;55318:24;:::i;:::-;55311:5;55308:35;55298:63;;55357:1;55354;55347:12;55298:63;55245:122;:::o;55373:120::-;55445:23;55462:5;55445:23;:::i;:::-;55438:5;55435:34;55425:62;;55483:1;55480;55473:12;55425:62;55373:120;:::o;55499:122::-;55572:24;55590:5;55572:24;:::i;:::-;55565:5;55562:35;55552:63;;55611:1;55608;55601:12;55552:63;55499:122;:::o
Swarm Source
ipfs://1dec675803c34a387b3d53280e34d217b906e1f785009897d9a352d0ca330a26
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.