Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
57 ART
Holders
37
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ARTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Season1
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-06 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.7.0) (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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Season1.sol pragma solidity ^0.8.0; contract Season1 is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.08 ether; uint256 public maxSupply = 1000; uint256 public maxLimitWhitelist = 1; uint256 public maxLimitNonWhitelist = 20; bool public paused = false; bool public revealed = false; bool public onlyWhiteList = true; string public notRevealedUri; mapping(address => bool) public whitelisted; mapping(address => uint256) private _alreadyMinted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[_to] == true) { require(_mintAmount <= maxLimitWhitelist - _alreadyMinted[_to], "Insufficient mints left"); }else{ require(onlyWhiteList==false, "only whitelist addresses can mint"); require(_mintAmount <= maxLimitNonWhitelist - _alreadyMinted[_to], "Insufficient mints left"); } require(msg.value == cost * _mintAmount, "pay price of nft"); _alreadyMinted[_to] += _mintAmount; } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function reveal() public onlyOwner { revealed = true; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setPrice(uint _price) public onlyOwner { cost = _price; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setmaxLimitWhitelist(uint256 _limit) public onlyOwner { maxLimitWhitelist = _limit; } function setmaxLimitNonWhitelist(uint256 _limit) public onlyOwner { maxLimitNonWhitelist = _limit; } function setmaxSupply(uint256 _supply) public onlyOwner { maxSupply = _supply; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelist(bool _state) public onlyOwner { onlyWhiteList = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() payable public onlyOwner{ uint amount = address(this).balance; require(amount>0, "Ether balance is 0 in contract"); payable(address(owner())).transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitNonWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setmaxLimitNonWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setmaxLimitWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000317565b5067011c37937e080000600d556103e8600e556001600f5560146010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff021916908315150217905550348015620000cc57600080fd5b5060405162004d9c38038062004d9c8339818101604052810190620000f2919062000439565b828281600090805190602001906200010c92919062000317565b5080600190805190602001906200012592919062000317565b505050620001486200013c6200016260201b60201c565b6200016a60201b60201c565b62000159816200023060201b60201c565b505050620006cd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002406200025c60201b60201c565b80600b90805190602001906200025892919062000317565b5050565b6200026c6200016260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000292620002ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e29062000501565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200032590620005c9565b90600052602060002090601f01602090048101928262000349576000855562000395565b82601f106200036457805160ff191683800117855562000395565b8280016001018555821562000395579182015b828111156200039457825182559160200191906001019062000377565b5b509050620003a49190620003a8565b5090565b5b80821115620003c3576000816000905550600101620003a9565b5090565b6000620003de620003d8846200054c565b62000523565b905082815260208101848484011115620003f757600080fd5b6200040484828562000593565b509392505050565b600082601f8301126200041e57600080fd5b815162000430848260208601620003c7565b91505092915050565b6000806000606084860312156200044f57600080fd5b600084015167ffffffffffffffff8111156200046a57600080fd5b62000478868287016200040c565b935050602084015167ffffffffffffffff8111156200049657600080fd5b620004a4868287016200040c565b925050604084015167ffffffffffffffff811115620004c257600080fd5b620004d0868287016200040c565b9150509250925092565b6000620004e960208362000582565b9150620004f682620006a4565b602082019050919050565b600060208201905081810360008301526200051c81620004da565b9050919050565b60006200052f62000542565b90506200053d8282620005ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156200056a576200056962000664565b5b620005758262000693565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005b357808201518184015260208101905062000596565b83811115620005c3576000848401525b50505050565b60006002820490506001821680620005e257607f821691505b60208210811415620005f957620005f862000635565b5b50919050565b6200060a8262000693565b810181811067ffffffffffffffff821117156200062c576200062b62000664565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6146bf80620006dd6000396000f3fe6080604052600436106102725760003560e01c80635c975abb1161014f578063a475b5dd116100c1578063d5abeb011161007a578063d5abeb0114610920578063d936547e1461094b578063da3ef23f14610988578063e985e9c5146109b1578063f2c4ce1e146109ee578063f2fde38b14610a1757610272565b8063a475b5dd14610822578063af237d7b14610839578063b88d4fde14610864578063c66828621461088d578063c87b56dd146108b8578063cc24b211146108f557610272565b80638da5cb5b116101135780638da5cb5b1461072657806391b7f5ed1461075157806395d89b411461077a5780639f182cd1146107a5578063a22cb465146107d0578063a43fc972146107f957610272565b80635c975abb1461063f5780636352211e1461066a5780636c0360eb146106a757806370a08231146106d2578063715018a61461070f57610272565b80632f745c59116101e857806342842e0e116101ac57806342842e0e1461051f578063438b6300146105485780634a4c560d146105855780634f6ccce7146105ae57806351830227146105eb57806355f804b31461061657610272565b80632f745c591461046a57806330a5ce93146104a757806330cc7ae0146104d05780633ccfd60b146104f957806340c10f191461050357610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c45780631dd02b4b146103ef578063228025e81461041857806323b872dd1461044157610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906133c6565b610a40565b6040516102ab91906139cc565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061339d565b610aba565b005b3480156102e957600080fd5b506102f2610adf565b6040516102ff91906139e7565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613459565b610b71565b60405161033c9190613943565b60405180910390f35b34801561035157600080fd5b5061035a610bb7565b60405161036791906139e7565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613361565b610c45565b005b3480156103a557600080fd5b506103ae610d5d565b6040516103bb9190613c89565b60405180910390f35b3480156103d057600080fd5b506103d9610d63565b6040516103e69190613c89565b60405180910390f35b3480156103fb57600080fd5b506104166004803603810190610411919061339d565b610d70565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613459565b610d95565b005b34801561044d57600080fd5b506104686004803603810190610463919061325b565b610da7565b005b34801561047657600080fd5b50610491600480360381019061048c9190613361565b610e07565b60405161049e9190613c89565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613459565b610eac565b005b3480156104dc57600080fd5b506104f760048036038101906104f291906131f6565b610ebe565b005b610501610f21565b005b61051d60048036038101906105189190613361565b610fc2565b005b34801561052b57600080fd5b506105466004803603810190610541919061325b565b6112fe565b005b34801561055457600080fd5b5061056f600480360381019061056a91906131f6565b61131e565b60405161057c91906139aa565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906131f6565b611418565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613459565b61147b565b6040516105e29190613c89565b60405180910390f35b3480156105f757600080fd5b50610600611512565b60405161060d91906139cc565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613418565b611525565b005b34801561064b57600080fd5b50610654611547565b60405161066191906139cc565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c9190613459565b61155a565b60405161069e9190613943565b60405180910390f35b3480156106b357600080fd5b506106bc61160c565b6040516106c991906139e7565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906131f6565b61169a565b6040516107069190613c89565b60405180910390f35b34801561071b57600080fd5b50610724611752565b005b34801561073257600080fd5b5061073b611766565b6040516107489190613943565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190613459565b611790565b005b34801561078657600080fd5b5061078f6117a2565b60405161079c91906139e7565b60405180910390f35b3480156107b157600080fd5b506107ba611834565b6040516107c791906139cc565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190613325565b611847565b005b34801561080557600080fd5b50610820600480360381019061081b9190613459565b61185d565b005b34801561082e57600080fd5b5061083761186f565b005b34801561084557600080fd5b5061084e611894565b60405161085b9190613c89565b60405180910390f35b34801561087057600080fd5b5061088b600480360381019061088691906132aa565b61189a565b005b34801561089957600080fd5b506108a26118fc565b6040516108af91906139e7565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613459565b61198a565b6040516108ec91906139e7565b60405180910390f35b34801561090157600080fd5b5061090a611ae3565b6040516109179190613c89565b60405180910390f35b34801561092c57600080fd5b50610935611ae9565b6040516109429190613c89565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d91906131f6565b611aef565b60405161097f91906139cc565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190613418565b611b0f565b005b3480156109bd57600080fd5b506109d860048036038101906109d3919061321f565b611b31565b6040516109e591906139cc565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613418565b611bc5565b005b348015610a2357600080fd5b50610a3e6004803603810190610a3991906131f6565b611be7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab35750610ab282611c6b565b5b9050919050565b610ac2611d4d565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610aee90613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613f87565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7c82611dcb565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610bc490613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090613f87565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b505050505081565b6000610c508261155a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613c29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce0611e16565b73ffffffffffffffffffffffffffffffffffffffff161480610d0f5750610d0e81610d09611e16565b611b31565b5b610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590613b49565b60405180910390fd5b610d588383611e1e565b505050565b600d5481565b6000600880549050905090565b610d78611d4d565b80601160026101000a81548160ff02191690831515021790555050565b610d9d611d4d565b80600e8190555050565b610db8610db2611e16565b82611ed7565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613c69565b60405180910390fd5b610e02838383611f6c565b505050565b6000610e128361169a565b8210610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90613a09565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610eb4611d4d565b80600f8190555050565b610ec6611d4d565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f29611d4d565b600047905060008111610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613b29565b60405180910390fd5b610f79611766565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fbe573d6000803e3d6000fd5b5050565b6000610fcc610d63565b9050601160009054906101000a900460ff1615610fe857600080fd5b60008211610ff557600080fd5b600e5482826110049190613dbc565b111561100f57600080fd5b611017611766565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112c25760011515601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561113657601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546110ef9190613e9d565b821115611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613be9565b60405180910390fd5b61121c565b60001515601160029054906101000a900460ff1615151461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613bc9565b60405180910390fd5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010546111d99190613e9d565b82111561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613be9565b60405180910390fd5b5b81600d5461122a9190613e43565b341461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613a69565b60405180910390fd5b81601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112ba9190613dbc565b925050819055505b6000600190505b8281116112f8576112e58482846112e09190613dbc565b6121d3565b80806112f090613fea565b9150506112c9565b50505050565b6113198383836040518060200160405280600081525061189a565b505050565b6060600061132b8361169a565b905060008167ffffffffffffffff81111561136f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561139d5781602001602082028036833780820191505090505b50905060005b8281101561140d576113b58582610e07565b8282815181106113ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061140590613fea565b9150506113a3565b508092505050919050565b611420611d4d565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611485610d63565b82106114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613c49565b60405180910390fd5b60088281548110611500577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b61152d611d4d565b80600b908051906020019061154392919061301a565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613c09565b60405180910390fd5b80915050919050565b600b805461161990613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461164590613f87565b80156116925780601f1061166757610100808354040283529160200191611692565b820191906000526020600020905b81548152906001019060200180831161167557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613b09565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175a611d4d565b61176460006121f1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611798611d4d565b80600d8190555050565b6060600180546117b190613f87565b80601f01602080910402602001604051908101604052809291908181526020018280546117dd90613f87565b801561182a5780601f106117ff5761010080835404028352916020019161182a565b820191906000526020600020905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b611859611852611e16565b83836122b7565b5050565b611865611d4d565b8060108190555050565b611877611d4d565b6001601160016101000a81548160ff021916908315150217905550565b60105481565b6118ab6118a5611e16565b83611ed7565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613c69565b60405180910390fd5b6118f684848484612424565b50505050565b600c805461190990613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461193590613f87565b80156119825780601f1061195757610100808354040283529160200191611982565b820191906000526020600020905b81548152906001019060200180831161196557829003601f168201915b505050505081565b606061199582612480565b6119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613ba9565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611a8257601280546119fd90613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990613f87565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b50505050509050611ade565b6000611a8c6124ec565b90506000815111611aac5760405180602001604052806000815250611ada565b80611ab68461257e565b600c604051602001611aca93929190613912565b6040516020818303038152906040525b9150505b919050565b600f5481565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611b17611d4d565b80600c9080519060200190611b2d92919061301a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bcd611d4d565b8060129080519060200190611be392919061301a565b5050565b611bef611d4d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613a49565b60405180910390fd5b611c68816121f1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d3657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d465750611d458261272b565b5b9050919050565b611d55611e16565b73ffffffffffffffffffffffffffffffffffffffff16611d73611766565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090613b89565b60405180910390fd5b565b611dd481612480565b611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613c09565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e918361155a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ee38361155a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f255750611f248185611b31565b5b80611f6357508373ffffffffffffffffffffffffffffffffffffffff16611f4b84610b71565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f8c8261155a565b73ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990613a89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613ac9565b60405180910390fd5b61205d838383612795565b612068600082611e1e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b89190613e9d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210f9190613dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ce8383836128a9565b505050565b6121ed8282604051806020016040528060008152506128ae565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90613ae9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161241791906139cc565b60405180910390a3505050565b61242f848484611f6c565b61243b84848484612909565b61247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190613a29565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546124fb90613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461252790613f87565b80156125745780601f1061254957610100808354040283529160200191612574565b820191906000526020600020905b81548152906001019060200180831161255757829003601f168201915b5050505050905090565b606060008214156125c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612726565b600082905060005b600082146125f85780806125e190613fea565b915050600a826125f19190613e12565b91506125ce565b60008167ffffffffffffffff81111561263a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561266c5781602001600182028036833780820191505090505b5090505b6000851461271f576001826126859190613e9d565b9150600a856126949190614033565b60306126a09190613dbc565b60f81b8183815181106126dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127189190613e12565b9450612670565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127a0838383612aa0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e3576127de81612aa5565b612822565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612821576128208382612aee565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128655761286081612c5b565b6128a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128a3576128a28282612d9e565b5b5b505050565b505050565b6128b88383612e1d565b6128c56000848484612909565b612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90613a29565b60405180910390fd5b505050565b600061292a8473ffffffffffffffffffffffffffffffffffffffff16612ff7565b15612a93578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612953611e16565b8786866040518563ffffffff1660e01b8152600401612975949392919061395e565b602060405180830381600087803b15801561298f57600080fd5b505af19250505080156129c057506040513d601f19601f820116820180604052508101906129bd91906133ef565b60015b612a43573d80600081146129f0576040519150601f19603f3d011682016040523d82523d6000602084013e6129f5565b606091505b50600081511415612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290613a29565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a98565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612afb8461169a565b612b059190613e9d565b9050600060076000848152602001908152602001600020549050818114612bea576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c6f9190613e9d565b9050600060096000848152602001908152602001600020549050600060088381548110612cc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612da98361169a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490613b69565b60405180910390fd5b612e9681612480565b15612ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecd90613aa9565b60405180910390fd5b612ee260008383612795565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f329190613dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff3600083836128a9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302690613f87565b90600052602060002090601f016020900481019282613048576000855561308f565b82601f1061306157805160ff191683800117855561308f565b8280016001018555821561308f579182015b8281111561308e578251825591602001919060010190613073565b5b50905061309c91906130a0565b5090565b5b808211156130b95760008160009055506001016130a1565b5090565b60006130d06130cb84613cc9565b613ca4565b9050828152602081018484840111156130e857600080fd5b6130f3848285613f45565b509392505050565b600061310e61310984613cfa565b613ca4565b90508281526020810184848401111561312657600080fd5b613131848285613f45565b509392505050565b6000813590506131488161462d565b92915050565b60008135905061315d81614644565b92915050565b6000813590506131728161465b565b92915050565b6000815190506131878161465b565b92915050565b600082601f83011261319e57600080fd5b81356131ae8482602086016130bd565b91505092915050565b600082601f8301126131c857600080fd5b81356131d88482602086016130fb565b91505092915050565b6000813590506131f081614672565b92915050565b60006020828403121561320857600080fd5b600061321684828501613139565b91505092915050565b6000806040838503121561323257600080fd5b600061324085828601613139565b925050602061325185828601613139565b9150509250929050565b60008060006060848603121561327057600080fd5b600061327e86828701613139565b935050602061328f86828701613139565b92505060406132a0868287016131e1565b9150509250925092565b600080600080608085870312156132c057600080fd5b60006132ce87828801613139565b94505060206132df87828801613139565b93505060406132f0878288016131e1565b925050606085013567ffffffffffffffff81111561330d57600080fd5b6133198782880161318d565b91505092959194509250565b6000806040838503121561333857600080fd5b600061334685828601613139565b92505060206133578582860161314e565b9150509250929050565b6000806040838503121561337457600080fd5b600061338285828601613139565b9250506020613393858286016131e1565b9150509250929050565b6000602082840312156133af57600080fd5b60006133bd8482850161314e565b91505092915050565b6000602082840312156133d857600080fd5b60006133e684828501613163565b91505092915050565b60006020828403121561340157600080fd5b600061340f84828501613178565b91505092915050565b60006020828403121561342a57600080fd5b600082013567ffffffffffffffff81111561344457600080fd5b613450848285016131b7565b91505092915050565b60006020828403121561346b57600080fd5b6000613479848285016131e1565b91505092915050565b600061348e83836138f4565b60208301905092915050565b6134a381613ed1565b82525050565b60006134b482613d50565b6134be8185613d7e565b93506134c983613d2b565b8060005b838110156134fa5781516134e18882613482565b97506134ec83613d71565b9250506001810190506134cd565b5085935050505092915050565b61351081613ee3565b82525050565b600061352182613d5b565b61352b8185613d8f565b935061353b818560208601613f54565b61354481614120565b840191505092915050565b600061355a82613d66565b6135648185613da0565b9350613574818560208601613f54565b61357d81614120565b840191505092915050565b600061359382613d66565b61359d8185613db1565b93506135ad818560208601613f54565b80840191505092915050565b600081546135c681613f87565b6135d08186613db1565b945060018216600081146135eb57600181146135fc5761362f565b60ff1983168652818601935061362f565b61360585613d3b565b60005b8381101561362757815481890152600182019150602081019050613608565b838801955050505b50505092915050565b6000613645602b83613da0565b915061365082614131565b604082019050919050565b6000613668603283613da0565b915061367382614180565b604082019050919050565b600061368b602683613da0565b9150613696826141cf565b604082019050919050565b60006136ae601083613da0565b91506136b98261421e565b602082019050919050565b60006136d1602583613da0565b91506136dc82614247565b604082019050919050565b60006136f4601c83613da0565b91506136ff82614296565b602082019050919050565b6000613717602483613da0565b9150613722826142bf565b604082019050919050565b600061373a601983613da0565b91506137458261430e565b602082019050919050565b600061375d602983613da0565b915061376882614337565b604082019050919050565b6000613780601e83613da0565b915061378b82614386565b602082019050919050565b60006137a3603e83613da0565b91506137ae826143af565b604082019050919050565b60006137c6602083613da0565b91506137d1826143fe565b602082019050919050565b60006137e9602083613da0565b91506137f482614427565b602082019050919050565b600061380c602f83613da0565b915061381782614450565b604082019050919050565b600061382f602183613da0565b915061383a8261449f565b604082019050919050565b6000613852601783613da0565b915061385d826144ee565b602082019050919050565b6000613875601883613da0565b915061388082614517565b602082019050919050565b6000613898602183613da0565b91506138a382614540565b604082019050919050565b60006138bb602c83613da0565b91506138c68261458f565b604082019050919050565b60006138de602e83613da0565b91506138e9826145de565b604082019050919050565b6138fd81613f3b565b82525050565b61390c81613f3b565b82525050565b600061391e8286613588565b915061392a8285613588565b915061393682846135b9565b9150819050949350505050565b6000602082019050613958600083018461349a565b92915050565b6000608082019050613973600083018761349a565b613980602083018661349a565b61398d6040830185613903565b818103606083015261399f8184613516565b905095945050505050565b600060208201905081810360008301526139c481846134a9565b905092915050565b60006020820190506139e16000830184613507565b92915050565b60006020820190508181036000830152613a01818461354f565b905092915050565b60006020820190508181036000830152613a2281613638565b9050919050565b60006020820190508181036000830152613a428161365b565b9050919050565b60006020820190508181036000830152613a628161367e565b9050919050565b60006020820190508181036000830152613a82816136a1565b9050919050565b60006020820190508181036000830152613aa2816136c4565b9050919050565b60006020820190508181036000830152613ac2816136e7565b9050919050565b60006020820190508181036000830152613ae28161370a565b9050919050565b60006020820190508181036000830152613b028161372d565b9050919050565b60006020820190508181036000830152613b2281613750565b9050919050565b60006020820190508181036000830152613b4281613773565b9050919050565b60006020820190508181036000830152613b6281613796565b9050919050565b60006020820190508181036000830152613b82816137b9565b9050919050565b60006020820190508181036000830152613ba2816137dc565b9050919050565b60006020820190508181036000830152613bc2816137ff565b9050919050565b60006020820190508181036000830152613be281613822565b9050919050565b60006020820190508181036000830152613c0281613845565b9050919050565b60006020820190508181036000830152613c2281613868565b9050919050565b60006020820190508181036000830152613c428161388b565b9050919050565b60006020820190508181036000830152613c62816138ae565b9050919050565b60006020820190508181036000830152613c82816138d1565b9050919050565b6000602082019050613c9e6000830184613903565b92915050565b6000613cae613cbf565b9050613cba8282613fb9565b919050565b6000604051905090565b600067ffffffffffffffff821115613ce457613ce36140f1565b5b613ced82614120565b9050602081019050919050565b600067ffffffffffffffff821115613d1557613d146140f1565b5b613d1e82614120565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dc782613f3b565b9150613dd283613f3b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0757613e06614064565b5b828201905092915050565b6000613e1d82613f3b565b9150613e2883613f3b565b925082613e3857613e37614093565b5b828204905092915050565b6000613e4e82613f3b565b9150613e5983613f3b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9257613e91614064565b5b828202905092915050565b6000613ea882613f3b565b9150613eb383613f3b565b925082821015613ec657613ec5614064565b5b828203905092915050565b6000613edc82613f1b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f72578082015181840152602081019050613f57565b83811115613f81576000848401525b50505050565b60006002820490506001821680613f9f57607f821691505b60208210811415613fb357613fb26140c2565b5b50919050565b613fc282614120565b810181811067ffffffffffffffff82111715613fe157613fe06140f1565b5b80604052505050565b6000613ff582613f3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561402857614027614064565b5b600182019050919050565b600061403e82613f3b565b915061404983613f3b565b92508261405957614058614093565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6f6e6c792077686974656c697374206164647265737365732063616e206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61463681613ed1565b811461464157600080fd5b50565b61464d81613ee3565b811461465857600080fd5b50565b61466481613eef565b811461466f57600080fd5b50565b61467b81613f3b565b811461468657600080fd5b5056fea2646970667358221220c2b9f38c31e6f312c317bf1e09d7cbe68b9d9b4021bdd7ff38fc486d5df903f064736f6c63430008020033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001946696e642041727420536f636965747920536561736f6e203100000000000000000000000000000000000000000000000000000000000000000000000000000341525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d523937587572524e3670533973446132517a466e4161485a467a5447693458387667534e65676e35547062712f00000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c80635c975abb1161014f578063a475b5dd116100c1578063d5abeb011161007a578063d5abeb0114610920578063d936547e1461094b578063da3ef23f14610988578063e985e9c5146109b1578063f2c4ce1e146109ee578063f2fde38b14610a1757610272565b8063a475b5dd14610822578063af237d7b14610839578063b88d4fde14610864578063c66828621461088d578063c87b56dd146108b8578063cc24b211146108f557610272565b80638da5cb5b116101135780638da5cb5b1461072657806391b7f5ed1461075157806395d89b411461077a5780639f182cd1146107a5578063a22cb465146107d0578063a43fc972146107f957610272565b80635c975abb1461063f5780636352211e1461066a5780636c0360eb146106a757806370a08231146106d2578063715018a61461070f57610272565b80632f745c59116101e857806342842e0e116101ac57806342842e0e1461051f578063438b6300146105485780634a4c560d146105855780634f6ccce7146105ae57806351830227146105eb57806355f804b31461061657610272565b80632f745c591461046a57806330a5ce93146104a757806330cc7ae0146104d05780633ccfd60b146104f957806340c10f191461050357610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c45780631dd02b4b146103ef578063228025e81461041857806323b872dd1461044157610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906133c6565b610a40565b6040516102ab91906139cc565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061339d565b610aba565b005b3480156102e957600080fd5b506102f2610adf565b6040516102ff91906139e7565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613459565b610b71565b60405161033c9190613943565b60405180910390f35b34801561035157600080fd5b5061035a610bb7565b60405161036791906139e7565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613361565b610c45565b005b3480156103a557600080fd5b506103ae610d5d565b6040516103bb9190613c89565b60405180910390f35b3480156103d057600080fd5b506103d9610d63565b6040516103e69190613c89565b60405180910390f35b3480156103fb57600080fd5b506104166004803603810190610411919061339d565b610d70565b005b34801561042457600080fd5b5061043f600480360381019061043a9190613459565b610d95565b005b34801561044d57600080fd5b506104686004803603810190610463919061325b565b610da7565b005b34801561047657600080fd5b50610491600480360381019061048c9190613361565b610e07565b60405161049e9190613c89565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613459565b610eac565b005b3480156104dc57600080fd5b506104f760048036038101906104f291906131f6565b610ebe565b005b610501610f21565b005b61051d60048036038101906105189190613361565b610fc2565b005b34801561052b57600080fd5b506105466004803603810190610541919061325b565b6112fe565b005b34801561055457600080fd5b5061056f600480360381019061056a91906131f6565b61131e565b60405161057c91906139aa565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906131f6565b611418565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613459565b61147b565b6040516105e29190613c89565b60405180910390f35b3480156105f757600080fd5b50610600611512565b60405161060d91906139cc565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613418565b611525565b005b34801561064b57600080fd5b50610654611547565b60405161066191906139cc565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c9190613459565b61155a565b60405161069e9190613943565b60405180910390f35b3480156106b357600080fd5b506106bc61160c565b6040516106c991906139e7565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906131f6565b61169a565b6040516107069190613c89565b60405180910390f35b34801561071b57600080fd5b50610724611752565b005b34801561073257600080fd5b5061073b611766565b6040516107489190613943565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190613459565b611790565b005b34801561078657600080fd5b5061078f6117a2565b60405161079c91906139e7565b60405180910390f35b3480156107b157600080fd5b506107ba611834565b6040516107c791906139cc565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190613325565b611847565b005b34801561080557600080fd5b50610820600480360381019061081b9190613459565b61185d565b005b34801561082e57600080fd5b5061083761186f565b005b34801561084557600080fd5b5061084e611894565b60405161085b9190613c89565b60405180910390f35b34801561087057600080fd5b5061088b600480360381019061088691906132aa565b61189a565b005b34801561089957600080fd5b506108a26118fc565b6040516108af91906139e7565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613459565b61198a565b6040516108ec91906139e7565b60405180910390f35b34801561090157600080fd5b5061090a611ae3565b6040516109179190613c89565b60405180910390f35b34801561092c57600080fd5b50610935611ae9565b6040516109429190613c89565b60405180910390f35b34801561095757600080fd5b50610972600480360381019061096d91906131f6565b611aef565b60405161097f91906139cc565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190613418565b611b0f565b005b3480156109bd57600080fd5b506109d860048036038101906109d3919061321f565b611b31565b6040516109e591906139cc565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613418565b611bc5565b005b348015610a2357600080fd5b50610a3e6004803603810190610a3991906131f6565b611be7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab35750610ab282611c6b565b5b9050919050565b610ac2611d4d565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610aee90613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613f87565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b7c82611dcb565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610bc490613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090613f87565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b505050505081565b6000610c508261155a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613c29565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce0611e16565b73ffffffffffffffffffffffffffffffffffffffff161480610d0f5750610d0e81610d09611e16565b611b31565b5b610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590613b49565b60405180910390fd5b610d588383611e1e565b505050565b600d5481565b6000600880549050905090565b610d78611d4d565b80601160026101000a81548160ff02191690831515021790555050565b610d9d611d4d565b80600e8190555050565b610db8610db2611e16565b82611ed7565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613c69565b60405180910390fd5b610e02838383611f6c565b505050565b6000610e128361169a565b8210610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90613a09565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610eb4611d4d565b80600f8190555050565b610ec6611d4d565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f29611d4d565b600047905060008111610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613b29565b60405180910390fd5b610f79611766565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fbe573d6000803e3d6000fd5b5050565b6000610fcc610d63565b9050601160009054906101000a900460ff1615610fe857600080fd5b60008211610ff557600080fd5b600e5482826110049190613dbc565b111561100f57600080fd5b611017611766565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112c25760011515601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561113657601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546110ef9190613e9d565b821115611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613be9565b60405180910390fd5b61121c565b60001515601160029054906101000a900460ff1615151461118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613bc9565b60405180910390fd5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010546111d99190613e9d565b82111561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613be9565b60405180910390fd5b5b81600d5461122a9190613e43565b341461126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613a69565b60405180910390fd5b81601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112ba9190613dbc565b925050819055505b6000600190505b8281116112f8576112e58482846112e09190613dbc565b6121d3565b80806112f090613fea565b9150506112c9565b50505050565b6113198383836040518060200160405280600081525061189a565b505050565b6060600061132b8361169a565b905060008167ffffffffffffffff81111561136f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561139d5781602001602082028036833780820191505090505b50905060005b8281101561140d576113b58582610e07565b8282815181106113ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061140590613fea565b9150506113a3565b508092505050919050565b611420611d4d565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611485610d63565b82106114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613c49565b60405180910390fd5b60088281548110611500577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b61152d611d4d565b80600b908051906020019061154392919061301a565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613c09565b60405180910390fd5b80915050919050565b600b805461161990613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461164590613f87565b80156116925780601f1061166757610100808354040283529160200191611692565b820191906000526020600020905b81548152906001019060200180831161167557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613b09565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61175a611d4d565b61176460006121f1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611798611d4d565b80600d8190555050565b6060600180546117b190613f87565b80601f01602080910402602001604051908101604052809291908181526020018280546117dd90613f87565b801561182a5780601f106117ff5761010080835404028352916020019161182a565b820191906000526020600020905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b611859611852611e16565b83836122b7565b5050565b611865611d4d565b8060108190555050565b611877611d4d565b6001601160016101000a81548160ff021916908315150217905550565b60105481565b6118ab6118a5611e16565b83611ed7565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613c69565b60405180910390fd5b6118f684848484612424565b50505050565b600c805461190990613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461193590613f87565b80156119825780601f1061195757610100808354040283529160200191611982565b820191906000526020600020905b81548152906001019060200180831161196557829003601f168201915b505050505081565b606061199582612480565b6119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613ba9565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611a8257601280546119fd90613f87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990613f87565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b50505050509050611ade565b6000611a8c6124ec565b90506000815111611aac5760405180602001604052806000815250611ada565b80611ab68461257e565b600c604051602001611aca93929190613912565b6040516020818303038152906040525b9150505b919050565b600f5481565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611b17611d4d565b80600c9080519060200190611b2d92919061301a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bcd611d4d565b8060129080519060200190611be392919061301a565b5050565b611bef611d4d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613a49565b60405180910390fd5b611c68816121f1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d3657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d465750611d458261272b565b5b9050919050565b611d55611e16565b73ffffffffffffffffffffffffffffffffffffffff16611d73611766565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090613b89565b60405180910390fd5b565b611dd481612480565b611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613c09565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e918361155a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ee38361155a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f255750611f248185611b31565b5b80611f6357508373ffffffffffffffffffffffffffffffffffffffff16611f4b84610b71565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f8c8261155a565b73ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990613a89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990613ac9565b60405180910390fd5b61205d838383612795565b612068600082611e1e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b89190613e9d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210f9190613dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ce8383836128a9565b505050565b6121ed8282604051806020016040528060008152506128ae565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90613ae9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161241791906139cc565b60405180910390a3505050565b61242f848484611f6c565b61243b84848484612909565b61247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190613a29565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546124fb90613f87565b80601f016020809104026020016040519081016040528092919081815260200182805461252790613f87565b80156125745780601f1061254957610100808354040283529160200191612574565b820191906000526020600020905b81548152906001019060200180831161255757829003601f168201915b5050505050905090565b606060008214156125c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612726565b600082905060005b600082146125f85780806125e190613fea565b915050600a826125f19190613e12565b91506125ce565b60008167ffffffffffffffff81111561263a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561266c5781602001600182028036833780820191505090505b5090505b6000851461271f576001826126859190613e9d565b9150600a856126949190614033565b60306126a09190613dbc565b60f81b8183815181106126dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127189190613e12565b9450612670565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127a0838383612aa0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127e3576127de81612aa5565b612822565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612821576128208382612aee565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128655761286081612c5b565b6128a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128a3576128a28282612d9e565b5b5b505050565b505050565b6128b88383612e1d565b6128c56000848484612909565b612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90613a29565b60405180910390fd5b505050565b600061292a8473ffffffffffffffffffffffffffffffffffffffff16612ff7565b15612a93578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612953611e16565b8786866040518563ffffffff1660e01b8152600401612975949392919061395e565b602060405180830381600087803b15801561298f57600080fd5b505af19250505080156129c057506040513d601f19601f820116820180604052508101906129bd91906133ef565b60015b612a43573d80600081146129f0576040519150601f19603f3d011682016040523d82523d6000602084013e6129f5565b606091505b50600081511415612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290613a29565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a98565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612afb8461169a565b612b059190613e9d565b9050600060076000848152602001908152602001600020549050818114612bea576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c6f9190613e9d565b9050600060096000848152602001908152602001600020549050600060088381548110612cc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612da98361169a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8490613b69565b60405180910390fd5b612e9681612480565b15612ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecd90613aa9565b60405180910390fd5b612ee260008383612795565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f329190613dbc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff3600083836128a9565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302690613f87565b90600052602060002090601f016020900481019282613048576000855561308f565b82601f1061306157805160ff191683800117855561308f565b8280016001018555821561308f579182015b8281111561308e578251825591602001919060010190613073565b5b50905061309c91906130a0565b5090565b5b808211156130b95760008160009055506001016130a1565b5090565b60006130d06130cb84613cc9565b613ca4565b9050828152602081018484840111156130e857600080fd5b6130f3848285613f45565b509392505050565b600061310e61310984613cfa565b613ca4565b90508281526020810184848401111561312657600080fd5b613131848285613f45565b509392505050565b6000813590506131488161462d565b92915050565b60008135905061315d81614644565b92915050565b6000813590506131728161465b565b92915050565b6000815190506131878161465b565b92915050565b600082601f83011261319e57600080fd5b81356131ae8482602086016130bd565b91505092915050565b600082601f8301126131c857600080fd5b81356131d88482602086016130fb565b91505092915050565b6000813590506131f081614672565b92915050565b60006020828403121561320857600080fd5b600061321684828501613139565b91505092915050565b6000806040838503121561323257600080fd5b600061324085828601613139565b925050602061325185828601613139565b9150509250929050565b60008060006060848603121561327057600080fd5b600061327e86828701613139565b935050602061328f86828701613139565b92505060406132a0868287016131e1565b9150509250925092565b600080600080608085870312156132c057600080fd5b60006132ce87828801613139565b94505060206132df87828801613139565b93505060406132f0878288016131e1565b925050606085013567ffffffffffffffff81111561330d57600080fd5b6133198782880161318d565b91505092959194509250565b6000806040838503121561333857600080fd5b600061334685828601613139565b92505060206133578582860161314e565b9150509250929050565b6000806040838503121561337457600080fd5b600061338285828601613139565b9250506020613393858286016131e1565b9150509250929050565b6000602082840312156133af57600080fd5b60006133bd8482850161314e565b91505092915050565b6000602082840312156133d857600080fd5b60006133e684828501613163565b91505092915050565b60006020828403121561340157600080fd5b600061340f84828501613178565b91505092915050565b60006020828403121561342a57600080fd5b600082013567ffffffffffffffff81111561344457600080fd5b613450848285016131b7565b91505092915050565b60006020828403121561346b57600080fd5b6000613479848285016131e1565b91505092915050565b600061348e83836138f4565b60208301905092915050565b6134a381613ed1565b82525050565b60006134b482613d50565b6134be8185613d7e565b93506134c983613d2b565b8060005b838110156134fa5781516134e18882613482565b97506134ec83613d71565b9250506001810190506134cd565b5085935050505092915050565b61351081613ee3565b82525050565b600061352182613d5b565b61352b8185613d8f565b935061353b818560208601613f54565b61354481614120565b840191505092915050565b600061355a82613d66565b6135648185613da0565b9350613574818560208601613f54565b61357d81614120565b840191505092915050565b600061359382613d66565b61359d8185613db1565b93506135ad818560208601613f54565b80840191505092915050565b600081546135c681613f87565b6135d08186613db1565b945060018216600081146135eb57600181146135fc5761362f565b60ff1983168652818601935061362f565b61360585613d3b565b60005b8381101561362757815481890152600182019150602081019050613608565b838801955050505b50505092915050565b6000613645602b83613da0565b915061365082614131565b604082019050919050565b6000613668603283613da0565b915061367382614180565b604082019050919050565b600061368b602683613da0565b9150613696826141cf565b604082019050919050565b60006136ae601083613da0565b91506136b98261421e565b602082019050919050565b60006136d1602583613da0565b91506136dc82614247565b604082019050919050565b60006136f4601c83613da0565b91506136ff82614296565b602082019050919050565b6000613717602483613da0565b9150613722826142bf565b604082019050919050565b600061373a601983613da0565b91506137458261430e565b602082019050919050565b600061375d602983613da0565b915061376882614337565b604082019050919050565b6000613780601e83613da0565b915061378b82614386565b602082019050919050565b60006137a3603e83613da0565b91506137ae826143af565b604082019050919050565b60006137c6602083613da0565b91506137d1826143fe565b602082019050919050565b60006137e9602083613da0565b91506137f482614427565b602082019050919050565b600061380c602f83613da0565b915061381782614450565b604082019050919050565b600061382f602183613da0565b915061383a8261449f565b604082019050919050565b6000613852601783613da0565b915061385d826144ee565b602082019050919050565b6000613875601883613da0565b915061388082614517565b602082019050919050565b6000613898602183613da0565b91506138a382614540565b604082019050919050565b60006138bb602c83613da0565b91506138c68261458f565b604082019050919050565b60006138de602e83613da0565b91506138e9826145de565b604082019050919050565b6138fd81613f3b565b82525050565b61390c81613f3b565b82525050565b600061391e8286613588565b915061392a8285613588565b915061393682846135b9565b9150819050949350505050565b6000602082019050613958600083018461349a565b92915050565b6000608082019050613973600083018761349a565b613980602083018661349a565b61398d6040830185613903565b818103606083015261399f8184613516565b905095945050505050565b600060208201905081810360008301526139c481846134a9565b905092915050565b60006020820190506139e16000830184613507565b92915050565b60006020820190508181036000830152613a01818461354f565b905092915050565b60006020820190508181036000830152613a2281613638565b9050919050565b60006020820190508181036000830152613a428161365b565b9050919050565b60006020820190508181036000830152613a628161367e565b9050919050565b60006020820190508181036000830152613a82816136a1565b9050919050565b60006020820190508181036000830152613aa2816136c4565b9050919050565b60006020820190508181036000830152613ac2816136e7565b9050919050565b60006020820190508181036000830152613ae28161370a565b9050919050565b60006020820190508181036000830152613b028161372d565b9050919050565b60006020820190508181036000830152613b2281613750565b9050919050565b60006020820190508181036000830152613b4281613773565b9050919050565b60006020820190508181036000830152613b6281613796565b9050919050565b60006020820190508181036000830152613b82816137b9565b9050919050565b60006020820190508181036000830152613ba2816137dc565b9050919050565b60006020820190508181036000830152613bc2816137ff565b9050919050565b60006020820190508181036000830152613be281613822565b9050919050565b60006020820190508181036000830152613c0281613845565b9050919050565b60006020820190508181036000830152613c2281613868565b9050919050565b60006020820190508181036000830152613c428161388b565b9050919050565b60006020820190508181036000830152613c62816138ae565b9050919050565b60006020820190508181036000830152613c82816138d1565b9050919050565b6000602082019050613c9e6000830184613903565b92915050565b6000613cae613cbf565b9050613cba8282613fb9565b919050565b6000604051905090565b600067ffffffffffffffff821115613ce457613ce36140f1565b5b613ced82614120565b9050602081019050919050565b600067ffffffffffffffff821115613d1557613d146140f1565b5b613d1e82614120565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613dc782613f3b565b9150613dd283613f3b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0757613e06614064565b5b828201905092915050565b6000613e1d82613f3b565b9150613e2883613f3b565b925082613e3857613e37614093565b5b828204905092915050565b6000613e4e82613f3b565b9150613e5983613f3b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9257613e91614064565b5b828202905092915050565b6000613ea882613f3b565b9150613eb383613f3b565b925082821015613ec657613ec5614064565b5b828203905092915050565b6000613edc82613f1b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f72578082015181840152602081019050613f57565b83811115613f81576000848401525b50505050565b60006002820490506001821680613f9f57607f821691505b60208210811415613fb357613fb26140c2565b5b50919050565b613fc282614120565b810181811067ffffffffffffffff82111715613fe157613fe06140f1565b5b80604052505050565b6000613ff582613f3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561402857614027614064565b5b600182019050919050565b600061403e82613f3b565b915061404983613f3b565b92508261405957614058614093565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6f6e6c792077686974656c697374206164647265737365732063616e206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61463681613ed1565b811461464157600080fd5b50565b61464d81613ee3565b811461465857600080fd5b50565b61466481613eef565b811461466f57600080fd5b50565b61467b81613f3b565b811461468657600080fd5b5056fea2646970667358221220c2b9f38c31e6f312c317bf1e09d7cbe68b9d9b4021bdd7ff38fc486d5df903f064736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001946696e642041727420536f636965747920536561736f6e203100000000000000000000000000000000000000000000000000000000000000000000000000000341525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d523937587572524e3670533973446132517a466e4161485a467a5447693458387667534e65676e35547062712f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Find Art Society Season 1
Arg [1] : _symbol (string): ART
Arg [2] : _initBaseURI (string): ipfs://QmR97XurRN6pS9sDa2QzFnAaHZFzTGi4X8vgSNegn5Tpbq/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 46696e642041727420536f636965747920536561736f6e203100000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4152540000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d523937587572524e3670533973446132517a466e416148
Arg [9] : 5a467a5447693458387667534e65676e35547062712f00000000000000000000
Deployed Bytecode Sourcemap
46258:3921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40043:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49595:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26777:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28290:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46667:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27807:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46407:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40683:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49674:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49501:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28990:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40351:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49279:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49871:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49977:199;;;:::i;:::-;;47083:822;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29397:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47911:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49771:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40873:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46597:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49047:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46566:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26488:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46339:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26219:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:103;;;;;;;;;;;;;:::i;:::-;;4658:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48967:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26946:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46630:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28533:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49387:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48768:65;;;;;;;;;;;;;:::i;:::-;;46521:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29653:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46365:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48265:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46480:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46444:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46700:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49151:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28759:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48841:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5564:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40043:224;40145:4;40184:35;40169:50;;;:11;:50;;;;:90;;;;40223:36;40247:11;40223:23;:36::i;:::-;40169:90;40162:97;;40043:224;;;:::o;49595:73::-;4544:13;:11;:13::i;:::-;49656:6:::1;49647;;:15;;;;;;;;;;;;;;;;;;49595:73:::0;:::o;26777:100::-;26831:13;26864:5;26857:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26777:100;:::o;28290:171::-;28366:7;28386:23;28401:7;28386:14;:23::i;:::-;28429:15;:24;28445:7;28429:24;;;;;;;;;;;;;;;;;;;;;28422:31;;28290:171;;;:::o;46667:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27807:417::-;27888:13;27904:23;27919:7;27904:14;:23::i;:::-;27888:39;;27952:5;27946:11;;:2;:11;;;;27938:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28046:5;28030:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28055:37;28072:5;28079:12;:10;:12::i;:::-;28055:16;:37::i;:::-;28030:62;28008:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28195:21;28204:2;28208:7;28195:8;:21::i;:::-;27807:417;;;:::o;46407:32::-;;;;:::o;40683:113::-;40744:7;40771:10;:17;;;;40764:24;;40683:113;:::o;49674:91::-;4544:13;:11;:13::i;:::-;49753:6:::1;49737:13;;:22;;;;;;;;;;;;;;;;;;49674:91:::0;:::o;49501:88::-;4544:13;:11;:13::i;:::-;49576:7:::1;49564:9;:19;;;;49501:88:::0;:::o;28990:336::-;29185:41;29204:12;:10;:12::i;:::-;29218:7;29185:18;:41::i;:::-;29177:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29290:28;29300:4;29306:2;29310:7;29290:9;:28::i;:::-;28990:336;;;:::o;40351:256::-;40448:7;40484:23;40501:5;40484:16;:23::i;:::-;40476:5;:31;40468:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40573:12;:19;40586:5;40573:19;;;;;;;;;;;;;;;:26;40593:5;40573:26;;;;;;;;;;;;40566:33;;40351:256;;;;:::o;49279:102::-;4544:13;:11;:13::i;:::-;49369:6:::1;49349:17;:26;;;;49279:102:::0;:::o;49871:100::-;4544:13;:11;:13::i;:::-;49960:5:::1;49939:11;:18;49951:5;49939:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;49871:100:::0;:::o;49977:199::-;4544:13;:11;:13::i;:::-;50028:11:::1;50042:21;50028:35;;50085:1;50078:6;:8;50070:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50144:7;:5;:7::i;:::-;50128:34;;:42;50163:6;50128:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4568:1;49977:199::o:0;47083:822::-;47153:14;47170:13;:11;:13::i;:::-;47153:30;;47199:6;;;;;;;;;;;47198:7;47190:16;;;;;;47235:1;47221:11;:15;47213:24;;;;;;47276:9;;47261:11;47252:6;:20;;;;:::i;:::-;:33;;47244:42;;;;;;47313:7;:5;:7::i;:::-;47299:21;;:10;:21;;;47295:513;;47356:4;47336:24;;:11;:16;47348:3;47336:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;47333:351;;;47420:14;:19;47435:3;47420:19;;;;;;;;;;;;;;;;47400:17;;:39;;;;:::i;:::-;47385:11;:54;;47377:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;47333:351;;;47521:5;47506:20;;:13;;;;;;;;;;;:20;;;47498:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47625:14;:19;47640:3;47625:19;;;;;;;;;;;;;;;;47602:20;;:42;;;;:::i;:::-;47587:11;:57;;47579:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47333:351;47722:11;47715:4;;:18;;;;:::i;:::-;47702:9;:31;47694:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47789:11;47766:14;:19;47781:3;47766:19;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;47295:513;47819:9;47831:1;47819:13;;47814:86;47839:11;47834:1;:16;47814:86;;47866:26;47876:3;47890:1;47881:6;:10;;;;:::i;:::-;47866:9;:26::i;:::-;47852:3;;;;;:::i;:::-;;;;47814:86;;;;47083:822;;;:::o;29397:185::-;29535:39;29552:4;29558:2;29562:7;29535:39;;;;;;;;;;;;:16;:39::i;:::-;29397:185;;;:::o;47911:348::-;47986:16;48014:23;48040:17;48050:6;48040:9;:17::i;:::-;48014:43;;48064:25;48106:15;48092:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48064:58;;48134:9;48129:103;48149:15;48145:1;:19;48129:103;;;48194:30;48214:6;48222:1;48194:19;:30::i;:::-;48180:8;48189:1;48180:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;48166:3;;;;;:::i;:::-;;;;48129:103;;;;48245:8;48238:15;;;;47911:348;;;:::o;49771:93::-;4544:13;:11;:13::i;:::-;49854:4:::1;49833:11;:18;49845:5;49833:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;49771:93:::0;:::o;40873:233::-;40948:7;40984:30;:28;:30::i;:::-;40976:5;:38;40968:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41081:10;41092:5;41081:17;;;;;;;;;;;;;;;;;;;;;;;;41074:24;;40873:233;;;:::o;46597:28::-;;;;;;;;;;;;;:::o;49047:98::-;4544:13;:11;:13::i;:::-;49128:11:::1;49118:7;:21;;;;;;;;;;;;:::i;:::-;;49047:98:::0;:::o;46566:26::-;;;;;;;;;;;;;:::o;26488:222::-;26560:7;26580:13;26596:7;:16;26604:7;26596:16;;;;;;;;;;;;;;;;;;;;;26580:32;;26648:1;26631:19;;:5;:19;;;;26623:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26697:5;26690:12;;;26488:222;;;:::o;46339:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26219:207::-;26291:7;26336:1;26319:19;;:5;:19;;;;26311:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26402:9;:16;26412:5;26402:16;;;;;;;;;;;;;;;;26395:23;;26219:207;;;:::o;5306:103::-;4544:13;:11;:13::i;:::-;5371:30:::1;5398:1;5371:18;:30::i;:::-;5306:103::o:0;4658:87::-;4704:7;4731:6;;;;;;;;;;;4724:13;;4658:87;:::o;48967:74::-;4544:13;:11;:13::i;:::-;49029:6:::1;49022:4;:13;;;;48967:74:::0;:::o;26946:104::-;27002:13;27035:7;27028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26946:104;:::o;46630:32::-;;;;;;;;;;;;;:::o;28533:155::-;28628:52;28647:12;:10;:12::i;:::-;28661:8;28671;28628:18;:52::i;:::-;28533:155;;:::o;49387:108::-;4544:13;:11;:13::i;:::-;49483:6:::1;49460:20;:29;;;;49387:108:::0;:::o;48768:65::-;4544:13;:11;:13::i;:::-;48823:4:::1;48812:8;;:15;;;;;;;;;;;;;;;;;;48768:65::o:0;46521:40::-;;;;:::o;29653:323::-;29827:41;29846:12;:10;:12::i;:::-;29860:7;29827:18;:41::i;:::-;29819:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29930:38;29944:4;29950:2;29954:7;29963:4;29930:13;:38::i;:::-;29653:323;;;;:::o;46365:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48265:497::-;48363:13;48404:16;48412:7;48404;:16::i;:::-;48388:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48513:5;48501:17;;:8;;;;;;;;;;;:17;;;48498:62;;;48538:14;48531:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48498:62;48568:28;48599:10;:8;:10::i;:::-;48568:41;;48654:1;48629:14;48623:28;:32;:133;;;;;;;;;;;;;;;;;48691:14;48707:18;:7;:16;:18::i;:::-;48727:13;48674:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48623:133;48616:140;;;48265:497;;;;:::o;46480:36::-;;;;:::o;46444:31::-;;;;:::o;46700:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;49151:122::-;4544:13;:11;:13::i;:::-;49250:17:::1;49234:13;:33;;;;;;;;;;;;:::i;:::-;;49151:122:::0;:::o;28759:164::-;28856:4;28880:18;:25;28899:5;28880:25;;;;;;;;;;;;;;;:35;28906:8;28880:35;;;;;;;;;;;;;;;;;;;;;;;;;28873:42;;28759:164;;;;:::o;48841:120::-;4544:13;:11;:13::i;:::-;48940:15:::1;48923:14;:32;;;;;;;;;;;;:::i;:::-;;48841:120:::0;:::o;5564:201::-;4544:13;:11;:13::i;:::-;5673:1:::1;5653:22;;:8;:22;;;;5645:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5729:28;5748:8;5729:18;:28::i;:::-;5564:201:::0;:::o;25850:305::-;25952:4;26004:25;25989:40;;;:11;:40;;;;:105;;;;26061:33;26046:48;;;:11;:48;;;;25989:105;:158;;;;26111:36;26135:11;26111:23;:36::i;:::-;25989:158;25969:178;;25850:305;;;:::o;4823:132::-;4898:12;:10;:12::i;:::-;4887:23;;:7;:5;:7::i;:::-;:23;;;4879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4823:132::o;36265:135::-;36347:16;36355:7;36347;:16::i;:::-;36339:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36265:135;:::o;3209:98::-;3262:7;3289:10;3282:17;;3209:98;:::o;35544:174::-;35646:2;35619:15;:24;35635:7;35619:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35702:7;35698:2;35664:46;;35673:23;35688:7;35673:14;:23::i;:::-;35664:46;;;;;;;;;;;;35544:174;;:::o;31777:264::-;31870:4;31887:13;31903:23;31918:7;31903:14;:23::i;:::-;31887:39;;31956:5;31945:16;;:7;:16;;;:52;;;;31965:32;31982:5;31989:7;31965:16;:32::i;:::-;31945:52;:87;;;;32025:7;32001:31;;:20;32013:7;32001:11;:20::i;:::-;:31;;;31945:87;31937:96;;;31777:264;;;;:::o;34800:625::-;34959:4;34932:31;;:23;34947:7;34932:14;:23::i;:::-;:31;;;34924:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35038:1;35024:16;;:2;:16;;;;35016:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35094:39;35115:4;35121:2;35125:7;35094:20;:39::i;:::-;35198:29;35215:1;35219:7;35198:8;:29::i;:::-;35259:1;35240:9;:15;35250:4;35240:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35288:1;35271:9;:13;35281:2;35271:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35319:2;35300:7;:16;35308:7;35300:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35358:7;35354:2;35339:27;;35348:4;35339:27;;;;;;;;;;;;35379:38;35399:4;35405:2;35409:7;35379:19;:38::i;:::-;34800:625;;;:::o;32383:110::-;32459:26;32469:2;32473:7;32459:26;;;;;;;;;;;;:9;:26::i;:::-;32383:110;;:::o;5925:191::-;5999:16;6018:6;;;;;;;;;;;5999:25;;6044:8;6035:6;;:17;;;;;;;;;;;;;;;;;;6099:8;6068:40;;6089:8;6068:40;;;;;;;;;;;;5925:191;;:::o;35861:315::-;36016:8;36007:17;;:5;:17;;;;35999:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36103:8;36065:18;:25;36084:5;36065:25;;;;;;;;;;;;;;;:35;36091:8;36065:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36149:8;36127:41;;36142:5;36127:41;;;36159:8;36127:41;;;;;;:::i;:::-;;;;;;;;35861:315;;;:::o;30857:313::-;31013:28;31023:4;31029:2;31033:7;31013:9;:28::i;:::-;31060:47;31083:4;31089:2;31093:7;31102:4;31060:22;:47::i;:::-;31052:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30857:313;;;;:::o;31483:127::-;31548:4;31600:1;31572:30;;:7;:16;31580:7;31572:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31565:37;;31483:127;;;:::o;46975:102::-;47035:13;47064:7;47057:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46975:102;:::o;463:723::-;519:13;749:1;740:5;:10;736:53;;;767:10;;;;;;;;;;;;;;;;;;;;;736:53;799:12;814:5;799:20;;830:14;855:78;870:1;862:4;:9;855:78;;888:8;;;;;:::i;:::-;;;;919:2;911:10;;;;;:::i;:::-;;;855:78;;;943:19;975:6;965:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;943:39;;993:154;1009:1;1000:5;:10;993:154;;1037:1;1027:11;;;;;:::i;:::-;;;1104:2;1096:5;:10;;;;:::i;:::-;1083:2;:24;;;;:::i;:::-;1070:39;;1053:6;1060;1053:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1133:2;1124:11;;;;;:::i;:::-;;;993:154;;;1171:6;1157:21;;;;;463:723;;;;:::o;17512:157::-;17597:4;17636:25;17621:40;;;:11;:40;;;;17614:47;;17512:157;;;:::o;41719:589::-;41863:45;41890:4;41896:2;41900:7;41863:26;:45::i;:::-;41941:1;41925:18;;:4;:18;;;41921:187;;;41960:40;41992:7;41960:31;:40::i;:::-;41921:187;;;42030:2;42022:10;;:4;:10;;;42018:90;;42049:47;42082:4;42088:7;42049:32;:47::i;:::-;42018:90;41921:187;42136:1;42122:16;;:2;:16;;;42118:183;;;42155:45;42192:7;42155:36;:45::i;:::-;42118:183;;;42228:4;42222:10;;:2;:10;;;42218:83;;42249:40;42277:2;42281:7;42249:27;:40::i;:::-;42218:83;42118:183;41719:589;;;:::o;38900:125::-;;;;:::o;32720:319::-;32849:18;32855:2;32859:7;32849:5;:18::i;:::-;32900:53;32931:1;32935:2;32939:7;32948:4;32900:22;:53::i;:::-;32878:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32720:319;;;:::o;36964:853::-;37118:4;37139:15;:2;:13;;;:15::i;:::-;37135:675;;;37191:2;37175:36;;;37212:12;:10;:12::i;:::-;37226:4;37232:7;37241:4;37175:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37171:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37433:1;37416:6;:13;:18;37412:328;;;37459:60;;;;;;;;;;:::i;:::-;;;;;;;;37412:328;37690:6;37684:13;37675:6;37671:2;37667:15;37660:38;37171:584;37307:41;;;37297:51;;;:6;:51;;;;37290:58;;;;;37135:675;37794:4;37787:11;;36964:853;;;;;;;:::o;38389:126::-;;;;:::o;43031:164::-;43135:10;:17;;;;43108:15;:24;43124:7;43108:24;;;;;;;;;;;:44;;;;43163:10;43179:7;43163:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43031:164;:::o;43822:988::-;44088:22;44138:1;44113:22;44130:4;44113:16;:22::i;:::-;:26;;;;:::i;:::-;44088:51;;44150:18;44171:17;:26;44189:7;44171:26;;;;;;;;;;;;44150:47;;44318:14;44304:10;:28;44300:328;;44349:19;44371:12;:18;44384:4;44371:18;;;;;;;;;;;;;;;:34;44390:14;44371:34;;;;;;;;;;;;44349:56;;44455:11;44422:12;:18;44435:4;44422:18;;;;;;;;;;;;;;;:30;44441:10;44422:30;;;;;;;;;;;:44;;;;44572:10;44539:17;:30;44557:11;44539:30;;;;;;;;;;;:43;;;;44300:328;;44724:17;:26;44742:7;44724:26;;;;;;;;;;;44717:33;;;44768:12;:18;44781:4;44768:18;;;;;;;;;;;;;;;:34;44787:14;44768:34;;;;;;;;;;;44761:41;;;43822:988;;;;:::o;45105:1079::-;45358:22;45403:1;45383:10;:17;;;;:21;;;;:::i;:::-;45358:46;;45415:18;45436:15;:24;45452:7;45436:24;;;;;;;;;;;;45415:45;;45787:19;45809:10;45820:14;45809:26;;;;;;;;;;;;;;;;;;;;;;;;45787:48;;45873:11;45848:10;45859;45848:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;45984:10;45953:15;:28;45969:11;45953:28;;;;;;;;;;;:41;;;;46125:15;:24;46141:7;46125:24;;;;;;;;;;;46118:31;;;46160:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45105:1079;;;;:::o;42609:221::-;42694:14;42711:20;42728:2;42711:16;:20::i;:::-;42694:37;;42769:7;42742:12;:16;42755:2;42742:16;;;;;;;;;;;;;;;:24;42759:6;42742:24;;;;;;;;;;;:34;;;;42816:6;42787:17;:26;42805:7;42787:26;;;;;;;;;;;:35;;;;42609:221;;;:::o;33375:439::-;33469:1;33455:16;;:2;:16;;;;33447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33528:16;33536:7;33528;:16::i;:::-;33527:17;33519:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33590:45;33619:1;33623:2;33627:7;33590:20;:45::i;:::-;33665:1;33648:9;:13;33658:2;33648:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33696:2;33677:7;:16;33685:7;33677:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33741:7;33737:2;33716:33;;33733:1;33716:33;;;;;;;;;;;;33762:44;33790:1;33794:2;33798:7;33762:19;:44::i;:::-;33375:439;;:::o;7356:326::-;7416:4;7673:1;7651:7;:19;;;:23;7644:30;;7356:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:179::-;;6438:46;6480:3;6472:6;6438:46;:::i;:::-;6516:4;6511:3;6507:14;6493:28;;6428:99;;;;:::o;6533:118::-;6620:24;6638:5;6620:24;:::i;:::-;6615:3;6608:37;6598:53;;:::o;6687:732::-;;6835:54;6883:5;6835:54;:::i;:::-;6905:86;6984:6;6979:3;6905:86;:::i;:::-;6898:93;;7015:56;7065:5;7015:56;:::i;:::-;7094:7;7125:1;7110:284;7135:6;7132:1;7129:13;7110:284;;;7211:6;7205:13;7238:63;7297:3;7282:13;7238:63;:::i;:::-;7231:70;;7324:60;7377:6;7324:60;:::i;:::-;7314:70;;7170:224;7157:1;7154;7150:9;7145:14;;7110:284;;;7114:14;7410:3;7403:10;;6811:608;;;;;;;:::o;7425:109::-;7506:21;7521:5;7506:21;:::i;:::-;7501:3;7494:34;7484:50;;:::o;7540:360::-;;7654:38;7686:5;7654:38;:::i;:::-;7708:70;7771:6;7766:3;7708:70;:::i;:::-;7701:77;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:29;7886:6;7864:29;:::i;:::-;7859:3;7855:39;7848:46;;7630:270;;;;;:::o;7906:364::-;;8022:39;8055:5;8022:39;:::i;:::-;8077:71;8141:6;8136:3;8077:71;:::i;:::-;8070:78;;8157:52;8202:6;8197:3;8190:4;8183:5;8179:16;8157:52;:::i;:::-;8234:29;8256:6;8234:29;:::i;:::-;8229:3;8225:39;8218:46;;7998:272;;;;;:::o;8276:377::-;;8410:39;8443:5;8410:39;:::i;:::-;8465:89;8547:6;8542:3;8465:89;:::i;:::-;8458:96;;8563:52;8608:6;8603:3;8596:4;8589:5;8585:16;8563:52;:::i;:::-;8640:6;8635:3;8631:16;8624:23;;8386:267;;;;;:::o;8683:845::-;;8823:5;8817:12;8852:36;8878:9;8852:36;:::i;:::-;8904:89;8986:6;8981:3;8904:89;:::i;:::-;8897:96;;9024:1;9013:9;9009:17;9040:1;9035:137;;;;9186:1;9181:341;;;;9002:520;;9035:137;9119:4;9115:9;9104;9100:25;9095:3;9088:38;9155:6;9150:3;9146:16;9139:23;;9035:137;;9181:341;9248:38;9280:5;9248:38;:::i;:::-;9308:1;9322:154;9336:6;9333:1;9330:13;9322:154;;;9410:7;9404:14;9400:1;9395:3;9391:11;9384:35;9460:1;9451:7;9447:15;9436:26;;9358:4;9355:1;9351:12;9346:17;;9322:154;;;9505:6;9500:3;9496:16;9489:23;;9188:334;;9002:520;;8790:738;;;;;;:::o;9534:366::-;;9697:67;9761:2;9756:3;9697:67;:::i;:::-;9690:74;;9773:93;9862:3;9773:93;:::i;:::-;9891:2;9886:3;9882:12;9875:19;;9680:220;;;:::o;9906:366::-;;10069:67;10133:2;10128:3;10069:67;:::i;:::-;10062:74;;10145:93;10234:3;10145:93;:::i;:::-;10263:2;10258:3;10254:12;10247:19;;10052:220;;;:::o;10278:366::-;;10441:67;10505:2;10500:3;10441:67;:::i;:::-;10434:74;;10517:93;10606:3;10517:93;:::i;:::-;10635:2;10630:3;10626:12;10619:19;;10424:220;;;:::o;10650:366::-;;10813:67;10877:2;10872:3;10813:67;:::i;:::-;10806:74;;10889:93;10978:3;10889:93;:::i;:::-;11007:2;11002:3;10998:12;10991:19;;10796:220;;;:::o;11022:366::-;;11185:67;11249:2;11244:3;11185:67;:::i;:::-;11178:74;;11261:93;11350:3;11261:93;:::i;:::-;11379:2;11374:3;11370:12;11363:19;;11168:220;;;:::o;11394:366::-;;11557:67;11621:2;11616:3;11557:67;:::i;:::-;11550:74;;11633:93;11722:3;11633:93;:::i;:::-;11751:2;11746:3;11742:12;11735:19;;11540:220;;;:::o;11766:366::-;;11929:67;11993:2;11988:3;11929:67;:::i;:::-;11922:74;;12005:93;12094:3;12005:93;:::i;:::-;12123:2;12118:3;12114:12;12107:19;;11912:220;;;:::o;12138:366::-;;12301:67;12365:2;12360:3;12301:67;:::i;:::-;12294:74;;12377:93;12466:3;12377:93;:::i;:::-;12495:2;12490:3;12486:12;12479:19;;12284:220;;;:::o;12510:366::-;;12673:67;12737:2;12732:3;12673:67;:::i;:::-;12666:74;;12749:93;12838:3;12749:93;:::i;:::-;12867:2;12862:3;12858:12;12851:19;;12656:220;;;:::o;12882:366::-;;13045:67;13109:2;13104:3;13045:67;:::i;:::-;13038:74;;13121:93;13210:3;13121:93;:::i;:::-;13239:2;13234:3;13230:12;13223:19;;13028:220;;;:::o;13254:366::-;;13417:67;13481:2;13476:3;13417:67;:::i;:::-;13410:74;;13493:93;13582:3;13493:93;:::i;:::-;13611:2;13606:3;13602:12;13595:19;;13400:220;;;:::o;13626:366::-;;13789:67;13853:2;13848:3;13789:67;:::i;:::-;13782:74;;13865:93;13954:3;13865:93;:::i;:::-;13983:2;13978:3;13974:12;13967:19;;13772:220;;;:::o;13998:366::-;;14161:67;14225:2;14220:3;14161:67;:::i;:::-;14154:74;;14237:93;14326:3;14237:93;:::i;:::-;14355:2;14350:3;14346:12;14339:19;;14144:220;;;:::o;14370:366::-;;14533:67;14597:2;14592:3;14533:67;:::i;:::-;14526:74;;14609:93;14698:3;14609:93;:::i;:::-;14727:2;14722:3;14718:12;14711:19;;14516:220;;;:::o;14742:366::-;;14905:67;14969:2;14964:3;14905:67;:::i;:::-;14898:74;;14981:93;15070:3;14981:93;:::i;:::-;15099:2;15094:3;15090:12;15083:19;;14888:220;;;:::o;15114:366::-;;15277:67;15341:2;15336:3;15277:67;:::i;:::-;15270:74;;15353:93;15442:3;15353:93;:::i;:::-;15471:2;15466:3;15462:12;15455:19;;15260:220;;;:::o;15486:366::-;;15649:67;15713:2;15708:3;15649:67;:::i;:::-;15642:74;;15725:93;15814:3;15725:93;:::i;:::-;15843:2;15838:3;15834:12;15827:19;;15632:220;;;:::o;15858:366::-;;16021:67;16085:2;16080:3;16021:67;:::i;:::-;16014:74;;16097:93;16186:3;16097:93;:::i;:::-;16215:2;16210:3;16206:12;16199:19;;16004:220;;;:::o;16230:366::-;;16393:67;16457:2;16452:3;16393:67;:::i;:::-;16386:74;;16469:93;16558:3;16469:93;:::i;:::-;16587:2;16582:3;16578:12;16571:19;;16376:220;;;:::o;16602:366::-;;16765:67;16829:2;16824:3;16765:67;:::i;:::-;16758:74;;16841:93;16930:3;16841:93;:::i;:::-;16959:2;16954:3;16950:12;16943:19;;16748:220;;;:::o;16974:108::-;17051:24;17069:5;17051:24;:::i;:::-;17046:3;17039:37;17029:53;;:::o;17088:118::-;17175:24;17193:5;17175:24;:::i;:::-;17170:3;17163:37;17153:53;;:::o;17212:589::-;;17459:95;17550:3;17541:6;17459:95;:::i;:::-;17452:102;;17571:95;17662:3;17653:6;17571:95;:::i;:::-;17564:102;;17683:92;17771:3;17762:6;17683:92;:::i;:::-;17676:99;;17792:3;17785:10;;17441:360;;;;;;:::o;17807:222::-;;17938:2;17927:9;17923:18;17915:26;;17951:71;18019:1;18008:9;18004:17;17995:6;17951:71;:::i;:::-;17905:124;;;;:::o;18035:640::-;;18268:3;18257:9;18253:19;18245:27;;18282:71;18350:1;18339:9;18335:17;18326:6;18282:71;:::i;:::-;18363:72;18431:2;18420:9;18416:18;18407:6;18363:72;:::i;:::-;18445;18513:2;18502:9;18498:18;18489:6;18445:72;:::i;:::-;18564:9;18558:4;18554:20;18549:2;18538:9;18534:18;18527:48;18592:76;18663:4;18654:6;18592:76;:::i;:::-;18584:84;;18235:440;;;;;;;:::o;18681:373::-;;18862:2;18851:9;18847:18;18839:26;;18911:9;18905:4;18901:20;18897:1;18886:9;18882:17;18875:47;18939:108;19042:4;19033:6;18939:108;:::i;:::-;18931:116;;18829:225;;;;:::o;19060:210::-;;19185:2;19174:9;19170:18;19162:26;;19198:65;19260:1;19249:9;19245:17;19236:6;19198:65;:::i;:::-;19152:118;;;;:::o;19276:313::-;;19427:2;19416:9;19412:18;19404:26;;19476:9;19470:4;19466:20;19462:1;19451:9;19447:17;19440:47;19504:78;19577:4;19568:6;19504:78;:::i;:::-;19496:86;;19394:195;;;;:::o;19595:419::-;;19799:2;19788:9;19784:18;19776:26;;19848:9;19842:4;19838:20;19834:1;19823:9;19819:17;19812:47;19876:131;20002:4;19876:131;:::i;:::-;19868:139;;19766:248;;;:::o;20020:419::-;;20224:2;20213:9;20209:18;20201:26;;20273:9;20267:4;20263:20;20259:1;20248:9;20244:17;20237:47;20301:131;20427:4;20301:131;:::i;:::-;20293:139;;20191:248;;;:::o;20445:419::-;;20649:2;20638:9;20634:18;20626:26;;20698:9;20692:4;20688:20;20684:1;20673:9;20669:17;20662:47;20726:131;20852:4;20726:131;:::i;:::-;20718:139;;20616:248;;;:::o;20870:419::-;;21074:2;21063:9;21059:18;21051:26;;21123:9;21117:4;21113:20;21109:1;21098:9;21094:17;21087:47;21151:131;21277:4;21151:131;:::i;:::-;21143:139;;21041:248;;;:::o;21295:419::-;;21499:2;21488:9;21484:18;21476:26;;21548:9;21542:4;21538:20;21534:1;21523:9;21519:17;21512:47;21576:131;21702:4;21576:131;:::i;:::-;21568:139;;21466:248;;;:::o;21720:419::-;;21924:2;21913:9;21909:18;21901:26;;21973:9;21967:4;21963:20;21959:1;21948:9;21944:17;21937:47;22001:131;22127:4;22001:131;:::i;:::-;21993:139;;21891:248;;;:::o;22145:419::-;;22349:2;22338:9;22334:18;22326:26;;22398:9;22392:4;22388:20;22384:1;22373:9;22369:17;22362:47;22426:131;22552:4;22426:131;:::i;:::-;22418:139;;22316:248;;;:::o;22570:419::-;;22774:2;22763:9;22759:18;22751:26;;22823:9;22817:4;22813:20;22809:1;22798:9;22794:17;22787:47;22851:131;22977:4;22851:131;:::i;:::-;22843:139;;22741:248;;;:::o;22995:419::-;;23199:2;23188:9;23184:18;23176:26;;23248:9;23242:4;23238:20;23234:1;23223:9;23219:17;23212:47;23276:131;23402:4;23276:131;:::i;:::-;23268:139;;23166:248;;;:::o;23420:419::-;;23624:2;23613:9;23609:18;23601:26;;23673:9;23667:4;23663:20;23659:1;23648:9;23644:17;23637:47;23701:131;23827:4;23701:131;:::i;:::-;23693:139;;23591:248;;;:::o;23845:419::-;;24049:2;24038:9;24034:18;24026:26;;24098:9;24092:4;24088:20;24084:1;24073:9;24069:17;24062:47;24126:131;24252:4;24126:131;:::i;:::-;24118:139;;24016:248;;;:::o;24270:419::-;;24474:2;24463:9;24459:18;24451:26;;24523:9;24517:4;24513:20;24509:1;24498:9;24494:17;24487:47;24551:131;24677:4;24551:131;:::i;:::-;24543:139;;24441:248;;;:::o;24695:419::-;;24899:2;24888:9;24884:18;24876:26;;24948:9;24942:4;24938:20;24934:1;24923:9;24919:17;24912:47;24976:131;25102:4;24976:131;:::i;:::-;24968:139;;24866:248;;;:::o;25120:419::-;;25324:2;25313:9;25309:18;25301:26;;25373:9;25367:4;25363:20;25359:1;25348:9;25344:17;25337:47;25401:131;25527:4;25401:131;:::i;:::-;25393:139;;25291:248;;;:::o;25545:419::-;;25749:2;25738:9;25734:18;25726:26;;25798:9;25792:4;25788:20;25784:1;25773:9;25769:17;25762:47;25826:131;25952:4;25826:131;:::i;:::-;25818:139;;25716:248;;;:::o;25970:419::-;;26174:2;26163:9;26159:18;26151:26;;26223:9;26217:4;26213:20;26209:1;26198:9;26194:17;26187:47;26251:131;26377:4;26251:131;:::i;:::-;26243:139;;26141:248;;;:::o;26395:419::-;;26599:2;26588:9;26584:18;26576:26;;26648:9;26642:4;26638:20;26634:1;26623:9;26619:17;26612:47;26676:131;26802:4;26676:131;:::i;:::-;26668:139;;26566:248;;;:::o;26820:419::-;;27024:2;27013:9;27009:18;27001:26;;27073:9;27067:4;27063:20;27059:1;27048:9;27044:17;27037:47;27101:131;27227:4;27101:131;:::i;:::-;27093:139;;26991:248;;;:::o;27245:419::-;;27449:2;27438:9;27434:18;27426:26;;27498:9;27492:4;27488:20;27484:1;27473:9;27469:17;27462:47;27526:131;27652:4;27526:131;:::i;:::-;27518:139;;27416:248;;;:::o;27670:419::-;;27874:2;27863:9;27859:18;27851:26;;27923:9;27917:4;27913:20;27909:1;27898:9;27894:17;27887:47;27951:131;28077:4;27951:131;:::i;:::-;27943:139;;27841:248;;;:::o;28095:222::-;;28226:2;28215:9;28211:18;28203:26;;28239:71;28307:1;28296:9;28292:17;28283:6;28239:71;:::i;:::-;28193:124;;;;:::o;28323:129::-;;28384:20;;:::i;:::-;28374:30;;28413:33;28441:4;28433:6;28413:33;:::i;:::-;28364:88;;;:::o;28458:75::-;;28524:2;28518:9;28508:19;;28498:35;:::o;28539:307::-;;28690:18;28682:6;28679:30;28676:2;;;28712:18;;:::i;:::-;28676:2;28750:29;28772:6;28750:29;:::i;:::-;28742:37;;28834:4;28828;28824:15;28816:23;;28605:241;;;:::o;28852:308::-;;29004:18;28996:6;28993:30;28990:2;;;29026:18;;:::i;:::-;28990:2;29064:29;29086:6;29064:29;:::i;:::-;29056:37;;29148:4;29142;29138:15;29130:23;;28919:241;;;:::o;29166:132::-;;29256:3;29248:11;;29286:4;29281:3;29277:14;29269:22;;29238:60;;;:::o;29304:141::-;;29376:3;29368:11;;29399:3;29396:1;29389:14;29433:4;29430:1;29420:18;29412:26;;29358:87;;;:::o;29451:114::-;;29552:5;29546:12;29536:22;;29525:40;;;:::o;29571:98::-;;29656:5;29650:12;29640:22;;29629:40;;;:::o;29675:99::-;;29761:5;29755:12;29745:22;;29734:40;;;:::o;29780:113::-;;29882:4;29877:3;29873:14;29865:22;;29855:38;;;:::o;29899:184::-;;30032:6;30027:3;30020:19;30072:4;30067:3;30063:14;30048:29;;30010:73;;;;:::o;30089:168::-;;30206:6;30201:3;30194:19;30246:4;30241:3;30237:14;30222:29;;30184:73;;;;:::o;30263:169::-;;30381:6;30376:3;30369:19;30421:4;30416:3;30412:14;30397:29;;30359:73;;;;:::o;30438:148::-;;30577:3;30562:18;;30552:34;;;;:::o;30592:305::-;;30651:20;30669:1;30651:20;:::i;:::-;30646:25;;30685:20;30703:1;30685:20;:::i;:::-;30680:25;;30839:1;30771:66;30767:74;30764:1;30761:81;30758:2;;;30845:18;;:::i;:::-;30758:2;30889:1;30886;30882:9;30875:16;;30636:261;;;;:::o;30903:185::-;;30960:20;30978:1;30960:20;:::i;:::-;30955:25;;30994:20;31012:1;30994:20;:::i;:::-;30989:25;;31033:1;31023:2;;31038:18;;:::i;:::-;31023:2;31080:1;31077;31073:9;31068:14;;30945:143;;;;:::o;31094:348::-;;31157:20;31175:1;31157:20;:::i;:::-;31152:25;;31191:20;31209:1;31191:20;:::i;:::-;31186:25;;31379:1;31311:66;31307:74;31304:1;31301:81;31296:1;31289:9;31282:17;31278:105;31275:2;;;31386:18;;:::i;:::-;31275:2;31434:1;31431;31427:9;31416:20;;31142:300;;;;:::o;31448:191::-;;31508:20;31526:1;31508:20;:::i;:::-;31503:25;;31542:20;31560:1;31542:20;:::i;:::-;31537:25;;31581:1;31578;31575:8;31572:2;;;31586:18;;:::i;:::-;31572:2;31631:1;31628;31624:9;31616:17;;31493:146;;;;:::o;31645:96::-;;31711:24;31729:5;31711:24;:::i;:::-;31700:35;;31690:51;;;:::o;31747:90::-;;31824:5;31817:13;31810:21;31799:32;;31789:48;;;:::o;31843:149::-;;31919:66;31912:5;31908:78;31897:89;;31887:105;;;:::o;31998:126::-;;32075:42;32068:5;32064:54;32053:65;;32043:81;;;:::o;32130:77::-;;32196:5;32185:16;;32175:32;;;:::o;32213:154::-;32297:6;32292:3;32287;32274:30;32359:1;32350:6;32345:3;32341:16;32334:27;32264:103;;;:::o;32373:307::-;32441:1;32451:113;32465:6;32462:1;32459:13;32451:113;;;32550:1;32545:3;32541:11;32535:18;32531:1;32526:3;32522:11;32515:39;32487:2;32484:1;32480:10;32475:15;;32451:113;;;32582:6;32579:1;32576:13;32573:2;;;32662:1;32653:6;32648:3;32644:16;32637:27;32573:2;32422:258;;;;:::o;32686:320::-;;32767:1;32761:4;32757:12;32747:22;;32814:1;32808:4;32804:12;32835:18;32825:2;;32891:4;32883:6;32879:17;32869:27;;32825:2;32953;32945:6;32942:14;32922:18;32919:38;32916:2;;;32972:18;;:::i;:::-;32916:2;32737:269;;;;:::o;33012:281::-;33095:27;33117:4;33095:27;:::i;:::-;33087:6;33083:40;33225:6;33213:10;33210:22;33189:18;33177:10;33174:34;33171:62;33168:2;;;33236:18;;:::i;:::-;33168:2;33276:10;33272:2;33265:22;33055:238;;;:::o;33299:233::-;;33361:24;33379:5;33361:24;:::i;:::-;33352:33;;33407:66;33400:5;33397:77;33394:2;;;33477:18;;:::i;:::-;33394:2;33524:1;33517:5;33513:13;33506:20;;33342:190;;;:::o;33538:176::-;;33587:20;33605:1;33587:20;:::i;:::-;33582:25;;33621:20;33639:1;33621:20;:::i;:::-;33616:25;;33660:1;33650:2;;33665:18;;:::i;:::-;33650:2;33706:1;33703;33699:9;33694:14;;33572:142;;;;:::o;33720:180::-;33768:77;33765:1;33758:88;33865:4;33862:1;33855:15;33889:4;33886:1;33879:15;33906:180;33954:77;33951:1;33944:88;34051:4;34048:1;34041:15;34075:4;34072:1;34065:15;34092:180;34140:77;34137:1;34130:88;34237:4;34234:1;34227:15;34261:4;34258:1;34251:15;34278:180;34326:77;34323:1;34316:88;34423:4;34420:1;34413:15;34447:4;34444:1;34437:15;34464:102;;34556:2;34552:7;34547:2;34540:5;34536:14;34532:28;34522:38;;34512:54;;;:::o;34572:230::-;34712:34;34708:1;34700:6;34696:14;34689:58;34781:13;34776:2;34768:6;34764:15;34757:38;34678:124;:::o;34808:237::-;34948:34;34944:1;34936:6;34932:14;34925:58;35017:20;35012:2;35004:6;35000:15;34993:45;34914:131;:::o;35051:225::-;35191:34;35187:1;35179:6;35175:14;35168:58;35260:8;35255:2;35247:6;35243:15;35236:33;35157:119;:::o;35282:166::-;35422:18;35418:1;35410:6;35406:14;35399:42;35388:60;:::o;35454:224::-;35594:34;35590:1;35582:6;35578:14;35571:58;35663:7;35658:2;35650:6;35646:15;35639:32;35560:118;:::o;35684:178::-;35824:30;35820:1;35812:6;35808:14;35801:54;35790:72;:::o;35868:223::-;36008:34;36004:1;35996:6;35992:14;35985:58;36077:6;36072:2;36064:6;36060:15;36053:31;35974:117;:::o;36097:175::-;36237:27;36233:1;36225:6;36221:14;36214:51;36203:69;:::o;36278:228::-;36418:34;36414:1;36406:6;36402:14;36395:58;36487:11;36482:2;36474:6;36470:15;36463:36;36384:122;:::o;36512:180::-;36652:32;36648:1;36640:6;36636:14;36629:56;36618:74;:::o;36698:249::-;36838:34;36834:1;36826:6;36822:14;36815:58;36907:32;36902:2;36894:6;36890:15;36883:57;36804:143;:::o;36953:182::-;37093:34;37089:1;37081:6;37077:14;37070:58;37059:76;:::o;37141:182::-;37281:34;37277:1;37269:6;37265:14;37258:58;37247:76;:::o;37329:234::-;37469:34;37465:1;37457:6;37453:14;37446:58;37538:17;37533:2;37525:6;37521:15;37514:42;37435:128;:::o;37569:220::-;37709:34;37705:1;37697:6;37693:14;37686:58;37778:3;37773:2;37765:6;37761:15;37754:28;37675:114;:::o;37795:173::-;37935:25;37931:1;37923:6;37919:14;37912:49;37901:67;:::o;37974:174::-;38114:26;38110:1;38102:6;38098:14;38091:50;38080:68;:::o;38154:220::-;38294:34;38290:1;38282:6;38278:14;38271:58;38363:3;38358:2;38350:6;38346:15;38339:28;38260:114;:::o;38380:231::-;38520:34;38516:1;38508:6;38504:14;38497:58;38589:14;38584:2;38576:6;38572:15;38565:39;38486:125;:::o;38617:233::-;38757:34;38753:1;38745:6;38741:14;38734:58;38826:16;38821:2;38813:6;38809:15;38802:41;38723:127;:::o;38856:122::-;38929:24;38947:5;38929:24;:::i;:::-;38922:5;38919:35;38909:2;;38968:1;38965;38958:12;38909:2;38899:79;:::o;38984:116::-;39054:21;39069:5;39054:21;:::i;:::-;39047:5;39044:32;39034:2;;39090:1;39087;39080:12;39034:2;39024:76;:::o;39106:120::-;39178:23;39195:5;39178:23;:::i;:::-;39171:5;39168:34;39158:2;;39216:1;39213;39206:12;39158:2;39148:78;:::o;39232:122::-;39305:24;39323:5;39305:24;:::i;:::-;39298:5;39295:35;39285:2;;39344:1;39341;39334:12;39285:2;39275:79;:::o
Swarm Source
ipfs://c2b9f38c31e6f312c317bf1e09d7cbe68b9d9b4021bdd7ff38fc486d5df903f0
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.