ERC-721
NFT
Overview
Max Total Supply
307 CATURDAY
Holders
104
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CATURDAYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CATURDAYTALES_NFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-09 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (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.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.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: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (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/Cat-test-compile.sol // /\_/\ /\_/\ /\_/\ /\_/\ /\_/\ /\_/\ // ( o.o ) ( o.~ ) ( ♥.♥ ) ( ✿.o ) ( o.< ) ( x.x ) // > ^ < > ^ < > ^ < > ^ < > ^ < > ^ < // ___ __ ____ _ _ ____ ____ __ _ _ ____ __ __ ____ ____ __ _ ____ ____ // / __) / _\(_ _)/ )( \( _ \( \ / _\ ( \/ ) (_ _)/ _\ ( ) ( __)/ ___) ( ( \( __)(_ _) // ( (__ / \ )( ) \/ ( ) / ) D (/ \ ) / )( / \/ (_/\ ) _) \___ \ / / ) _) )( // \___)\_/\_/(__) \____/(__\_)(____/\_/\_/(__/ (__)\_/\_/\____/(____)(____/ \_)__)(__) (__) // Thanks to Hashlips for the base contract and Jon Beckers NFT Generator python script for helping us make this a reality. // This contract comes with no warranty and by interacting with it, you bear all responsibility. We make no claims as to its security or stability. // Follow us at https://twitter.com/caturdaytales and learn more at https://www.caturdaytales.com pragma solidity ^0.8.0; // Imports contract CATURDAYTALES_NFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.045 ether; uint256 public maxSupply = 5555; //Total number of NFTS available uint256 public maxMintAmount = 5; //Max mint in one transaction uint256 public nftPerAddressLimit = 25; //Max mintable by one address bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = false; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; // project addresses address cat1 = 0x1BC73bB97D25657928Dd8cd54E6cD12672bf4523; //Ready_B address cat2 = 0x6CCE79E7A8cfC0300D45A7587FBf0E07527336D1; //Ready_D address cat3 = 0x44AFC4bdF2de4e1d6bFC7cad759483d18befa168; //Ready_R address cat4 = 0x6798EE3EABe1f7045BE7F0dDF958D12F121BA92b; // MAKE THIS THE DEPLOYER WALLET // These will be set at deploy constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); // Mint for team and giveaways _safeMint(cat1, 1); _safeMint(cat2, 2); _safeMint(cat3, 3); mint(2); // Mint 2 tokens to the DEPLOYER wallet } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "The Contract is Pawsed"); uint256 supply = totalSupply(); require(_mintAmount > 0, "Need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "Max NFT requested exceeds available cats"); if (msg.sender != owner()) { //allows the owner to mint for free, else process through whitelist and regular mint. if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "Address is not whitelisted"); } uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded"); require(msg.value >= cost * _mintAmount, "Insufficient Funds"); } // Starts the token number at 1, not zero for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxSupply(uint256 _newmaxSupply) public onlyOwner { maxSupply = _newmaxSupply; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdrawAll() public payable onlyOwner { uint256 _cat1share = address(this).balance * 33 / 100; //B uint256 _cat2share = address(this).balance * 6 / 100; //D uint256 _cat3share = address(this).balance * 6 / 100; //R uint256 _cat4share = address(this).balance * 55 / 100; //Team Account require(payable(cat1).send(_cat1share)); require(payable(cat2).send(_cat2share)); require(payable(cat3).send(_cat3share)); require(payable(cat4).send(_cat4share)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","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":"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":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxSupply","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":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062001401565b50669fdf42f6e48000600e556115b3600f55600560105560196011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff021916908315150217905550731bc73bb97d25657928dd8cd54e6cd12672bf4523601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736cce79e7a8cfc0300d45a7587fbf0e07527336d1601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344afc4bdf2de4e1d6bfc7cad759483d18befa168601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736798ee3eabe1f7045be7f0ddf958d12f121ba92b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200021f57600080fd5b506040516200738e3803806200738e833981810160405281019062000245919062001578565b838381600090805190602001906200025f92919062001401565b5080600190805190602001906200027892919062001401565b5050506200029b6200028f6200037860201b60201c565b6200038060201b60201c565b620002ac826200044660201b60201c565b620002bd81620004f160201b60201c565b620002f2601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200059c60201b60201c565b62000327601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660026200059c60201b60201c565b6200035c601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660036200059c60201b60201c565b6200036e6002620005c260201b60201c565b5050505062002116565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004566200037860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200047c6200095060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004cc90620019df565b60405180910390fd5b80600b9080519060200190620004ed92919062001401565b5050565b620005016200037860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005276200095060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057790620019df565b60405180910390fd5b80600d90805190602001906200059892919062001401565b5050565b620005be8282604051806020016040528060008152506200097a60201b60201c565b5050565b601260009054906101000a900460ff161562000615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060c9062001a01565b60405180910390fd5b600062000627620009e860201b60201c565b9050600082116200066f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006669062001a67565b60405180910390fd5b601054821115620006b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ae9062001979565b60405180910390fd5b600f548282620006c8919062001b15565b11156200070c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007039062001a45565b60405180910390fd5b6200071c6200095060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620008b05760011515601260029054906101000a900460ff1615151415620007c0576200077d33620009f560201b60201c565b620007bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b69062001957565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838262000815919062001b15565b111562000859576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008509062001a23565b60405180910390fd5b82600e5462000869919062001b72565b341015620008ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a59062001935565b60405180910390fd5b505b6000600190505b8281116200094b57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620009119062001d1a565b91905055506200093533828462000929919062001b15565b6200059c60201b60201c565b8080620009429062001d1a565b915050620008b7565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200098c838362000aad60201b60201c565b620009a1600084848462000c9360201b60201c565b620009e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009da90620018f1565b60405180910390fd5b505050565b6000600880549050905090565b600080600090505b60138054905081101562000aa2578273ffffffffffffffffffffffffffffffffffffffff166013828154811062000a395762000a3862001df5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000a8c57600191505062000aa8565b808062000a999062001d1a565b915050620009fd565b50600090505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1790620019bd565b60405180910390fd5b62000b318162000e4d60201b60201c565b1562000b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6b9062001913565b60405180910390fd5b62000b886000838362000eb960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bda919062001b15565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000cc18473ffffffffffffffffffffffffffffffffffffffff166200100060201b620024a61760201c565b1562000e40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000cf36200037860201b60201c565b8786866040518563ffffffff1660e01b815260040162000d1794939291906200189d565b602060405180830381600087803b15801562000d3257600080fd5b505af192505050801562000d6657506040513d601f19601f8201168201806040525081019062000d63919062001546565b60015b62000def573d806000811462000d99576040519150601f19603f3d011682016040523d82523d6000602084013e62000d9e565b606091505b5060008151141562000de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dde90620018f1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000e45565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000ed18383836200101360201b620024b91760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000f1e5762000f18816200101860201b60201c565b62000f66565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000f655762000f6483826200106160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000fb35762000fad81620011de60201b60201c565b62000ffb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000ffa5762000ff98282620012ba60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200107b846200134660201b620015311760201c565b62001087919062001bd3565b90506000600760008481526020019081526020016000205490508181146200116d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620011f4919062001bd3565b905060006009600084815260200190815260200160002054905060006008838154811062001227576200122662001df5565b5b9060005260206000200154905080600883815481106200124c576200124b62001df5565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806200129e576200129d62001dc6565b5b6001900381819060005260206000200160009055905550505050565b6000620012d2836200134660201b620015311760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620013ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013b1906200199b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200140f9062001cae565b90600052602060002090601f0160209004810192826200143357600085556200147f565b82601f106200144e57805160ff19168380011785556200147f565b828001600101855582156200147f579182015b828111156200147e57825182559160200191906001019062001461565b5b5090506200148e919062001492565b5090565b5b80821115620014ad57600081600090555060010162001493565b5090565b6000620014c8620014c28462001ab2565b62001a89565b905082815260208101848484011115620014e757620014e662001e58565b5b620014f484828562001c78565b509392505050565b6000815190506200150d81620020fc565b92915050565b600082601f8301126200152b576200152a62001e53565b5b81516200153d848260208601620014b1565b91505092915050565b6000602082840312156200155f576200155e62001e62565b5b60006200156f84828501620014fc565b91505092915050565b6000806000806080858703121562001595576200159462001e62565b5b600085015167ffffffffffffffff811115620015b657620015b562001e5d565b5b620015c48782880162001513565b945050602085015167ffffffffffffffff811115620015e857620015e762001e5d565b5b620015f68782880162001513565b935050604085015167ffffffffffffffff8111156200161a576200161962001e5d565b5b620016288782880162001513565b925050606085015167ffffffffffffffff8111156200164c576200164b62001e5d565b5b6200165a8782880162001513565b91505092959194509250565b620016718162001c0e565b82525050565b6000620016848262001ae8565b62001690818562001af3565b9350620016a281856020860162001c78565b620016ad8162001e67565b840191505092915050565b6000620016c760328362001b04565b9150620016d48262001e78565b604082019050919050565b6000620016ee601c8362001b04565b9150620016fb8262001ec7565b602082019050919050565b60006200171560128362001b04565b9150620017228262001ef0565b602082019050919050565b60006200173c601a8362001b04565b9150620017498262001f19565b602082019050919050565b60006200176360248362001b04565b9150620017708262001f42565b604082019050919050565b60006200178a602a8362001b04565b9150620017978262001f91565b604082019050919050565b6000620017b160208362001b04565b9150620017be8262001fe0565b602082019050919050565b6000620017d860208362001b04565b9150620017e58262002009565b602082019050919050565b6000620017ff60168362001b04565b91506200180c8262002032565b602082019050919050565b600062001826601c8362001b04565b915062001833826200205b565b602082019050919050565b60006200184d60288362001b04565b91506200185a8262002084565b604082019050919050565b600062001874601b8362001b04565b91506200188182620020d3565b602082019050919050565b620018978162001c6e565b82525050565b6000608082019050620018b4600083018762001666565b620018c3602083018662001666565b620018d260408301856200188c565b8181036060830152620018e6818462001677565b905095945050505050565b600060208201905081810360008301526200190c81620016b8565b9050919050565b600060208201905081810360008301526200192e81620016df565b9050919050565b60006020820190508181036000830152620019508162001706565b9050919050565b6000602082019050818103600083015262001972816200172d565b9050919050565b60006020820190508181036000830152620019948162001754565b9050919050565b60006020820190508181036000830152620019b6816200177b565b9050919050565b60006020820190508181036000830152620019d881620017a2565b9050919050565b60006020820190508181036000830152620019fa81620017c9565b9050919050565b6000602082019050818103600083015262001a1c81620017f0565b9050919050565b6000602082019050818103600083015262001a3e8162001817565b9050919050565b6000602082019050818103600083015262001a60816200183e565b9050919050565b6000602082019050818103600083015262001a828162001865565b9050919050565b600062001a9562001aa8565b905062001aa3828262001ce4565b919050565b6000604051905090565b600067ffffffffffffffff82111562001ad05762001acf62001e24565b5b62001adb8262001e67565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001b228262001c6e565b915062001b2f8362001c6e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001b675762001b6662001d68565b5b828201905092915050565b600062001b7f8262001c6e565b915062001b8c8362001c6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001bc85762001bc762001d68565b5b828202905092915050565b600062001be08262001c6e565b915062001bed8362001c6e565b92508282101562001c035762001c0262001d68565b5b828203905092915050565b600062001c1b8262001c4e565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001c9857808201518184015260208101905062001c7b565b8381111562001ca8576000848401525b50505050565b6000600282049050600182168062001cc757607f821691505b6020821081141562001cde5762001cdd62001d97565b5b50919050565b62001cef8262001e67565b810181811067ffffffffffffffff8211171562001d115762001d1062001e24565b5b80604052505050565b600062001d278262001c6e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001d5d5762001d5c62001d68565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f41646472657373206973206e6f742077686974656c6973746564000000000000600082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520436f6e74726163742069732050617773656400000000000000000000600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4d6178204e465420726571756573746564206578636565647320617661696c6160008201527f626c652063617473000000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b620021078162001c22565b81146200211357600080fd5b50565b61526880620021266000396000f3fe60806040526004361061027d5760003560e01c80636c0360eb1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610990578063da3ef23f146109bb578063e985e9c5146109e4578063edec5f2714610a21578063f2c4ce1e14610a4a578063f2fde38b14610a735761027d565b8063b88d4fde1461086e578063ba4e5c4914610897578063ba7d2c76146108d4578063c6682862146108ff578063c87b56dd1461092a578063d0eb26b0146109675761027d565b80638da5cb5b116101135780638da5cb5b1461079157806395d89b41146107bc5780639c70b512146107e7578063a0712d6814610812578063a22cb4651461082e578063a475b5dd146108575761027d565b80636c0360eb146106df57806370a082311461070a578063715018a6146107475780637f00c7a61461075e578063853828b6146107875761027d565b806323b872dd116101f357806344a0d68a116101ac57806344a0d68a146105bd5780634f6ccce7146105e6578063518302271461062357806355f804b31461064e5780635c975abb146106775780636352211e146106a25761027d565b806323b872dd1461048b5780632f745c59146104b45780633af32abf146104f15780633c9527641461052e57806342842e0e14610557578063438b6300146105805761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063228025e814610437578063239c70ae146104605761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613c2b565b610a9c565b6040516102b691906142f4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613bfe565b610b16565b005b3480156102f457600080fd5b506102fd610baf565b60405161030a919061430f565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613cce565b610c41565b604051610347919061426b565b60405180910390f35b34801561035c57600080fd5b50610365610cc6565b604051610372919061430f565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b71565b610d54565b005b3480156103b057600080fd5b506103b9610e6c565b6040516103c69190614651565b60405180910390f35b3480156103db57600080fd5b506103e4610e72565b6040516103f19190614651565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906139ee565b610e7f565b60405161042e9190614651565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613cce565b610e97565b005b34801561046c57600080fd5b50610475610f1d565b6040516104829190614651565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613a5b565b610f23565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613b71565b610f83565b6040516104e89190614651565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906139ee565b611028565b60405161052591906142f4565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613bfe565b6110d7565b005b34801561056357600080fd5b5061057e60048036038101906105799190613a5b565b611170565b005b34801561058c57600080fd5b506105a760048036038101906105a291906139ee565b611190565b6040516105b491906142d2565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613cce565b61123e565b005b3480156105f257600080fd5b5061060d60048036038101906106089190613cce565b6112c4565b60405161061a9190614651565b60405180910390f35b34801561062f57600080fd5b50610638611335565b60405161064591906142f4565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613c85565b611348565b005b34801561068357600080fd5b5061068c6113de565b60405161069991906142f4565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613cce565b6113f1565b6040516106d6919061426b565b60405180910390f35b3480156106eb57600080fd5b506106f46114a3565b604051610701919061430f565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c91906139ee565b611531565b60405161073e9190614651565b60405180910390f35b34801561075357600080fd5b5061075c6115e9565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cce565b611671565b005b61078f6116f7565b005b34801561079d57600080fd5b506107a661196d565b6040516107b3919061426b565b60405180910390f35b3480156107c857600080fd5b506107d1611997565b6040516107de919061430f565b60405180910390f35b3480156107f357600080fd5b506107fc611a29565b60405161080991906142f4565b60405180910390f35b61082c60048036038101906108279190613cce565b611a3c565b005b34801561083a57600080fd5b5061085560048036038101906108509190613b31565b611d85565b005b34801561086357600080fd5b5061086c611d9b565b005b34801561087a57600080fd5b5061089560048036038101906108909190613aae565b611e34565b005b3480156108a357600080fd5b506108be60048036038101906108b99190613cce565b611e96565b6040516108cb919061426b565b60405180910390f35b3480156108e057600080fd5b506108e9611ed5565b6040516108f69190614651565b60405180910390f35b34801561090b57600080fd5b50610914611edb565b604051610921919061430f565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190613cce565b611f69565b60405161095e919061430f565b60405180910390f35b34801561097357600080fd5b5061098e60048036038101906109899190613cce565b6120c2565b005b34801561099c57600080fd5b506109a5612148565b6040516109b29190614651565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613c85565b61214e565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613a1b565b6121e4565b604051610a1891906142f4565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613bb1565b612278565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613c85565b612318565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906139ee565b6123ae565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0f5750610b0e826124be565b5b9050919050565b610b1e6125a0565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61196d565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990614511565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bbe9061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea9061494f565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c826125a8565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906144f1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd39061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff9061494f565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b505050505081565b6000610d5f826113f1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906145b1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610def6125a0565b73ffffffffffffffffffffffffffffffffffffffff161480610e1e5750610e1d81610e186125a0565b6121e4565b5b610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614471565b60405180910390fd5b610e678383612614565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b610e9f6125a0565b73ffffffffffffffffffffffffffffffffffffffff16610ebd61196d565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90614511565b60405180910390fd5b80600f8190555050565b60105481565b610f34610f2e6125a0565b826126cd565b610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906145d1565b60405180910390fd5b610f7e8383836127ab565b505050565b6000610f8e83611531565b8210610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614331565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b6013805490508110156110cc578273ffffffffffffffffffffffffffffffffffffffff166013828154811061106857611067614ae8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110b95760019150506110d2565b80806110c4906149b2565b915050611030565b50600090505b919050565b6110df6125a0565b73ffffffffffffffffffffffffffffffffffffffff166110fd61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614511565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b61118b83838360405180602001604052806000815250611e34565b505050565b6060600061119d83611531565b905060008167ffffffffffffffff8111156111bb576111ba614b17565b5b6040519080825280602002602001820160405280156111e95781602001602082028036833780820191505090505b50905060005b82811015611233576112018582610f83565b82828151811061121457611213614ae8565b5b602002602001018181525050808061122b906149b2565b9150506111ef565b508092505050919050565b6112466125a0565b73ffffffffffffffffffffffffffffffffffffffff1661126461196d565b73ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190614511565b60405180910390fd5b80600e8190555050565b60006112ce610e72565b821061130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614611565b60405180910390fd5b6008828154811061132357611322614ae8565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113506125a0565b73ffffffffffffffffffffffffffffffffffffffff1661136e61196d565b73ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614511565b60405180910390fd5b80600b90805190602001906113da9291906136eb565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561149a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611491906144b1565b60405180910390fd5b80915050919050565b600b80546114b09061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546114dc9061494f565b80156115295780601f106114fe57610100808354040283529160200191611529565b820191906000526020600020905b81548152906001019060200180831161150c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614491565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f16125a0565b73ffffffffffffffffffffffffffffffffffffffff1661160f61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90614511565b60405180910390fd5b61166f6000612a07565b565b6116796125a0565b73ffffffffffffffffffffffffffffffffffffffff1661169761196d565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490614511565b60405180910390fd5b8060108190555050565b6116ff6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661171d61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614511565b60405180910390fd5b60006064602147611784919061480b565b61178e91906147da565b9050600060646006476117a1919061480b565b6117ab91906147da565b9050600060646006476117be919061480b565b6117c891906147da565b9050600060646037476117db919061480b565b6117e591906147da565b9050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505061184757600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050506118a757600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061190757600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061196757600080fd5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a69061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546119d29061494f565b8015611a1f5780601f106119f457610100808354040283529160200191611a1f565b820191906000526020600020905b815481529060010190602001808311611a0257829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1615611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614571565b60405180910390fd5b6000611a96610e72565b905060008211611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614631565b60405180910390fd5b601054821115611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790614451565b60405180910390fd5b600f548282611b2f9190614784565b1115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906145f1565b60405180910390fd5b611b7861196d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf55760011515601260029054906101000a900460ff1615151415611c0f57611bcf33611028565b611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614411565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611c629190614784565b1115611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90614591565b60405180910390fd5b82600e54611cb1919061480b565b341015611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906143b1565b60405180910390fd5b505b6000600190505b828111611d8057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611d53906149b2565b9190505550611d6d338284611d689190614784565b612acd565b8080611d78906149b2565b915050611cfc565b505050565b611d97611d906125a0565b8383612aeb565b5050565b611da36125a0565b73ffffffffffffffffffffffffffffffffffffffff16611dc161196d565b73ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614511565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611e45611e3f6125a0565b836126cd565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b906145d1565b60405180910390fd5b611e9084848484612c58565b50505050565b60138181548110611ea657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ee89061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f149061494f565b8015611f615780601f10611f3657610100808354040283529160200191611f61565b820191906000526020600020905b815481529060010190602001808311611f4457829003601f168201915b505050505081565b6060611f74826125a8565b611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614551565b60405180910390fd5b60001515601260019054906101000a900460ff161515141561206157600d8054611fdc9061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546120089061494f565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505090506120bd565b600061206b612cb4565b9050600081511161208b57604051806020016040528060008152506120b9565b8061209584612d46565b600c6040516020016120a99392919061423a565b6040516020818303038152906040525b9150505b919050565b6120ca6125a0565b73ffffffffffffffffffffffffffffffffffffffff166120e861196d565b73ffffffffffffffffffffffffffffffffffffffff161461213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614511565b60405180910390fd5b8060118190555050565b600f5481565b6121566125a0565b73ffffffffffffffffffffffffffffffffffffffff1661217461196d565b73ffffffffffffffffffffffffffffffffffffffff16146121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614511565b60405180910390fd5b80600c90805190602001906121e09291906136eb565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122806125a0565b73ffffffffffffffffffffffffffffffffffffffff1661229e61196d565b73ffffffffffffffffffffffffffffffffffffffff16146122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614511565b60405180910390fd5b601360006123029190613771565b818160139190612313929190613792565b505050565b6123206125a0565b73ffffffffffffffffffffffffffffffffffffffff1661233e61196d565b73ffffffffffffffffffffffffffffffffffffffff1614612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614511565b60405180910390fd5b80600d90805190602001906123aa9291906136eb565b5050565b6123b66125a0565b73ffffffffffffffffffffffffffffffffffffffff166123d461196d565b73ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242190614511565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614371565b60405180910390fd5b6124a381612a07565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061258957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612599575061259882612ea7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612687836113f1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126d8826125a8565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614431565b60405180910390fd5b6000612722836113f1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279157508373ffffffffffffffffffffffffffffffffffffffff1661277984610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806127a257506127a181856121e4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127cb826113f1565b73ffffffffffffffffffffffffffffffffffffffff1614612821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281890614531565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906143d1565b60405180910390fd5b61289c838383612f11565b6128a7600082612614565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f79190614865565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294e9190614784565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ae7828260405180602001604052806000815250613025565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b51906143f1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c4b91906142f4565b60405180910390a3505050565b612c638484846127ab565b612c6f84848484613080565b612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614351565b60405180910390fd5b50505050565b6060600b8054612cc39061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054612cef9061494f565b8015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050905090565b60606000821415612d8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ea2565b600082905060005b60008214612dc0578080612da9906149b2565b915050600a82612db991906147da565b9150612d96565b60008167ffffffffffffffff811115612ddc57612ddb614b17565b5b6040519080825280601f01601f191660200182016040528015612e0e5781602001600182028036833780820191505090505b5090505b60008514612e9b57600182612e279190614865565b9150600a85612e3691906149fb565b6030612e429190614784565b60f81b818381518110612e5857612e57614ae8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9491906147da565b9450612e12565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f1c8383836124b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5f57612f5a81613217565b612f9e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f9d57612f9c8382613260565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe157612fdc816133cd565b613020565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461301f5761301e828261349e565b5b5b505050565b61302f838361351d565b61303c6000848484613080565b61307b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307290614351565b60405180910390fd5b505050565b60006130a18473ffffffffffffffffffffffffffffffffffffffff166124a6565b1561320a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ca6125a0565b8786866040518563ffffffff1660e01b81526004016130ec9493929190614286565b602060405180830381600087803b15801561310657600080fd5b505af192505050801561313757506040513d601f19601f820116820180604052508101906131349190613c58565b60015b6131ba573d8060008114613167576040519150601f19603f3d011682016040523d82523d6000602084013e61316c565b606091505b506000815114156131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a990614351565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061320f565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161326d84611531565b6132779190614865565b905060006007600084815260200190815260200160002054905081811461335c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133e19190614865565b905060006009600084815260200190815260200160002054905060006008838154811061341157613410614ae8565b5b90600052602060002001549050806008838154811061343357613432614ae8565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061348257613481614ab9565b5b6001900381819060005260206000200160009055905550505050565b60006134a983611531565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561358d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613584906144d1565b60405180910390fd5b613596816125a8565b156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90614391565b60405180910390fd5b6135e260008383612f11565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136329190614784565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546136f79061494f565b90600052602060002090601f0160209004810192826137195760008555613760565b82601f1061373257805160ff1916838001178555613760565b82800160010185558215613760579182015b8281111561375f578251825591602001919060010190613744565b5b50905061376d9190613832565b5090565b508054600082559060005260206000209081019061378f9190613832565b50565b828054828255906000526020600020908101928215613821579160200282015b8281111561382057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906137b2565b5b50905061382e9190613832565b5090565b5b8082111561384b576000816000905550600101613833565b5090565b600061386261385d84614691565b61466c565b90508281526020810184848401111561387e5761387d614b55565b5b61388984828561490d565b509392505050565b60006138a461389f846146c2565b61466c565b9050828152602081018484840111156138c0576138bf614b55565b5b6138cb84828561490d565b509392505050565b6000813590506138e2816151d6565b92915050565b60008083601f8401126138fe576138fd614b4b565b5b8235905067ffffffffffffffff81111561391b5761391a614b46565b5b60208301915083602082028301111561393757613936614b50565b5b9250929050565b60008135905061394d816151ed565b92915050565b60008135905061396281615204565b92915050565b60008151905061397781615204565b92915050565b600082601f83011261399257613991614b4b565b5b81356139a284826020860161384f565b91505092915050565b600082601f8301126139c0576139bf614b4b565b5b81356139d0848260208601613891565b91505092915050565b6000813590506139e88161521b565b92915050565b600060208284031215613a0457613a03614b5f565b5b6000613a12848285016138d3565b91505092915050565b60008060408385031215613a3257613a31614b5f565b5b6000613a40858286016138d3565b9250506020613a51858286016138d3565b9150509250929050565b600080600060608486031215613a7457613a73614b5f565b5b6000613a82868287016138d3565b9350506020613a93868287016138d3565b9250506040613aa4868287016139d9565b9150509250925092565b60008060008060808587031215613ac857613ac7614b5f565b5b6000613ad6878288016138d3565b9450506020613ae7878288016138d3565b9350506040613af8878288016139d9565b925050606085013567ffffffffffffffff811115613b1957613b18614b5a565b5b613b258782880161397d565b91505092959194509250565b60008060408385031215613b4857613b47614b5f565b5b6000613b56858286016138d3565b9250506020613b678582860161393e565b9150509250929050565b60008060408385031215613b8857613b87614b5f565b5b6000613b96858286016138d3565b9250506020613ba7858286016139d9565b9150509250929050565b60008060208385031215613bc857613bc7614b5f565b5b600083013567ffffffffffffffff811115613be657613be5614b5a565b5b613bf2858286016138e8565b92509250509250929050565b600060208284031215613c1457613c13614b5f565b5b6000613c228482850161393e565b91505092915050565b600060208284031215613c4157613c40614b5f565b5b6000613c4f84828501613953565b91505092915050565b600060208284031215613c6e57613c6d614b5f565b5b6000613c7c84828501613968565b91505092915050565b600060208284031215613c9b57613c9a614b5f565b5b600082013567ffffffffffffffff811115613cb957613cb8614b5a565b5b613cc5848285016139ab565b91505092915050565b600060208284031215613ce457613ce3614b5f565b5b6000613cf2848285016139d9565b91505092915050565b6000613d07838361421c565b60208301905092915050565b613d1c81614899565b82525050565b6000613d2d82614718565b613d378185614746565b9350613d42836146f3565b8060005b83811015613d73578151613d5a8882613cfb565b9750613d6583614739565b925050600181019050613d46565b5085935050505092915050565b613d89816148ab565b82525050565b6000613d9a82614723565b613da48185614757565b9350613db481856020860161491c565b613dbd81614b64565b840191505092915050565b6000613dd38261472e565b613ddd8185614768565b9350613ded81856020860161491c565b613df681614b64565b840191505092915050565b6000613e0c8261472e565b613e168185614779565b9350613e2681856020860161491c565b80840191505092915050565b60008154613e3f8161494f565b613e498186614779565b94506001821660008114613e645760018114613e7557613ea8565b60ff19831686528186019350613ea8565b613e7e85614703565b60005b83811015613ea057815481890152600182019150602081019050613e81565b838801955050505b50505092915050565b6000613ebe602b83614768565b9150613ec982614b75565b604082019050919050565b6000613ee1603283614768565b9150613eec82614bc4565b604082019050919050565b6000613f04602683614768565b9150613f0f82614c13565b604082019050919050565b6000613f27601c83614768565b9150613f3282614c62565b602082019050919050565b6000613f4a601283614768565b9150613f5582614c8b565b602082019050919050565b6000613f6d602483614768565b9150613f7882614cb4565b604082019050919050565b6000613f90601983614768565b9150613f9b82614d03565b602082019050919050565b6000613fb3601a83614768565b9150613fbe82614d2c565b602082019050919050565b6000613fd6602c83614768565b9150613fe182614d55565b604082019050919050565b6000613ff9602483614768565b915061400482614da4565b604082019050919050565b600061401c603883614768565b915061402782614df3565b604082019050919050565b600061403f602a83614768565b915061404a82614e42565b604082019050919050565b6000614062602983614768565b915061406d82614e91565b604082019050919050565b6000614085602083614768565b915061409082614ee0565b602082019050919050565b60006140a8602c83614768565b91506140b382614f09565b604082019050919050565b60006140cb602083614768565b91506140d682614f58565b602082019050919050565b60006140ee602983614768565b91506140f982614f81565b604082019050919050565b6000614111602f83614768565b915061411c82614fd0565b604082019050919050565b6000614134601683614768565b915061413f8261501f565b602082019050919050565b6000614157601c83614768565b915061416282615048565b602082019050919050565b600061417a602183614768565b915061418582615071565b604082019050919050565b600061419d603183614768565b91506141a8826150c0565b604082019050919050565b60006141c0602883614768565b91506141cb8261510f565b604082019050919050565b60006141e3602c83614768565b91506141ee8261515e565b604082019050919050565b6000614206601b83614768565b9150614211826151ad565b602082019050919050565b61422581614903565b82525050565b61423481614903565b82525050565b60006142468286613e01565b91506142528285613e01565b915061425e8284613e32565b9150819050949350505050565b60006020820190506142806000830184613d13565b92915050565b600060808201905061429b6000830187613d13565b6142a86020830186613d13565b6142b5604083018561422b565b81810360608301526142c78184613d8f565b905095945050505050565b600060208201905081810360008301526142ec8184613d22565b905092915050565b60006020820190506143096000830184613d80565b92915050565b600060208201905081810360008301526143298184613dc8565b905092915050565b6000602082019050818103600083015261434a81613eb1565b9050919050565b6000602082019050818103600083015261436a81613ed4565b9050919050565b6000602082019050818103600083015261438a81613ef7565b9050919050565b600060208201905081810360008301526143aa81613f1a565b9050919050565b600060208201905081810360008301526143ca81613f3d565b9050919050565b600060208201905081810360008301526143ea81613f60565b9050919050565b6000602082019050818103600083015261440a81613f83565b9050919050565b6000602082019050818103600083015261442a81613fa6565b9050919050565b6000602082019050818103600083015261444a81613fc9565b9050919050565b6000602082019050818103600083015261446a81613fec565b9050919050565b6000602082019050818103600083015261448a8161400f565b9050919050565b600060208201905081810360008301526144aa81614032565b9050919050565b600060208201905081810360008301526144ca81614055565b9050919050565b600060208201905081810360008301526144ea81614078565b9050919050565b6000602082019050818103600083015261450a8161409b565b9050919050565b6000602082019050818103600083015261452a816140be565b9050919050565b6000602082019050818103600083015261454a816140e1565b9050919050565b6000602082019050818103600083015261456a81614104565b9050919050565b6000602082019050818103600083015261458a81614127565b9050919050565b600060208201905081810360008301526145aa8161414a565b9050919050565b600060208201905081810360008301526145ca8161416d565b9050919050565b600060208201905081810360008301526145ea81614190565b9050919050565b6000602082019050818103600083015261460a816141b3565b9050919050565b6000602082019050818103600083015261462a816141d6565b9050919050565b6000602082019050818103600083015261464a816141f9565b9050919050565b6000602082019050614666600083018461422b565b92915050565b6000614676614687565b90506146828282614981565b919050565b6000604051905090565b600067ffffffffffffffff8211156146ac576146ab614b17565b5b6146b582614b64565b9050602081019050919050565b600067ffffffffffffffff8211156146dd576146dc614b17565b5b6146e682614b64565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061478f82614903565b915061479a83614903565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147cf576147ce614a2c565b5b828201905092915050565b60006147e582614903565b91506147f083614903565b925082614800576147ff614a5b565b5b828204905092915050565b600061481682614903565b915061482183614903565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485a57614859614a2c565b5b828202905092915050565b600061487082614903565b915061487b83614903565b92508282101561488e5761488d614a2c565b5b828203905092915050565b60006148a4826148e3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561493a57808201518184015260208101905061491f565b83811115614949576000848401525b50505050565b6000600282049050600182168061496757607f821691505b6020821081141561497b5761497a614a8a565b5b50919050565b61498a82614b64565b810181811067ffffffffffffffff821117156149a9576149a8614b17565b5b80604052505050565b60006149bd82614903565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f0576149ef614a2c565b5b600182019050919050565b6000614a0682614903565b9150614a1183614903565b925082614a2157614a20614a5b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f742077686974656c6973746564000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686520436f6e74726163742069732050617773656400000000000000000000600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178204e465420726571756573746564206578636565647320617661696c6160008201527f626c652063617473000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6151df81614899565b81146151ea57600080fd5b50565b6151f6816148ab565b811461520157600080fd5b50565b61520d816148b7565b811461521857600080fd5b50565b61522481614903565b811461522f57600080fd5b5056fea26469706673582212200220e27fb7d4d40b1f7338258d28aff7ff766b0ec8758abbf3a21fa53e02580a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e43617475726461792054616c657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084341545552444159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f636174757264617974616c65736e66742f6a732f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57624244526d643342436a66763938626742506568653456353279646f5842376f537356335576634264437100000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80636c0360eb1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610990578063da3ef23f146109bb578063e985e9c5146109e4578063edec5f2714610a21578063f2c4ce1e14610a4a578063f2fde38b14610a735761027d565b8063b88d4fde1461086e578063ba4e5c4914610897578063ba7d2c76146108d4578063c6682862146108ff578063c87b56dd1461092a578063d0eb26b0146109675761027d565b80638da5cb5b116101135780638da5cb5b1461079157806395d89b41146107bc5780639c70b512146107e7578063a0712d6814610812578063a22cb4651461082e578063a475b5dd146108575761027d565b80636c0360eb146106df57806370a082311461070a578063715018a6146107475780637f00c7a61461075e578063853828b6146107875761027d565b806323b872dd116101f357806344a0d68a116101ac57806344a0d68a146105bd5780634f6ccce7146105e6578063518302271461062357806355f804b31461064e5780635c975abb146106775780636352211e146106a25761027d565b806323b872dd1461048b5780632f745c59146104b45780633af32abf146104f15780633c9527641461052e57806342842e0e14610557578063438b6300146105805761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063228025e814610437578063239c70ae146104605761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613c2b565b610a9c565b6040516102b691906142f4565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613bfe565b610b16565b005b3480156102f457600080fd5b506102fd610baf565b60405161030a919061430f565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613cce565b610c41565b604051610347919061426b565b60405180910390f35b34801561035c57600080fd5b50610365610cc6565b604051610372919061430f565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b71565b610d54565b005b3480156103b057600080fd5b506103b9610e6c565b6040516103c69190614651565b60405180910390f35b3480156103db57600080fd5b506103e4610e72565b6040516103f19190614651565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906139ee565b610e7f565b60405161042e9190614651565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613cce565b610e97565b005b34801561046c57600080fd5b50610475610f1d565b6040516104829190614651565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613a5b565b610f23565b005b3480156104c057600080fd5b506104db60048036038101906104d69190613b71565b610f83565b6040516104e89190614651565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906139ee565b611028565b60405161052591906142f4565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190613bfe565b6110d7565b005b34801561056357600080fd5b5061057e60048036038101906105799190613a5b565b611170565b005b34801561058c57600080fd5b506105a760048036038101906105a291906139ee565b611190565b6040516105b491906142d2565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613cce565b61123e565b005b3480156105f257600080fd5b5061060d60048036038101906106089190613cce565b6112c4565b60405161061a9190614651565b60405180910390f35b34801561062f57600080fd5b50610638611335565b60405161064591906142f4565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613c85565b611348565b005b34801561068357600080fd5b5061068c6113de565b60405161069991906142f4565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190613cce565b6113f1565b6040516106d6919061426b565b60405180910390f35b3480156106eb57600080fd5b506106f46114a3565b604051610701919061430f565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c91906139ee565b611531565b60405161073e9190614651565b60405180910390f35b34801561075357600080fd5b5061075c6115e9565b005b34801561076a57600080fd5b5061078560048036038101906107809190613cce565b611671565b005b61078f6116f7565b005b34801561079d57600080fd5b506107a661196d565b6040516107b3919061426b565b60405180910390f35b3480156107c857600080fd5b506107d1611997565b6040516107de919061430f565b60405180910390f35b3480156107f357600080fd5b506107fc611a29565b60405161080991906142f4565b60405180910390f35b61082c60048036038101906108279190613cce565b611a3c565b005b34801561083a57600080fd5b5061085560048036038101906108509190613b31565b611d85565b005b34801561086357600080fd5b5061086c611d9b565b005b34801561087a57600080fd5b5061089560048036038101906108909190613aae565b611e34565b005b3480156108a357600080fd5b506108be60048036038101906108b99190613cce565b611e96565b6040516108cb919061426b565b60405180910390f35b3480156108e057600080fd5b506108e9611ed5565b6040516108f69190614651565b60405180910390f35b34801561090b57600080fd5b50610914611edb565b604051610921919061430f565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190613cce565b611f69565b60405161095e919061430f565b60405180910390f35b34801561097357600080fd5b5061098e60048036038101906109899190613cce565b6120c2565b005b34801561099c57600080fd5b506109a5612148565b6040516109b29190614651565b60405180910390f35b3480156109c757600080fd5b506109e260048036038101906109dd9190613c85565b61214e565b005b3480156109f057600080fd5b50610a0b6004803603810190610a069190613a1b565b6121e4565b604051610a1891906142f4565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613bb1565b612278565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613c85565b612318565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906139ee565b6123ae565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0f5750610b0e826124be565b5b9050919050565b610b1e6125a0565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61196d565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990614511565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bbe9061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea9061494f565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c826125a8565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906144f1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd39061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff9061494f565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b505050505081565b6000610d5f826113f1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906145b1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610def6125a0565b73ffffffffffffffffffffffffffffffffffffffff161480610e1e5750610e1d81610e186125a0565b6121e4565b5b610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614471565b60405180910390fd5b610e678383612614565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b610e9f6125a0565b73ffffffffffffffffffffffffffffffffffffffff16610ebd61196d565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90614511565b60405180910390fd5b80600f8190555050565b60105481565b610f34610f2e6125a0565b826126cd565b610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906145d1565b60405180910390fd5b610f7e8383836127ab565b505050565b6000610f8e83611531565b8210610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690614331565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b6013805490508110156110cc578273ffffffffffffffffffffffffffffffffffffffff166013828154811061106857611067614ae8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110b95760019150506110d2565b80806110c4906149b2565b915050611030565b50600090505b919050565b6110df6125a0565b73ffffffffffffffffffffffffffffffffffffffff166110fd61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614511565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b61118b83838360405180602001604052806000815250611e34565b505050565b6060600061119d83611531565b905060008167ffffffffffffffff8111156111bb576111ba614b17565b5b6040519080825280602002602001820160405280156111e95781602001602082028036833780820191505090505b50905060005b82811015611233576112018582610f83565b82828151811061121457611213614ae8565b5b602002602001018181525050808061122b906149b2565b9150506111ef565b508092505050919050565b6112466125a0565b73ffffffffffffffffffffffffffffffffffffffff1661126461196d565b73ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190614511565b60405180910390fd5b80600e8190555050565b60006112ce610e72565b821061130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690614611565b60405180910390fd5b6008828154811061132357611322614ae8565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113506125a0565b73ffffffffffffffffffffffffffffffffffffffff1661136e61196d565b73ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614511565b60405180910390fd5b80600b90805190602001906113da9291906136eb565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561149a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611491906144b1565b60405180910390fd5b80915050919050565b600b80546114b09061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546114dc9061494f565b80156115295780601f106114fe57610100808354040283529160200191611529565b820191906000526020600020905b81548152906001019060200180831161150c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614491565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f16125a0565b73ffffffffffffffffffffffffffffffffffffffff1661160f61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90614511565b60405180910390fd5b61166f6000612a07565b565b6116796125a0565b73ffffffffffffffffffffffffffffffffffffffff1661169761196d565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490614511565b60405180910390fd5b8060108190555050565b6116ff6125a0565b73ffffffffffffffffffffffffffffffffffffffff1661171d61196d565b73ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90614511565b60405180910390fd5b60006064602147611784919061480b565b61178e91906147da565b9050600060646006476117a1919061480b565b6117ab91906147da565b9050600060646006476117be919061480b565b6117c891906147da565b9050600060646037476117db919061480b565b6117e591906147da565b9050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505061184757600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050506118a757600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061190757600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061196757600080fd5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a69061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546119d29061494f565b8015611a1f5780601f106119f457610100808354040283529160200191611a1f565b820191906000526020600020905b815481529060010190602001808311611a0257829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1615611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614571565b60405180910390fd5b6000611a96610e72565b905060008211611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290614631565b60405180910390fd5b601054821115611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790614451565b60405180910390fd5b600f548282611b2f9190614784565b1115611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b67906145f1565b60405180910390fd5b611b7861196d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf55760011515601260029054906101000a900460ff1615151415611c0f57611bcf33611028565b611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614411565b60405180910390fd5b5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611c629190614784565b1115611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a90614591565b60405180910390fd5b82600e54611cb1919061480b565b341015611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906143b1565b60405180910390fd5b505b6000600190505b828111611d8057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611d53906149b2565b9190505550611d6d338284611d689190614784565b612acd565b8080611d78906149b2565b915050611cfc565b505050565b611d97611d906125a0565b8383612aeb565b5050565b611da36125a0565b73ffffffffffffffffffffffffffffffffffffffff16611dc161196d565b73ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614511565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611e45611e3f6125a0565b836126cd565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b906145d1565b60405180910390fd5b611e9084848484612c58565b50505050565b60138181548110611ea657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ee89061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054611f149061494f565b8015611f615780601f10611f3657610100808354040283529160200191611f61565b820191906000526020600020905b815481529060010190602001808311611f4457829003601f168201915b505050505081565b6060611f74826125a8565b611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614551565b60405180910390fd5b60001515601260019054906101000a900460ff161515141561206157600d8054611fdc9061494f565b80601f01602080910402602001604051908101604052809291908181526020018280546120089061494f565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505090506120bd565b600061206b612cb4565b9050600081511161208b57604051806020016040528060008152506120b9565b8061209584612d46565b600c6040516020016120a99392919061423a565b6040516020818303038152906040525b9150505b919050565b6120ca6125a0565b73ffffffffffffffffffffffffffffffffffffffff166120e861196d565b73ffffffffffffffffffffffffffffffffffffffff161461213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614511565b60405180910390fd5b8060118190555050565b600f5481565b6121566125a0565b73ffffffffffffffffffffffffffffffffffffffff1661217461196d565b73ffffffffffffffffffffffffffffffffffffffff16146121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614511565b60405180910390fd5b80600c90805190602001906121e09291906136eb565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122806125a0565b73ffffffffffffffffffffffffffffffffffffffff1661229e61196d565b73ffffffffffffffffffffffffffffffffffffffff16146122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614511565b60405180910390fd5b601360006123029190613771565b818160139190612313929190613792565b505050565b6123206125a0565b73ffffffffffffffffffffffffffffffffffffffff1661233e61196d565b73ffffffffffffffffffffffffffffffffffffffff1614612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90614511565b60405180910390fd5b80600d90805190602001906123aa9291906136eb565b5050565b6123b66125a0565b73ffffffffffffffffffffffffffffffffffffffff166123d461196d565b73ffffffffffffffffffffffffffffffffffffffff161461242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242190614511565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614371565b60405180910390fd5b6124a381612a07565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061258957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612599575061259882612ea7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612687836113f1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126d8826125a8565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614431565b60405180910390fd5b6000612722836113f1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279157508373ffffffffffffffffffffffffffffffffffffffff1661277984610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b806127a257506127a181856121e4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127cb826113f1565b73ffffffffffffffffffffffffffffffffffffffff1614612821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281890614531565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906143d1565b60405180910390fd5b61289c838383612f11565b6128a7600082612614565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f79190614865565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294e9190614784565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ae7828260405180602001604052806000815250613025565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b51906143f1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c4b91906142f4565b60405180910390a3505050565b612c638484846127ab565b612c6f84848484613080565b612cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca590614351565b60405180910390fd5b50505050565b6060600b8054612cc39061494f565b80601f0160208091040260200160405190810160405280929190818152602001828054612cef9061494f565b8015612d3c5780601f10612d1157610100808354040283529160200191612d3c565b820191906000526020600020905b815481529060010190602001808311612d1f57829003601f168201915b5050505050905090565b60606000821415612d8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ea2565b600082905060005b60008214612dc0578080612da9906149b2565b915050600a82612db991906147da565b9150612d96565b60008167ffffffffffffffff811115612ddc57612ddb614b17565b5b6040519080825280601f01601f191660200182016040528015612e0e5781602001600182028036833780820191505090505b5090505b60008514612e9b57600182612e279190614865565b9150600a85612e3691906149fb565b6030612e429190614784565b60f81b818381518110612e5857612e57614ae8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9491906147da565b9450612e12565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f1c8383836124b9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5f57612f5a81613217565b612f9e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f9d57612f9c8382613260565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe157612fdc816133cd565b613020565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461301f5761301e828261349e565b5b5b505050565b61302f838361351d565b61303c6000848484613080565b61307b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307290614351565b60405180910390fd5b505050565b60006130a18473ffffffffffffffffffffffffffffffffffffffff166124a6565b1561320a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ca6125a0565b8786866040518563ffffffff1660e01b81526004016130ec9493929190614286565b602060405180830381600087803b15801561310657600080fd5b505af192505050801561313757506040513d601f19601f820116820180604052508101906131349190613c58565b60015b6131ba573d8060008114613167576040519150601f19603f3d011682016040523d82523d6000602084013e61316c565b606091505b506000815114156131b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a990614351565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061320f565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161326d84611531565b6132779190614865565b905060006007600084815260200190815260200160002054905081811461335c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133e19190614865565b905060006009600084815260200190815260200160002054905060006008838154811061341157613410614ae8565b5b90600052602060002001549050806008838154811061343357613432614ae8565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061348257613481614ab9565b5b6001900381819060005260206000200160009055905550505050565b60006134a983611531565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561358d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613584906144d1565b60405180910390fd5b613596816125a8565b156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90614391565b60405180910390fd5b6135e260008383612f11565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136329190614784565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546136f79061494f565b90600052602060002090601f0160209004810192826137195760008555613760565b82601f1061373257805160ff1916838001178555613760565b82800160010185558215613760579182015b8281111561375f578251825591602001919060010190613744565b5b50905061376d9190613832565b5090565b508054600082559060005260206000209081019061378f9190613832565b50565b828054828255906000526020600020908101928215613821579160200282015b8281111561382057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906137b2565b5b50905061382e9190613832565b5090565b5b8082111561384b576000816000905550600101613833565b5090565b600061386261385d84614691565b61466c565b90508281526020810184848401111561387e5761387d614b55565b5b61388984828561490d565b509392505050565b60006138a461389f846146c2565b61466c565b9050828152602081018484840111156138c0576138bf614b55565b5b6138cb84828561490d565b509392505050565b6000813590506138e2816151d6565b92915050565b60008083601f8401126138fe576138fd614b4b565b5b8235905067ffffffffffffffff81111561391b5761391a614b46565b5b60208301915083602082028301111561393757613936614b50565b5b9250929050565b60008135905061394d816151ed565b92915050565b60008135905061396281615204565b92915050565b60008151905061397781615204565b92915050565b600082601f83011261399257613991614b4b565b5b81356139a284826020860161384f565b91505092915050565b600082601f8301126139c0576139bf614b4b565b5b81356139d0848260208601613891565b91505092915050565b6000813590506139e88161521b565b92915050565b600060208284031215613a0457613a03614b5f565b5b6000613a12848285016138d3565b91505092915050565b60008060408385031215613a3257613a31614b5f565b5b6000613a40858286016138d3565b9250506020613a51858286016138d3565b9150509250929050565b600080600060608486031215613a7457613a73614b5f565b5b6000613a82868287016138d3565b9350506020613a93868287016138d3565b9250506040613aa4868287016139d9565b9150509250925092565b60008060008060808587031215613ac857613ac7614b5f565b5b6000613ad6878288016138d3565b9450506020613ae7878288016138d3565b9350506040613af8878288016139d9565b925050606085013567ffffffffffffffff811115613b1957613b18614b5a565b5b613b258782880161397d565b91505092959194509250565b60008060408385031215613b4857613b47614b5f565b5b6000613b56858286016138d3565b9250506020613b678582860161393e565b9150509250929050565b60008060408385031215613b8857613b87614b5f565b5b6000613b96858286016138d3565b9250506020613ba7858286016139d9565b9150509250929050565b60008060208385031215613bc857613bc7614b5f565b5b600083013567ffffffffffffffff811115613be657613be5614b5a565b5b613bf2858286016138e8565b92509250509250929050565b600060208284031215613c1457613c13614b5f565b5b6000613c228482850161393e565b91505092915050565b600060208284031215613c4157613c40614b5f565b5b6000613c4f84828501613953565b91505092915050565b600060208284031215613c6e57613c6d614b5f565b5b6000613c7c84828501613968565b91505092915050565b600060208284031215613c9b57613c9a614b5f565b5b600082013567ffffffffffffffff811115613cb957613cb8614b5a565b5b613cc5848285016139ab565b91505092915050565b600060208284031215613ce457613ce3614b5f565b5b6000613cf2848285016139d9565b91505092915050565b6000613d07838361421c565b60208301905092915050565b613d1c81614899565b82525050565b6000613d2d82614718565b613d378185614746565b9350613d42836146f3565b8060005b83811015613d73578151613d5a8882613cfb565b9750613d6583614739565b925050600181019050613d46565b5085935050505092915050565b613d89816148ab565b82525050565b6000613d9a82614723565b613da48185614757565b9350613db481856020860161491c565b613dbd81614b64565b840191505092915050565b6000613dd38261472e565b613ddd8185614768565b9350613ded81856020860161491c565b613df681614b64565b840191505092915050565b6000613e0c8261472e565b613e168185614779565b9350613e2681856020860161491c565b80840191505092915050565b60008154613e3f8161494f565b613e498186614779565b94506001821660008114613e645760018114613e7557613ea8565b60ff19831686528186019350613ea8565b613e7e85614703565b60005b83811015613ea057815481890152600182019150602081019050613e81565b838801955050505b50505092915050565b6000613ebe602b83614768565b9150613ec982614b75565b604082019050919050565b6000613ee1603283614768565b9150613eec82614bc4565b604082019050919050565b6000613f04602683614768565b9150613f0f82614c13565b604082019050919050565b6000613f27601c83614768565b9150613f3282614c62565b602082019050919050565b6000613f4a601283614768565b9150613f5582614c8b565b602082019050919050565b6000613f6d602483614768565b9150613f7882614cb4565b604082019050919050565b6000613f90601983614768565b9150613f9b82614d03565b602082019050919050565b6000613fb3601a83614768565b9150613fbe82614d2c565b602082019050919050565b6000613fd6602c83614768565b9150613fe182614d55565b604082019050919050565b6000613ff9602483614768565b915061400482614da4565b604082019050919050565b600061401c603883614768565b915061402782614df3565b604082019050919050565b600061403f602a83614768565b915061404a82614e42565b604082019050919050565b6000614062602983614768565b915061406d82614e91565b604082019050919050565b6000614085602083614768565b915061409082614ee0565b602082019050919050565b60006140a8602c83614768565b91506140b382614f09565b604082019050919050565b60006140cb602083614768565b91506140d682614f58565b602082019050919050565b60006140ee602983614768565b91506140f982614f81565b604082019050919050565b6000614111602f83614768565b915061411c82614fd0565b604082019050919050565b6000614134601683614768565b915061413f8261501f565b602082019050919050565b6000614157601c83614768565b915061416282615048565b602082019050919050565b600061417a602183614768565b915061418582615071565b604082019050919050565b600061419d603183614768565b91506141a8826150c0565b604082019050919050565b60006141c0602883614768565b91506141cb8261510f565b604082019050919050565b60006141e3602c83614768565b91506141ee8261515e565b604082019050919050565b6000614206601b83614768565b9150614211826151ad565b602082019050919050565b61422581614903565b82525050565b61423481614903565b82525050565b60006142468286613e01565b91506142528285613e01565b915061425e8284613e32565b9150819050949350505050565b60006020820190506142806000830184613d13565b92915050565b600060808201905061429b6000830187613d13565b6142a86020830186613d13565b6142b5604083018561422b565b81810360608301526142c78184613d8f565b905095945050505050565b600060208201905081810360008301526142ec8184613d22565b905092915050565b60006020820190506143096000830184613d80565b92915050565b600060208201905081810360008301526143298184613dc8565b905092915050565b6000602082019050818103600083015261434a81613eb1565b9050919050565b6000602082019050818103600083015261436a81613ed4565b9050919050565b6000602082019050818103600083015261438a81613ef7565b9050919050565b600060208201905081810360008301526143aa81613f1a565b9050919050565b600060208201905081810360008301526143ca81613f3d565b9050919050565b600060208201905081810360008301526143ea81613f60565b9050919050565b6000602082019050818103600083015261440a81613f83565b9050919050565b6000602082019050818103600083015261442a81613fa6565b9050919050565b6000602082019050818103600083015261444a81613fc9565b9050919050565b6000602082019050818103600083015261446a81613fec565b9050919050565b6000602082019050818103600083015261448a8161400f565b9050919050565b600060208201905081810360008301526144aa81614032565b9050919050565b600060208201905081810360008301526144ca81614055565b9050919050565b600060208201905081810360008301526144ea81614078565b9050919050565b6000602082019050818103600083015261450a8161409b565b9050919050565b6000602082019050818103600083015261452a816140be565b9050919050565b6000602082019050818103600083015261454a816140e1565b9050919050565b6000602082019050818103600083015261456a81614104565b9050919050565b6000602082019050818103600083015261458a81614127565b9050919050565b600060208201905081810360008301526145aa8161414a565b9050919050565b600060208201905081810360008301526145ca8161416d565b9050919050565b600060208201905081810360008301526145ea81614190565b9050919050565b6000602082019050818103600083015261460a816141b3565b9050919050565b6000602082019050818103600083015261462a816141d6565b9050919050565b6000602082019050818103600083015261464a816141f9565b9050919050565b6000602082019050614666600083018461422b565b92915050565b6000614676614687565b90506146828282614981565b919050565b6000604051905090565b600067ffffffffffffffff8211156146ac576146ab614b17565b5b6146b582614b64565b9050602081019050919050565b600067ffffffffffffffff8211156146dd576146dc614b17565b5b6146e682614b64565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061478f82614903565b915061479a83614903565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147cf576147ce614a2c565b5b828201905092915050565b60006147e582614903565b91506147f083614903565b925082614800576147ff614a5b565b5b828204905092915050565b600061481682614903565b915061482183614903565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485a57614859614a2c565b5b828202905092915050565b600061487082614903565b915061487b83614903565b92508282101561488e5761488d614a2c565b5b828203905092915050565b60006148a4826148e3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561493a57808201518184015260208101905061491f565b83811115614949576000848401525b50505050565b6000600282049050600182168061496757607f821691505b6020821081141561497b5761497a614a8a565b5b50919050565b61498a82614b64565b810181811067ffffffffffffffff821117156149a9576149a8614b17565b5b80604052505050565b60006149bd82614903565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f0576149ef614a2c565b5b600182019050919050565b6000614a0682614903565b9150614a1183614903565b925082614a2157614a20614a5b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41646472657373206973206e6f742077686974656c6973746564000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686520436f6e74726163742069732050617773656400000000000000000000600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178204e465420726571756573746564206578636565647320617661696c6160008201527f626c652063617473000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6151df81614899565b81146151ea57600080fd5b50565b6151f6816148ab565b811461520157600080fd5b50565b61520d816148b7565b811461521857600080fd5b50565b61522481614903565b811461522f57600080fd5b5056fea26469706673582212200220e27fb7d4d40b1f7338258d28aff7ff766b0ec8758abbf3a21fa53e02580a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e43617475726461792054616c657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084341545552444159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f636174757264617974616c65736e66742f6a732f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57624244526d643342436a66763938626742506568653456353279646f5842376f537356335576634264437100000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Caturday Tales
Arg [1] : _symbol (string): CATURDAY
Arg [2] : _initBaseURI (string): https://storage.googleapis.com/caturdaytalesnft/js/
Arg [3] : _initNotRevealedUri (string): https://gateway.pinata.cloud/ipfs/QmWbBDRmd3BCjfv98bgBPehe4V52ydoXB7oSsV3UvcBdCq
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 43617475726461792054616c6573000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 4341545552444159000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000033
Arg [9] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f63
Arg [10] : 6174757264617974616c65736e66742f6a732f00000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [12] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [13] : 732f516d57624244526d643342436a6676393862674250656865345635327964
Arg [14] : 6f5842376f537356335576634264437100000000000000000000000000000000
Deployed Bytecode Sourcemap
45497:5541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50192:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45658:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45691:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46109:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49604:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45809:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48215:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50273:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48460:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49518:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45994:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49832:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45963:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45590:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;49710:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50526:507;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46027:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47127:1080;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49333:65;;;;;;;;;;;;;:::i;:::-;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46067:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45886:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45616:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48814:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49406:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45729:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49936:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50376:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50066:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;50192:73::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50253:6:::1;50244;;:15;;;;;;;;;;;;;;;;;;50192:73:::0;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;45658:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;45691:33::-;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;46109:55::-;;;;;;;;;;;;;;;;;:::o;49604:100::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49685:13:::1;49673:9;:25;;;;49604:100:::0;:::o;45809:32::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;48215:239::-;48274:4;48292:6;48301:1;48292:10;;48287:143;48308:20;:27;;;;48304:1;:31;48287:143;;;48382:5;48355:32;;:20;48376:1;48355:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;48351:72;;;48409:4;48402:11;;;;;48351:72;48337:3;;;;;:::i;:::-;;;;48287:143;;;;48443:5;48436:12;;48215:239;;;;:::o;50273:95::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50356:6:::1;50338:15;;:24;;;;;;;;;;;;;;;;;;50273:95:::0;:::o;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;48460:348::-;48535:16;48563:23;48589:17;48599:6;48589:9;:17::i;:::-;48563:43;;48613:25;48655:15;48641:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48613:58;;48683:9;48678:103;48698:15;48694:1;:19;48678:103;;;48743:30;48763:6;48771:1;48743:19;:30::i;:::-;48729:8;48738:1;48729:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;48715:3;;;;;:::i;:::-;;;;48678:103;;;;48794:8;48787:15;;;;48460:348;;;:::o;49518:80::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49584:8:::1;49577:4;:15;;;;49518:80:::0;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;45994:28::-;;;;;;;;;;;;;:::o;49832:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49913:11:::1;49903:7;:21;;;;;;;;;;;;:::i;:::-;;49832:98:::0;:::o;45963:26::-;;;;;;;;;;;;;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;45590:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;49710:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49803:17:::1;49787:13;:33;;;;49710:116:::0;:::o;50526:507::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50581:18:::1;50631:3;50626:2;50602:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;50581:53;;50645:18;50694:3;50690:1;50666:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;50645:52;;50709:18;50758:3;50754:1;50730:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;50709:52;;50773:18;50823:3;50818:2;50794:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;50773:53;;50864:4;;;;;;;;;;;50856:18;;:30;50875:10;50856:30;;;;;;;;;;;;;;;;;;;;;;;50848:39;;;::::0;::::1;;50910:4;;;;;;;;;;;50902:18;;:30;50921:10;50902:30;;;;;;;;;;;;;;;;;;;;;;;50894:39;;;::::0;::::1;;50956:4;;;;;;;;;;;50948:18;;:30;50967:10;50948:30;;;;;;;;;;;;;;;;;;;;;;;50940:39;;;::::0;::::1;;51002:4;;;;;;;;;;;50994:18;;:30;51013:10;50994:30;;;;;;;;;;;;;;;;;;;;;;;50986:39;;;::::0;::::1;;50574:459;;;;50526:507::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;46027:35::-;;;;;;;;;;;;;:::o;47127:1080::-;47193:6;;;;;;;;;;;47192:7;47184:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47233:14;47250:13;:11;:13::i;:::-;47233:30;;47292:1;47278:11;:15;47270:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47355:13;;47340:11;:28;;47332:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47448:9;;47433:11;47424:6;:20;;;;:::i;:::-;:33;;47416:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;47529:7;:5;:7::i;:::-;47515:21;;:10;:21;;;47511:499;;47659:4;47640:23;;:15;;;;;;;;;;;:23;;;47637:119;;;47688:25;47702:10;47688:13;:25::i;:::-;47680:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47637:119;47766:24;47793:20;:32;47814:10;47793:32;;;;;;;;;;;;;;;;47766:59;;47878:18;;47863:11;47844:16;:30;;;;:::i;:::-;:52;;47836:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47968:11;47961:4;;:18;;;;:::i;:::-;47948:9;:31;;47940:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47538:472;47511:499;48069:9;48081:1;48069:13;;48064:138;48089:11;48084:1;:16;48064:138;;48118:20;:32;48139:10;48118:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48161:33;48171:10;48192:1;48183:6;:10;;;;:::i;:::-;48161:9;:33::i;:::-;48102:3;;;;;:::i;:::-;;;;48064:138;;;;47177:1030;47127:1080;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;49333:65::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49388:4:::1;49377:8;;:15;;;;;;;;;;;;;;;;;;49333:65::o:0;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;46067:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45886:38::-;;;;:::o;45616:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48814:497::-;48912:13;48953:16;48961:7;48953;:16::i;:::-;48937:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49062:5;49050:17;;:8;;;;;;;;;;;:17;;;49047:62;;;49087:14;49080:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49047:62;49117:28;49148:10;:8;:10::i;:::-;49117:41;;49203:1;49178:14;49172:28;:32;:133;;;;;;;;;;;;;;;;;49240:14;49256:18;:7;:16;:18::i;:::-;49276:13;49223:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49172:133;49165:140;;;48814:497;;;;:::o;49406:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49498:6:::1;49477:18;:27;;;;49406:104:::0;:::o;45729:31::-;;;;:::o;49936:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50035:17:::1;50019:13;:33;;;;;;;;;;;;:::i;:::-;;49936:122:::0;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;50376:144::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50458:20:::1;;50451:27;;;;:::i;:::-;50508:6;;50485:20;:29;;;;;;;:::i;:::-;;50376:144:::0;;:::o;50066:120::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50165:15:::1;50148:14;:32;;;;;;;;;;;;:::i;:::-;;50066:120:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;37122:126::-;;;;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;47006:102::-;47066:13;47095:7;47088:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47006:102;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:::-;19411:3;19432:67;19496:2;19491:3;19432:67;:::i;:::-;19425:74;;19508:93;19597:3;19508:93;:::i;:::-;19626:2;19621:3;19617:12;19610:19;;19269:366;;;:::o;19641:::-;19783:3;19804:67;19868:2;19863:3;19804:67;:::i;:::-;19797:74;;19880:93;19969:3;19880:93;:::i;:::-;19998:2;19993:3;19989:12;19982:19;;19641:366;;;:::o;20013:::-;20155:3;20176:67;20240:2;20235:3;20176:67;:::i;:::-;20169:74;;20252:93;20341:3;20252:93;:::i;:::-;20370:2;20365:3;20361:12;20354:19;;20013:366;;;:::o;20385:::-;20527:3;20548:67;20612:2;20607:3;20548:67;:::i;:::-;20541:74;;20624:93;20713:3;20624:93;:::i;:::-;20742:2;20737:3;20733:12;20726:19;;20385:366;;;:::o;20757:::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:108::-;21206:24;21224:5;21206:24;:::i;:::-;21201:3;21194:37;21129:108;;:::o;21243:118::-;21330:24;21348:5;21330:24;:::i;:::-;21325:3;21318:37;21243:118;;:::o;21367:589::-;21592:3;21614:95;21705:3;21696:6;21614:95;:::i;:::-;21607:102;;21726:95;21817:3;21808:6;21726:95;:::i;:::-;21719:102;;21838:92;21926:3;21917:6;21838:92;:::i;:::-;21831:99;;21947:3;21940:10;;21367:589;;;;;;:::o;21962:222::-;22055:4;22093:2;22082:9;22078:18;22070:26;;22106:71;22174:1;22163:9;22159:17;22150:6;22106:71;:::i;:::-;21962:222;;;;:::o;22190:640::-;22385:4;22423:3;22412:9;22408:19;22400:27;;22437:71;22505:1;22494:9;22490:17;22481:6;22437:71;:::i;:::-;22518:72;22586:2;22575:9;22571:18;22562:6;22518:72;:::i;:::-;22600;22668:2;22657:9;22653:18;22644:6;22600:72;:::i;:::-;22719:9;22713:4;22709:20;22704:2;22693:9;22689:18;22682:48;22747:76;22818:4;22809:6;22747:76;:::i;:::-;22739:84;;22190:640;;;;;;;:::o;22836:373::-;22979:4;23017:2;23006:9;23002:18;22994:26;;23066:9;23060:4;23056:20;23052:1;23041:9;23037:17;23030:47;23094:108;23197:4;23188:6;23094:108;:::i;:::-;23086:116;;22836:373;;;;:::o;23215:210::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23353:65;23415:1;23404:9;23400:17;23391:6;23353:65;:::i;:::-;23215:210;;;;:::o;23431:313::-;23544:4;23582:2;23571:9;23567:18;23559:26;;23631:9;23625:4;23621:20;23617:1;23606:9;23602:17;23595:47;23659:78;23732:4;23723:6;23659:78;:::i;:::-;23651:86;;23431:313;;;;:::o;23750:419::-;23916:4;23954:2;23943:9;23939:18;23931:26;;24003:9;23997:4;23993:20;23989:1;23978:9;23974:17;23967:47;24031:131;24157:4;24031:131;:::i;:::-;24023:139;;23750:419;;;:::o;24175:::-;24341:4;24379:2;24368:9;24364:18;24356:26;;24428:9;24422:4;24418:20;24414:1;24403:9;24399:17;24392:47;24456:131;24582:4;24456:131;:::i;:::-;24448:139;;24175:419;;;:::o;24600:::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:::-;25191:4;25229:2;25218:9;25214:18;25206:26;;25278:9;25272:4;25268:20;25264:1;25253:9;25249:17;25242:47;25306:131;25432:4;25306:131;:::i;:::-;25298:139;;25025:419;;;:::o;25450:::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:::-;26466:4;26504:2;26493:9;26489:18;26481:26;;26553:9;26547:4;26543:20;26539:1;26528:9;26524:17;26517:47;26581:131;26707:4;26581:131;:::i;:::-;26573:139;;26300:419;;;:::o;26725:::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:::-;27316:4;27354:2;27343:9;27339:18;27331:26;;27403:9;27397:4;27393:20;27389:1;27378:9;27374:17;27367:47;27431:131;27557:4;27431:131;:::i;:::-;27423:139;;27150:419;;;:::o;27575:::-;27741:4;27779:2;27768:9;27764:18;27756:26;;27828:9;27822:4;27818:20;27814:1;27803:9;27799:17;27792:47;27856:131;27982:4;27856:131;:::i;:::-;27848:139;;27575:419;;;:::o;28000:::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28253:9;28247:4;28243:20;28239:1;28228:9;28224:17;28217:47;28281:131;28407:4;28281:131;:::i;:::-;28273:139;;28000:419;;;:::o;28425:::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29103:9;29097:4;29093:20;29089:1;29078:9;29074:17;29067:47;29131:131;29257:4;29131:131;:::i;:::-;29123:139;;28850:419;;;:::o;29275:::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:::-;30291:4;30329:2;30318:9;30314:18;30306:26;;30378:9;30372:4;30368:20;30364:1;30353:9;30349:17;30342:47;30406:131;30532:4;30406:131;:::i;:::-;30398:139;;30125:419;;;:::o;30550:::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:::-;31141:4;31179:2;31168:9;31164:18;31156:26;;31228:9;31222:4;31218:20;31214:1;31203:9;31199:17;31192:47;31256:131;31382:4;31256:131;:::i;:::-;31248:139;;30975:419;;;:::o;31400:::-;31566:4;31604:2;31593:9;31589:18;31581:26;;31653:9;31647:4;31643:20;31639:1;31628:9;31624:17;31617:47;31681:131;31807:4;31681:131;:::i;:::-;31673:139;;31400:419;;;:::o;31825:::-;31991:4;32029:2;32018:9;32014:18;32006:26;;32078:9;32072:4;32068:20;32064:1;32053:9;32049:17;32042:47;32106:131;32232:4;32106:131;:::i;:::-;32098:139;;31825:419;;;:::o;32250:::-;32416:4;32454:2;32443:9;32439:18;32431:26;;32503:9;32497:4;32493:20;32489:1;32478:9;32474:17;32467:47;32531:131;32657:4;32531:131;:::i;:::-;32523:139;;32250:419;;;:::o;32675:::-;32841:4;32879:2;32868:9;32864:18;32856:26;;32928:9;32922:4;32918:20;32914:1;32903:9;32899:17;32892:47;32956:131;33082:4;32956:131;:::i;:::-;32948:139;;32675:419;;;:::o;33100:::-;33266:4;33304:2;33293:9;33289:18;33281:26;;33353:9;33347:4;33343:20;33339:1;33328:9;33324:17;33317:47;33381:131;33507:4;33381:131;:::i;:::-;33373:139;;33100:419;;;:::o;33525:::-;33691:4;33729:2;33718:9;33714:18;33706:26;;33778:9;33772:4;33768:20;33764:1;33753:9;33749:17;33742:47;33806:131;33932:4;33806:131;:::i;:::-;33798:139;;33525:419;;;:::o;33950:::-;34116:4;34154:2;34143:9;34139:18;34131:26;;34203:9;34197:4;34193:20;34189:1;34178:9;34174:17;34167:47;34231:131;34357:4;34231:131;:::i;:::-;34223:139;;33950:419;;;:::o;34375:222::-;34468:4;34506:2;34495:9;34491:18;34483:26;;34519:71;34587:1;34576:9;34572:17;34563:6;34519:71;:::i;:::-;34375:222;;;;:::o;34603:129::-;34637:6;34664:20;;:::i;:::-;34654:30;;34693:33;34721:4;34713:6;34693:33;:::i;:::-;34603:129;;;:::o;34738:75::-;34771:6;34804:2;34798:9;34788:19;;34738:75;:::o;34819:307::-;34880:4;34970:18;34962:6;34959:30;34956:56;;;34992:18;;:::i;:::-;34956:56;35030:29;35052:6;35030:29;:::i;:::-;35022:37;;35114:4;35108;35104:15;35096:23;;34819:307;;;:::o;35132:308::-;35194:4;35284:18;35276:6;35273:30;35270:56;;;35306:18;;:::i;:::-;35270:56;35344:29;35366:6;35344:29;:::i;:::-;35336:37;;35428:4;35422;35418:15;35410:23;;35132:308;;;:::o;35446:132::-;35513:4;35536:3;35528:11;;35566:4;35561:3;35557:14;35549:22;;35446:132;;;:::o;35584:141::-;35633:4;35656:3;35648:11;;35679:3;35676:1;35669:14;35713:4;35710:1;35700:18;35692:26;;35584:141;;;:::o;35731:114::-;35798:6;35832:5;35826:12;35816:22;;35731:114;;;:::o;35851:98::-;35902:6;35936:5;35930:12;35920:22;;35851:98;;;:::o;35955:99::-;36007:6;36041:5;36035:12;36025:22;;35955:99;;;:::o;36060:113::-;36130:4;36162;36157:3;36153:14;36145:22;;36060:113;;;:::o;36179:184::-;36278:11;36312:6;36307:3;36300:19;36352:4;36347:3;36343:14;36328:29;;36179:184;;;;:::o;36369:168::-;36452:11;36486:6;36481:3;36474:19;36526:4;36521:3;36517:14;36502:29;;36369:168;;;;:::o;36543:169::-;36627:11;36661:6;36656:3;36649:19;36701:4;36696:3;36692:14;36677:29;;36543:169;;;;:::o;36718:148::-;36820:11;36857:3;36842:18;;36718:148;;;;:::o;36872:305::-;36912:3;36931:20;36949:1;36931:20;:::i;:::-;36926:25;;36965:20;36983:1;36965:20;:::i;:::-;36960:25;;37119:1;37051:66;37047:74;37044:1;37041:81;37038:107;;;37125:18;;:::i;:::-;37038:107;37169:1;37166;37162:9;37155:16;;36872:305;;;;:::o;37183:185::-;37223:1;37240:20;37258:1;37240:20;:::i;:::-;37235:25;;37274:20;37292:1;37274:20;:::i;:::-;37269:25;;37313:1;37303:35;;37318:18;;:::i;:::-;37303:35;37360:1;37357;37353:9;37348:14;;37183:185;;;;:::o;37374:348::-;37414:7;37437:20;37455:1;37437:20;:::i;:::-;37432:25;;37471:20;37489:1;37471:20;:::i;:::-;37466:25;;37659:1;37591:66;37587:74;37584:1;37581:81;37576:1;37569:9;37562:17;37558:105;37555:131;;;37666:18;;:::i;:::-;37555:131;37714:1;37711;37707:9;37696:20;;37374:348;;;;:::o;37728:191::-;37768:4;37788:20;37806:1;37788:20;:::i;:::-;37783:25;;37822:20;37840:1;37822:20;:::i;:::-;37817:25;;37861:1;37858;37855:8;37852:34;;;37866:18;;:::i;:::-;37852:34;37911:1;37908;37904:9;37896:17;;37728:191;;;;:::o;37925:96::-;37962:7;37991:24;38009:5;37991:24;:::i;:::-;37980:35;;37925:96;;;:::o;38027:90::-;38061:7;38104:5;38097:13;38090:21;38079:32;;38027:90;;;:::o;38123:149::-;38159:7;38199:66;38192:5;38188:78;38177:89;;38123:149;;;:::o;38278:126::-;38315:7;38355:42;38348:5;38344:54;38333:65;;38278:126;;;:::o;38410:77::-;38447:7;38476:5;38465:16;;38410:77;;;:::o;38493:154::-;38577:6;38572:3;38567;38554:30;38639:1;38630:6;38625:3;38621:16;38614:27;38493:154;;;:::o;38653:307::-;38721:1;38731:113;38745:6;38742:1;38739:13;38731:113;;;38830:1;38825:3;38821:11;38815:18;38811:1;38806:3;38802:11;38795:39;38767:2;38764:1;38760:10;38755:15;;38731:113;;;38862:6;38859:1;38856:13;38853:101;;;38942:1;38933:6;38928:3;38924:16;38917:27;38853:101;38702:258;38653:307;;;:::o;38966:320::-;39010:6;39047:1;39041:4;39037:12;39027:22;;39094:1;39088:4;39084:12;39115:18;39105:81;;39171:4;39163:6;39159:17;39149:27;;39105:81;39233:2;39225:6;39222:14;39202:18;39199:38;39196:84;;;39252:18;;:::i;:::-;39196:84;39017:269;38966:320;;;:::o;39292:281::-;39375:27;39397:4;39375:27;:::i;:::-;39367:6;39363:40;39505:6;39493:10;39490:22;39469:18;39457:10;39454:34;39451:62;39448:88;;;39516:18;;:::i;:::-;39448:88;39556:10;39552:2;39545:22;39335:238;39292:281;;:::o;39579:233::-;39618:3;39641:24;39659:5;39641:24;:::i;:::-;39632:33;;39687:66;39680:5;39677:77;39674:103;;;39757:18;;:::i;:::-;39674:103;39804:1;39797:5;39793:13;39786:20;;39579:233;;;:::o;39818:176::-;39850:1;39867:20;39885:1;39867:20;:::i;:::-;39862:25;;39901:20;39919:1;39901:20;:::i;:::-;39896:25;;39940:1;39930:35;;39945:18;;:::i;:::-;39930:35;39986:1;39983;39979:9;39974:14;;39818:176;;;;:::o;40000:180::-;40048:77;40045:1;40038:88;40145:4;40142:1;40135:15;40169:4;40166:1;40159:15;40186:180;40234:77;40231:1;40224:88;40331:4;40328:1;40321:15;40355:4;40352:1;40345:15;40372:180;40420:77;40417:1;40410:88;40517:4;40514:1;40507:15;40541:4;40538:1;40531:15;40558:180;40606:77;40603:1;40596:88;40703:4;40700:1;40693:15;40727:4;40724:1;40717:15;40744:180;40792:77;40789:1;40782:88;40889:4;40886:1;40879:15;40913:4;40910:1;40903:15;40930:180;40978:77;40975:1;40968:88;41075:4;41072:1;41065:15;41099:4;41096:1;41089:15;41116:117;41225:1;41222;41215:12;41239:117;41348:1;41345;41338:12;41362:117;41471:1;41468;41461:12;41485:117;41594:1;41591;41584:12;41608:117;41717:1;41714;41707:12;41731:117;41840:1;41837;41830:12;41854:102;41895:6;41946:2;41942:7;41937:2;41930:5;41926:14;41922:28;41912:38;;41854:102;;;:::o;41962:230::-;42102:34;42098:1;42090:6;42086:14;42079:58;42171:13;42166:2;42158:6;42154:15;42147:38;41962:230;:::o;42198:237::-;42338:34;42334:1;42326:6;42322:14;42315:58;42407:20;42402:2;42394:6;42390:15;42383:45;42198:237;:::o;42441:225::-;42581:34;42577:1;42569:6;42565:14;42558:58;42650:8;42645:2;42637:6;42633:15;42626:33;42441:225;:::o;42672:178::-;42812:30;42808:1;42800:6;42796:14;42789:54;42672:178;:::o;42856:168::-;42996:20;42992:1;42984:6;42980:14;42973:44;42856:168;:::o;43030:223::-;43170:34;43166:1;43158:6;43154:14;43147:58;43239:6;43234:2;43226:6;43222:15;43215:31;43030:223;:::o;43259:175::-;43399:27;43395:1;43387:6;43383:14;43376:51;43259:175;:::o;43440:176::-;43580:28;43576:1;43568:6;43564:14;43557:52;43440:176;:::o;43622:231::-;43762:34;43758:1;43750:6;43746:14;43739:58;43831:14;43826:2;43818:6;43814:15;43807:39;43622:231;:::o;43859:223::-;43999:34;43995:1;43987:6;43983:14;43976:58;44068:6;44063:2;44055:6;44051:15;44044:31;43859:223;:::o;44088:243::-;44228:34;44224:1;44216:6;44212:14;44205:58;44297:26;44292:2;44284:6;44280:15;44273:51;44088:243;:::o;44337:229::-;44477:34;44473:1;44465:6;44461:14;44454:58;44546:12;44541:2;44533:6;44529:15;44522:37;44337:229;:::o;44572:228::-;44712:34;44708:1;44700:6;44696:14;44689:58;44781:11;44776:2;44768:6;44764:15;44757:36;44572:228;:::o;44806:182::-;44946:34;44942:1;44934:6;44930:14;44923:58;44806:182;:::o;44994:231::-;45134:34;45130:1;45122:6;45118:14;45111:58;45203:14;45198:2;45190:6;45186:15;45179:39;44994:231;:::o;45231:182::-;45371:34;45367:1;45359:6;45355:14;45348:58;45231:182;:::o;45419:228::-;45559:34;45555:1;45547:6;45543:14;45536:58;45628:11;45623:2;45615:6;45611:15;45604:36;45419:228;:::o;45653:234::-;45793:34;45789:1;45781:6;45777:14;45770:58;45862:17;45857:2;45849:6;45845:15;45838:42;45653:234;:::o;45893:172::-;46033:24;46029:1;46021:6;46017:14;46010:48;45893:172;:::o;46071:178::-;46211:30;46207:1;46199:6;46195:14;46188:54;46071:178;:::o;46255:220::-;46395:34;46391:1;46383:6;46379:14;46372:58;46464:3;46459:2;46451:6;46447:15;46440:28;46255:220;:::o;46481:236::-;46621:34;46617:1;46609:6;46605:14;46598:58;46690:19;46685:2;46677:6;46673:15;46666:44;46481:236;:::o;46723:227::-;46863:34;46859:1;46851:6;46847:14;46840:58;46932:10;46927:2;46919:6;46915:15;46908:35;46723:227;:::o;46956:231::-;47096:34;47092:1;47084:6;47080:14;47073:58;47165:14;47160:2;47152:6;47148:15;47141:39;46956:231;:::o;47193:177::-;47333:29;47329:1;47321:6;47317:14;47310:53;47193:177;:::o;47376:122::-;47449:24;47467:5;47449:24;:::i;:::-;47442:5;47439:35;47429:63;;47488:1;47485;47478:12;47429:63;47376:122;:::o;47504:116::-;47574:21;47589:5;47574:21;:::i;:::-;47567:5;47564:32;47554:60;;47610:1;47607;47600:12;47554:60;47504:116;:::o;47626:120::-;47698:23;47715:5;47698:23;:::i;:::-;47691:5;47688:34;47678:62;;47736:1;47733;47726:12;47678:62;47626:120;:::o;47752:122::-;47825:24;47843:5;47825:24;:::i;:::-;47818:5;47815:35;47805:63;;47864:1;47861;47854:12;47805:63;47752:122;:::o
Swarm Source
ipfs://0220e27fb7d4d40b1f7338258d28aff7ff766b0ec8758abbf3a21fa53e02580a
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.