ERC-721
Overview
Max Total Supply
252 OCH
Holders
118
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 OCHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HikariOchita
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-07 */ // SPDX-License-Identifier: MIT // 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/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/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: HikariOchita.sol pragma solidity 0.8.11; contract HikariOchita is ERC721, Ownable { using MerkleProof for bytes32[]; string private baseTokenURI; bool public saleOpen; // To store total number of NFTs minted uint256 private mintCount; uint256 public constant MAX_NFT = 500; bytes32 public merkleRoot; // Tracks number of NFTs minted by an address mapping(address => uint256) public addressMintCount; event Minted(uint256 totalMinted); constructor(string memory baseURI) ERC721("Hikari: Ochita", "OCH") { setBaseURI(baseURI); } receive() external payable { revert("Ether not accepted"); } /** * @notice Toggles sale state * @dev Only callable by the owner */ function flipSaleState() external onlyOwner { saleOpen = !saleOpen; } /** * @notice Sets merkle root * @param _merkleRoot root hash * @dev Only callable by the owner */ function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } /** * @notice Sets baseURI * @param baseURI api that points to the metadata * @dev Only callable by the owner */ function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } /** * @notice Returns circulating supply */ function totalSupply() public view returns (uint256) { return mintCount; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } /** * @notice Mints token. * @param _proof proves that your address is eligible to mint * @param _allowedCount represents number of NFTs caller is allowed to mint * @param _count indiciates number of NFTs caller wants to mint in the transaction */ function mint( bytes32[] calldata _proof, uint256 _allowedCount, uint256 _count ) external { require( totalSupply() + _count <= MAX_NFT, "Transaction will exceed maximum supply" ); require(merkleRoot != 0, "No address is eligible for minting yet"); require(saleOpen, "Ssale is not live yet"); require( MerkleProof.verify( _proof, merkleRoot, keccak256(abi.encodePacked(msg.sender, _allowedCount)) ), "Address is not eligible for mint" ); require(_count > 0 && _count <= _allowedCount, "Invalid mint count"); require( _allowedCount >= addressMintCount[msg.sender] + _count, "Transaction will exceed maximum NFTs allowed to mint" ); uint256 supply = totalSupply(); mintCount += _count; addressMintCount[msg.sender] += _count; for (uint256 i; i < _count; i++) { _mint(++supply); } } /** * @notice Reserve NFTs. * @param _count indiciates number of NFTs owner wants to mint in the transaction * @dev Only callable by the owner */ function reserveNFTs(uint256 _count) external onlyOwner { require( totalSupply() + _count <= MAX_NFT, "Transaction will exceed maximum supply" ); uint256 supply = totalSupply(); mintCount += _count; for (uint256 i; i < _count; i++) { _mint(++supply); } } function _mint(uint256 tokenId) private { _safeMint(msg.sender, tokenId); emit Minted(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalMinted","type":"uint256"}],"name":"Minted","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_NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintCount","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":"flipSaleState","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":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_allowedCount","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserveNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200436b3803806200436b8339818101604052810190620000379190620004ff565b6040518060400160405280600e81526020017f48696b6172693a204f63686974610000000000000000000000000000000000008152506040518060400160405280600381526020017f4f434800000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620002b2565b508060019080519060200190620000d4929190620002b2565b505050620000f7620000eb6200010f60201b60201c565b6200011760201b60201c565b6200010881620001dd60201b60201c565b5062000638565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001ed6200010f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002136200028860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200026c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026390620005b1565b60405180910390fd5b806007908051906020019062000284929190620002b2565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002c09062000602565b90600052602060002090601f016020900481019282620002e4576000855562000330565b82601f10620002ff57805160ff191683800117855562000330565b8280016001018555821562000330579182015b828111156200032f57825182559160200191906001019062000312565b5b5090506200033f919062000343565b5090565b5b808211156200035e57600081600090555060010162000344565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003cb8262000380565b810181811067ffffffffffffffff82111715620003ed57620003ec62000391565b5b80604052505050565b60006200040262000362565b9050620004108282620003c0565b919050565b600067ffffffffffffffff82111562000433576200043262000391565b5b6200043e8262000380565b9050602081019050919050565b60005b838110156200046b5780820151818401526020810190506200044e565b838111156200047b576000848401525b50505050565b600062000498620004928462000415565b620003f6565b905082815260208101848484011115620004b757620004b66200037b565b5b620004c48482856200044b565b509392505050565b600082601f830112620004e457620004e362000376565b5b8151620004f684826020860162000481565b91505092915050565b6000602082840312156200051857620005176200036c565b5b600082015167ffffffffffffffff81111562000539576200053862000371565b5b6200054784828501620004cc565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200059960208362000550565b9150620005a68262000561565b602082019050919050565b60006020820190508181036000830152620005cc816200058a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200061b57607f821691505b60208210811415620006325762000631620005d3565b5b50919050565b613d2380620006486000396000f3fe6080604052600436106101855760003560e01c80636fdaddf1116100d157806399288dbb1161008a578063bc7df09111610064578063bc7df0911461059e578063c87b56dd146105c7578063e985e9c514610604578063f2fde38b14610641576101c5565b806399288dbb14610521578063a22cb4651461054c578063b88d4fde14610575576101c5565b80636fdaddf11461042357806370a082311461044e578063715018a61461048b5780637cb64759146104a25780638da5cb5b146104cb57806395d89b41146104f6576101c5565b80631ba4f67d1161013e57806334918dfd1161011857806334918dfd1461037d57806342842e0e1461039457806355f804b3146103bd5780636352211e146103e6576101c5565b80631ba4f67d146102ec57806323b872dd146103295780632eb4a7ab14610352576101c5565b806301ffc9a7146101ca57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806314bf9af61461029857806318160ddd146102c1576101c5565b366101c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bc90612506565b60405180910390fd5b600080fd5b3480156101d657600080fd5b506101f160048036038101906101ec9190612592565b61066a565b6040516101fe91906125da565b60405180910390f35b34801561021357600080fd5b5061021c61074c565b604051610229919061267d565b60405180910390f35b34801561023e57600080fd5b50610259600480360381019061025491906126d5565b6107de565b6040516102669190612743565b60405180910390f35b34801561027b57600080fd5b506102966004803603810190610291919061278a565b610863565b005b3480156102a457600080fd5b506102bf60048036038101906102ba919061282f565b61097b565b005b3480156102cd57600080fd5b506102d6610cb0565b6040516102e391906128b2565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906128cd565b610cba565b60405161032091906128b2565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906128fa565b610cd2565b005b34801561035e57600080fd5b50610367610d32565b6040516103749190612966565b60405180910390f35b34801561038957600080fd5b50610392610d38565b005b3480156103a057600080fd5b506103bb60048036038101906103b691906128fa565b610de0565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612ab1565b610e00565b005b3480156103f257600080fd5b5061040d600480360381019061040891906126d5565b610e96565b60405161041a9190612743565b60405180910390f35b34801561042f57600080fd5b50610438610f48565b60405161044591906128b2565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906128cd565b610f4e565b60405161048291906128b2565b60405180910390f35b34801561049757600080fd5b506104a0611006565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612b26565b61108e565b005b3480156104d757600080fd5b506104e0611114565b6040516104ed9190612743565b60405180910390f35b34801561050257600080fd5b5061050b61113e565b604051610518919061267d565b60405180910390f35b34801561052d57600080fd5b506105366111d0565b60405161054391906125da565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190612b7f565b6111e3565b005b34801561058157600080fd5b5061059c60048036038101906105979190612c60565b6111f9565b005b3480156105aa57600080fd5b506105c560048036038101906105c091906126d5565b61125b565b005b3480156105d357600080fd5b506105ee60048036038101906105e991906126d5565b61138b565b6040516105fb919061267d565b60405180910390f35b34801561061057600080fd5b5061062b60048036038101906106269190612ce3565b611432565b60405161063891906125da565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906128cd565b6114c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107455750610744826115be565b5b9050919050565b60606000805461075b90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461078790612d52565b80156107d45780601f106107a9576101008083540402835291602001916107d4565b820191906000526020600020905b8154815290600101906020018083116107b757829003601f168201915b5050505050905090565b60006107e982611628565b610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612df6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086e82610e96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690612e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fe611694565b73ffffffffffffffffffffffffffffffffffffffff16148061092d575061092c81610927611694565b611432565b5b61096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390612f1a565b60405180910390fd5b610976838361169c565b505050565b6101f481610987610cb0565b6109919190612f69565b11156109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990613031565b60405180910390fd5b6000801b600a541415610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a11906130c3565b60405180910390fd5b600860009054906101000a900460ff16610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a609061312f565b60405180910390fd5b610adf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a543385604051602001610ac49291906131b8565b60405160208183030381529060405280519060200120611755565b610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590613230565b60405180910390fd5b600081118015610b2e5750818111155b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b649061329c565b60405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bb89190612f69565b821015610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf19061332e565b60405180910390fd5b6000610c04610cb0565b90508160096000828254610c189190612f69565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c6e9190612f69565b9250508190555060005b82811015610ca857610c9582610c8d9061334e565b92508261176c565b8080610ca09061334e565b915050610c78565b505050505050565b6000600954905090565b600b6020528060005260406000206000915090505481565b610ce3610cdd611694565b826117b0565b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613409565b60405180910390fd5b610d2d83838361188e565b505050565b600a5481565b610d40611694565b73ffffffffffffffffffffffffffffffffffffffff16610d5e611114565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613475565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b610dfb838383604051806020016040528060008152506111f9565b505050565b610e08611694565b73ffffffffffffffffffffffffffffffffffffffff16610e26611114565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613475565b60405180910390fd5b8060079080519060200190610e92929190612406565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613507565b60405180910390fd5b80915050919050565b6101f481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613599565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61100e611694565b73ffffffffffffffffffffffffffffffffffffffff1661102c611114565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613475565b60405180910390fd5b61108c6000611aea565b565b611096611694565b73ffffffffffffffffffffffffffffffffffffffff166110b4611114565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190613475565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114d90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461117990612d52565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b6111f56111ee611694565b8383611bb0565b5050565b61120a611204611694565b836117b0565b611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090613409565b60405180910390fd5b61125584848484611d1d565b50505050565b611263611694565b73ffffffffffffffffffffffffffffffffffffffff16611281611114565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90613475565b60405180910390fd5b6101f4816112e3610cb0565b6112ed9190612f69565b111561132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613031565b60405180910390fd5b6000611338610cb0565b9050816009600082825461134c9190612f69565b9250508190555060005b82811015611386576113738261136b9061334e565b92508261176c565b808061137e9061334e565b915050611356565b505050565b606061139682611628565b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc9061362b565b60405180910390fd5b60006113df611d79565b905060008151116113ff576040518060200160405280600081525061142a565b8061140984611e0b565b60405160200161141a929190613687565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ce611694565b73ffffffffffffffffffffffffffffffffffffffff166114ec611114565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061371d565b60405180910390fd5b6115bb81611aea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170f83610e96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826117628584611f6c565b1490509392505050565b611776338261201f565b7f176b02bb2d12439ff7a20b59f402cca16c76f50508b13ef3166a600eb719354a816040516117a591906128b2565b60405180910390a150565b60006117bb82611628565b6117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906137af565b60405180910390fd5b600061180583610e96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187457508373ffffffffffffffffffffffffffffffffffffffff1661185c846107de565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188557506118848185611432565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118ae82610e96565b73ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613841565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906138d3565b60405180910390fd5b61197f83838361203d565b61198a60008261169c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119da91906138f3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a319190612f69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613973565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1091906125da565b60405180910390a3505050565b611d2884848461188e565b611d3484848484612042565b611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90613a05565b60405180910390fd5b50505050565b606060078054611d8890612d52565b80601f0160208091040260200160405190810160405280929190818152602001828054611db490612d52565b8015611e015780601f10611dd657610100808354040283529160200191611e01565b820191906000526020600020905b815481529060010190602001808311611de457829003601f168201915b5050505050905090565b60606000821415611e53576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f67565b600082905060005b60008214611e85578080611e6e9061334e565b915050600a82611e7e9190613a54565b9150611e5b565b60008167ffffffffffffffff811115611ea157611ea0612986565b5b6040519080825280601f01601f191660200182016040528015611ed35781602001600182028036833780820191505090505b5090505b60008514611f6057600182611eec91906138f3565b9150600a85611efb9190613a85565b6030611f079190612f69565b60f81b818381518110611f1d57611f1c613ab6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f599190613a54565b9450611ed7565b8093505050505b919050565b60008082905060005b8451811015612014576000858281518110611f9357611f92613ab6565b5b60200260200101519050808311611fd4578281604051602001611fb7929190613b06565b604051602081830303815290604052805190602001209250612000565b8083604051602001611fe7929190613b06565b6040516020818303038152906040528051906020012092505b50808061200c9061334e565b915050611f75565b508091505092915050565b6120398282604051806020016040528060008152506121ca565b5050565b505050565b60006120638473ffffffffffffffffffffffffffffffffffffffff16612225565b156121bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261208c611694565b8786866040518563ffffffff1660e01b81526004016120ae9493929190613b87565b6020604051808303816000875af19250505080156120ea57506040513d601f19601f820116820180604052508101906120e79190613be8565b60015b61216d573d806000811461211a576040519150601f19603f3d011682016040523d82523d6000602084013e61211f565b606091505b50600081511415612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90613a05565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121c2565b600190505b949350505050565b6121d48383612238565b6121e16000848484612042565b612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613a05565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90613c61565b60405180910390fd5b6122b181611628565b156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613ccd565b60405180910390fd5b6122fd6000838361203d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234d9190612f69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461241290612d52565b90600052602060002090601f016020900481019282612434576000855561247b565b82601f1061244d57805160ff191683800117855561247b565b8280016001018555821561247b579182015b8281111561247a57825182559160200191906001019061245f565b5b509050612488919061248c565b5090565b5b808211156124a557600081600090555060010161248d565b5090565b600082825260208201905092915050565b7f4574686572206e6f742061636365707465640000000000000000000000000000600082015250565b60006124f06012836124a9565b91506124fb826124ba565b602082019050919050565b6000602082019050818103600083015261251f816124e3565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61256f8161253a565b811461257a57600080fd5b50565b60008135905061258c81612566565b92915050565b6000602082840312156125a8576125a7612530565b5b60006125b68482850161257d565b91505092915050565b60008115159050919050565b6125d4816125bf565b82525050565b60006020820190506125ef60008301846125cb565b92915050565b600081519050919050565b60005b8381101561261e578082015181840152602081019050612603565b8381111561262d576000848401525b50505050565b6000601f19601f8301169050919050565b600061264f826125f5565b61265981856124a9565b9350612669818560208601612600565b61267281612633565b840191505092915050565b600060208201905081810360008301526126978184612644565b905092915050565b6000819050919050565b6126b28161269f565b81146126bd57600080fd5b50565b6000813590506126cf816126a9565b92915050565b6000602082840312156126eb576126ea612530565b5b60006126f9848285016126c0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061272d82612702565b9050919050565b61273d81612722565b82525050565b60006020820190506127586000830184612734565b92915050565b61276781612722565b811461277257600080fd5b50565b6000813590506127848161275e565b92915050565b600080604083850312156127a1576127a0612530565b5b60006127af85828601612775565b92505060206127c0858286016126c0565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126127ef576127ee6127ca565b5b8235905067ffffffffffffffff81111561280c5761280b6127cf565b5b602083019150836020820283011115612828576128276127d4565b5b9250929050565b6000806000806060858703121561284957612848612530565b5b600085013567ffffffffffffffff81111561286757612866612535565b5b612873878288016127d9565b94509450506020612886878288016126c0565b9250506040612897878288016126c0565b91505092959194509250565b6128ac8161269f565b82525050565b60006020820190506128c760008301846128a3565b92915050565b6000602082840312156128e3576128e2612530565b5b60006128f184828501612775565b91505092915050565b60008060006060848603121561291357612912612530565b5b600061292186828701612775565b935050602061293286828701612775565b9250506040612943868287016126c0565b9150509250925092565b6000819050919050565b6129608161294d565b82525050565b600060208201905061297b6000830184612957565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129be82612633565b810181811067ffffffffffffffff821117156129dd576129dc612986565b5b80604052505050565b60006129f0612526565b90506129fc82826129b5565b919050565b600067ffffffffffffffff821115612a1c57612a1b612986565b5b612a2582612633565b9050602081019050919050565b82818337600083830152505050565b6000612a54612a4f84612a01565b6129e6565b905082815260208101848484011115612a7057612a6f612981565b5b612a7b848285612a32565b509392505050565b600082601f830112612a9857612a976127ca565b5b8135612aa8848260208601612a41565b91505092915050565b600060208284031215612ac757612ac6612530565b5b600082013567ffffffffffffffff811115612ae557612ae4612535565b5b612af184828501612a83565b91505092915050565b612b038161294d565b8114612b0e57600080fd5b50565b600081359050612b2081612afa565b92915050565b600060208284031215612b3c57612b3b612530565b5b6000612b4a84828501612b11565b91505092915050565b612b5c816125bf565b8114612b6757600080fd5b50565b600081359050612b7981612b53565b92915050565b60008060408385031215612b9657612b95612530565b5b6000612ba485828601612775565b9250506020612bb585828601612b6a565b9150509250929050565b600067ffffffffffffffff821115612bda57612bd9612986565b5b612be382612633565b9050602081019050919050565b6000612c03612bfe84612bbf565b6129e6565b905082815260208101848484011115612c1f57612c1e612981565b5b612c2a848285612a32565b509392505050565b600082601f830112612c4757612c466127ca565b5b8135612c57848260208601612bf0565b91505092915050565b60008060008060808587031215612c7a57612c79612530565b5b6000612c8887828801612775565b9450506020612c9987828801612775565b9350506040612caa878288016126c0565b925050606085013567ffffffffffffffff811115612ccb57612cca612535565b5b612cd787828801612c32565b91505092959194509250565b60008060408385031215612cfa57612cf9612530565b5b6000612d0885828601612775565b9250506020612d1985828601612775565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d6a57607f821691505b60208210811415612d7e57612d7d612d23565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612de0602c836124a9565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e726021836124a9565b9150612e7d82612e16565b604082019050919050565b60006020820190508181036000830152612ea181612e65565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612f046038836124a9565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f748261269f565b9150612f7f8361269f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fb457612fb3612f3a565b5b828201905092915050565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b600061301b6026836124a9565b915061302682612fbf565b604082019050919050565b6000602082019050818103600083015261304a8161300e565b9050919050565b7f4e6f206164647265737320697320656c696769626c6520666f72206d696e746960008201527f6e67207965740000000000000000000000000000000000000000000000000000602082015250565b60006130ad6026836124a9565b91506130b882613051565b604082019050919050565b600060208201905081810360008301526130dc816130a0565b9050919050565b7f5373616c65206973206e6f74206c697665207965740000000000000000000000600082015250565b60006131196015836124a9565b9150613124826130e3565b602082019050919050565b600060208201905081810360008301526131488161310c565b9050919050565b60008160601b9050919050565b60006131678261314f565b9050919050565b60006131798261315c565b9050919050565b61319161318c82612722565b61316e565b82525050565b6000819050919050565b6131b26131ad8261269f565b613197565b82525050565b60006131c48285613180565b6014820191506131d482846131a1565b6020820191508190509392505050565b7f41646472657373206973206e6f7420656c696769626c6520666f72206d696e74600082015250565b600061321a6020836124a9565b9150613225826131e4565b602082019050919050565b600060208201905081810360008301526132498161320d565b9050919050565b7f496e76616c6964206d696e7420636f756e740000000000000000000000000000600082015250565b60006132866012836124a9565b915061329182613250565b602082019050919050565b600060208201905081810360008301526132b581613279565b9050919050565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f4e46547320616c6c6f77656420746f206d696e74000000000000000000000000602082015250565b60006133186034836124a9565b9150613323826132bc565b604082019050919050565b600060208201905081810360008301526133478161330b565b9050919050565b60006133598261269f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561338c5761338b612f3a565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006133f36031836124a9565b91506133fe82613397565b604082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061345f6020836124a9565b915061346a82613429565b602082019050919050565b6000602082019050818103600083015261348e81613452565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134f16029836124a9565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613583602a836124a9565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613615602f836124a9565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b600081905092915050565b6000613661826125f5565b61366b818561364b565b935061367b818560208601612600565b80840191505092915050565b60006136938285613656565b915061369f8284613656565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137076026836124a9565b9150613712826136ab565b604082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613799602c836124a9565b91506137a48261373d565b604082019050919050565b600060208201905081810360008301526137c88161378c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061382b6029836124a9565b9150613836826137cf565b604082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138bd6024836124a9565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b60006138fe8261269f565b91506139098361269f565b92508282101561391c5761391b612f3a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061395d6019836124a9565b915061396882613927565b602082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139ef6032836124a9565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5f8261269f565b9150613a6a8361269f565b925082613a7a57613a79613a25565b5b828204905092915050565b6000613a908261269f565b9150613a9b8361269f565b925082613aab57613aaa613a25565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b613b00613afb8261294d565b613ae5565b82525050565b6000613b128285613aef565b602082019150613b228284613aef565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613b5982613b32565b613b638185613b3d565b9350613b73818560208601612600565b613b7c81612633565b840191505092915050565b6000608082019050613b9c6000830187612734565b613ba96020830186612734565b613bb660408301856128a3565b8181036060830152613bc88184613b4e565b905095945050505050565b600081519050613be281612566565b92915050565b600060208284031215613bfe57613bfd612530565b5b6000613c0c84828501613bd3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613c4b6020836124a9565b9150613c5682613c15565b602082019050919050565b60006020820190508181036000830152613c7a81613c3e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613cb7601c836124a9565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b905091905056fea2646970667358221220859eabbd1aed9636652f369bb71de0d13dcd561ba3c6aa97584263bbdbef394c64736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101855760003560e01c80636fdaddf1116100d157806399288dbb1161008a578063bc7df09111610064578063bc7df0911461059e578063c87b56dd146105c7578063e985e9c514610604578063f2fde38b14610641576101c5565b806399288dbb14610521578063a22cb4651461054c578063b88d4fde14610575576101c5565b80636fdaddf11461042357806370a082311461044e578063715018a61461048b5780637cb64759146104a25780638da5cb5b146104cb57806395d89b41146104f6576101c5565b80631ba4f67d1161013e57806334918dfd1161011857806334918dfd1461037d57806342842e0e1461039457806355f804b3146103bd5780636352211e146103e6576101c5565b80631ba4f67d146102ec57806323b872dd146103295780632eb4a7ab14610352576101c5565b806301ffc9a7146101ca57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806314bf9af61461029857806318160ddd146102c1576101c5565b366101c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bc90612506565b60405180910390fd5b600080fd5b3480156101d657600080fd5b506101f160048036038101906101ec9190612592565b61066a565b6040516101fe91906125da565b60405180910390f35b34801561021357600080fd5b5061021c61074c565b604051610229919061267d565b60405180910390f35b34801561023e57600080fd5b50610259600480360381019061025491906126d5565b6107de565b6040516102669190612743565b60405180910390f35b34801561027b57600080fd5b506102966004803603810190610291919061278a565b610863565b005b3480156102a457600080fd5b506102bf60048036038101906102ba919061282f565b61097b565b005b3480156102cd57600080fd5b506102d6610cb0565b6040516102e391906128b2565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906128cd565b610cba565b60405161032091906128b2565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906128fa565b610cd2565b005b34801561035e57600080fd5b50610367610d32565b6040516103749190612966565b60405180910390f35b34801561038957600080fd5b50610392610d38565b005b3480156103a057600080fd5b506103bb60048036038101906103b691906128fa565b610de0565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612ab1565b610e00565b005b3480156103f257600080fd5b5061040d600480360381019061040891906126d5565b610e96565b60405161041a9190612743565b60405180910390f35b34801561042f57600080fd5b50610438610f48565b60405161044591906128b2565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906128cd565b610f4e565b60405161048291906128b2565b60405180910390f35b34801561049757600080fd5b506104a0611006565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612b26565b61108e565b005b3480156104d757600080fd5b506104e0611114565b6040516104ed9190612743565b60405180910390f35b34801561050257600080fd5b5061050b61113e565b604051610518919061267d565b60405180910390f35b34801561052d57600080fd5b506105366111d0565b60405161054391906125da565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190612b7f565b6111e3565b005b34801561058157600080fd5b5061059c60048036038101906105979190612c60565b6111f9565b005b3480156105aa57600080fd5b506105c560048036038101906105c091906126d5565b61125b565b005b3480156105d357600080fd5b506105ee60048036038101906105e991906126d5565b61138b565b6040516105fb919061267d565b60405180910390f35b34801561061057600080fd5b5061062b60048036038101906106269190612ce3565b611432565b60405161063891906125da565b60405180910390f35b34801561064d57600080fd5b50610668600480360381019061066391906128cd565b6114c6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107455750610744826115be565b5b9050919050565b60606000805461075b90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461078790612d52565b80156107d45780601f106107a9576101008083540402835291602001916107d4565b820191906000526020600020905b8154815290600101906020018083116107b757829003601f168201915b5050505050905090565b60006107e982611628565b610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f90612df6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086e82610e96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690612e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fe611694565b73ffffffffffffffffffffffffffffffffffffffff16148061092d575061092c81610927611694565b611432565b5b61096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390612f1a565b60405180910390fd5b610976838361169c565b505050565b6101f481610987610cb0565b6109919190612f69565b11156109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990613031565b60405180910390fd5b6000801b600a541415610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a11906130c3565b60405180910390fd5b600860009054906101000a900460ff16610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a609061312f565b60405180910390fd5b610adf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a543385604051602001610ac49291906131b8565b60405160208183030381529060405280519060200120611755565b610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590613230565b60405180910390fd5b600081118015610b2e5750818111155b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b649061329c565b60405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bb89190612f69565b821015610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf19061332e565b60405180910390fd5b6000610c04610cb0565b90508160096000828254610c189190612f69565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c6e9190612f69565b9250508190555060005b82811015610ca857610c9582610c8d9061334e565b92508261176c565b8080610ca09061334e565b915050610c78565b505050505050565b6000600954905090565b600b6020528060005260406000206000915090505481565b610ce3610cdd611694565b826117b0565b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613409565b60405180910390fd5b610d2d83838361188e565b505050565b600a5481565b610d40611694565b73ffffffffffffffffffffffffffffffffffffffff16610d5e611114565b73ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613475565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b610dfb838383604051806020016040528060008152506111f9565b505050565b610e08611694565b73ffffffffffffffffffffffffffffffffffffffff16610e26611114565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613475565b60405180910390fd5b8060079080519060200190610e92929190612406565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690613507565b60405180910390fd5b80915050919050565b6101f481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613599565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61100e611694565b73ffffffffffffffffffffffffffffffffffffffff1661102c611114565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613475565b60405180910390fd5b61108c6000611aea565b565b611096611694565b73ffffffffffffffffffffffffffffffffffffffff166110b4611114565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190613475565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114d90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461117990612d52565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050905090565b600860009054906101000a900460ff1681565b6111f56111ee611694565b8383611bb0565b5050565b61120a611204611694565b836117b0565b611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090613409565b60405180910390fd5b61125584848484611d1d565b50505050565b611263611694565b73ffffffffffffffffffffffffffffffffffffffff16611281611114565b73ffffffffffffffffffffffffffffffffffffffff16146112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90613475565b60405180910390fd5b6101f4816112e3610cb0565b6112ed9190612f69565b111561132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590613031565b60405180910390fd5b6000611338610cb0565b9050816009600082825461134c9190612f69565b9250508190555060005b82811015611386576113738261136b9061334e565b92508261176c565b808061137e9061334e565b915050611356565b505050565b606061139682611628565b6113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc9061362b565b60405180910390fd5b60006113df611d79565b905060008151116113ff576040518060200160405280600081525061142a565b8061140984611e0b565b60405160200161141a929190613687565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ce611694565b73ffffffffffffffffffffffffffffffffffffffff166114ec611114565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061371d565b60405180910390fd5b6115bb81611aea565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170f83610e96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826117628584611f6c565b1490509392505050565b611776338261201f565b7f176b02bb2d12439ff7a20b59f402cca16c76f50508b13ef3166a600eb719354a816040516117a591906128b2565b60405180910390a150565b60006117bb82611628565b6117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906137af565b60405180910390fd5b600061180583610e96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187457508373ffffffffffffffffffffffffffffffffffffffff1661185c846107de565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188557506118848185611432565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118ae82610e96565b73ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90613841565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906138d3565b60405180910390fd5b61197f83838361203d565b61198a60008261169c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119da91906138f3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a319190612f69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690613973565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d1091906125da565b60405180910390a3505050565b611d2884848461188e565b611d3484848484612042565b611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90613a05565b60405180910390fd5b50505050565b606060078054611d8890612d52565b80601f0160208091040260200160405190810160405280929190818152602001828054611db490612d52565b8015611e015780601f10611dd657610100808354040283529160200191611e01565b820191906000526020600020905b815481529060010190602001808311611de457829003601f168201915b5050505050905090565b60606000821415611e53576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f67565b600082905060005b60008214611e85578080611e6e9061334e565b915050600a82611e7e9190613a54565b9150611e5b565b60008167ffffffffffffffff811115611ea157611ea0612986565b5b6040519080825280601f01601f191660200182016040528015611ed35781602001600182028036833780820191505090505b5090505b60008514611f6057600182611eec91906138f3565b9150600a85611efb9190613a85565b6030611f079190612f69565b60f81b818381518110611f1d57611f1c613ab6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f599190613a54565b9450611ed7565b8093505050505b919050565b60008082905060005b8451811015612014576000858281518110611f9357611f92613ab6565b5b60200260200101519050808311611fd4578281604051602001611fb7929190613b06565b604051602081830303815290604052805190602001209250612000565b8083604051602001611fe7929190613b06565b6040516020818303038152906040528051906020012092505b50808061200c9061334e565b915050611f75565b508091505092915050565b6120398282604051806020016040528060008152506121ca565b5050565b505050565b60006120638473ffffffffffffffffffffffffffffffffffffffff16612225565b156121bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261208c611694565b8786866040518563ffffffff1660e01b81526004016120ae9493929190613b87565b6020604051808303816000875af19250505080156120ea57506040513d601f19601f820116820180604052508101906120e79190613be8565b60015b61216d573d806000811461211a576040519150601f19603f3d011682016040523d82523d6000602084013e61211f565b606091505b50600081511415612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c90613a05565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121c2565b600190505b949350505050565b6121d48383612238565b6121e16000848484612042565b612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613a05565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90613c61565b60405180910390fd5b6122b181611628565b156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890613ccd565b60405180910390fd5b6122fd6000838361203d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234d9190612f69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461241290612d52565b90600052602060002090601f016020900481019282612434576000855561247b565b82601f1061244d57805160ff191683800117855561247b565b8280016001018555821561247b579182015b8281111561247a57825182559160200191906001019061245f565b5b509050612488919061248c565b5090565b5b808211156124a557600081600090555060010161248d565b5090565b600082825260208201905092915050565b7f4574686572206e6f742061636365707465640000000000000000000000000000600082015250565b60006124f06012836124a9565b91506124fb826124ba565b602082019050919050565b6000602082019050818103600083015261251f816124e3565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61256f8161253a565b811461257a57600080fd5b50565b60008135905061258c81612566565b92915050565b6000602082840312156125a8576125a7612530565b5b60006125b68482850161257d565b91505092915050565b60008115159050919050565b6125d4816125bf565b82525050565b60006020820190506125ef60008301846125cb565b92915050565b600081519050919050565b60005b8381101561261e578082015181840152602081019050612603565b8381111561262d576000848401525b50505050565b6000601f19601f8301169050919050565b600061264f826125f5565b61265981856124a9565b9350612669818560208601612600565b61267281612633565b840191505092915050565b600060208201905081810360008301526126978184612644565b905092915050565b6000819050919050565b6126b28161269f565b81146126bd57600080fd5b50565b6000813590506126cf816126a9565b92915050565b6000602082840312156126eb576126ea612530565b5b60006126f9848285016126c0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061272d82612702565b9050919050565b61273d81612722565b82525050565b60006020820190506127586000830184612734565b92915050565b61276781612722565b811461277257600080fd5b50565b6000813590506127848161275e565b92915050565b600080604083850312156127a1576127a0612530565b5b60006127af85828601612775565b92505060206127c0858286016126c0565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126127ef576127ee6127ca565b5b8235905067ffffffffffffffff81111561280c5761280b6127cf565b5b602083019150836020820283011115612828576128276127d4565b5b9250929050565b6000806000806060858703121561284957612848612530565b5b600085013567ffffffffffffffff81111561286757612866612535565b5b612873878288016127d9565b94509450506020612886878288016126c0565b9250506040612897878288016126c0565b91505092959194509250565b6128ac8161269f565b82525050565b60006020820190506128c760008301846128a3565b92915050565b6000602082840312156128e3576128e2612530565b5b60006128f184828501612775565b91505092915050565b60008060006060848603121561291357612912612530565b5b600061292186828701612775565b935050602061293286828701612775565b9250506040612943868287016126c0565b9150509250925092565b6000819050919050565b6129608161294d565b82525050565b600060208201905061297b6000830184612957565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129be82612633565b810181811067ffffffffffffffff821117156129dd576129dc612986565b5b80604052505050565b60006129f0612526565b90506129fc82826129b5565b919050565b600067ffffffffffffffff821115612a1c57612a1b612986565b5b612a2582612633565b9050602081019050919050565b82818337600083830152505050565b6000612a54612a4f84612a01565b6129e6565b905082815260208101848484011115612a7057612a6f612981565b5b612a7b848285612a32565b509392505050565b600082601f830112612a9857612a976127ca565b5b8135612aa8848260208601612a41565b91505092915050565b600060208284031215612ac757612ac6612530565b5b600082013567ffffffffffffffff811115612ae557612ae4612535565b5b612af184828501612a83565b91505092915050565b612b038161294d565b8114612b0e57600080fd5b50565b600081359050612b2081612afa565b92915050565b600060208284031215612b3c57612b3b612530565b5b6000612b4a84828501612b11565b91505092915050565b612b5c816125bf565b8114612b6757600080fd5b50565b600081359050612b7981612b53565b92915050565b60008060408385031215612b9657612b95612530565b5b6000612ba485828601612775565b9250506020612bb585828601612b6a565b9150509250929050565b600067ffffffffffffffff821115612bda57612bd9612986565b5b612be382612633565b9050602081019050919050565b6000612c03612bfe84612bbf565b6129e6565b905082815260208101848484011115612c1f57612c1e612981565b5b612c2a848285612a32565b509392505050565b600082601f830112612c4757612c466127ca565b5b8135612c57848260208601612bf0565b91505092915050565b60008060008060808587031215612c7a57612c79612530565b5b6000612c8887828801612775565b9450506020612c9987828801612775565b9350506040612caa878288016126c0565b925050606085013567ffffffffffffffff811115612ccb57612cca612535565b5b612cd787828801612c32565b91505092959194509250565b60008060408385031215612cfa57612cf9612530565b5b6000612d0885828601612775565b9250506020612d1985828601612775565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d6a57607f821691505b60208210811415612d7e57612d7d612d23565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612de0602c836124a9565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e726021836124a9565b9150612e7d82612e16565b604082019050919050565b60006020820190508181036000830152612ea181612e65565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612f046038836124a9565b9150612f0f82612ea8565b604082019050919050565b60006020820190508181036000830152612f3381612ef7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f748261269f565b9150612f7f8361269f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fb457612fb3612f3a565b5b828201905092915050565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f737570706c790000000000000000000000000000000000000000000000000000602082015250565b600061301b6026836124a9565b915061302682612fbf565b604082019050919050565b6000602082019050818103600083015261304a8161300e565b9050919050565b7f4e6f206164647265737320697320656c696769626c6520666f72206d696e746960008201527f6e67207965740000000000000000000000000000000000000000000000000000602082015250565b60006130ad6026836124a9565b91506130b882613051565b604082019050919050565b600060208201905081810360008301526130dc816130a0565b9050919050565b7f5373616c65206973206e6f74206c697665207965740000000000000000000000600082015250565b60006131196015836124a9565b9150613124826130e3565b602082019050919050565b600060208201905081810360008301526131488161310c565b9050919050565b60008160601b9050919050565b60006131678261314f565b9050919050565b60006131798261315c565b9050919050565b61319161318c82612722565b61316e565b82525050565b6000819050919050565b6131b26131ad8261269f565b613197565b82525050565b60006131c48285613180565b6014820191506131d482846131a1565b6020820191508190509392505050565b7f41646472657373206973206e6f7420656c696769626c6520666f72206d696e74600082015250565b600061321a6020836124a9565b9150613225826131e4565b602082019050919050565b600060208201905081810360008301526132498161320d565b9050919050565b7f496e76616c6964206d696e7420636f756e740000000000000000000000000000600082015250565b60006132866012836124a9565b915061329182613250565b602082019050919050565b600060208201905081810360008301526132b581613279565b9050919050565b7f5472616e73616374696f6e2077696c6c20657863656564206d6178696d756d2060008201527f4e46547320616c6c6f77656420746f206d696e74000000000000000000000000602082015250565b60006133186034836124a9565b9150613323826132bc565b604082019050919050565b600060208201905081810360008301526133478161330b565b9050919050565b60006133598261269f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561338c5761338b612f3a565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006133f36031836124a9565b91506133fe82613397565b604082019050919050565b60006020820190508181036000830152613422816133e6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061345f6020836124a9565b915061346a82613429565b602082019050919050565b6000602082019050818103600083015261348e81613452565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134f16029836124a9565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613583602a836124a9565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613615602f836124a9565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b600081905092915050565b6000613661826125f5565b61366b818561364b565b935061367b818560208601612600565b80840191505092915050565b60006136938285613656565b915061369f8284613656565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137076026836124a9565b9150613712826136ab565b604082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613799602c836124a9565b91506137a48261373d565b604082019050919050565b600060208201905081810360008301526137c88161378c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061382b6029836124a9565b9150613836826137cf565b604082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138bd6024836124a9565b91506138c882613861565b604082019050919050565b600060208201905081810360008301526138ec816138b0565b9050919050565b60006138fe8261269f565b91506139098361269f565b92508282101561391c5761391b612f3a565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061395d6019836124a9565b915061396882613927565b602082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139ef6032836124a9565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5f8261269f565b9150613a6a8361269f565b925082613a7a57613a79613a25565b5b828204905092915050565b6000613a908261269f565b9150613a9b8361269f565b925082613aab57613aaa613a25565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b613b00613afb8261294d565b613ae5565b82525050565b6000613b128285613aef565b602082019150613b228284613aef565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613b5982613b32565b613b638185613b3d565b9350613b73818560208601612600565b613b7c81612633565b840191505092915050565b6000608082019050613b9c6000830187612734565b613ba96020830186612734565b613bb660408301856128a3565b8181036060830152613bc88184613b4e565b905095945050505050565b600081519050613be281612566565b92915050565b600060208284031215613bfe57613bfd612530565b5b6000613c0c84828501613bd3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613c4b6020836124a9565b9150613c5682613c15565b602082019050919050565b60006020820190508181036000830152613c7a81613c3e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613cb7601c836124a9565b9150613cc282613c81565b602082019050919050565b60006020820190508181036000830152613ce681613caa565b905091905056fea2646970667358221220859eabbd1aed9636652f369bb71de0d13dcd561ba3c6aa97584263bbdbef394c64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42993:3667:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43605:28;;;;;;;;;;:::i;:::-;;;;;;;;42993:3667;;;;29537:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30706:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32399:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31922:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44887:1103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44387:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43352:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33318:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43267:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43742:83;;;;;;;;;;;;;:::i;:::-;;33765:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44217:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30313:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43221:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29956:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9849:103;;;;;;;;;;;;;:::i;:::-;;43961:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9198:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43115:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32779:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34021:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46173:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31050:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33037:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10107:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29537:355;29684:4;29741:25;29726:40;;;:11;:40;;;;:105;;;;29798:33;29783:48;;;:11;:48;;;;29726:105;:158;;;;29848:36;29872:11;29848:23;:36::i;:::-;29726:158;29706:178;;29537:355;;;:::o;30706:100::-;30760:13;30793:5;30786:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30706:100;:::o;32399:308::-;32520:7;32567:16;32575:7;32567;:16::i;:::-;32545:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32675:15;:24;32691:7;32675:24;;;;;;;;;;;;;;;;;;;;;32668:31;;32399:308;;;:::o;31922:411::-;32003:13;32019:23;32034:7;32019:14;:23::i;:::-;32003:39;;32067:5;32061:11;;:2;:11;;;;32053:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32161:5;32145:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32170:37;32187:5;32194:12;:10;:12::i;:::-;32170:16;:37::i;:::-;32145:62;32123:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32304:21;32313:2;32317:7;32304:8;:21::i;:::-;31992:341;31922:411;;:::o;44887:1103::-;43255:3;45059:6;45043:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;45021:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;45175:1;45161:15;;:10;;:15;;45153:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45238:8;;;;;;;;;;;45230:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45305:160;45342:6;;45305:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45367:10;;45423;45435:13;45406:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45396:54;;;;;;45305:18;:160::i;:::-;45283:242;;;;;;;;;;;;:::i;:::-;;;;;;;;;45555:1;45546:6;:10;:37;;;;;45570:13;45560:6;:23;;45546:37;45538:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45687:6;45656:16;:28;45673:10;45656:28;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;45639:13;:54;;45617:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;45786:14;45803:13;:11;:13::i;:::-;45786:30;;45840:6;45827:9;;:19;;;;;;;:::i;:::-;;;;;;;;45889:6;45857:16;:28;45874:10;45857:28;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;45913:9;45908:75;45928:6;45924:1;:10;45908:75;;;45956:15;45962:8;;;;:::i;:::-;;;;45956:5;:15::i;:::-;45936:3;;;;;:::i;:::-;;;;45908:75;;;;45010:980;44887:1103;;;;:::o;44387:88::-;44431:7;44458:9;;44451:16;;44387:88;:::o;43352:51::-;;;;;;;;;;;;;;;;;:::o;33318:376::-;33527:41;33546:12;:10;:12::i;:::-;33560:7;33527:18;:41::i;:::-;33505:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33658:28;33668:4;33674:2;33678:7;33658:9;:28::i;:::-;33318:376;;;:::o;43267:25::-;;;;:::o;43742:83::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43809:8:::1;;;;;;;;;;;43808:9;43797:8;;:20;;;;;;;;;;;;;;;;;;43742:83::o:0;33765:185::-;33903:39;33920:4;33926:2;33930:7;33903:39;;;;;;;;;;;;:16;:39::i;:::-;33765:185;;;:::o;44217:101::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44303:7:::1;44288:12;:22;;;;;;;;;;;;:::i;:::-;;44217:101:::0;:::o;30313:326::-;30430:7;30455:13;30471:7;:16;30479:7;30471:16;;;;;;;;;;;;;;;;;;;;;30455:32;;30537:1;30520:19;;:5;:19;;;;30498:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30626:5;30619:12;;;30313:326;;;:::o;43221:37::-;43255:3;43221:37;:::o;29956:295::-;30073:7;30137:1;30120:19;;:5;:19;;;;30098:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30227:9;:16;30237:5;30227:16;;;;;;;;;;;;;;;;30220:23;;29956:295;;;:::o;9849:103::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9914:30:::1;9941:1;9914:18;:30::i;:::-;9849:103::o:0;43961:106::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44048:11:::1;44035:10;:24;;;;43961:106:::0;:::o;9198:87::-;9244:7;9271:6;;;;;;;;;;;9264:13;;9198:87;:::o;30875:104::-;30931:13;30964:7;30957:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30875:104;:::o;43115:20::-;;;;;;;;;;;;;:::o;32779:187::-;32906:52;32925:12;:10;:12::i;:::-;32939:8;32949;32906:18;:52::i;:::-;32779:187;;:::o;34021:365::-;34210:41;34229:12;:10;:12::i;:::-;34243:7;34210:18;:41::i;:::-;34188:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34339:39;34353:4;34359:2;34363:7;34372:5;34339:13;:39::i;:::-;34021:365;;;;:::o;46173:356::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43255:3:::1;46278:6;46262:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:33;;46240:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;46374:14;46391:13;:11;:13::i;:::-;46374:30;;46428:6;46415:9;;:19;;;;;;;:::i;:::-;;;;;;;;46452:9;46447:75;46467:6;46463:1;:10;46447:75;;;46495:15;46501:8;;;;:::i;:::-;;;;46495:5;:15::i;:::-;46475:3;;;;;:::i;:::-;;;;46447:75;;;;46229:300;46173:356:::0;:::o;31050:468::-;31168:13;31221:16;31229:7;31221;:16::i;:::-;31199:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31325:21;31349:10;:8;:10::i;:::-;31325:34;;31414:1;31396:7;31390:21;:25;:120;;;;;;;;;;;;;;;;;31459:7;31468:18;:7;:16;:18::i;:::-;31442:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31390:120;31370:140;;;31050:468;;;:::o;33037:214::-;33179:4;33208:18;:25;33227:5;33208:25;;;;;;;;;;;;;;;:35;33234:8;33208:35;;;;;;;;;;;;;;;;;;;;;;;;;33201:42;;33037:214;;;;:::o;10107:238::-;9429:12;:10;:12::i;:::-;9418:23;;:7;:5;:7::i;:::-;:23;;;9410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10230:1:::1;10210:22;;:8;:22;;;;10188:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10309:28;10328:8;10309:18;:28::i;:::-;10107:238:::0;:::o;22124:207::-;22254:4;22298:25;22283:40;;;:11;:40;;;;22276:47;;22124:207;;;:::o;35933:127::-;35998:4;36050:1;36022:30;;:7;:16;36030:7;36022:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36015:37;;35933:127;;;:::o;7901:98::-;7954:7;7981:10;7974:17;;7901:98;:::o;40056:174::-;40158:2;40131:15;:24;40147:7;40131:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40214:7;40210:2;40176:46;;40185:23;40200:7;40185:14;:23::i;:::-;40176:46;;;;;;;;;;;;40056:174;;:::o;3698:190::-;3823:4;3876;3847:25;3860:5;3867:4;3847:12;:25::i;:::-;:33;3840:40;;3698:190;;;;;:::o;46537:120::-;46588:30;46598:10;46610:7;46588:9;:30::i;:::-;46634:15;46641:7;46634:15;;;;;;:::i;:::-;;;;;;;;46537:120;:::o;36227:452::-;36356:4;36400:16;36408:7;36400;:16::i;:::-;36378:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36499:13;36515:23;36530:7;36515:14;:23::i;:::-;36499:39;;36568:5;36557:16;;:7;:16;;;:64;;;;36614:7;36590:31;;:20;36602:7;36590:11;:20::i;:::-;:31;;;36557:64;:113;;;;36638:32;36655:5;36662:7;36638:16;:32::i;:::-;36557:113;36549:122;;;36227:452;;;;:::o;39323:615::-;39496:4;39469:31;;:23;39484:7;39469:14;:23::i;:::-;:31;;;39447:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;39602:1;39588:16;;:2;:16;;;;39580:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39658:39;39679:4;39685:2;39689:7;39658:20;:39::i;:::-;39762:29;39779:1;39783:7;39762:8;:29::i;:::-;39823:1;39804:9;:15;39814:4;39804:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39852:1;39835:9;:13;39845:2;39835:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39883:2;39864:7;:16;39872:7;39864:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39922:7;39918:2;39903:27;;39912:4;39903:27;;;;;;;;;;;;39323:615;;;:::o;10505:191::-;10579:16;10598:6;;;;;;;;;;;10579:25;;10624:8;10615:6;;:17;;;;;;;;;;;;;;;;;;10679:8;10648:40;;10669:8;10648:40;;;;;;;;;;;;10568:128;10505:191;:::o;40372:315::-;40527:8;40518:17;;:5;:17;;;;40510:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40614:8;40576:18;:25;40595:5;40576:25;;;;;;;;;;;;;;;:35;40602:8;40576:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40660:8;40638:41;;40653:5;40638:41;;;40670:8;40638:41;;;;;;:::i;:::-;;;;;;;;40372:315;;;:::o;35268:352::-;35425:28;35435:4;35441:2;35445:7;35425:9;:28::i;:::-;35486:48;35509:4;35515:2;35519:7;35528:5;35486:22;:48::i;:::-;35464:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;35268:352;;;;:::o;44483:113::-;44543:13;44576:12;44569:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44483:113;:::o;5433:723::-;5489:13;5719:1;5710:5;:10;5706:53;;;5737:10;;;;;;;;;;;;;;;;;;;;;5706:53;5769:12;5784:5;5769:20;;5800:14;5825:78;5840:1;5832:4;:9;5825:78;;5858:8;;;;;:::i;:::-;;;;5889:2;5881:10;;;;;:::i;:::-;;;5825:78;;;5913:19;5945:6;5935:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5913:39;;5963:154;5979:1;5970:5;:10;5963:154;;6007:1;5997:11;;;;;:::i;:::-;;;6074:2;6066:5;:10;;;;:::i;:::-;6053:2;:24;;;;:::i;:::-;6040:39;;6023:6;6030;6023:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6103:2;6094:11;;;;;:::i;:::-;;;5963:154;;;6141:6;6127:21;;;;;5433:723;;;;:::o;4250:813::-;4360:7;4385:20;4408:4;4385:27;;4428:9;4423:603;4447:5;:12;4443:1;:16;4423:603;;;4481:20;4504:5;4510:1;4504:8;;;;;;;;:::i;:::-;;;;;;;;4481:31;;4547:12;4531;:28;4527:488;;4723:12;4737;4706:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4674:95;;;;;;4659:110;;4527:488;;;4953:12;4967;4936:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4904:95;;;;;;4889:110;;4527:488;4466:560;4461:3;;;;;:::i;:::-;;;;4423:603;;;;5043:12;5036:19;;;4250:813;;;;:::o;37021:110::-;37097:26;37107:2;37111:7;37097:26;;;;;;;;;;;;:9;:26::i;:::-;37021:110;;:::o;42804:126::-;;;;:::o;41252:980::-;41407:4;41428:15;:2;:13;;;:15::i;:::-;41424:801;;;41497:2;41481:36;;;41540:12;:10;:12::i;:::-;41575:4;41602:7;41632:5;41481:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41460:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41856:1;41839:6;:13;:18;41835:320;;;41882:108;;;;;;;;;;:::i;:::-;;;;;;;;41835:320;42105:6;42099:13;42090:6;42086:2;42082:15;42075:38;41460:710;41730:41;;;41720:51;;;:6;:51;;;;41713:58;;;;;41424:801;42209:4;42202:11;;41252:980;;;;;;;:::o;37358:321::-;37488:18;37494:2;37498:7;37488:5;:18::i;:::-;37539:54;37570:1;37574:2;37578:7;37587:5;37539:22;:54::i;:::-;37517:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37358:321;;;:::o;11521:387::-;11581:4;11789:12;11856:7;11844:20;11836:28;;11899:1;11892:4;:8;11885:15;;;11521:387;;;:::o;38015:382::-;38109:1;38095:16;;:2;:16;;;;38087:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38168:16;38176:7;38168;:16::i;:::-;38167:17;38159:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38230:45;38259:1;38263:2;38267:7;38230:20;:45::i;:::-;38305:1;38288:9;:13;38298:2;38288:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38336:2;38317:7;:16;38325:7;38317:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38381:7;38377:2;38356:33;;38373:1;38356:33;;;;;;;;;;;;38015:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:168::-;322:20;318:1;310:6;306:14;299:44;182:168;:::o;356:366::-;498:3;519:67;583:2;578:3;519:67;:::i;:::-;512:74;;595:93;684:3;595:93;:::i;:::-;713:2;708:3;704:12;697:19;;356:366;;;:::o;728:419::-;894:4;932:2;921:9;917:18;909:26;;981:9;975:4;971:20;967:1;956:9;952:17;945:47;1009:131;1135:4;1009:131;:::i;:::-;1001:139;;728:419;;;:::o;1153:75::-;1186:6;1219:2;1213:9;1203:19;;1153:75;:::o;1234:117::-;1343:1;1340;1333:12;1357:117;1466:1;1463;1456:12;1480:149;1516:7;1556:66;1549:5;1545:78;1534:89;;1480:149;;;:::o;1635:120::-;1707:23;1724:5;1707:23;:::i;:::-;1700:5;1697:34;1687:62;;1745:1;1742;1735:12;1687:62;1635:120;:::o;1761:137::-;1806:5;1844:6;1831:20;1822:29;;1860:32;1886:5;1860:32;:::i;:::-;1761:137;;;;:::o;1904:327::-;1962:6;2011:2;1999:9;1990:7;1986:23;1982:32;1979:119;;;2017:79;;:::i;:::-;1979:119;2137:1;2162:52;2206:7;2197:6;2186:9;2182:22;2162:52;:::i;:::-;2152:62;;2108:116;1904:327;;;;:::o;2237:90::-;2271:7;2314:5;2307:13;2300:21;2289:32;;2237:90;;;:::o;2333:109::-;2414:21;2429:5;2414:21;:::i;:::-;2409:3;2402:34;2333:109;;:::o;2448:210::-;2535:4;2573:2;2562:9;2558:18;2550:26;;2586:65;2648:1;2637:9;2633:17;2624:6;2586:65;:::i;:::-;2448:210;;;;:::o;2664:99::-;2716:6;2750:5;2744:12;2734:22;;2664:99;;;:::o;2769:307::-;2837:1;2847:113;2861:6;2858:1;2855:13;2847:113;;;2946:1;2941:3;2937:11;2931:18;2927:1;2922:3;2918:11;2911:39;2883:2;2880:1;2876:10;2871:15;;2847:113;;;2978:6;2975:1;2972:13;2969:101;;;3058:1;3049:6;3044:3;3040:16;3033:27;2969:101;2818:258;2769:307;;;:::o;3082:102::-;3123:6;3174:2;3170:7;3165:2;3158:5;3154:14;3150:28;3140:38;;3082:102;;;:::o;3190:364::-;3278:3;3306:39;3339:5;3306:39;:::i;:::-;3361:71;3425:6;3420:3;3361:71;:::i;:::-;3354:78;;3441:52;3486:6;3481:3;3474:4;3467:5;3463:16;3441:52;:::i;:::-;3518:29;3540:6;3518:29;:::i;:::-;3513:3;3509:39;3502:46;;3282:272;3190:364;;;;:::o;3560:313::-;3673:4;3711:2;3700:9;3696:18;3688:26;;3760:9;3754:4;3750:20;3746:1;3735:9;3731:17;3724:47;3788:78;3861:4;3852:6;3788:78;:::i;:::-;3780:86;;3560:313;;;;:::o;3879:77::-;3916:7;3945:5;3934:16;;3879:77;;;:::o;3962:122::-;4035:24;4053:5;4035:24;:::i;:::-;4028:5;4025:35;4015:63;;4074:1;4071;4064:12;4015:63;3962:122;:::o;4090:139::-;4136:5;4174:6;4161:20;4152:29;;4190:33;4217:5;4190:33;:::i;:::-;4090:139;;;;:::o;4235:329::-;4294:6;4343:2;4331:9;4322:7;4318:23;4314:32;4311:119;;;4349:79;;:::i;:::-;4311:119;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4235:329;;;;:::o;4570:126::-;4607:7;4647:42;4640:5;4636:54;4625:65;;4570:126;;;:::o;4702:96::-;4739:7;4768:24;4786:5;4768:24;:::i;:::-;4757:35;;4702:96;;;:::o;4804:118::-;4891:24;4909:5;4891:24;:::i;:::-;4886:3;4879:37;4804:118;;:::o;4928:222::-;5021:4;5059:2;5048:9;5044:18;5036:26;;5072:71;5140:1;5129:9;5125:17;5116:6;5072:71;:::i;:::-;4928:222;;;;:::o;5156:122::-;5229:24;5247:5;5229:24;:::i;:::-;5222:5;5219:35;5209:63;;5268:1;5265;5258:12;5209:63;5156:122;:::o;5284:139::-;5330:5;5368:6;5355:20;5346:29;;5384:33;5411:5;5384:33;:::i;:::-;5284:139;;;;:::o;5429:474::-;5497:6;5505;5554:2;5542:9;5533:7;5529:23;5525:32;5522:119;;;5560:79;;:::i;:::-;5522:119;5680:1;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5651:117;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5429:474;;;;;:::o;5909:117::-;6018:1;6015;6008:12;6032:117;6141:1;6138;6131:12;6155:117;6264:1;6261;6254:12;6295:568;6368:8;6378:6;6428:3;6421:4;6413:6;6409:17;6405:27;6395:122;;6436:79;;:::i;:::-;6395:122;6549:6;6536:20;6526:30;;6579:18;6571:6;6568:30;6565:117;;;6601:79;;:::i;:::-;6565:117;6715:4;6707:6;6703:17;6691:29;;6769:3;6761:4;6753:6;6749:17;6739:8;6735:32;6732:41;6729:128;;;6776:79;;:::i;:::-;6729:128;6295:568;;;;;:::o;6869:849::-;6973:6;6981;6989;6997;7046:2;7034:9;7025:7;7021:23;7017:32;7014:119;;;7052:79;;:::i;:::-;7014:119;7200:1;7189:9;7185:17;7172:31;7230:18;7222:6;7219:30;7216:117;;;7252:79;;:::i;:::-;7216:117;7365:80;7437:7;7428:6;7417:9;7413:22;7365:80;:::i;:::-;7347:98;;;;7143:312;7494:2;7520:53;7565:7;7556:6;7545:9;7541:22;7520:53;:::i;:::-;7510:63;;7465:118;7622:2;7648:53;7693:7;7684:6;7673:9;7669:22;7648:53;:::i;:::-;7638:63;;7593:118;6869:849;;;;;;;:::o;7724:118::-;7811:24;7829:5;7811:24;:::i;:::-;7806:3;7799:37;7724:118;;:::o;7848:222::-;7941:4;7979:2;7968:9;7964:18;7956:26;;7992:71;8060:1;8049:9;8045:17;8036:6;7992:71;:::i;:::-;7848:222;;;;:::o;8076:329::-;8135:6;8184:2;8172:9;8163:7;8159:23;8155:32;8152:119;;;8190:79;;:::i;:::-;8152:119;8310:1;8335:53;8380:7;8371:6;8360:9;8356:22;8335:53;:::i;:::-;8325:63;;8281:117;8076:329;;;;:::o;8411:619::-;8488:6;8496;8504;8553:2;8541:9;8532:7;8528:23;8524:32;8521:119;;;8559:79;;:::i;:::-;8521:119;8679:1;8704:53;8749:7;8740:6;8729:9;8725:22;8704:53;:::i;:::-;8694:63;;8650:117;8806:2;8832:53;8877:7;8868:6;8857:9;8853:22;8832:53;:::i;:::-;8822:63;;8777:118;8934:2;8960:53;9005:7;8996:6;8985:9;8981:22;8960:53;:::i;:::-;8950:63;;8905:118;8411:619;;;;;:::o;9036:77::-;9073:7;9102:5;9091:16;;9036:77;;;:::o;9119:118::-;9206:24;9224:5;9206:24;:::i;:::-;9201:3;9194:37;9119:118;;:::o;9243:222::-;9336:4;9374:2;9363:9;9359:18;9351:26;;9387:71;9455:1;9444:9;9440:17;9431:6;9387:71;:::i;:::-;9243:222;;;;:::o;9471:117::-;9580:1;9577;9570:12;9594:180;9642:77;9639:1;9632:88;9739:4;9736:1;9729:15;9763:4;9760:1;9753:15;9780:281;9863:27;9885:4;9863:27;:::i;:::-;9855:6;9851:40;9993:6;9981:10;9978:22;9957:18;9945:10;9942:34;9939:62;9936:88;;;10004:18;;:::i;:::-;9936:88;10044:10;10040:2;10033:22;9823:238;9780:281;;:::o;10067:129::-;10101:6;10128:20;;:::i;:::-;10118:30;;10157:33;10185:4;10177:6;10157:33;:::i;:::-;10067:129;;;:::o;10202:308::-;10264:4;10354:18;10346:6;10343:30;10340:56;;;10376:18;;:::i;:::-;10340:56;10414:29;10436:6;10414:29;:::i;:::-;10406:37;;10498:4;10492;10488:15;10480:23;;10202:308;;;:::o;10516:154::-;10600:6;10595:3;10590;10577:30;10662:1;10653:6;10648:3;10644:16;10637:27;10516:154;;;:::o;10676:412::-;10754:5;10779:66;10795:49;10837:6;10795:49;:::i;:::-;10779:66;:::i;:::-;10770:75;;10868:6;10861:5;10854:21;10906:4;10899:5;10895:16;10944:3;10935:6;10930:3;10926:16;10923:25;10920:112;;;10951:79;;:::i;:::-;10920:112;11041:41;11075:6;11070:3;11065;11041:41;:::i;:::-;10760:328;10676:412;;;;;:::o;11108:340::-;11164:5;11213:3;11206:4;11198:6;11194:17;11190:27;11180:122;;11221:79;;:::i;:::-;11180:122;11338:6;11325:20;11363:79;11438:3;11430:6;11423:4;11415:6;11411:17;11363:79;:::i;:::-;11354:88;;11170:278;11108:340;;;;:::o;11454:509::-;11523:6;11572:2;11560:9;11551:7;11547:23;11543:32;11540:119;;;11578:79;;:::i;:::-;11540:119;11726:1;11715:9;11711:17;11698:31;11756:18;11748:6;11745:30;11742:117;;;11778:79;;:::i;:::-;11742:117;11883:63;11938:7;11929:6;11918:9;11914:22;11883:63;:::i;:::-;11873:73;;11669:287;11454:509;;;;:::o;11969:122::-;12042:24;12060:5;12042:24;:::i;:::-;12035:5;12032:35;12022:63;;12081:1;12078;12071:12;12022:63;11969:122;:::o;12097:139::-;12143:5;12181:6;12168:20;12159:29;;12197:33;12224:5;12197:33;:::i;:::-;12097:139;;;;:::o;12242:329::-;12301:6;12350:2;12338:9;12329:7;12325:23;12321:32;12318:119;;;12356:79;;:::i;:::-;12318:119;12476:1;12501:53;12546:7;12537:6;12526:9;12522:22;12501:53;:::i;:::-;12491:63;;12447:117;12242:329;;;;:::o;12577:116::-;12647:21;12662:5;12647:21;:::i;:::-;12640:5;12637:32;12627:60;;12683:1;12680;12673:12;12627:60;12577:116;:::o;12699:133::-;12742:5;12780:6;12767:20;12758:29;;12796:30;12820:5;12796:30;:::i;:::-;12699:133;;;;:::o;12838:468::-;12903:6;12911;12960:2;12948:9;12939:7;12935:23;12931:32;12928:119;;;12966:79;;:::i;:::-;12928:119;13086:1;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13057:117;13213:2;13239:50;13281:7;13272:6;13261:9;13257:22;13239:50;:::i;:::-;13229:60;;13184:115;12838:468;;;;;:::o;13312:307::-;13373:4;13463:18;13455:6;13452:30;13449:56;;;13485:18;;:::i;:::-;13449:56;13523:29;13545:6;13523:29;:::i;:::-;13515:37;;13607:4;13601;13597:15;13589:23;;13312:307;;;:::o;13625:410::-;13702:5;13727:65;13743:48;13784:6;13743:48;:::i;:::-;13727:65;:::i;:::-;13718:74;;13815:6;13808:5;13801:21;13853:4;13846:5;13842:16;13891:3;13882:6;13877:3;13873:16;13870:25;13867:112;;;13898:79;;:::i;:::-;13867:112;13988:41;14022:6;14017:3;14012;13988:41;:::i;:::-;13708:327;13625:410;;;;;:::o;14054:338::-;14109:5;14158:3;14151:4;14143:6;14139:17;14135:27;14125:122;;14166:79;;:::i;:::-;14125:122;14283:6;14270:20;14308:78;14382:3;14374:6;14367:4;14359:6;14355:17;14308:78;:::i;:::-;14299:87;;14115:277;14054:338;;;;:::o;14398:943::-;14493:6;14501;14509;14517;14566:3;14554:9;14545:7;14541:23;14537:33;14534:120;;;14573:79;;:::i;:::-;14534:120;14693:1;14718:53;14763:7;14754:6;14743:9;14739:22;14718:53;:::i;:::-;14708:63;;14664:117;14820:2;14846:53;14891:7;14882:6;14871:9;14867:22;14846:53;:::i;:::-;14836:63;;14791:118;14948:2;14974:53;15019:7;15010:6;14999:9;14995:22;14974:53;:::i;:::-;14964:63;;14919:118;15104:2;15093:9;15089:18;15076:32;15135:18;15127:6;15124:30;15121:117;;;15157:79;;:::i;:::-;15121:117;15262:62;15316:7;15307:6;15296:9;15292:22;15262:62;:::i;:::-;15252:72;;15047:287;14398:943;;;;;;;:::o;15347:474::-;15415:6;15423;15472:2;15460:9;15451:7;15447:23;15443:32;15440:119;;;15478:79;;:::i;:::-;15440:119;15598:1;15623:53;15668:7;15659:6;15648:9;15644:22;15623:53;:::i;:::-;15613:63;;15569:117;15725:2;15751:53;15796:7;15787:6;15776:9;15772:22;15751:53;:::i;:::-;15741:63;;15696:118;15347:474;;;;;:::o;15827:180::-;15875:77;15872:1;15865:88;15972:4;15969:1;15962:15;15996:4;15993:1;15986:15;16013:320;16057:6;16094:1;16088:4;16084:12;16074:22;;16141:1;16135:4;16131:12;16162:18;16152:81;;16218:4;16210:6;16206:17;16196:27;;16152:81;16280:2;16272:6;16269:14;16249:18;16246:38;16243:84;;;16299:18;;:::i;:::-;16243:84;16064:269;16013:320;;;:::o;16339:231::-;16479:34;16475:1;16467:6;16463:14;16456:58;16548:14;16543:2;16535:6;16531:15;16524:39;16339:231;:::o;16576:366::-;16718:3;16739:67;16803:2;16798:3;16739:67;:::i;:::-;16732:74;;16815:93;16904:3;16815:93;:::i;:::-;16933:2;16928:3;16924:12;16917:19;;16576:366;;;:::o;16948:419::-;17114:4;17152:2;17141:9;17137:18;17129:26;;17201:9;17195:4;17191:20;17187:1;17176:9;17172:17;17165:47;17229:131;17355:4;17229:131;:::i;:::-;17221:139;;16948:419;;;:::o;17373:220::-;17513:34;17509:1;17501:6;17497:14;17490:58;17582:3;17577:2;17569:6;17565:15;17558:28;17373:220;:::o;17599:366::-;17741:3;17762:67;17826:2;17821:3;17762:67;:::i;:::-;17755:74;;17838:93;17927:3;17838:93;:::i;:::-;17956:2;17951:3;17947:12;17940:19;;17599:366;;;:::o;17971:419::-;18137:4;18175:2;18164:9;18160:18;18152:26;;18224:9;18218:4;18214:20;18210:1;18199:9;18195:17;18188:47;18252:131;18378:4;18252:131;:::i;:::-;18244:139;;17971:419;;;:::o;18396:243::-;18536:34;18532:1;18524:6;18520:14;18513:58;18605:26;18600:2;18592:6;18588:15;18581:51;18396:243;:::o;18645:366::-;18787:3;18808:67;18872:2;18867:3;18808:67;:::i;:::-;18801:74;;18884:93;18973:3;18884:93;:::i;:::-;19002:2;18997:3;18993:12;18986:19;;18645:366;;;:::o;19017:419::-;19183:4;19221:2;19210:9;19206:18;19198:26;;19270:9;19264:4;19260:20;19256:1;19245:9;19241:17;19234:47;19298:131;19424:4;19298:131;:::i;:::-;19290:139;;19017:419;;;:::o;19442:180::-;19490:77;19487:1;19480:88;19587:4;19584:1;19577:15;19611:4;19608:1;19601:15;19628:305;19668:3;19687:20;19705:1;19687:20;:::i;:::-;19682:25;;19721:20;19739:1;19721:20;:::i;:::-;19716:25;;19875:1;19807:66;19803:74;19800:1;19797:81;19794:107;;;19881:18;;:::i;:::-;19794:107;19925:1;19922;19918:9;19911:16;;19628:305;;;;:::o;19939:225::-;20079:34;20075:1;20067:6;20063:14;20056:58;20148:8;20143:2;20135:6;20131:15;20124:33;19939:225;:::o;20170:366::-;20312:3;20333:67;20397:2;20392:3;20333:67;:::i;:::-;20326:74;;20409:93;20498:3;20409:93;:::i;:::-;20527:2;20522:3;20518:12;20511:19;;20170:366;;;:::o;20542:419::-;20708:4;20746:2;20735:9;20731:18;20723:26;;20795:9;20789:4;20785:20;20781:1;20770:9;20766:17;20759:47;20823:131;20949:4;20823:131;:::i;:::-;20815:139;;20542:419;;;:::o;20967:225::-;21107:34;21103:1;21095:6;21091:14;21084:58;21176:8;21171:2;21163:6;21159:15;21152:33;20967:225;:::o;21198:366::-;21340:3;21361:67;21425:2;21420:3;21361:67;:::i;:::-;21354:74;;21437:93;21526:3;21437:93;:::i;:::-;21555:2;21550:3;21546:12;21539:19;;21198:366;;;:::o;21570:419::-;21736:4;21774:2;21763:9;21759:18;21751:26;;21823:9;21817:4;21813:20;21809:1;21798:9;21794:17;21787:47;21851:131;21977:4;21851:131;:::i;:::-;21843:139;;21570:419;;;:::o;21995:171::-;22135:23;22131:1;22123:6;22119:14;22112:47;21995:171;:::o;22172:366::-;22314:3;22335:67;22399:2;22394:3;22335:67;:::i;:::-;22328:74;;22411:93;22500:3;22411:93;:::i;:::-;22529:2;22524:3;22520:12;22513:19;;22172:366;;;:::o;22544:419::-;22710:4;22748:2;22737:9;22733:18;22725:26;;22797:9;22791:4;22787:20;22783:1;22772:9;22768:17;22761:47;22825:131;22951:4;22825:131;:::i;:::-;22817:139;;22544:419;;;:::o;22969:94::-;23002:8;23050:5;23046:2;23042:14;23021:35;;22969:94;;;:::o;23069:::-;23108:7;23137:20;23151:5;23137:20;:::i;:::-;23126:31;;23069:94;;;:::o;23169:100::-;23208:7;23237:26;23257:5;23237:26;:::i;:::-;23226:37;;23169:100;;;:::o;23275:157::-;23380:45;23400:24;23418:5;23400:24;:::i;:::-;23380:45;:::i;:::-;23375:3;23368:58;23275:157;;:::o;23438:79::-;23477:7;23506:5;23495:16;;23438:79;;;:::o;23523:157::-;23628:45;23648:24;23666:5;23648:24;:::i;:::-;23628:45;:::i;:::-;23623:3;23616:58;23523:157;;:::o;23686:397::-;23826:3;23841:75;23912:3;23903:6;23841:75;:::i;:::-;23941:2;23936:3;23932:12;23925:19;;23954:75;24025:3;24016:6;23954:75;:::i;:::-;24054:2;24049:3;24045:12;24038:19;;24074:3;24067:10;;23686:397;;;;;:::o;24089:182::-;24229:34;24225:1;24217:6;24213:14;24206:58;24089:182;:::o;24277:366::-;24419:3;24440:67;24504:2;24499:3;24440:67;:::i;:::-;24433:74;;24516:93;24605:3;24516:93;:::i;:::-;24634:2;24629:3;24625:12;24618:19;;24277:366;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24649:419;;;:::o;25074:168::-;25214:20;25210:1;25202:6;25198:14;25191:44;25074:168;:::o;25248:366::-;25390:3;25411:67;25475:2;25470:3;25411:67;:::i;:::-;25404:74;;25487:93;25576:3;25487:93;:::i;:::-;25605:2;25600:3;25596:12;25589:19;;25248:366;;;:::o;25620:419::-;25786:4;25824:2;25813:9;25809:18;25801:26;;25873:9;25867:4;25863:20;25859:1;25848:9;25844:17;25837:47;25901:131;26027:4;25901:131;:::i;:::-;25893:139;;25620:419;;;:::o;26045:239::-;26185:34;26181:1;26173:6;26169:14;26162:58;26254:22;26249:2;26241:6;26237:15;26230:47;26045:239;:::o;26290:366::-;26432:3;26453:67;26517:2;26512:3;26453:67;:::i;:::-;26446:74;;26529:93;26618:3;26529:93;:::i;:::-;26647:2;26642:3;26638:12;26631:19;;26290:366;;;:::o;26662:419::-;26828:4;26866:2;26855:9;26851:18;26843:26;;26915:9;26909:4;26905:20;26901:1;26890:9;26886:17;26879:47;26943:131;27069:4;26943:131;:::i;:::-;26935:139;;26662:419;;;:::o;27087:233::-;27126:3;27149:24;27167:5;27149:24;:::i;:::-;27140:33;;27195:66;27188:5;27185:77;27182:103;;;27265:18;;:::i;:::-;27182:103;27312:1;27305:5;27301:13;27294:20;;27087:233;;;:::o;27326:236::-;27466:34;27462:1;27454:6;27450:14;27443:58;27535:19;27530:2;27522:6;27518:15;27511:44;27326:236;:::o;27568:366::-;27710:3;27731:67;27795:2;27790:3;27731:67;:::i;:::-;27724:74;;27807:93;27896:3;27807:93;:::i;:::-;27925:2;27920:3;27916:12;27909:19;;27568:366;;;:::o;27940:419::-;28106:4;28144:2;28133:9;28129:18;28121:26;;28193:9;28187:4;28183:20;28179:1;28168:9;28164:17;28157:47;28221:131;28347:4;28221:131;:::i;:::-;28213:139;;27940:419;;;:::o;28365:182::-;28505:34;28501:1;28493:6;28489:14;28482:58;28365:182;:::o;28553:366::-;28695:3;28716:67;28780:2;28775:3;28716:67;:::i;:::-;28709:74;;28792:93;28881:3;28792:93;:::i;:::-;28910:2;28905:3;28901:12;28894:19;;28553:366;;;:::o;28925:419::-;29091:4;29129:2;29118:9;29114:18;29106:26;;29178:9;29172:4;29168:20;29164:1;29153:9;29149:17;29142:47;29206:131;29332:4;29206:131;:::i;:::-;29198:139;;28925:419;;;:::o;29350:228::-;29490:34;29486:1;29478:6;29474:14;29467:58;29559:11;29554:2;29546:6;29542:15;29535:36;29350:228;:::o;29584:366::-;29726:3;29747:67;29811:2;29806:3;29747:67;:::i;:::-;29740:74;;29823:93;29912:3;29823:93;:::i;:::-;29941:2;29936:3;29932:12;29925:19;;29584:366;;;:::o;29956:419::-;30122:4;30160:2;30149:9;30145:18;30137:26;;30209:9;30203:4;30199:20;30195:1;30184:9;30180:17;30173:47;30237:131;30363:4;30237:131;:::i;:::-;30229:139;;29956:419;;;:::o;30381:229::-;30521:34;30517:1;30509:6;30505:14;30498:58;30590:12;30585:2;30577:6;30573:15;30566:37;30381:229;:::o;30616:366::-;30758:3;30779:67;30843:2;30838:3;30779:67;:::i;:::-;30772:74;;30855:93;30944:3;30855:93;:::i;:::-;30973:2;30968:3;30964:12;30957:19;;30616:366;;;:::o;30988:419::-;31154:4;31192:2;31181:9;31177:18;31169:26;;31241:9;31235:4;31231:20;31227:1;31216:9;31212:17;31205:47;31269:131;31395:4;31269:131;:::i;:::-;31261:139;;30988:419;;;:::o;31413:234::-;31553:34;31549:1;31541:6;31537:14;31530:58;31622:17;31617:2;31609:6;31605:15;31598:42;31413:234;:::o;31653:366::-;31795:3;31816:67;31880:2;31875:3;31816:67;:::i;:::-;31809:74;;31892:93;31981:3;31892:93;:::i;:::-;32010:2;32005:3;32001:12;31994:19;;31653:366;;;:::o;32025:419::-;32191:4;32229:2;32218:9;32214:18;32206:26;;32278:9;32272:4;32268:20;32264:1;32253:9;32249:17;32242:47;32306:131;32432:4;32306:131;:::i;:::-;32298:139;;32025:419;;;:::o;32450:148::-;32552:11;32589:3;32574:18;;32450:148;;;;:::o;32604:377::-;32710:3;32738:39;32771:5;32738:39;:::i;:::-;32793:89;32875:6;32870:3;32793:89;:::i;:::-;32786:96;;32891:52;32936:6;32931:3;32924:4;32917:5;32913:16;32891:52;:::i;:::-;32968:6;32963:3;32959:16;32952:23;;32714:267;32604:377;;;;:::o;32987:435::-;33167:3;33189:95;33280:3;33271:6;33189:95;:::i;:::-;33182:102;;33301:95;33392:3;33383:6;33301:95;:::i;:::-;33294:102;;33413:3;33406:10;;32987:435;;;;;:::o;33428:225::-;33568:34;33564:1;33556:6;33552:14;33545:58;33637:8;33632:2;33624:6;33620:15;33613:33;33428:225;:::o;33659:366::-;33801:3;33822:67;33886:2;33881:3;33822:67;:::i;:::-;33815:74;;33898:93;33987:3;33898:93;:::i;:::-;34016:2;34011:3;34007:12;34000:19;;33659:366;;;:::o;34031:419::-;34197:4;34235:2;34224:9;34220:18;34212:26;;34284:9;34278:4;34274:20;34270:1;34259:9;34255:17;34248:47;34312:131;34438:4;34312:131;:::i;:::-;34304:139;;34031:419;;;:::o;34456:231::-;34596:34;34592:1;34584:6;34580:14;34573:58;34665:14;34660:2;34652:6;34648:15;34641:39;34456:231;:::o;34693:366::-;34835:3;34856:67;34920:2;34915:3;34856:67;:::i;:::-;34849:74;;34932:93;35021:3;34932:93;:::i;:::-;35050:2;35045:3;35041:12;35034:19;;34693:366;;;:::o;35065:419::-;35231:4;35269:2;35258:9;35254:18;35246:26;;35318:9;35312:4;35308:20;35304:1;35293:9;35289:17;35282:47;35346:131;35472:4;35346:131;:::i;:::-;35338:139;;35065:419;;;:::o;35490:228::-;35630:34;35626:1;35618:6;35614:14;35607:58;35699:11;35694:2;35686:6;35682:15;35675:36;35490:228;:::o;35724:366::-;35866:3;35887:67;35951:2;35946:3;35887:67;:::i;:::-;35880:74;;35963:93;36052:3;35963:93;:::i;:::-;36081:2;36076:3;36072:12;36065:19;;35724:366;;;:::o;36096:419::-;36262:4;36300:2;36289:9;36285:18;36277:26;;36349:9;36343:4;36339:20;36335:1;36324:9;36320:17;36313:47;36377:131;36503:4;36377:131;:::i;:::-;36369:139;;36096:419;;;:::o;36521:223::-;36661:34;36657:1;36649:6;36645:14;36638:58;36730:6;36725:2;36717:6;36713:15;36706:31;36521:223;:::o;36750:366::-;36892:3;36913:67;36977:2;36972:3;36913:67;:::i;:::-;36906:74;;36989:93;37078:3;36989:93;:::i;:::-;37107:2;37102:3;37098:12;37091:19;;36750:366;;;:::o;37122:419::-;37288:4;37326:2;37315:9;37311:18;37303:26;;37375:9;37369:4;37365:20;37361:1;37350:9;37346:17;37339:47;37403:131;37529:4;37403:131;:::i;:::-;37395:139;;37122:419;;;:::o;37547:191::-;37587:4;37607:20;37625:1;37607:20;:::i;:::-;37602:25;;37641:20;37659:1;37641:20;:::i;:::-;37636:25;;37680:1;37677;37674:8;37671:34;;;37685:18;;:::i;:::-;37671:34;37730:1;37727;37723:9;37715:17;;37547:191;;;;:::o;37744:175::-;37884:27;37880:1;37872:6;37868:14;37861:51;37744:175;:::o;37925:366::-;38067:3;38088:67;38152:2;38147:3;38088:67;:::i;:::-;38081:74;;38164:93;38253:3;38164:93;:::i;:::-;38282:2;38277:3;38273:12;38266:19;;37925:366;;;:::o;38297:419::-;38463:4;38501:2;38490:9;38486:18;38478:26;;38550:9;38544:4;38540:20;38536:1;38525:9;38521:17;38514:47;38578:131;38704:4;38578:131;:::i;:::-;38570:139;;38297:419;;;:::o;38722:237::-;38862:34;38858:1;38850:6;38846:14;38839:58;38931:20;38926:2;38918:6;38914:15;38907:45;38722:237;:::o;38965:366::-;39107:3;39128:67;39192:2;39187:3;39128:67;:::i;:::-;39121:74;;39204:93;39293:3;39204:93;:::i;:::-;39322:2;39317:3;39313:12;39306:19;;38965:366;;;:::o;39337:419::-;39503:4;39541:2;39530:9;39526:18;39518:26;;39590:9;39584:4;39580:20;39576:1;39565:9;39561:17;39554:47;39618:131;39744:4;39618:131;:::i;:::-;39610:139;;39337:419;;;:::o;39762:180::-;39810:77;39807:1;39800:88;39907:4;39904:1;39897:15;39931:4;39928:1;39921:15;39948:185;39988:1;40005:20;40023:1;40005:20;:::i;:::-;40000:25;;40039:20;40057:1;40039:20;:::i;:::-;40034:25;;40078:1;40068:35;;40083:18;;:::i;:::-;40068:35;40125:1;40122;40118:9;40113:14;;39948:185;;;;:::o;40139:176::-;40171:1;40188:20;40206:1;40188:20;:::i;:::-;40183:25;;40222:20;40240:1;40222:20;:::i;:::-;40217:25;;40261:1;40251:35;;40266:18;;:::i;:::-;40251:35;40307:1;40304;40300:9;40295:14;;40139:176;;;;:::o;40321:180::-;40369:77;40366:1;40359:88;40466:4;40463:1;40456:15;40490:4;40487:1;40480:15;40507:79;40546:7;40575:5;40564:16;;40507:79;;;:::o;40592:157::-;40697:45;40717:24;40735:5;40717:24;:::i;:::-;40697:45;:::i;:::-;40692:3;40685:58;40592:157;;:::o;40755:397::-;40895:3;40910:75;40981:3;40972:6;40910:75;:::i;:::-;41010:2;41005:3;41001:12;40994:19;;41023:75;41094:3;41085:6;41023:75;:::i;:::-;41123:2;41118:3;41114:12;41107:19;;41143:3;41136:10;;40755:397;;;;;:::o;41158:98::-;41209:6;41243:5;41237:12;41227:22;;41158:98;;;:::o;41262:168::-;41345:11;41379:6;41374:3;41367:19;41419:4;41414:3;41410:14;41395:29;;41262:168;;;;:::o;41436:360::-;41522:3;41550:38;41582:5;41550:38;:::i;:::-;41604:70;41667:6;41662:3;41604:70;:::i;:::-;41597:77;;41683:52;41728:6;41723:3;41716:4;41709:5;41705:16;41683:52;:::i;:::-;41760:29;41782:6;41760:29;:::i;:::-;41755:3;41751:39;41744:46;;41526:270;41436:360;;;;:::o;41802:640::-;41997:4;42035:3;42024:9;42020:19;42012:27;;42049:71;42117:1;42106:9;42102:17;42093:6;42049:71;:::i;:::-;42130:72;42198:2;42187:9;42183:18;42174:6;42130:72;:::i;:::-;42212;42280:2;42269:9;42265:18;42256:6;42212:72;:::i;:::-;42331:9;42325:4;42321:20;42316:2;42305:9;42301:18;42294:48;42359:76;42430:4;42421:6;42359:76;:::i;:::-;42351:84;;41802:640;;;;;;;:::o;42448:141::-;42504:5;42535:6;42529:13;42520:22;;42551:32;42577:5;42551:32;:::i;:::-;42448:141;;;;:::o;42595:349::-;42664:6;42713:2;42701:9;42692:7;42688:23;42684:32;42681:119;;;42719:79;;:::i;:::-;42681:119;42839:1;42864:63;42919:7;42910:6;42899:9;42895:22;42864:63;:::i;:::-;42854:73;;42810:127;42595:349;;;;:::o;42950:182::-;43090:34;43086:1;43078:6;43074:14;43067:58;42950:182;:::o;43138:366::-;43280:3;43301:67;43365:2;43360:3;43301:67;:::i;:::-;43294:74;;43377:93;43466:3;43377:93;:::i;:::-;43495:2;43490:3;43486:12;43479:19;;43138:366;;;:::o;43510:419::-;43676:4;43714:2;43703:9;43699:18;43691:26;;43763:9;43757:4;43753:20;43749:1;43738:9;43734:17;43727:47;43791:131;43917:4;43791:131;:::i;:::-;43783:139;;43510:419;;;:::o;43935:178::-;44075:30;44071:1;44063:6;44059:14;44052:54;43935:178;:::o;44119:366::-;44261:3;44282:67;44346:2;44341:3;44282:67;:::i;:::-;44275:74;;44358:93;44447:3;44358:93;:::i;:::-;44476:2;44471:3;44467:12;44460:19;;44119:366;;;:::o;44491:419::-;44657:4;44695:2;44684:9;44680:18;44672:26;;44744:9;44738:4;44734:20;44730:1;44719:9;44715:17;44708:47;44772:131;44898:4;44772:131;:::i;:::-;44764:139;;44491:419;;;:::o
Swarm Source
ipfs://859eabbd1aed9636652f369bb71de0d13dcd561ba3c6aa97584263bbdbef394c
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.