Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
120 WSB
Holders
44
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 WSBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
WallStreetBets
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-29 */ // Sources flattened with hardhat v2.4.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT 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/token/ERC721/[email protected] 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/[email protected] 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/token/ERC721/extensions/[email protected] 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/utils/[email protected] 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/[email protected] 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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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 { } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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/[email protected] 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 @openzeppelin/contracts/access/[email protected] 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; contract WallStreetBets is ERC721Enumerable, Ownable { using SafeMath for uint256; using Address for address; using Strings for uint256; string public PROVENANCE; string private baseURI; uint256 public maxSupply; uint256 public price = 0.069 ether; bool public presaleActive = false; bool public saleActive = false; string public baseExtension = ".json"; mapping (address => uint256) public presaleWhitelist; constructor(uint256 supply) ERC721("WallStreetBets", "WSB") { maxSupply = supply; } function reserve() public onlyOwner { uint256 supply = totalSupply(); for (uint256 i = 0; i < 50; i++) { _safeMint(msg.sender, supply + i); } } function mintPresale(uint256 numberOfMints) public payable { uint256 supply = totalSupply(); uint256 reserved = presaleWhitelist[msg.sender]; require(presaleActive, "Presale must be active to mint"); require(reserved > 0, "No tokens reserved for this address"); require(numberOfMints <= reserved, "Can't mint more than reserved"); require(supply.add(numberOfMints) <= maxSupply, "Purchase would exceed max supply of tokens"); require(price.mul(numberOfMints) == msg.value, "Ether value sent is not correct"); presaleWhitelist[msg.sender] = reserved - numberOfMints; for(uint256 i; i < numberOfMints; i++){ _safeMint( msg.sender, supply + i ); } } function mint(uint256 numberOfMints) public payable { uint256 supply = totalSupply(); require(saleActive, "Sale must be active to mint"); require(numberOfMints > 0 && numberOfMints < 21, "Invalid purchase amount"); require(supply.add(numberOfMints) <= maxSupply, "Purchase would exceed max supply of tokens"); require(price.mul(numberOfMints) == msg.value, "Ether value sent is not correct"); for(uint256 i; i < numberOfMints; i++) { _safeMint(msg.sender, supply + i); } } function editPresale(address[] memory presaleAddresses) public onlyOwner { for(uint256 i; i < presaleAddresses.length; i++){ presaleWhitelist[presaleAddresses[i]] = 13; } } function walletOfOwner(address _owner) external view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function togglePresale() public onlyOwner { presaleActive = !presaleActive; } function toggleSale() public onlyOwner { saleActive = !saleActive; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function setProvenance(string memory provenance) public onlyOwner { PROVENANCE = provenance; } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function _baseURI() internal view override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address[]","name":"presaleAddresses","type":"address[]"}],"name":"editPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266f5232269808000600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060109080519060200190620000929291906200022d565b50348015620000a057600080fd5b5060405162004f6d38038062004f6d8339818101604052810190620000c691906200031d565b6040518060400160405280600e81526020017f57616c6c537472656574426574730000000000000000000000000000000000008152506040518060400160405280600381526020017f575342000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014a9291906200022d565b508060019080519060200190620001639291906200022d565b5050506000620001786200022560201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600d8190555050620003b4565b600033905090565b8280546200023b906200037e565b90600052602060002090601f0160209004810192826200025f5760008555620002ab565b82601f106200027a57805160ff1916838001178555620002ab565b82800160010185558215620002ab579182015b82811115620002aa5782518255916020019190600101906200028d565b5b509050620002ba9190620002be565b5090565b5b80821115620002d9576000816000905550600101620002bf565b5090565b600080fd5b6000819050919050565b620002f781620002e2565b81146200030357600080fd5b50565b6000815190506200031781620002ec565b92915050565b600060208284031215620003365762000335620002dd565b5b6000620003468482850162000306565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039757607f821691505b60208210811415620003ae57620003ad6200034f565b5b50919050565b614ba980620003c46000396000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c51461078c578063eb8835ab146107c9578063f2fde38b14610806578063f759867a1461082f578063ffe630b51461084b5761021a565b8063b88d4fde146106b9578063c6682862146106e2578063c87b56dd1461070d578063cd3293de1461074a578063d5abeb01146107615761021a565b806391b7f5ed116100f257806391b7f5ed146105f557806395d89b411461061e578063a035b1fe14610649578063a0712d6814610674578063a22cb465146106905761021a565b806370a082311461055f578063715018a61461059c5780637d8966e4146105b35780638da5cb5b146105ca5761021a565b80633ccfd60b116101a657806353135ca01161017557806353135ca01461047857806355f804b3146104a35780636352211e146104cc5780636373a6b11461050957806368428a1b146105345761021a565b80633ccfd60b146103be57806342842e0e146103d5578063438b6300146103fe5780634f6ccce71461043b5761021a565b806318160ddd116101ed57806318160ddd146102ed5780631aea52e81461031857806323b872dd146103415780632f745c591461036a57806334393743146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906131c5565b610874565b604051610253919061320d565b60405180910390f35b34801561026857600080fd5b506102716108ee565b60405161027e91906132c1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613319565b610980565b6040516102bb9190613387565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133ce565b610a05565b005b3480156102f957600080fd5b50610302610b1d565b60405161030f919061341d565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613580565b610b2a565b005b34801561034d57600080fd5b50610368600480360381019061036391906135c9565b610c28565b005b34801561037657600080fd5b50610391600480360381019061038c91906133ce565b610c88565b60405161039e919061341d565b60405180910390f35b3480156103b357600080fd5b506103bc610d2d565b005b3480156103ca57600080fd5b506103d3610dd5565b005b3480156103e157600080fd5b506103fc60048036038101906103f791906135c9565b610ea0565b005b34801561040a57600080fd5b506104256004803603810190610420919061361c565b610ec0565b6040516104329190613707565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613319565b610f6e565b60405161046f919061341d565b60405180910390f35b34801561048457600080fd5b5061048d610fdf565b60405161049a919061320d565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906137de565b610ff2565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613319565b611088565b6040516105009190613387565b60405180910390f35b34801561051557600080fd5b5061051e61113a565b60405161052b91906132c1565b60405180910390f35b34801561054057600080fd5b506105496111c8565b604051610556919061320d565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061361c565b6111db565b604051610593919061341d565b60405180910390f35b3480156105a857600080fd5b506105b1611293565b005b3480156105bf57600080fd5b506105c86113d0565b005b3480156105d657600080fd5b506105df611478565b6040516105ec9190613387565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613319565b6114a2565b005b34801561062a57600080fd5b50610633611528565b60405161064091906132c1565b60405180910390f35b34801561065557600080fd5b5061065e6115ba565b60405161066b919061341d565b60405180910390f35b61068e60048036038101906106899190613319565b6115c0565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613853565b61174f565b005b3480156106c557600080fd5b506106e060048036038101906106db9190613934565b6118d0565b005b3480156106ee57600080fd5b506106f7611932565b60405161070491906132c1565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190613319565b6119c0565b60405161074191906132c1565b60405180910390f35b34801561075657600080fd5b5061075f611a6a565b005b34801561076d57600080fd5b50610776611b2a565b604051610783919061341d565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae91906139b7565b611b30565b6040516107c0919061320d565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061361c565b611bc4565b6040516107fd919061341d565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061361c565b611bdc565b005b61084960048036038101906108449190613319565b611d88565b005b34801561085757600080fd5b50610872600480360381019061086d91906137de565b611fe2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e757506108e682612078565b5b9050919050565b6060600080546108fd90613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461092990613a26565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b600061098b8261215a565b6109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613aca565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1082611088565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613b5c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa06121c6565b73ffffffffffffffffffffffffffffffffffffffff161480610acf5750610ace81610ac96121c6565b611b30565b5b610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590613bee565b60405180910390fd5b610b1883836121ce565b505050565b6000600880549050905090565b610b326121c6565b73ffffffffffffffffffffffffffffffffffffffff16610b50611478565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90613c5a565b60405180910390fd5b60005b8151811015610c2457600d60116000848481518110610bcb57610bca613c7a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610c1c90613cd8565b915050610ba9565b5050565b610c39610c336121c6565b82612287565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613d93565b60405180910390fd5b610c83838383612365565b505050565b6000610c93836111db565b8210610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90613e25565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d356121c6565b73ffffffffffffffffffffffffffffffffffffffff16610d53611478565b73ffffffffffffffffffffffffffffffffffffffff1614610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090613c5a565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610ddd6121c6565b73ffffffffffffffffffffffffffffffffffffffff16610dfb611478565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613c5a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e9c573d6000803e3d6000fd5b5050565b610ebb838383604051806020016040528060008152506118d0565b505050565b60606000610ecd836111db565b905060008167ffffffffffffffff811115610eeb57610eea61343d565b5b604051908082528060200260200182016040528015610f195781602001602082028036833780820191505090505b50905060005b82811015610f6357610f318582610c88565b828281518110610f4457610f43613c7a565b5b6020026020010181815250508080610f5b90613cd8565b915050610f1f565b508092505050919050565b6000610f78610b1d565b8210610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613eb7565b60405180910390fd5b60088281548110610fcd57610fcc613c7a565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b610ffa6121c6565b73ffffffffffffffffffffffffffffffffffffffff16611018611478565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590613c5a565b60405180910390fd5b80600c90805190602001906110849291906130b6565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613f49565b60405180910390fd5b80915050919050565b600b805461114790613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461117390613a26565b80156111c05780601f10611195576101008083540402835291602001916111c0565b820191906000526020600020905b8154815290600101906020018083116111a357829003601f168201915b505050505081565b600f60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613fdb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61129b6121c6565b73ffffffffffffffffffffffffffffffffffffffff166112b9611478565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613c5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113d86121c6565b73ffffffffffffffffffffffffffffffffffffffff166113f6611478565b73ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390613c5a565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114aa6121c6565b73ffffffffffffffffffffffffffffffffffffffff166114c8611478565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613c5a565b60405180910390fd5b80600e8190555050565b60606001805461153790613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461156390613a26565b80156115b05780601f10611585576101008083540402835291602001916115b0565b820191906000526020600020905b81548152906001019060200180831161159357829003601f168201915b5050505050905090565b600e5481565b60006115ca610b1d565b9050600f60019054906101000a900460ff1661161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290614047565b60405180910390fd5b60008211801561162b5750601582105b61166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906140b3565b60405180910390fd5b600d5461168083836125c190919063ffffffff16565b11156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890614145565b60405180910390fd5b346116d783600e546125d790919063ffffffff16565b14611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906141b1565b60405180910390fd5b60005b8281101561174a5761173733828461173291906141d1565b6125ed565b808061174290613cd8565b91505061171a565b505050565b6117576121c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614273565b60405180910390fd5b80600560006117d26121c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187f6121c6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c4919061320d565b60405180910390a35050565b6118e16118db6121c6565b83612287565b611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613d93565b60405180910390fd5b61192c8484848461260b565b50505050565b6010805461193f90613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461196b90613a26565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505050505081565b60606119cb8261215a565b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614305565b60405180910390fd5b6000611a14612667565b90506000815111611a345760405180602001604052806000815250611a62565b80611a3e846126f9565b6010604051602001611a52939291906143f5565b6040516020818303038152906040525b915050919050565b611a726121c6565b73ffffffffffffffffffffffffffffffffffffffff16611a90611478565b73ffffffffffffffffffffffffffffffffffffffff1614611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90613c5a565b60405180910390fd5b6000611af0610b1d565b905060005b6032811015611b2657611b13338284611b0e91906141d1565b6125ed565b8080611b1e90613cd8565b915050611af5565b5050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611be46121c6565b73ffffffffffffffffffffffffffffffffffffffff16611c02611478565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613c5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614498565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611d92610b1d565b90506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614504565b60405180910390fd5b60008111611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614596565b60405180910390fd5b80831115611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614602565b60405180910390fd5b600d54611ec384846125c190919063ffffffff16565b1115611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90614145565b60405180910390fd5b34611f1a84600e546125d790919063ffffffff16565b14611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f51906141b1565b60405180910390fd5b8281611f669190614622565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b83811015611fdc57611fc9338285611fc491906141d1565b6125ed565b8080611fd490613cd8565b915050611fac565b50505050565b611fea6121c6565b73ffffffffffffffffffffffffffffffffffffffff16612008611478565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590613c5a565b60405180910390fd5b80600b90805190602001906120749291906130b6565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061215357506121528261285a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661224183611088565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122928261215a565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906146c8565b60405180910390fd5b60006122dc83611088565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061234b57508373ffffffffffffffffffffffffffffffffffffffff1661233384610980565b73ffffffffffffffffffffffffffffffffffffffff16145b8061235c575061235b8185611b30565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661238582611088565b73ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d29061475a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906147ec565b60405180910390fd5b6124568383836128c4565b6124616000826121ce565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b19190614622565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250891906141d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836125cf91906141d1565b905092915050565b600081836125e5919061480c565b905092915050565b6126078282604051806020016040528060008152506129d8565b5050565b612616848484612365565b61262284848484612a33565b612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906148d8565b60405180910390fd5b50505050565b6060600c805461267690613a26565b80601f01602080910402602001604051908101604052809291908181526020018280546126a290613a26565b80156126ef5780601f106126c4576101008083540402835291602001916126ef565b820191906000526020600020905b8154815290600101906020018083116126d257829003601f168201915b5050505050905090565b60606000821415612741576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612855565b600082905060005b6000821461277357808061275c90613cd8565b915050600a8261276c9190614927565b9150612749565b60008167ffffffffffffffff81111561278f5761278e61343d565b5b6040519080825280601f01601f1916602001820160405280156127c15781602001600182028036833780820191505090505b5090505b6000851461284e576001826127da9190614622565b9150600a856127e99190614958565b60306127f591906141d1565b60f81b81838151811061280b5761280a613c7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128479190614927565b94506127c5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128cf838383612bca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129125761290d81612bcf565b612951565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129505761294f8382612c18565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129945761298f81612d85565b6129d3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129d2576129d18282612e56565b5b5b505050565b6129e28383612ed5565b6129ef6000848484612a33565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a25906148d8565b60405180910390fd5b505050565b6000612a548473ffffffffffffffffffffffffffffffffffffffff166130a3565b15612bbd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7d6121c6565b8786866040518563ffffffff1660e01b8152600401612a9f94939291906149de565b602060405180830381600087803b158015612ab957600080fd5b505af1925050508015612aea57506040513d601f19601f82011682018060405250810190612ae79190614a3f565b60015b612b6d573d8060008114612b1a576040519150601f19603f3d011682016040523d82523d6000602084013e612b1f565b606091505b50600081511415612b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c906148d8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc2565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c25846111db565b612c2f9190614622565b9050600060076000848152602001908152602001600020549050818114612d14576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d999190614622565b9050600060096000848152602001908152602001600020549050600060088381548110612dc957612dc8613c7a565b5b906000526020600020015490508060088381548110612deb57612dea613c7a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e3a57612e39614a6c565b5b6001900381819060005260206000200160009055905550505050565b6000612e61836111db565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3c90614ae7565b60405180910390fd5b612f4e8161215a565b15612f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8590614b53565b60405180910390fd5b612f9a600083836128c4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fea91906141d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130c290613a26565b90600052602060002090601f0160209004810192826130e4576000855561312b565b82601f106130fd57805160ff191683800117855561312b565b8280016001018555821561312b579182015b8281111561312a57825182559160200191906001019061310f565b5b509050613138919061313c565b5090565b5b8082111561315557600081600090555060010161313d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131a28161316d565b81146131ad57600080fd5b50565b6000813590506131bf81613199565b92915050565b6000602082840312156131db576131da613163565b5b60006131e9848285016131b0565b91505092915050565b60008115159050919050565b613207816131f2565b82525050565b600060208201905061322260008301846131fe565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613262578082015181840152602081019050613247565b83811115613271576000848401525b50505050565b6000601f19601f8301169050919050565b600061329382613228565b61329d8185613233565b93506132ad818560208601613244565b6132b681613277565b840191505092915050565b600060208201905081810360008301526132db8184613288565b905092915050565b6000819050919050565b6132f6816132e3565b811461330157600080fd5b50565b600081359050613313816132ed565b92915050565b60006020828403121561332f5761332e613163565b5b600061333d84828501613304565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061337182613346565b9050919050565b61338181613366565b82525050565b600060208201905061339c6000830184613378565b92915050565b6133ab81613366565b81146133b657600080fd5b50565b6000813590506133c8816133a2565b92915050565b600080604083850312156133e5576133e4613163565b5b60006133f3858286016133b9565b925050602061340485828601613304565b9150509250929050565b613417816132e3565b82525050565b6000602082019050613432600083018461340e565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347582613277565b810181811067ffffffffffffffff821117156134945761349361343d565b5b80604052505050565b60006134a7613159565b90506134b3828261346c565b919050565b600067ffffffffffffffff8211156134d3576134d261343d565b5b602082029050602081019050919050565b600080fd5b60006134fc6134f7846134b8565b61349d565b9050808382526020820190506020840283018581111561351f5761351e6134e4565b5b835b81811015613548578061353488826133b9565b845260208401935050602081019050613521565b5050509392505050565b600082601f83011261356757613566613438565b5b81356135778482602086016134e9565b91505092915050565b60006020828403121561359657613595613163565b5b600082013567ffffffffffffffff8111156135b4576135b3613168565b5b6135c084828501613552565b91505092915050565b6000806000606084860312156135e2576135e1613163565b5b60006135f0868287016133b9565b9350506020613601868287016133b9565b925050604061361286828701613304565b9150509250925092565b60006020828403121561363257613631613163565b5b6000613640848285016133b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61367e816132e3565b82525050565b60006136908383613675565b60208301905092915050565b6000602082019050919050565b60006136b482613649565b6136be8185613654565b93506136c983613665565b8060005b838110156136fa5781516136e18882613684565b97506136ec8361369c565b9250506001810190506136cd565b5085935050505092915050565b6000602082019050818103600083015261372181846136a9565b905092915050565b600080fd5b600067ffffffffffffffff8211156137495761374861343d565b5b61375282613277565b9050602081019050919050565b82818337600083830152505050565b600061378161377c8461372e565b61349d565b90508281526020810184848401111561379d5761379c613729565b5b6137a884828561375f565b509392505050565b600082601f8301126137c5576137c4613438565b5b81356137d584826020860161376e565b91505092915050565b6000602082840312156137f4576137f3613163565b5b600082013567ffffffffffffffff81111561381257613811613168565b5b61381e848285016137b0565b91505092915050565b613830816131f2565b811461383b57600080fd5b50565b60008135905061384d81613827565b92915050565b6000806040838503121561386a57613869613163565b5b6000613878858286016133b9565b92505060206138898582860161383e565b9150509250929050565b600067ffffffffffffffff8211156138ae576138ad61343d565b5b6138b782613277565b9050602081019050919050565b60006138d76138d284613893565b61349d565b9050828152602081018484840111156138f3576138f2613729565b5b6138fe84828561375f565b509392505050565b600082601f83011261391b5761391a613438565b5b813561392b8482602086016138c4565b91505092915050565b6000806000806080858703121561394e5761394d613163565b5b600061395c878288016133b9565b945050602061396d878288016133b9565b935050604061397e87828801613304565b925050606085013567ffffffffffffffff81111561399f5761399e613168565b5b6139ab87828801613906565b91505092959194509250565b600080604083850312156139ce576139cd613163565b5b60006139dc858286016133b9565b92505060206139ed858286016133b9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a3e57607f821691505b60208210811415613a5257613a516139f7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ab4602c83613233565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b46602183613233565b9150613b5182613aea565b604082019050919050565b60006020820190508181036000830152613b7581613b39565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613bd8603883613233565b9150613be382613b7c565b604082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c44602083613233565b9150613c4f82613c0e565b602082019050919050565b60006020820190508181036000830152613c7381613c37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce3826132e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d1657613d15613ca9565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613d7d603183613233565b9150613d8882613d21565b604082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e0f602b83613233565b9150613e1a82613db3565b604082019050919050565b60006020820190508181036000830152613e3e81613e02565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ea1602c83613233565b9150613eac82613e45565b604082019050919050565b60006020820190508181036000830152613ed081613e94565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613f33602983613233565b9150613f3e82613ed7565b604082019050919050565b60006020820190508181036000830152613f6281613f26565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fc5602a83613233565b9150613fd082613f69565b604082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000614031601b83613233565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b600061409d601783613233565b91506140a882614067565b602082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061412f602a83613233565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061419b601f83613233565b91506141a682614165565b602082019050919050565b600060208201905081810360008301526141ca8161418e565b9050919050565b60006141dc826132e3565b91506141e7836132e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561421c5761421b613ca9565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061425d601983613233565b915061426882614227565b602082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142ef602f83613233565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b600081905092915050565b600061433b82613228565b6143458185614325565b9350614355818560208601613244565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461438381613a26565b61438d8186614325565b945060018216600081146143a857600181146143b9576143ec565b60ff198316865281860193506143ec565b6143c285614361565b60005b838110156143e4578154818901526001820191506020810190506143c5565b838801955050505b50505092915050565b60006144018286614330565b915061440d8285614330565b91506144198284614376565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614482602683613233565b915061448d82614426565b604082019050919050565b600060208201905081810360008301526144b181614475565b9050919050565b7f50726573616c65206d7573742062652061637469766520746f206d696e740000600082015250565b60006144ee601e83613233565b91506144f9826144b8565b602082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614580602383613233565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b60006145ec601d83613233565b91506145f7826145b6565b602082019050919050565b6000602082019050818103600083015261461b816145df565b9050919050565b600061462d826132e3565b9150614638836132e3565b92508282101561464b5761464a613ca9565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146b2602c83613233565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614744602983613233565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147d6602483613233565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b6000614817826132e3565b9150614822836132e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485b5761485a613ca9565b5b828202905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148c2603283613233565b91506148cd82614866565b604082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614932826132e3565b915061493d836132e3565b92508261494d5761494c6148f8565b5b828204905092915050565b6000614963826132e3565b915061496e836132e3565b92508261497e5761497d6148f8565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149b082614989565b6149ba8185614994565b93506149ca818560208601613244565b6149d381613277565b840191505092915050565b60006080820190506149f36000830187613378565b614a006020830186613378565b614a0d604083018561340e565b8181036060830152614a1f81846149a5565b905095945050505050565b600081519050614a3981613199565b92915050565b600060208284031215614a5557614a54613163565b5b6000614a6384828501614a2a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ad1602083613233565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b3d601c83613233565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b905091905056fea26469706673582212209837d7d092aaba5984b0d8cb8afc00e551a0b38903b04427c056f2e3fca24e6564736f6c634300080900330000000000000000000000000000000000000000000000000000000000000fa0
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806370a0823111610123578063b88d4fde116100ab578063e985e9c51161006f578063e985e9c51461078c578063eb8835ab146107c9578063f2fde38b14610806578063f759867a1461082f578063ffe630b51461084b5761021a565b8063b88d4fde146106b9578063c6682862146106e2578063c87b56dd1461070d578063cd3293de1461074a578063d5abeb01146107615761021a565b806391b7f5ed116100f257806391b7f5ed146105f557806395d89b411461061e578063a035b1fe14610649578063a0712d6814610674578063a22cb465146106905761021a565b806370a082311461055f578063715018a61461059c5780637d8966e4146105b35780638da5cb5b146105ca5761021a565b80633ccfd60b116101a657806353135ca01161017557806353135ca01461047857806355f804b3146104a35780636352211e146104cc5780636373a6b11461050957806368428a1b146105345761021a565b80633ccfd60b146103be57806342842e0e146103d5578063438b6300146103fe5780634f6ccce71461043b5761021a565b806318160ddd116101ed57806318160ddd146102ed5780631aea52e81461031857806323b872dd146103415780632f745c591461036a57806334393743146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b50610246600480360381019061024191906131c5565b610874565b604051610253919061320d565b60405180910390f35b34801561026857600080fd5b506102716108ee565b60405161027e91906132c1565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613319565b610980565b6040516102bb9190613387565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906133ce565b610a05565b005b3480156102f957600080fd5b50610302610b1d565b60405161030f919061341d565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613580565b610b2a565b005b34801561034d57600080fd5b50610368600480360381019061036391906135c9565b610c28565b005b34801561037657600080fd5b50610391600480360381019061038c91906133ce565b610c88565b60405161039e919061341d565b60405180910390f35b3480156103b357600080fd5b506103bc610d2d565b005b3480156103ca57600080fd5b506103d3610dd5565b005b3480156103e157600080fd5b506103fc60048036038101906103f791906135c9565b610ea0565b005b34801561040a57600080fd5b506104256004803603810190610420919061361c565b610ec0565b6040516104329190613707565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190613319565b610f6e565b60405161046f919061341d565b60405180910390f35b34801561048457600080fd5b5061048d610fdf565b60405161049a919061320d565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906137de565b610ff2565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613319565b611088565b6040516105009190613387565b60405180910390f35b34801561051557600080fd5b5061051e61113a565b60405161052b91906132c1565b60405180910390f35b34801561054057600080fd5b506105496111c8565b604051610556919061320d565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061361c565b6111db565b604051610593919061341d565b60405180910390f35b3480156105a857600080fd5b506105b1611293565b005b3480156105bf57600080fd5b506105c86113d0565b005b3480156105d657600080fd5b506105df611478565b6040516105ec9190613387565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613319565b6114a2565b005b34801561062a57600080fd5b50610633611528565b60405161064091906132c1565b60405180910390f35b34801561065557600080fd5b5061065e6115ba565b60405161066b919061341d565b60405180910390f35b61068e60048036038101906106899190613319565b6115c0565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613853565b61174f565b005b3480156106c557600080fd5b506106e060048036038101906106db9190613934565b6118d0565b005b3480156106ee57600080fd5b506106f7611932565b60405161070491906132c1565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190613319565b6119c0565b60405161074191906132c1565b60405180910390f35b34801561075657600080fd5b5061075f611a6a565b005b34801561076d57600080fd5b50610776611b2a565b604051610783919061341d565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae91906139b7565b611b30565b6040516107c0919061320d565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061361c565b611bc4565b6040516107fd919061341d565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061361c565b611bdc565b005b61084960048036038101906108449190613319565b611d88565b005b34801561085757600080fd5b50610872600480360381019061086d91906137de565b611fe2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e757506108e682612078565b5b9050919050565b6060600080546108fd90613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461092990613a26565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b600061098b8261215a565b6109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613aca565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1082611088565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890613b5c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa06121c6565b73ffffffffffffffffffffffffffffffffffffffff161480610acf5750610ace81610ac96121c6565b611b30565b5b610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590613bee565b60405180910390fd5b610b1883836121ce565b505050565b6000600880549050905090565b610b326121c6565b73ffffffffffffffffffffffffffffffffffffffff16610b50611478565b73ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90613c5a565b60405180910390fd5b60005b8151811015610c2457600d60116000848481518110610bcb57610bca613c7a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610c1c90613cd8565b915050610ba9565b5050565b610c39610c336121c6565b82612287565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613d93565b60405180910390fd5b610c83838383612365565b505050565b6000610c93836111db565b8210610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90613e25565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d356121c6565b73ffffffffffffffffffffffffffffffffffffffff16610d53611478565b73ffffffffffffffffffffffffffffffffffffffff1614610da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da090613c5a565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610ddd6121c6565b73ffffffffffffffffffffffffffffffffffffffff16610dfb611478565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613c5a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e9c573d6000803e3d6000fd5b5050565b610ebb838383604051806020016040528060008152506118d0565b505050565b60606000610ecd836111db565b905060008167ffffffffffffffff811115610eeb57610eea61343d565b5b604051908082528060200260200182016040528015610f195781602001602082028036833780820191505090505b50905060005b82811015610f6357610f318582610c88565b828281518110610f4457610f43613c7a565b5b6020026020010181815250508080610f5b90613cd8565b915050610f1f565b508092505050919050565b6000610f78610b1d565b8210610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613eb7565b60405180910390fd5b60088281548110610fcd57610fcc613c7a565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b610ffa6121c6565b73ffffffffffffffffffffffffffffffffffffffff16611018611478565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590613c5a565b60405180910390fd5b80600c90805190602001906110849291906130b6565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613f49565b60405180910390fd5b80915050919050565b600b805461114790613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461117390613a26565b80156111c05780601f10611195576101008083540402835291602001916111c0565b820191906000526020600020905b8154815290600101906020018083116111a357829003601f168201915b505050505081565b600f60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613fdb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61129b6121c6565b73ffffffffffffffffffffffffffffffffffffffff166112b9611478565b73ffffffffffffffffffffffffffffffffffffffff161461130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613c5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113d86121c6565b73ffffffffffffffffffffffffffffffffffffffff166113f6611478565b73ffffffffffffffffffffffffffffffffffffffff161461144c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144390613c5a565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114aa6121c6565b73ffffffffffffffffffffffffffffffffffffffff166114c8611478565b73ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590613c5a565b60405180910390fd5b80600e8190555050565b60606001805461153790613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461156390613a26565b80156115b05780601f10611585576101008083540402835291602001916115b0565b820191906000526020600020905b81548152906001019060200180831161159357829003601f168201915b5050505050905090565b600e5481565b60006115ca610b1d565b9050600f60019054906101000a900460ff1661161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290614047565b60405180910390fd5b60008211801561162b5750601582105b61166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906140b3565b60405180910390fd5b600d5461168083836125c190919063ffffffff16565b11156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890614145565b60405180910390fd5b346116d783600e546125d790919063ffffffff16565b14611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906141b1565b60405180910390fd5b60005b8281101561174a5761173733828461173291906141d1565b6125ed565b808061174290613cd8565b91505061171a565b505050565b6117576121c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614273565b60405180910390fd5b80600560006117d26121c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187f6121c6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c4919061320d565b60405180910390a35050565b6118e16118db6121c6565b83612287565b611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790613d93565b60405180910390fd5b61192c8484848461260b565b50505050565b6010805461193f90613a26565b80601f016020809104026020016040519081016040528092919081815260200182805461196b90613a26565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505050505081565b60606119cb8261215a565b611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614305565b60405180910390fd5b6000611a14612667565b90506000815111611a345760405180602001604052806000815250611a62565b80611a3e846126f9565b6010604051602001611a52939291906143f5565b6040516020818303038152906040525b915050919050565b611a726121c6565b73ffffffffffffffffffffffffffffffffffffffff16611a90611478565b73ffffffffffffffffffffffffffffffffffffffff1614611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90613c5a565b60405180910390fd5b6000611af0610b1d565b905060005b6032811015611b2657611b13338284611b0e91906141d1565b6125ed565b8080611b1e90613cd8565b915050611af5565b5050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b611be46121c6565b73ffffffffffffffffffffffffffffffffffffffff16611c02611478565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613c5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614498565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611d92610b1d565b90506000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614504565b60405180910390fd5b60008111611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614596565b60405180910390fd5b80831115611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614602565b60405180910390fd5b600d54611ec384846125c190919063ffffffff16565b1115611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90614145565b60405180910390fd5b34611f1a84600e546125d790919063ffffffff16565b14611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f51906141b1565b60405180910390fd5b8281611f669190614622565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b83811015611fdc57611fc9338285611fc491906141d1565b6125ed565b8080611fd490613cd8565b915050611fac565b50505050565b611fea6121c6565b73ffffffffffffffffffffffffffffffffffffffff16612008611478565b73ffffffffffffffffffffffffffffffffffffffff161461205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590613c5a565b60405180910390fd5b80600b90805190602001906120749291906130b6565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061215357506121528261285a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661224183611088565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122928261215a565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c8906146c8565b60405180910390fd5b60006122dc83611088565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061234b57508373ffffffffffffffffffffffffffffffffffffffff1661233384610980565b73ffffffffffffffffffffffffffffffffffffffff16145b8061235c575061235b8185611b30565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661238582611088565b73ffffffffffffffffffffffffffffffffffffffff16146123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d29061475a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906147ec565b60405180910390fd5b6124568383836128c4565b6124616000826121ce565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b19190614622565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250891906141d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836125cf91906141d1565b905092915050565b600081836125e5919061480c565b905092915050565b6126078282604051806020016040528060008152506129d8565b5050565b612616848484612365565b61262284848484612a33565b612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906148d8565b60405180910390fd5b50505050565b6060600c805461267690613a26565b80601f01602080910402602001604051908101604052809291908181526020018280546126a290613a26565b80156126ef5780601f106126c4576101008083540402835291602001916126ef565b820191906000526020600020905b8154815290600101906020018083116126d257829003601f168201915b5050505050905090565b60606000821415612741576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612855565b600082905060005b6000821461277357808061275c90613cd8565b915050600a8261276c9190614927565b9150612749565b60008167ffffffffffffffff81111561278f5761278e61343d565b5b6040519080825280601f01601f1916602001820160405280156127c15781602001600182028036833780820191505090505b5090505b6000851461284e576001826127da9190614622565b9150600a856127e99190614958565b60306127f591906141d1565b60f81b81838151811061280b5761280a613c7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128479190614927565b94506127c5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128cf838383612bca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129125761290d81612bcf565b612951565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129505761294f8382612c18565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129945761298f81612d85565b6129d3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129d2576129d18282612e56565b5b5b505050565b6129e28383612ed5565b6129ef6000848484612a33565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a25906148d8565b60405180910390fd5b505050565b6000612a548473ffffffffffffffffffffffffffffffffffffffff166130a3565b15612bbd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a7d6121c6565b8786866040518563ffffffff1660e01b8152600401612a9f94939291906149de565b602060405180830381600087803b158015612ab957600080fd5b505af1925050508015612aea57506040513d601f19601f82011682018060405250810190612ae79190614a3f565b60015b612b6d573d8060008114612b1a576040519150601f19603f3d011682016040523d82523d6000602084013e612b1f565b606091505b50600081511415612b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c906148d8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bc2565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c25846111db565b612c2f9190614622565b9050600060076000848152602001908152602001600020549050818114612d14576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d999190614622565b9050600060096000848152602001908152602001600020549050600060088381548110612dc957612dc8613c7a565b5b906000526020600020015490508060088381548110612deb57612dea613c7a565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e3a57612e39614a6c565b5b6001900381819060005260206000200160009055905550505050565b6000612e61836111db565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3c90614ae7565b60405180910390fd5b612f4e8161215a565b15612f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8590614b53565b60405180910390fd5b612f9a600083836128c4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fea91906141d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130c290613a26565b90600052602060002090601f0160209004810192826130e4576000855561312b565b82601f106130fd57805160ff191683800117855561312b565b8280016001018555821561312b579182015b8281111561312a57825182559160200191906001019061310f565b5b509050613138919061313c565b5090565b5b8082111561315557600081600090555060010161313d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131a28161316d565b81146131ad57600080fd5b50565b6000813590506131bf81613199565b92915050565b6000602082840312156131db576131da613163565b5b60006131e9848285016131b0565b91505092915050565b60008115159050919050565b613207816131f2565b82525050565b600060208201905061322260008301846131fe565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613262578082015181840152602081019050613247565b83811115613271576000848401525b50505050565b6000601f19601f8301169050919050565b600061329382613228565b61329d8185613233565b93506132ad818560208601613244565b6132b681613277565b840191505092915050565b600060208201905081810360008301526132db8184613288565b905092915050565b6000819050919050565b6132f6816132e3565b811461330157600080fd5b50565b600081359050613313816132ed565b92915050565b60006020828403121561332f5761332e613163565b5b600061333d84828501613304565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061337182613346565b9050919050565b61338181613366565b82525050565b600060208201905061339c6000830184613378565b92915050565b6133ab81613366565b81146133b657600080fd5b50565b6000813590506133c8816133a2565b92915050565b600080604083850312156133e5576133e4613163565b5b60006133f3858286016133b9565b925050602061340485828601613304565b9150509250929050565b613417816132e3565b82525050565b6000602082019050613432600083018461340e565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347582613277565b810181811067ffffffffffffffff821117156134945761349361343d565b5b80604052505050565b60006134a7613159565b90506134b3828261346c565b919050565b600067ffffffffffffffff8211156134d3576134d261343d565b5b602082029050602081019050919050565b600080fd5b60006134fc6134f7846134b8565b61349d565b9050808382526020820190506020840283018581111561351f5761351e6134e4565b5b835b81811015613548578061353488826133b9565b845260208401935050602081019050613521565b5050509392505050565b600082601f83011261356757613566613438565b5b81356135778482602086016134e9565b91505092915050565b60006020828403121561359657613595613163565b5b600082013567ffffffffffffffff8111156135b4576135b3613168565b5b6135c084828501613552565b91505092915050565b6000806000606084860312156135e2576135e1613163565b5b60006135f0868287016133b9565b9350506020613601868287016133b9565b925050604061361286828701613304565b9150509250925092565b60006020828403121561363257613631613163565b5b6000613640848285016133b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61367e816132e3565b82525050565b60006136908383613675565b60208301905092915050565b6000602082019050919050565b60006136b482613649565b6136be8185613654565b93506136c983613665565b8060005b838110156136fa5781516136e18882613684565b97506136ec8361369c565b9250506001810190506136cd565b5085935050505092915050565b6000602082019050818103600083015261372181846136a9565b905092915050565b600080fd5b600067ffffffffffffffff8211156137495761374861343d565b5b61375282613277565b9050602081019050919050565b82818337600083830152505050565b600061378161377c8461372e565b61349d565b90508281526020810184848401111561379d5761379c613729565b5b6137a884828561375f565b509392505050565b600082601f8301126137c5576137c4613438565b5b81356137d584826020860161376e565b91505092915050565b6000602082840312156137f4576137f3613163565b5b600082013567ffffffffffffffff81111561381257613811613168565b5b61381e848285016137b0565b91505092915050565b613830816131f2565b811461383b57600080fd5b50565b60008135905061384d81613827565b92915050565b6000806040838503121561386a57613869613163565b5b6000613878858286016133b9565b92505060206138898582860161383e565b9150509250929050565b600067ffffffffffffffff8211156138ae576138ad61343d565b5b6138b782613277565b9050602081019050919050565b60006138d76138d284613893565b61349d565b9050828152602081018484840111156138f3576138f2613729565b5b6138fe84828561375f565b509392505050565b600082601f83011261391b5761391a613438565b5b813561392b8482602086016138c4565b91505092915050565b6000806000806080858703121561394e5761394d613163565b5b600061395c878288016133b9565b945050602061396d878288016133b9565b935050604061397e87828801613304565b925050606085013567ffffffffffffffff81111561399f5761399e613168565b5b6139ab87828801613906565b91505092959194509250565b600080604083850312156139ce576139cd613163565b5b60006139dc858286016133b9565b92505060206139ed858286016133b9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a3e57607f821691505b60208210811415613a5257613a516139f7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ab4602c83613233565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b46602183613233565b9150613b5182613aea565b604082019050919050565b60006020820190508181036000830152613b7581613b39565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613bd8603883613233565b9150613be382613b7c565b604082019050919050565b60006020820190508181036000830152613c0781613bcb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c44602083613233565b9150613c4f82613c0e565b602082019050919050565b60006020820190508181036000830152613c7381613c37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce3826132e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d1657613d15613ca9565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613d7d603183613233565b9150613d8882613d21565b604082019050919050565b60006020820190508181036000830152613dac81613d70565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e0f602b83613233565b9150613e1a82613db3565b604082019050919050565b60006020820190508181036000830152613e3e81613e02565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ea1602c83613233565b9150613eac82613e45565b604082019050919050565b60006020820190508181036000830152613ed081613e94565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613f33602983613233565b9150613f3e82613ed7565b604082019050919050565b60006020820190508181036000830152613f6281613f26565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fc5602a83613233565b9150613fd082613f69565b604082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000614031601b83613233565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b600061409d601783613233565b91506140a882614067565b602082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061412f602a83613233565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061419b601f83613233565b91506141a682614165565b602082019050919050565b600060208201905081810360008301526141ca8161418e565b9050919050565b60006141dc826132e3565b91506141e7836132e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561421c5761421b613ca9565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061425d601983613233565b915061426882614227565b602082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142ef602f83613233565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b600081905092915050565b600061433b82613228565b6143458185614325565b9350614355818560208601613244565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461438381613a26565b61438d8186614325565b945060018216600081146143a857600181146143b9576143ec565b60ff198316865281860193506143ec565b6143c285614361565b60005b838110156143e4578154818901526001820191506020810190506143c5565b838801955050505b50505092915050565b60006144018286614330565b915061440d8285614330565b91506144198284614376565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614482602683613233565b915061448d82614426565b604082019050919050565b600060208201905081810360008301526144b181614475565b9050919050565b7f50726573616c65206d7573742062652061637469766520746f206d696e740000600082015250565b60006144ee601e83613233565b91506144f9826144b8565b602082019050919050565b6000602082019050818103600083015261451d816144e1565b9050919050565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614580602383613233565b915061458b82614524565b604082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b60006145ec601d83613233565b91506145f7826145b6565b602082019050919050565b6000602082019050818103600083015261461b816145df565b9050919050565b600061462d826132e3565b9150614638836132e3565b92508282101561464b5761464a613ca9565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146b2602c83613233565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614744602983613233565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147d6602483613233565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b6000614817826132e3565b9150614822836132e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485b5761485a613ca9565b5b828202905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148c2603283613233565b91506148cd82614866565b604082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614932826132e3565b915061493d836132e3565b92508261494d5761494c6148f8565b5b828204905092915050565b6000614963826132e3565b915061496e836132e3565b92508261497e5761497d6148f8565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149b082614989565b6149ba8185614994565b93506149ca818560208601613244565b6149d381613277565b840191505092915050565b60006080820190506149f36000830187613378565b614a006020830186613378565b614a0d604083018561340e565b8181036060830152614a1f81846149a5565b905095945050505050565b600081519050614a3981613199565b92915050565b600060208284031215614a5557614a54613163565b5b6000614a6384828501614a2a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ad1602083613233565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b3d601c83613233565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b905091905056fea26469706673582212209837d7d092aaba5984b0d8cb8afc00e551a0b38903b04427c056f2e3fca24e6564736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000fa0
-----Decoded View---------------
Arg [0] : supply (uint256): 4000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000fa0
Deployed Bytecode Sourcemap
49956:3994:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34408:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21611:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23071:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22608:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35061:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52212:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23961:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34729:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52935:91;;;;;;;;;;;;;:::i;:::-;;52784:143;;;;;;;;;;;;;:::i;:::-;;24337:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52432:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35251:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53340:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21305:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50119:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50295:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21035:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42284:148;;;;;;;;;;;;;:::i;:::-;;53034:82;;;;;;;;;;;;;:::i;:::-;;41633:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53124:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21780:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50212:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51597:607;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23364:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24559:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50332:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53548:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50548:188;;;;;;;;;;;;;:::i;:::-;;50181:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23730:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50378:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42587:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50744:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53220:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34408:237;34510:4;34549:35;34534:50;;;:11;:50;;;;:103;;;;34601:36;34625:11;34601:23;:36::i;:::-;34534:103;34527:110;;34408:237;;;:::o;21611:100::-;21665:13;21698:5;21691:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21611:100;:::o;23071:221::-;23147:7;23175:16;23183:7;23175;:16::i;:::-;23167:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23260:15;:24;23276:7;23260:24;;;;;;;;;;;;;;;;;;;;;23253:31;;23071:221;;;:::o;22608:397::-;22689:13;22705:23;22720:7;22705:14;:23::i;:::-;22689:39;;22753:5;22747:11;;:2;:11;;;;22739:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22833:5;22817:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22842:37;22859:5;22866:12;:10;:12::i;:::-;22842:16;:37::i;:::-;22817:62;22809:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22976:21;22985:2;22989:7;22976:8;:21::i;:::-;22678:327;22608:397;;:::o;35061:113::-;35122:7;35149:10;:17;;;;35142:24;;35061:113;:::o;52212:208::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52300:9:::1;52296:117;52315:16;:23;52311:1;:27;52296:117;;;52399:2;52359:16;:37;52376:16;52393:1;52376:19;;;;;;;;:::i;:::-;;;;;;;;52359:37;;;;;;;;;;;;;;;:42;;;;52340:3;;;;;:::i;:::-;;;;52296:117;;;;52212:208:::0;:::o;23961:305::-;24122:41;24141:12;:10;:12::i;:::-;24155:7;24122:18;:41::i;:::-;24114:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24230:28;24240:4;24246:2;24250:7;24230:9;:28::i;:::-;23961:305;;;:::o;34729:256::-;34826:7;34862:23;34879:5;34862:16;:23::i;:::-;34854:5;:31;34846:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34951:12;:19;34964:5;34951:19;;;;;;;;;;;;;;;:26;34971:5;34951:26;;;;;;;;;;;;34944:33;;34729:256;;;;:::o;52935:91::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53005:13:::1;;;;;;;;;;;53004:14;52988:13;;:30;;;;;;;;;;;;;;;;;;52935:91::o:0;52784:143::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52832:15:::1;52850:21;52832:39;;52890:10;52882:28;;:37;52911:7;52882:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52821:106;52784:143::o:0;24337:151::-;24441:39;24458:4;24464:2;24468:7;24441:39;;;;;;;;;;;;:16;:39::i;:::-;24337:151;;;:::o;52432:344::-;52493:16;52522:18;52543:17;52553:6;52543:9;:17::i;:::-;52522:38;;52573:25;52615:10;52601:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52573:53;;52641:9;52637:106;52656:10;52652:1;:14;52637:106;;;52701:30;52721:6;52729:1;52701:19;:30::i;:::-;52687:8;52696:1;52687:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;52668:3;;;;;:::i;:::-;;;;52637:106;;;;52760:8;52753:15;;;;52432:344;;;:::o;35251:233::-;35326:7;35362:30;:28;:30::i;:::-;35354:5;:38;35346:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35459:10;35470:5;35459:17;;;;;;;;:::i;:::-;;;;;;;;;;35452:24;;35251:233;;;:::o;50255:33::-;;;;;;;;;;;;;:::o;53340:88::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53417:3:::1;53407:7;:13;;;;;;;;;;;;:::i;:::-;;53340:88:::0;:::o;21305:239::-;21377:7;21397:13;21413:7;:16;21421:7;21413:16;;;;;;;;;;;;;;;;;;;;;21397:32;;21465:1;21448:19;;:5;:19;;;;21440:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21531:5;21524:12;;;21305:239;;;:::o;50119:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50295:30::-;;;;;;;;;;;;;:::o;21035:208::-;21107:7;21152:1;21135:19;;:5;:19;;;;21127:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21219:9;:16;21229:5;21219:16;;;;;;;;;;;;;;;;21212:23;;21035:208;;;:::o;42284:148::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42391:1:::1;42354:40;;42375:6;;;;;;;;;;;42354:40;;;;;;;;;;;;42422:1;42405:6;;:19;;;;;;;;;;;;;;;;;;42284:148::o:0;53034:82::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53098:10:::1;;;;;;;;;;;53097:11;53084:10;;:24;;;;;;;;;;;;;;;;;;53034:82::o:0;41633:87::-;41679:7;41706:6;;;;;;;;;;;41699:13;;41633:87;:::o;53124:88::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53196:8:::1;53188:5;:16;;;;53124:88:::0;:::o;21780:104::-;21836:13;21869:7;21862:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21780:104;:::o;50212:34::-;;;;:::o;51597:607::-;51660:14;51677:13;:11;:13::i;:::-;51660:30;;51709:10;;;;;;;;;;;51701:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;51818:1;51802:13;:17;:39;;;;;51839:2;51823:13;:18;51802:39;51794:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51920:9;;51891:25;51902:13;51891:6;:10;;:25;;;;:::i;:::-;:38;;51883:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;52027:9;51999:24;52009:13;51999:5;;:9;;:24;;;;:::i;:::-;:37;51991:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;52102:9;52098:99;52117:13;52113:1;:17;52098:99;;;52152:33;52162:10;52183:1;52174:6;:10;;;;:::i;:::-;52152:9;:33::i;:::-;52132:3;;;;;:::i;:::-;;;;52098:99;;;;51649:555;51597:607;:::o;23364:295::-;23479:12;:10;:12::i;:::-;23467:24;;:8;:24;;;;23459:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23579:8;23534:18;:32;23553:12;:10;:12::i;:::-;23534:32;;;;;;;;;;;;;;;:42;23567:8;23534:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23632:8;23603:48;;23618:12;:10;:12::i;:::-;23603:48;;;23642:8;23603:48;;;;;;:::i;:::-;;;;;;;;23364:295;;:::o;24559:285::-;24691:41;24710:12;:10;:12::i;:::-;24724:7;24691:18;:41::i;:::-;24683:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24797:39;24811:4;24817:2;24821:7;24830:5;24797:13;:39::i;:::-;24559:285;;;;:::o;50332:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53548:398::-;53621:13;53655:16;53663:7;53655;:16::i;:::-;53647:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53746:28;53777:10;:8;:10::i;:::-;53746:41;;53836:1;53811:14;53805:28;:32;:133;;;;;;;;;;;;;;;;;53873:14;53889:18;:7;:16;:18::i;:::-;53909:13;53856:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53805:133;53798:140;;;53548:398;;;:::o;50548:188::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50595:14:::1;50612:13;:11;:13::i;:::-;50595:30;;50641:9;50636:93;50660:2;50656:1;:6;50636:93;;;50684:33;50694:10;50715:1;50706:6;:10;;;;:::i;:::-;50684:9;:33::i;:::-;50664:3;;;;;:::i;:::-;;;;50636:93;;;;50584:152;50548:188::o:0;50181:24::-;;;;:::o;23730:164::-;23827:4;23851:18;:25;23870:5;23851:25;;;;;;;;;;;;;;;:35;23877:8;23851:35;;;;;;;;;;;;;;;;;;;;;;;;;23844:42;;23730:164;;;;:::o;50378:52::-;;;;;;;;;;;;;;;;;:::o;42587:244::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42696:1:::1;42676:22;;:8;:22;;;;42668:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42786:8;42757:38;;42778:6;;;;;;;;;;;42757:38;;;;;;;;;;;;42815:8;42806:6;;:17;;;;;;;;;;;;;;;;;;42587:244:::0;:::o;50744:841::-;50814:14;50831:13;:11;:13::i;:::-;50814:30;;50855:16;50874;:28;50891:10;50874:28;;;;;;;;;;;;;;;;50855:47;;50921:13;;;;;;;;;;;50913:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51028:1;51017:8;:12;51009:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;51135:8;51118:13;:25;;51110:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51242:9;;51213:25;51224:13;51213:6;:10;;:25;;;;:::i;:::-;:38;;51205:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51349:9;51321:24;51331:13;51321:5;;:9;;:24;;;;:::i;:::-;:37;51313:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;51452:13;51441:8;:24;;;;:::i;:::-;51410:16;:28;51427:10;51410:28;;;;;;;;;;;;;;;:55;;;;51482:9;51478:100;51497:13;51493:1;:17;51478:100;;;51531:35;51542:10;51563:1;51554:6;:10;;;;:::i;:::-;51531:9;:35::i;:::-;51512:3;;;;;:::i;:::-;;;;51478:100;;;;50803:782;;50744:841;:::o;53220:108::-;41864:12;:10;:12::i;:::-;41853:23;;:7;:5;:7::i;:::-;:23;;;41845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53310:10:::1;53297;:23;;;;;;;;;;;;:::i;:::-;;53220:108:::0;:::o;20679:292::-;20781:4;20820:25;20805:40;;;:11;:40;;;;:105;;;;20877:33;20862:48;;;:11;:48;;;;20805:105;:158;;;;20927:36;20951:11;20927:23;:36::i;:::-;20805:158;20798:165;;20679:292;;;:::o;26311:127::-;26376:4;26428:1;26400:30;;:7;:16;26408:7;26400:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26393:37;;26311:127;;;:::o;15971:98::-;16024:7;16051:10;16044:17;;15971:98;:::o;30188:174::-;30290:2;30263:15;:24;30279:7;30263:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30346:7;30342:2;30308:46;;30317:23;30332:7;30317:14;:23::i;:::-;30308:46;;;;;;;;;;;;30188:174;;:::o;26605:348::-;26698:4;26723:16;26731:7;26723;:16::i;:::-;26715:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26799:13;26815:23;26830:7;26815:14;:23::i;:::-;26799:39;;26868:5;26857:16;;:7;:16;;;:51;;;;26901:7;26877:31;;:20;26889:7;26877:11;:20::i;:::-;:31;;;26857:51;:87;;;;26912:32;26929:5;26936:7;26912:16;:32::i;:::-;26857:87;26849:96;;;26605:348;;;;:::o;29526:544::-;29651:4;29624:31;;:23;29639:7;29624:14;:23::i;:::-;:31;;;29616:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29734:1;29720:16;;:2;:16;;;;29712:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29790:39;29811:4;29817:2;29821:7;29790:20;:39::i;:::-;29894:29;29911:1;29915:7;29894:8;:29::i;:::-;29955:1;29936:9;:15;29946:4;29936:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29984:1;29967:9;:13;29977:2;29967:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30015:2;29996:7;:16;30004:7;29996:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30054:7;30050:2;30035:27;;30044:4;30035:27;;;;;;;;;;;;29526:544;;;:::o;45634:98::-;45692:7;45723:1;45719;:5;;;;:::i;:::-;45712:12;;45634:98;;;;:::o;46372:::-;46430:7;46461:1;46457;:5;;;;:::i;:::-;46450:12;;46372:98;;;;:::o;27295:110::-;27371:26;27381:2;27385:7;27371:26;;;;;;;;;;;;:9;:26::i;:::-;27295:110;;:::o;25726:272::-;25840:28;25850:4;25856:2;25860:7;25840:9;:28::i;:::-;25887:48;25910:4;25916:2;25920:7;25929:5;25887:22;:48::i;:::-;25879:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25726:272;;;;:::o;53440:100::-;53492:13;53525:7;53518:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53440:100;:::o;16630:723::-;16686:13;16916:1;16907:5;:10;16903:53;;;16934:10;;;;;;;;;;;;;;;;;;;;;16903:53;16966:12;16981:5;16966:20;;16997:14;17022:78;17037:1;17029:4;:9;17022:78;;17055:8;;;;;:::i;:::-;;;;17086:2;17078:10;;;;;:::i;:::-;;;17022:78;;;17110:19;17142:6;17132:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17110:39;;17160:154;17176:1;17167:5;:10;17160:154;;17204:1;17194:11;;;;;:::i;:::-;;;17271:2;17263:5;:10;;;;:::i;:::-;17250:2;:24;;;;:::i;:::-;17237:39;;17220:6;17227;17220:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17300:2;17291:11;;;;;:::i;:::-;;;17160:154;;;17338:6;17324:21;;;;;16630:723;;;;:::o;19187:157::-;19272:4;19311:25;19296:40;;;:11;:40;;;;19289:47;;19187:157;;;:::o;36097:555::-;36207:45;36234:4;36240:2;36244:7;36207:26;:45::i;:::-;36285:1;36269:18;;:4;:18;;;36265:187;;;36304:40;36336:7;36304:31;:40::i;:::-;36265:187;;;36374:2;36366:10;;:4;:10;;;36362:90;;36393:47;36426:4;36432:7;36393:32;:47::i;:::-;36362:90;36265:187;36480:1;36466:16;;:2;:16;;;36462:183;;;36499:45;36536:7;36499:36;:45::i;:::-;36462:183;;;36572:4;36566:10;;:2;:10;;;36562:83;;36593:40;36621:2;36625:7;36593:27;:40::i;:::-;36562:83;36462:183;36097:555;;;:::o;27632:250::-;27728:18;27734:2;27738:7;27728:5;:18::i;:::-;27765:54;27796:1;27800:2;27804:7;27813:5;27765:22;:54::i;:::-;27757:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27632:250;;;:::o;30927:843::-;31048:4;31074:15;:2;:13;;;:15::i;:::-;31070:693;;;31126:2;31110:36;;;31147:12;:10;:12::i;:::-;31161:4;31167:7;31176:5;31110:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31106:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31373:1;31356:6;:13;:18;31352:341;;;31399:60;;;;;;;;;;:::i;:::-;;;;;;;;31352:341;31643:6;31637:13;31628:6;31624:2;31620:15;31613:38;31106:602;31243:45;;;31233:55;;;:6;:55;;;;31226:62;;;;;31070:693;31747:4;31740:11;;30927:843;;;;;;;:::o;32383:93::-;;;;:::o;37375:164::-;37479:10;:17;;;;37452:15;:24;37468:7;37452:24;;;;;;;;;;;:44;;;;37507:10;37523:7;37507:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37375:164;:::o;38166:988::-;38432:22;38482:1;38457:22;38474:4;38457:16;:22::i;:::-;:26;;;;:::i;:::-;38432:51;;38494:18;38515:17;:26;38533:7;38515:26;;;;;;;;;;;;38494:47;;38662:14;38648:10;:28;38644:328;;38693:19;38715:12;:18;38728:4;38715:18;;;;;;;;;;;;;;;:34;38734:14;38715:34;;;;;;;;;;;;38693:56;;38799:11;38766:12;:18;38779:4;38766:18;;;;;;;;;;;;;;;:30;38785:10;38766:30;;;;;;;;;;;:44;;;;38916:10;38883:17;:30;38901:11;38883:30;;;;;;;;;;;:43;;;;38678:294;38644:328;39068:17;:26;39086:7;39068:26;;;;;;;;;;;39061:33;;;39112:12;:18;39125:4;39112:18;;;;;;;;;;;;;;;:34;39131:14;39112:34;;;;;;;;;;;39105:41;;;38247:907;;38166:988;;:::o;39449:1079::-;39702:22;39747:1;39727:10;:17;;;;:21;;;;:::i;:::-;39702:46;;39759:18;39780:15;:24;39796:7;39780:24;;;;;;;;;;;;39759:45;;40131:19;40153:10;40164:14;40153:26;;;;;;;;:::i;:::-;;;;;;;;;;40131:48;;40217:11;40192:10;40203;40192:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40328:10;40297:15;:28;40313:11;40297:28;;;;;;;;;;;:41;;;;40469:15;:24;40485:7;40469:24;;;;;;;;;;;40462:31;;;40504:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39520:1008;;;39449:1079;:::o;36953:221::-;37038:14;37055:20;37072:2;37055:16;:20::i;:::-;37038:37;;37113:7;37086:12;:16;37099:2;37086:16;;;;;;;;;;;;;;;:24;37103:6;37086:24;;;;;;;;;;;:34;;;;37160:6;37131:17;:26;37149:7;37131:26;;;;;;;;;;;:35;;;;37027:147;36953:221;;:::o;28218:382::-;28312:1;28298:16;;:2;:16;;;;28290:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28371:16;28379:7;28371;:16::i;:::-;28370:17;28362:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28433:45;28462:1;28466:2;28470:7;28433:20;:45::i;:::-;28508:1;28491:9;:13;28501:2;28491:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28539:2;28520:7;:16;28528:7;28520:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28584:7;28580:2;28559:33;;28576:1;28559:33;;;;;;;;;;;;28218:382;;:::o;8084:422::-;8144:4;8352:12;8463:7;8451:20;8443:28;;8497:1;8490:4;:8;8483:15;;;8084:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:180;5461:77;5458:1;5451:88;5558:4;5555:1;5548:15;5582:4;5579:1;5572:15;5599:281;5682:27;5704:4;5682:27;:::i;:::-;5674:6;5670:40;5812:6;5800:10;5797:22;5776:18;5764:10;5761:34;5758:62;5755:88;;;5823:18;;:::i;:::-;5755:88;5863:10;5859:2;5852:22;5642:238;5599:281;;:::o;5886:129::-;5920:6;5947:20;;:::i;:::-;5937:30;;5976:33;6004:4;5996:6;5976:33;:::i;:::-;5886:129;;;:::o;6021:311::-;6098:4;6188:18;6180:6;6177:30;6174:56;;;6210:18;;:::i;:::-;6174:56;6260:4;6252:6;6248:17;6240:25;;6320:4;6314;6310:15;6302:23;;6021:311;;;:::o;6338:117::-;6447:1;6444;6437:12;6478:710;6574:5;6599:81;6615:64;6672:6;6615:64;:::i;:::-;6599:81;:::i;:::-;6590:90;;6700:5;6729:6;6722:5;6715:21;6763:4;6756:5;6752:16;6745:23;;6816:4;6808:6;6804:17;6796:6;6792:30;6845:3;6837:6;6834:15;6831:122;;;6864:79;;:::i;:::-;6831:122;6979:6;6962:220;6996:6;6991:3;6988:15;6962:220;;;7071:3;7100:37;7133:3;7121:10;7100:37;:::i;:::-;7095:3;7088:50;7167:4;7162:3;7158:14;7151:21;;7038:144;7022:4;7017:3;7013:14;7006:21;;6962:220;;;6966:21;6580:608;;6478:710;;;;;:::o;7211:370::-;7282:5;7331:3;7324:4;7316:6;7312:17;7308:27;7298:122;;7339:79;;:::i;:::-;7298:122;7456:6;7443:20;7481:94;7571:3;7563:6;7556:4;7548:6;7544:17;7481:94;:::i;:::-;7472:103;;7288:293;7211:370;;;;:::o;7587:539::-;7671:6;7720:2;7708:9;7699:7;7695:23;7691:32;7688:119;;;7726:79;;:::i;:::-;7688:119;7874:1;7863:9;7859:17;7846:31;7904:18;7896:6;7893:30;7890:117;;;7926:79;;:::i;:::-;7890:117;8031:78;8101:7;8092:6;8081:9;8077:22;8031:78;:::i;:::-;8021:88;;7817:302;7587:539;;;;:::o;8132:619::-;8209:6;8217;8225;8274:2;8262:9;8253:7;8249:23;8245:32;8242:119;;;8280:79;;:::i;:::-;8242:119;8400:1;8425:53;8470:7;8461:6;8450:9;8446:22;8425:53;:::i;:::-;8415:63;;8371:117;8527:2;8553:53;8598:7;8589:6;8578:9;8574:22;8553:53;:::i;:::-;8543:63;;8498:118;8655:2;8681:53;8726:7;8717:6;8706:9;8702:22;8681:53;:::i;:::-;8671:63;;8626:118;8132:619;;;;;:::o;8757:329::-;8816:6;8865:2;8853:9;8844:7;8840:23;8836:32;8833:119;;;8871:79;;:::i;:::-;8833:119;8991:1;9016:53;9061:7;9052:6;9041:9;9037:22;9016:53;:::i;:::-;9006:63;;8962:117;8757:329;;;;:::o;9092:114::-;9159:6;9193:5;9187:12;9177:22;;9092:114;;;:::o;9212:184::-;9311:11;9345:6;9340:3;9333:19;9385:4;9380:3;9376:14;9361:29;;9212:184;;;;:::o;9402:132::-;9469:4;9492:3;9484:11;;9522:4;9517:3;9513:14;9505:22;;9402:132;;;:::o;9540:108::-;9617:24;9635:5;9617:24;:::i;:::-;9612:3;9605:37;9540:108;;:::o;9654:179::-;9723:10;9744:46;9786:3;9778:6;9744:46;:::i;:::-;9822:4;9817:3;9813:14;9799:28;;9654:179;;;;:::o;9839:113::-;9909:4;9941;9936:3;9932:14;9924:22;;9839:113;;;:::o;9988:732::-;10107:3;10136:54;10184:5;10136:54;:::i;:::-;10206:86;10285:6;10280:3;10206:86;:::i;:::-;10199:93;;10316:56;10366:5;10316:56;:::i;:::-;10395:7;10426:1;10411:284;10436:6;10433:1;10430:13;10411:284;;;10512:6;10506:13;10539:63;10598:3;10583:13;10539:63;:::i;:::-;10532:70;;10625:60;10678:6;10625:60;:::i;:::-;10615:70;;10471:224;10458:1;10455;10451:9;10446:14;;10411:284;;;10415:14;10711:3;10704:10;;10112:608;;;9988:732;;;;:::o;10726:373::-;10869:4;10907:2;10896:9;10892:18;10884:26;;10956:9;10950:4;10946:20;10942:1;10931:9;10927:17;10920:47;10984:108;11087:4;11078:6;10984:108;:::i;:::-;10976:116;;10726:373;;;;:::o;11105:117::-;11214:1;11211;11204:12;11228:308;11290:4;11380:18;11372:6;11369:30;11366:56;;;11402:18;;:::i;:::-;11366:56;11440:29;11462:6;11440:29;:::i;:::-;11432:37;;11524:4;11518;11514:15;11506:23;;11228:308;;;:::o;11542:154::-;11626:6;11621:3;11616;11603:30;11688:1;11679:6;11674:3;11670:16;11663:27;11542:154;;;:::o;11702:412::-;11780:5;11805:66;11821:49;11863:6;11821:49;:::i;:::-;11805:66;:::i;:::-;11796:75;;11894:6;11887:5;11880:21;11932:4;11925:5;11921:16;11970:3;11961:6;11956:3;11952:16;11949:25;11946:112;;;11977:79;;:::i;:::-;11946:112;12067:41;12101:6;12096:3;12091;12067:41;:::i;:::-;11786:328;11702:412;;;;;:::o;12134:340::-;12190:5;12239:3;12232:4;12224:6;12220:17;12216:27;12206:122;;12247:79;;:::i;:::-;12206:122;12364:6;12351:20;12389:79;12464:3;12456:6;12449:4;12441:6;12437:17;12389:79;:::i;:::-;12380:88;;12196:278;12134:340;;;;:::o;12480:509::-;12549:6;12598:2;12586:9;12577:7;12573:23;12569:32;12566:119;;;12604:79;;:::i;:::-;12566:119;12752:1;12741:9;12737:17;12724:31;12782:18;12774:6;12771:30;12768:117;;;12804:79;;:::i;:::-;12768:117;12909:63;12964:7;12955:6;12944:9;12940:22;12909:63;:::i;:::-;12899:73;;12695:287;12480:509;;;;:::o;12995:116::-;13065:21;13080:5;13065:21;:::i;:::-;13058:5;13055:32;13045:60;;13101:1;13098;13091:12;13045:60;12995:116;:::o;13117:133::-;13160:5;13198:6;13185:20;13176:29;;13214:30;13238:5;13214:30;:::i;:::-;13117:133;;;;:::o;13256:468::-;13321:6;13329;13378:2;13366:9;13357:7;13353:23;13349:32;13346:119;;;13384:79;;:::i;:::-;13346:119;13504:1;13529:53;13574:7;13565:6;13554:9;13550:22;13529:53;:::i;:::-;13519:63;;13475:117;13631:2;13657:50;13699:7;13690:6;13679:9;13675:22;13657:50;:::i;:::-;13647:60;;13602:115;13256:468;;;;;:::o;13730:307::-;13791:4;13881:18;13873:6;13870:30;13867:56;;;13903:18;;:::i;:::-;13867:56;13941:29;13963:6;13941:29;:::i;:::-;13933:37;;14025:4;14019;14015:15;14007:23;;13730:307;;;:::o;14043:410::-;14120:5;14145:65;14161:48;14202:6;14161:48;:::i;:::-;14145:65;:::i;:::-;14136:74;;14233:6;14226:5;14219:21;14271:4;14264:5;14260:16;14309:3;14300:6;14295:3;14291:16;14288:25;14285:112;;;14316:79;;:::i;:::-;14285:112;14406:41;14440:6;14435:3;14430;14406:41;:::i;:::-;14126:327;14043:410;;;;;:::o;14472:338::-;14527:5;14576:3;14569:4;14561:6;14557:17;14553:27;14543:122;;14584:79;;:::i;:::-;14543:122;14701:6;14688:20;14726:78;14800:3;14792:6;14785:4;14777:6;14773:17;14726:78;:::i;:::-;14717:87;;14533:277;14472:338;;;;:::o;14816:943::-;14911:6;14919;14927;14935;14984:3;14972:9;14963:7;14959:23;14955:33;14952:120;;;14991:79;;:::i;:::-;14952:120;15111:1;15136:53;15181:7;15172:6;15161:9;15157:22;15136:53;:::i;:::-;15126:63;;15082:117;15238:2;15264:53;15309:7;15300:6;15289:9;15285:22;15264:53;:::i;:::-;15254:63;;15209:118;15366:2;15392:53;15437:7;15428:6;15417:9;15413:22;15392:53;:::i;:::-;15382:63;;15337:118;15522:2;15511:9;15507:18;15494:32;15553:18;15545:6;15542:30;15539:117;;;15575:79;;:::i;:::-;15539:117;15680:62;15734:7;15725:6;15714:9;15710:22;15680:62;:::i;:::-;15670:72;;15465:287;14816:943;;;;;;;:::o;15765:474::-;15833:6;15841;15890:2;15878:9;15869:7;15865:23;15861:32;15858:119;;;15896:79;;:::i;:::-;15858:119;16016:1;16041:53;16086:7;16077:6;16066:9;16062:22;16041:53;:::i;:::-;16031:63;;15987:117;16143:2;16169:53;16214:7;16205:6;16194:9;16190:22;16169:53;:::i;:::-;16159:63;;16114:118;15765:474;;;;;:::o;16245:180::-;16293:77;16290:1;16283:88;16390:4;16387:1;16380:15;16414:4;16411:1;16404:15;16431:320;16475:6;16512:1;16506:4;16502:12;16492:22;;16559:1;16553:4;16549:12;16580:18;16570:81;;16636:4;16628:6;16624:17;16614:27;;16570:81;16698:2;16690:6;16687:14;16667:18;16664:38;16661:84;;;16717:18;;:::i;:::-;16661:84;16482:269;16431:320;;;:::o;16757:231::-;16897:34;16893:1;16885:6;16881:14;16874:58;16966:14;16961:2;16953:6;16949:15;16942:39;16757:231;:::o;16994:366::-;17136:3;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17233:93;17322:3;17233:93;:::i;:::-;17351:2;17346:3;17342:12;17335:19;;16994:366;;;:::o;17366:419::-;17532:4;17570:2;17559:9;17555:18;17547:26;;17619:9;17613:4;17609:20;17605:1;17594:9;17590:17;17583:47;17647:131;17773:4;17647:131;:::i;:::-;17639:139;;17366:419;;;:::o;17791:220::-;17931:34;17927:1;17919:6;17915:14;17908:58;18000:3;17995:2;17987:6;17983:15;17976:28;17791:220;:::o;18017:366::-;18159:3;18180:67;18244:2;18239:3;18180:67;:::i;:::-;18173:74;;18256:93;18345:3;18256:93;:::i;:::-;18374:2;18369:3;18365:12;18358:19;;18017:366;;;:::o;18389:419::-;18555:4;18593:2;18582:9;18578:18;18570:26;;18642:9;18636:4;18632:20;18628:1;18617:9;18613:17;18606:47;18670:131;18796:4;18670:131;:::i;:::-;18662:139;;18389:419;;;:::o;18814:243::-;18954:34;18950:1;18942:6;18938:14;18931:58;19023:26;19018:2;19010:6;19006:15;18999:51;18814:243;:::o;19063:366::-;19205:3;19226:67;19290:2;19285:3;19226:67;:::i;:::-;19219:74;;19302:93;19391:3;19302:93;:::i;:::-;19420:2;19415:3;19411:12;19404:19;;19063:366;;;:::o;19435:419::-;19601:4;19639:2;19628:9;19624:18;19616:26;;19688:9;19682:4;19678:20;19674:1;19663:9;19659:17;19652:47;19716:131;19842:4;19716:131;:::i;:::-;19708:139;;19435:419;;;:::o;19860:182::-;20000:34;19996:1;19988:6;19984:14;19977:58;19860:182;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:180::-;20893:77;20890:1;20883:88;20990:4;20987:1;20980:15;21014:4;21011:1;21004:15;21031:180;21079:77;21076:1;21069:88;21176:4;21173:1;21166:15;21200:4;21197:1;21190:15;21217:233;21256:3;21279:24;21297:5;21279:24;:::i;:::-;21270:33;;21325:66;21318:5;21315:77;21312:103;;;21395:18;;:::i;:::-;21312:103;21442:1;21435:5;21431:13;21424:20;;21217:233;;;:::o;21456:236::-;21596:34;21592:1;21584:6;21580:14;21573:58;21665:19;21660:2;21652:6;21648:15;21641:44;21456:236;:::o;21698:366::-;21840:3;21861:67;21925:2;21920:3;21861:67;:::i;:::-;21854:74;;21937:93;22026:3;21937:93;:::i;:::-;22055:2;22050:3;22046:12;22039:19;;21698:366;;;:::o;22070:419::-;22236:4;22274:2;22263:9;22259:18;22251:26;;22323:9;22317:4;22313:20;22309:1;22298:9;22294:17;22287:47;22351:131;22477:4;22351:131;:::i;:::-;22343:139;;22070:419;;;:::o;22495:230::-;22635:34;22631:1;22623:6;22619:14;22612:58;22704:13;22699:2;22691:6;22687:15;22680:38;22495:230;:::o;22731:366::-;22873:3;22894:67;22958:2;22953:3;22894:67;:::i;:::-;22887:74;;22970:93;23059:3;22970:93;:::i;:::-;23088:2;23083:3;23079:12;23072:19;;22731:366;;;:::o;23103:419::-;23269:4;23307:2;23296:9;23292:18;23284:26;;23356:9;23350:4;23346:20;23342:1;23331:9;23327:17;23320:47;23384:131;23510:4;23384:131;:::i;:::-;23376:139;;23103:419;;;:::o;23528:231::-;23668:34;23664:1;23656:6;23652:14;23645:58;23737:14;23732:2;23724:6;23720:15;23713:39;23528:231;:::o;23765:366::-;23907:3;23928:67;23992:2;23987:3;23928:67;:::i;:::-;23921:74;;24004:93;24093:3;24004:93;:::i;:::-;24122:2;24117:3;24113:12;24106:19;;23765:366;;;:::o;24137:419::-;24303:4;24341:2;24330:9;24326:18;24318:26;;24390:9;24384:4;24380:20;24376:1;24365:9;24361:17;24354:47;24418:131;24544:4;24418:131;:::i;:::-;24410:139;;24137:419;;;:::o;24562:228::-;24702:34;24698:1;24690:6;24686:14;24679:58;24771:11;24766:2;24758:6;24754:15;24747:36;24562:228;:::o;24796:366::-;24938:3;24959:67;25023:2;25018:3;24959:67;:::i;:::-;24952:74;;25035:93;25124:3;25035:93;:::i;:::-;25153:2;25148:3;25144:12;25137:19;;24796:366;;;:::o;25168:419::-;25334:4;25372:2;25361:9;25357:18;25349:26;;25421:9;25415:4;25411:20;25407:1;25396:9;25392:17;25385:47;25449:131;25575:4;25449:131;:::i;:::-;25441:139;;25168:419;;;:::o;25593:229::-;25733:34;25729:1;25721:6;25717:14;25710:58;25802:12;25797:2;25789:6;25785:15;25778:37;25593:229;:::o;25828:366::-;25970:3;25991:67;26055:2;26050:3;25991:67;:::i;:::-;25984:74;;26067:93;26156:3;26067:93;:::i;:::-;26185:2;26180:3;26176:12;26169:19;;25828:366;;;:::o;26200:419::-;26366:4;26404:2;26393:9;26389:18;26381:26;;26453:9;26447:4;26443:20;26439:1;26428:9;26424:17;26417:47;26481:131;26607:4;26481:131;:::i;:::-;26473:139;;26200:419;;;:::o;26625:177::-;26765:29;26761:1;26753:6;26749:14;26742:53;26625:177;:::o;26808:366::-;26950:3;26971:67;27035:2;27030:3;26971:67;:::i;:::-;26964:74;;27047:93;27136:3;27047:93;:::i;:::-;27165:2;27160:3;27156:12;27149:19;;26808:366;;;:::o;27180:419::-;27346:4;27384:2;27373:9;27369:18;27361:26;;27433:9;27427:4;27423:20;27419:1;27408:9;27404:17;27397:47;27461:131;27587:4;27461:131;:::i;:::-;27453:139;;27180:419;;;:::o;27605:173::-;27745:25;27741:1;27733:6;27729:14;27722:49;27605:173;:::o;27784:366::-;27926:3;27947:67;28011:2;28006:3;27947:67;:::i;:::-;27940:74;;28023:93;28112:3;28023:93;:::i;:::-;28141:2;28136:3;28132:12;28125:19;;27784:366;;;:::o;28156:419::-;28322:4;28360:2;28349:9;28345:18;28337:26;;28409:9;28403:4;28399:20;28395:1;28384:9;28380:17;28373:47;28437:131;28563:4;28437:131;:::i;:::-;28429:139;;28156:419;;;:::o;28581:229::-;28721:34;28717:1;28709:6;28705:14;28698:58;28790:12;28785:2;28777:6;28773:15;28766:37;28581:229;:::o;28816:366::-;28958:3;28979:67;29043:2;29038:3;28979:67;:::i;:::-;28972:74;;29055:93;29144:3;29055:93;:::i;:::-;29173:2;29168:3;29164:12;29157:19;;28816:366;;;:::o;29188:419::-;29354:4;29392:2;29381:9;29377:18;29369:26;;29441:9;29435:4;29431:20;29427:1;29416:9;29412:17;29405:47;29469:131;29595:4;29469:131;:::i;:::-;29461:139;;29188:419;;;:::o;29613:181::-;29753:33;29749:1;29741:6;29737:14;29730:57;29613:181;:::o;29800:366::-;29942:3;29963:67;30027:2;30022:3;29963:67;:::i;:::-;29956:74;;30039:93;30128:3;30039:93;:::i;:::-;30157:2;30152:3;30148:12;30141:19;;29800:366;;;:::o;30172:419::-;30338:4;30376:2;30365:9;30361:18;30353:26;;30425:9;30419:4;30415:20;30411:1;30400:9;30396:17;30389:47;30453:131;30579:4;30453:131;:::i;:::-;30445:139;;30172:419;;;:::o;30597:305::-;30637:3;30656:20;30674:1;30656:20;:::i;:::-;30651:25;;30690:20;30708:1;30690:20;:::i;:::-;30685:25;;30844:1;30776:66;30772:74;30769:1;30766:81;30763:107;;;30850:18;;:::i;:::-;30763:107;30894:1;30891;30887:9;30880:16;;30597:305;;;;:::o;30908:175::-;31048:27;31044:1;31036:6;31032:14;31025:51;30908:175;:::o;31089:366::-;31231:3;31252:67;31316:2;31311:3;31252:67;:::i;:::-;31245:74;;31328:93;31417:3;31328:93;:::i;:::-;31446:2;31441:3;31437:12;31430:19;;31089:366;;;:::o;31461:419::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31714:9;31708:4;31704:20;31700:1;31689:9;31685:17;31678:47;31742:131;31868:4;31742:131;:::i;:::-;31734:139;;31461:419;;;:::o;31886:234::-;32026:34;32022:1;32014:6;32010:14;32003:58;32095:17;32090:2;32082:6;32078:15;32071:42;31886:234;:::o;32126:366::-;32268:3;32289:67;32353:2;32348:3;32289:67;:::i;:::-;32282:74;;32365:93;32454:3;32365:93;:::i;:::-;32483:2;32478:3;32474:12;32467:19;;32126:366;;;:::o;32498:419::-;32664:4;32702:2;32691:9;32687:18;32679:26;;32751:9;32745:4;32741:20;32737:1;32726:9;32722:17;32715:47;32779:131;32905:4;32779:131;:::i;:::-;32771:139;;32498:419;;;:::o;32923:148::-;33025:11;33062:3;33047:18;;32923:148;;;;:::o;33077:377::-;33183:3;33211:39;33244:5;33211:39;:::i;:::-;33266:89;33348:6;33343:3;33266:89;:::i;:::-;33259:96;;33364:52;33409:6;33404:3;33397:4;33390:5;33386:16;33364:52;:::i;:::-;33441:6;33436:3;33432:16;33425:23;;33187:267;33077:377;;;;:::o;33460:141::-;33509:4;33532:3;33524:11;;33555:3;33552:1;33545:14;33589:4;33586:1;33576:18;33568:26;;33460:141;;;:::o;33631:845::-;33734:3;33771:5;33765:12;33800:36;33826:9;33800:36;:::i;:::-;33852:89;33934:6;33929:3;33852:89;:::i;:::-;33845:96;;33972:1;33961:9;33957:17;33988:1;33983:137;;;;34134:1;34129:341;;;;33950:520;;33983:137;34067:4;34063:9;34052;34048:25;34043:3;34036:38;34103:6;34098:3;34094:16;34087:23;;33983:137;;34129:341;34196:38;34228:5;34196:38;:::i;:::-;34256:1;34270:154;34284:6;34281:1;34278:13;34270:154;;;34358:7;34352:14;34348:1;34343:3;34339:11;34332:35;34408:1;34399:7;34395:15;34384:26;;34306:4;34303:1;34299:12;34294:17;;34270:154;;;34453:6;34448:3;34444:16;34437:23;;34136:334;;33950:520;;33738:738;;33631:845;;;;:::o;34482:589::-;34707:3;34729:95;34820:3;34811:6;34729:95;:::i;:::-;34722:102;;34841:95;34932:3;34923:6;34841:95;:::i;:::-;34834:102;;34953:92;35041:3;35032:6;34953:92;:::i;:::-;34946:99;;35062:3;35055:10;;34482:589;;;;;;:::o;35077:225::-;35217:34;35213:1;35205:6;35201:14;35194:58;35286:8;35281:2;35273:6;35269:15;35262:33;35077:225;:::o;35308:366::-;35450:3;35471:67;35535:2;35530:3;35471:67;:::i;:::-;35464:74;;35547:93;35636:3;35547:93;:::i;:::-;35665:2;35660:3;35656:12;35649:19;;35308:366;;;:::o;35680:419::-;35846:4;35884:2;35873:9;35869:18;35861:26;;35933:9;35927:4;35923:20;35919:1;35908:9;35904:17;35897:47;35961:131;36087:4;35961:131;:::i;:::-;35953:139;;35680:419;;;:::o;36105:180::-;36245:32;36241:1;36233:6;36229:14;36222:56;36105:180;:::o;36291:366::-;36433:3;36454:67;36518:2;36513:3;36454:67;:::i;:::-;36447:74;;36530:93;36619:3;36530:93;:::i;:::-;36648:2;36643:3;36639:12;36632:19;;36291:366;;;:::o;36663:419::-;36829:4;36867:2;36856:9;36852:18;36844:26;;36916:9;36910:4;36906:20;36902:1;36891:9;36887:17;36880:47;36944:131;37070:4;36944:131;:::i;:::-;36936:139;;36663:419;;;:::o;37088:222::-;37228:34;37224:1;37216:6;37212:14;37205:58;37297:5;37292:2;37284:6;37280:15;37273:30;37088:222;:::o;37316:366::-;37458:3;37479:67;37543:2;37538:3;37479:67;:::i;:::-;37472:74;;37555:93;37644:3;37555:93;:::i;:::-;37673:2;37668:3;37664:12;37657:19;;37316:366;;;:::o;37688:419::-;37854:4;37892:2;37881:9;37877:18;37869:26;;37941:9;37935:4;37931:20;37927:1;37916:9;37912:17;37905:47;37969:131;38095:4;37969:131;:::i;:::-;37961:139;;37688:419;;;:::o;38113:179::-;38253:31;38249:1;38241:6;38237:14;38230:55;38113:179;:::o;38298:366::-;38440:3;38461:67;38525:2;38520:3;38461:67;:::i;:::-;38454:74;;38537:93;38626:3;38537:93;:::i;:::-;38655:2;38650:3;38646:12;38639:19;;38298:366;;;:::o;38670:419::-;38836:4;38874:2;38863:9;38859:18;38851:26;;38923:9;38917:4;38913:20;38909:1;38898:9;38894:17;38887:47;38951:131;39077:4;38951:131;:::i;:::-;38943:139;;38670:419;;;:::o;39095:191::-;39135:4;39155:20;39173:1;39155:20;:::i;:::-;39150:25;;39189:20;39207:1;39189:20;:::i;:::-;39184:25;;39228:1;39225;39222:8;39219:34;;;39233:18;;:::i;:::-;39219:34;39278:1;39275;39271:9;39263:17;;39095:191;;;;:::o;39292:231::-;39432:34;39428:1;39420:6;39416:14;39409:58;39501:14;39496:2;39488:6;39484:15;39477:39;39292:231;:::o;39529:366::-;39671:3;39692:67;39756:2;39751:3;39692:67;:::i;:::-;39685:74;;39768:93;39857:3;39768:93;:::i;:::-;39886:2;39881:3;39877:12;39870:19;;39529:366;;;:::o;39901:419::-;40067:4;40105:2;40094:9;40090:18;40082:26;;40154:9;40148:4;40144:20;40140:1;40129:9;40125:17;40118:47;40182:131;40308:4;40182:131;:::i;:::-;40174:139;;39901:419;;;:::o;40326:228::-;40466:34;40462:1;40454:6;40450:14;40443:58;40535:11;40530:2;40522:6;40518:15;40511:36;40326:228;:::o;40560:366::-;40702:3;40723:67;40787:2;40782:3;40723:67;:::i;:::-;40716:74;;40799:93;40888:3;40799:93;:::i;:::-;40917:2;40912:3;40908:12;40901:19;;40560:366;;;:::o;40932:419::-;41098:4;41136:2;41125:9;41121:18;41113:26;;41185:9;41179:4;41175:20;41171:1;41160:9;41156:17;41149:47;41213:131;41339:4;41213:131;:::i;:::-;41205:139;;40932:419;;;:::o;41357:223::-;41497:34;41493:1;41485:6;41481:14;41474:58;41566:6;41561:2;41553:6;41549:15;41542:31;41357:223;:::o;41586:366::-;41728:3;41749:67;41813:2;41808:3;41749:67;:::i;:::-;41742:74;;41825:93;41914:3;41825:93;:::i;:::-;41943:2;41938:3;41934:12;41927:19;;41586:366;;;:::o;41958:419::-;42124:4;42162:2;42151:9;42147:18;42139:26;;42211:9;42205:4;42201:20;42197:1;42186:9;42182:17;42175:47;42239:131;42365:4;42239:131;:::i;:::-;42231:139;;41958:419;;;:::o;42383:348::-;42423:7;42446:20;42464:1;42446:20;:::i;:::-;42441:25;;42480:20;42498:1;42480:20;:::i;:::-;42475:25;;42668:1;42600:66;42596:74;42593:1;42590:81;42585:1;42578:9;42571:17;42567:105;42564:131;;;42675:18;;:::i;:::-;42564:131;42723:1;42720;42716:9;42705:20;;42383:348;;;;:::o;42737:237::-;42877:34;42873:1;42865:6;42861:14;42854:58;42946:20;42941:2;42933:6;42929:15;42922:45;42737:237;:::o;42980:366::-;43122:3;43143:67;43207:2;43202:3;43143:67;:::i;:::-;43136:74;;43219:93;43308:3;43219:93;:::i;:::-;43337:2;43332:3;43328:12;43321:19;;42980:366;;;:::o;43352:419::-;43518:4;43556:2;43545:9;43541:18;43533:26;;43605:9;43599:4;43595:20;43591:1;43580:9;43576:17;43569:47;43633:131;43759:4;43633:131;:::i;:::-;43625:139;;43352:419;;;:::o;43777:180::-;43825:77;43822:1;43815:88;43922:4;43919:1;43912:15;43946:4;43943:1;43936:15;43963:185;44003:1;44020:20;44038:1;44020:20;:::i;:::-;44015:25;;44054:20;44072:1;44054:20;:::i;:::-;44049:25;;44093:1;44083:35;;44098:18;;:::i;:::-;44083:35;44140:1;44137;44133:9;44128:14;;43963:185;;;;:::o;44154:176::-;44186:1;44203:20;44221:1;44203:20;:::i;:::-;44198:25;;44237:20;44255:1;44237:20;:::i;:::-;44232:25;;44276:1;44266:35;;44281:18;;:::i;:::-;44266:35;44322:1;44319;44315:9;44310:14;;44154:176;;;;:::o;44336:98::-;44387:6;44421:5;44415:12;44405:22;;44336:98;;;:::o;44440:168::-;44523:11;44557:6;44552:3;44545:19;44597:4;44592:3;44588:14;44573:29;;44440:168;;;;:::o;44614:360::-;44700:3;44728:38;44760:5;44728:38;:::i;:::-;44782:70;44845:6;44840:3;44782:70;:::i;:::-;44775:77;;44861:52;44906:6;44901:3;44894:4;44887:5;44883:16;44861:52;:::i;:::-;44938:29;44960:6;44938:29;:::i;:::-;44933:3;44929:39;44922:46;;44704:270;44614:360;;;;:::o;44980:640::-;45175:4;45213:3;45202:9;45198:19;45190:27;;45227:71;45295:1;45284:9;45280:17;45271:6;45227:71;:::i;:::-;45308:72;45376:2;45365:9;45361:18;45352:6;45308:72;:::i;:::-;45390;45458:2;45447:9;45443:18;45434:6;45390:72;:::i;:::-;45509:9;45503:4;45499:20;45494:2;45483:9;45479:18;45472:48;45537:76;45608:4;45599:6;45537:76;:::i;:::-;45529:84;;44980:640;;;;;;;:::o;45626:141::-;45682:5;45713:6;45707:13;45698:22;;45729:32;45755:5;45729:32;:::i;:::-;45626:141;;;;:::o;45773:349::-;45842:6;45891:2;45879:9;45870:7;45866:23;45862:32;45859:119;;;45897:79;;:::i;:::-;45859:119;46017:1;46042:63;46097:7;46088:6;46077:9;46073:22;46042:63;:::i;:::-;46032:73;;45988:127;45773:349;;;;:::o;46128:180::-;46176:77;46173:1;46166:88;46273:4;46270:1;46263:15;46297:4;46294:1;46287:15;46314:182;46454:34;46450:1;46442:6;46438:14;46431:58;46314:182;:::o;46502:366::-;46644:3;46665:67;46729:2;46724:3;46665:67;:::i;:::-;46658:74;;46741:93;46830:3;46741:93;:::i;:::-;46859:2;46854:3;46850:12;46843:19;;46502:366;;;:::o;46874:419::-;47040:4;47078:2;47067:9;47063:18;47055:26;;47127:9;47121:4;47117:20;47113:1;47102:9;47098:17;47091:47;47155:131;47281:4;47155:131;:::i;:::-;47147:139;;46874:419;;;:::o;47299:178::-;47439:30;47435:1;47427:6;47423:14;47416:54;47299:178;:::o;47483:366::-;47625:3;47646:67;47710:2;47705:3;47646:67;:::i;:::-;47639:74;;47722:93;47811:3;47722:93;:::i;:::-;47840:2;47835:3;47831:12;47824:19;;47483:366;;;:::o;47855:419::-;48021:4;48059:2;48048:9;48044:18;48036:26;;48108:9;48102:4;48098:20;48094:1;48083:9;48079:17;48072:47;48136:131;48262:4;48136:131;:::i;:::-;48128:139;;47855:419;;;:::o
Swarm Source
ipfs://9837d7d092aaba5984b0d8cb8afc00e551a0b38903b04427c056f2e3fca24e65
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.