ERC-721
NFT
Overview
Max Total Supply
0 WLUNA
Holders
167
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 WLUNALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WrappedLunar
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-07 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8; // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @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/IERC721.sol /** * @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/IERC721Receiver.sol /** * @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/IERC721Metadata.sol /** * @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/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @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/ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/WrappedLunar.sol interface Lunar { function ownerOf(uint id) external view returns(address); function transfer(uint id, address newOwner, string memory newData) external returns(bool); function setPrice(uint id, bool forSale, uint newPrice) external; } /** * @dev ERC721 wrap contract for Lunar (`0x43fb95c7afA1Ac1E721F33C695b2A0A94C7ddAb2`). * Uses a 3 step reservation process to allow wrapping without paying purchase fees. * STEP 1: Call the `reserveNFT` function with the ID of the NFT you want to wrap * STEP 2: Transfer the NFT to this contract * STEP 3: Call the `mint` function with the ID of the NFT you sent in step 2 */ contract WrappedLunar is ERC721 { Lunar public lunar = Lunar(0x43fb95c7afA1Ac1E721F33C695b2A0A94C7ddAb2); address public owner = 0x070DcB7ba170091F84783b224489aA8B280c1A30; string internal baseURI; mapping(uint256 => address) public reservations; constructor() ERC721("Wrapped Lunar", "WLUNA") {} function setBaseURI(string memory newBaseURI) public { require(msg.sender == owner); baseURI = newBaseURI; } function renounceOwnership() public { require(msg.sender == owner); owner = address(0); } /** * @dev Reservation function, step 1 of the wrapping process. * Users must call this function before transferring their nfts to this contract. */ function reserveNFT(uint256 id) external { require(lunar.ownerOf(id) == msg.sender, "Caller is not the owner"); reservations[id] = msg.sender; } /** * @dev Mint function, step 3 of the wrapping process. * Users must call this function after reserving their NFT with the `reserveNFT` function and having it transferred to * this contract by interacting with the original Lunar contract. */ function mint(uint256 id) external { require(lunar.ownerOf(id) == address(this), "Lunar not owned by this contract"); require(reservations[id] == msg.sender, "Caller doesn't have a reservation on this nft"); lunar.setPrice(id, false, 0); _mint(msg.sender, id); delete reservations[id]; } function withdraw(uint256 id) external { require(ownerOf(id) == msg.sender, "Caller is not the owner"); lunar.transfer(id, msg.sender, ""); _burn(id); } function _baseURI() internal view override returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"lunar","outputs":[{"internalType":"contract Lunar","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reservations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"reserveNFT","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"id","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527343fb95c7afa1ac1e721f33c695b2a0a94c7ddab2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073070dcb7ba170091f84783b224489aa8b280c1a30600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000bb57600080fd5b506040518060400160405280600d81526020017f57726170706564204c756e6172000000000000000000000000000000000000008152506040518060400160405280600581526020017f574c554e4100000000000000000000000000000000000000000000000000000081525081600090805190602001906200014092919062000162565b5080600190805190602001906200015992919062000162565b50505062000277565b828054620001709062000212565b90600052602060002090601f016020900481019282620001945760008555620001e0565b82601f10620001af57805160ff1916838001178555620001e0565b82800160010185558215620001e0579182015b82811115620001df578251825591602001919060010190620001c2565b5b509050620001ef9190620001f3565b5090565b5b808211156200020e576000816000905550600101620001f4565b5090565b600060028204905060018216806200022b57607f821691505b6020821081141562000242576200024162000248565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61344e80620002876000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636352211e116100b8578063a0712d681161007c578063a0712d6814610338578063a22cb46514610354578063b88d4fde14610370578063c87b56dd1461038c578063d7e981c7146103bc578063e985e9c5146103da57610137565b80636352211e1461029257806370a08231146102c2578063715018a6146102f25780638da5cb5b146102fc57806395d89b411461031a57610137565b806323b872dd116100ff57806323b872dd146102065780632e1a7d4d14610222578063397be3fd1461023e57806342842e0e1461025a57806355f804b31461027657610137565b806301ffc9a71461013c578063067cf8321461016c57806306fdde031461019c578063081812fc146101ba578063095ea7b3146101ea575b600080fd5b6101566004803603810190610151919061236c565b61040a565b6040516101639190612817565b60405180910390f35b610186600480360381019061018191906123ff565b6104ec565b60405161019391906127b0565b60405180910390f35b6101a461051f565b6040516101b1919061284d565b60405180910390f35b6101d460048036038101906101cf91906123ff565b6105b1565b6040516101e191906127b0565b60405180910390f35b61020460048036038101906101ff9190612307565b610636565b005b610220600480360381019061021b9190612201565b61074e565b005b61023c600480360381019061023791906123ff565b6107ae565b005b610258600480360381019061025391906123ff565b6108e0565b005b610274600480360381019061026f9190612201565b610a4d565b005b610290600480360381019061028b91906123be565b610a6d565b005b6102ac60048036038101906102a791906123ff565b610ae1565b6040516102b991906127b0565b60405180910390f35b6102dc60048036038101906102d79190612173565b610b93565b6040516102e99190612a8f565b60405180910390f35b6102fa610c4b565b005b610304610ce9565b60405161031191906127b0565b60405180910390f35b610322610d0f565b60405161032f919061284d565b60405180910390f35b610352600480360381019061034d91906123ff565b610da1565b005b61036e600480360381019061036991906122cb565b61102f565b005b61038a60048036038101906103859190612250565b6111b0565b005b6103a660048036038101906103a191906123ff565b611212565b6040516103b3919061284d565b60405180910390f35b6103c46112b9565b6040516103d19190612832565b60405180910390f35b6103f460048036038101906103ef91906121c5565b6112df565b6040516104019190612817565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e482611373565b5b9050919050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000805461052e90612d8e565b80601f016020809104026020016040519081016040528092919081815260200182805461055a90612d8e565b80156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b5050505050905090565b60006105bc826113dd565b6105fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f2906129cf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064182610ae1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990612a2f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d1611449565b73ffffffffffffffffffffffffffffffffffffffff16148061070057506106ff816106fa611449565b6112df565b5b61073f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107369061294f565b60405180910390fd5b6107498383611451565b505050565b61075f610759611449565b8261150a565b61079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612a4f565b60405180910390fd5b6107a98383836115e8565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166107ce82610ae1565b73ffffffffffffffffffffffffffffffffffffffff1614610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061286f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e474597082336040518363ffffffff1660e01b8152600401610881929190612aaa565b602060405180830381600087803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d39190612343565b506108dd81611844565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109529190612a8f565b60206040518083038186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a2919061219c565b73ffffffffffffffffffffffffffffffffffffffff16146109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef9061286f565b60405180910390fd5b336009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a68838383604051806020016040528060008152506111b0565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac757600080fd5b8060089080519060200190610add929190611f6d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b819061298f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061296f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca557600080fd5b6000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610d1e90612d8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4a90612d8e565b8015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b5050505050905090565b3073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e139190612a8f565b60206040518083038186803b158015610e2b57600080fd5b505afa158015610e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e63919061219c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb09061292f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190612a6f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0c1adac826000806040518463ffffffff1660e01b8152600401610fba93929190612ae6565b600060405180830381600087803b158015610fd457600080fd5b505af1158015610fe8573d6000803e3d6000fd5b50505050610ff63382611955565b6009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b611037611449565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c906128ef565b60405180910390fd5b80600560006110b2611449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661115f611449565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111a49190612817565b60405180910390a35050565b6111c16111bb611449565b8361150a565b611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790612a4f565b60405180910390fd5b61120c84848484611b23565b50505050565b606061121d826113dd565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390612a0f565b60405180910390fd5b6000611266611b7f565b9050600081511161128657604051806020016040528060008152506112b1565b8061129084611c11565b6040516020016112a192919061278c565b6040516020818303038152906040525b915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166114c483610ae1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611515826113dd565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061290f565b60405180910390fd5b600061155f83610ae1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115ce57508373ffffffffffffffffffffffffffffffffffffffff166115b6846105b1565b73ffffffffffffffffffffffffffffffffffffffff16145b806115df57506115de81856112df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661160882610ae1565b73ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611655906129ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906128cf565b60405180910390fd5b6116d9838383611dbe565b6116e4600082611451565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117349190612c6e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461178b9190612be7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061184f82610ae1565b905061185d81600084611dbe565b611868600083611451565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b89190612c6e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906129af565b60405180910390fd5b6119ce816113dd565b15611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906128af565b60405180910390fd5b611a1a60008383611dbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6a9190612be7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611b2e8484846115e8565b611b3a84848484611dc3565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061288f565b60405180910390fd5b50505050565b606060088054611b8e90612d8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba90612d8e565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050505050905090565b60606000821415611c59576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611db9565b600082905060005b60008214611c8b578080611c7490612df1565b915050600a82611c849190612c3d565b9150611c61565b60008167ffffffffffffffff811115611ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cff5781602001600182028036833780820191505090505b5090505b60008514611db257600182611d189190612c6e565b9150600a85611d279190612e3a565b6030611d339190612be7565b60f81b818381518110611d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611dab9190612c3d565b9450611d03565b8093505050505b919050565b505050565b6000611de48473ffffffffffffffffffffffffffffffffffffffff16611f5a565b15611f4d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e0d611449565b8786866040518563ffffffff1660e01b8152600401611e2f94939291906127cb565b602060405180830381600087803b158015611e4957600080fd5b505af1925050508015611e7a57506040513d601f19601f82011682018060405250810190611e779190612395565b60015b611efd573d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b50600081511415611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec9061288f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f52565b600190505b949350505050565b600080823b905060008111915050919050565b828054611f7990612d8e565b90600052602060002090601f016020900481019282611f9b5760008555611fe2565b82601f10611fb457805160ff1916838001178555611fe2565b82800160010185558215611fe2579182015b82811115611fe1578251825591602001919060010190611fc6565b5b509050611fef9190611ff3565b5090565b5b8082111561200c576000816000905550600101611ff4565b5090565b600061202361201e84612b42565b612b1d565b90508281526020810184848401111561203b57600080fd5b612046848285612d4c565b509392505050565b600061206161205c84612b73565b612b1d565b90508281526020810184848401111561207957600080fd5b612084848285612d4c565b509392505050565b60008135905061209b816133bc565b92915050565b6000815190506120b0816133bc565b92915050565b6000813590506120c5816133d3565b92915050565b6000815190506120da816133d3565b92915050565b6000813590506120ef816133ea565b92915050565b600081519050612104816133ea565b92915050565b600082601f83011261211b57600080fd5b813561212b848260208601612010565b91505092915050565b600082601f83011261214557600080fd5b813561215584826020860161204e565b91505092915050565b60008135905061216d81613401565b92915050565b60006020828403121561218557600080fd5b60006121938482850161208c565b91505092915050565b6000602082840312156121ae57600080fd5b60006121bc848285016120a1565b91505092915050565b600080604083850312156121d857600080fd5b60006121e68582860161208c565b92505060206121f78582860161208c565b9150509250929050565b60008060006060848603121561221657600080fd5b60006122248682870161208c565b93505060206122358682870161208c565b92505060406122468682870161215e565b9150509250925092565b6000806000806080858703121561226657600080fd5b60006122748782880161208c565b94505060206122858782880161208c565b93505060406122968782880161215e565b925050606085013567ffffffffffffffff8111156122b357600080fd5b6122bf8782880161210a565b91505092959194509250565b600080604083850312156122de57600080fd5b60006122ec8582860161208c565b92505060206122fd858286016120b6565b9150509250929050565b6000806040838503121561231a57600080fd5b60006123288582860161208c565b92505060206123398582860161215e565b9150509250929050565b60006020828403121561235557600080fd5b6000612363848285016120cb565b91505092915050565b60006020828403121561237e57600080fd5b600061238c848285016120e0565b91505092915050565b6000602082840312156123a757600080fd5b60006123b5848285016120f5565b91505092915050565b6000602082840312156123d057600080fd5b600082013567ffffffffffffffff8111156123ea57600080fd5b6123f684828501612134565b91505092915050565b60006020828403121561241157600080fd5b600061241f8482850161215e565b91505092915050565b61243181612ca2565b82525050565b61244081612cb4565b82525050565b600061245182612ba4565b61245b8185612bba565b935061246b818560208601612d5b565b61247481612f27565b840191505092915050565b61248881612d16565b82525050565b61249781612d3a565b82525050565b60006124a882612baf565b6124b28185612bcb565b93506124c2818560208601612d5b565b6124cb81612f27565b840191505092915050565b60006124e182612baf565b6124eb8185612bdc565b93506124fb818560208601612d5b565b80840191505092915050565b6000612514601783612bcb565b915061251f82612f38565b602082019050919050565b6000612537603283612bcb565b915061254282612f61565b604082019050919050565b600061255a601c83612bcb565b915061256582612fb0565b602082019050919050565b600061257d602483612bcb565b915061258882612fd9565b604082019050919050565b60006125a0601983612bcb565b91506125ab82613028565b602082019050919050565b60006125c3602c83612bcb565b91506125ce82613051565b604082019050919050565b60006125e6602083612bcb565b91506125f1826130a0565b602082019050919050565b6000612609603883612bcb565b9150612614826130c9565b604082019050919050565b600061262c602a83612bcb565b915061263782613118565b604082019050919050565b600061264f602983612bcb565b915061265a82613167565b604082019050919050565b6000612672602083612bcb565b915061267d826131b6565b602082019050919050565b6000612695602c83612bcb565b91506126a0826131df565b604082019050919050565b60006126b8602983612bcb565b91506126c38261322e565b604082019050919050565b60006126db602f83612bcb565b91506126e68261327d565b604082019050919050565b60006126fe602183612bcb565b9150612709826132cc565b604082019050919050565b6000612721600083612bcb565b915061272c8261331b565b600082019050919050565b6000612744603183612bcb565b915061274f8261331e565b604082019050919050565b6000612767602d83612bcb565b91506127728261336d565b604082019050919050565b61278681612d0c565b82525050565b600061279882856124d6565b91506127a482846124d6565b91508190509392505050565b60006020820190506127c56000830184612428565b92915050565b60006080820190506127e06000830187612428565b6127ed6020830186612428565b6127fa604083018561277d565b818103606083015261280c8184612446565b905095945050505050565b600060208201905061282c6000830184612437565b92915050565b6000602082019050612847600083018461247f565b92915050565b60006020820190508181036000830152612867818461249d565b905092915050565b6000602082019050818103600083015261288881612507565b9050919050565b600060208201905081810360008301526128a88161252a565b9050919050565b600060208201905081810360008301526128c88161254d565b9050919050565b600060208201905081810360008301526128e881612570565b9050919050565b6000602082019050818103600083015261290881612593565b9050919050565b60006020820190508181036000830152612928816125b6565b9050919050565b60006020820190508181036000830152612948816125d9565b9050919050565b60006020820190508181036000830152612968816125fc565b9050919050565b600060208201905081810360008301526129888161261f565b9050919050565b600060208201905081810360008301526129a881612642565b9050919050565b600060208201905081810360008301526129c881612665565b9050919050565b600060208201905081810360008301526129e881612688565b9050919050565b60006020820190508181036000830152612a08816126ab565b9050919050565b60006020820190508181036000830152612a28816126ce565b9050919050565b60006020820190508181036000830152612a48816126f1565b9050919050565b60006020820190508181036000830152612a6881612737565b9050919050565b60006020820190508181036000830152612a888161275a565b9050919050565b6000602082019050612aa4600083018461277d565b92915050565b6000606082019050612abf600083018561277d565b612acc6020830184612428565b8181036040830152612add81612714565b90509392505050565b6000606082019050612afb600083018661277d565b612b086020830185612437565b612b15604083018461248e565b949350505050565b6000612b27612b38565b9050612b338282612dc0565b919050565b6000604051905090565b600067ffffffffffffffff821115612b5d57612b5c612ef8565b5b612b6682612f27565b9050602081019050919050565b600067ffffffffffffffff821115612b8e57612b8d612ef8565b5b612b9782612f27565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bf282612d0c565b9150612bfd83612d0c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c3257612c31612e6b565b5b828201905092915050565b6000612c4882612d0c565b9150612c5383612d0c565b925082612c6357612c62612e9a565b5b828204905092915050565b6000612c7982612d0c565b9150612c8483612d0c565b925082821015612c9757612c96612e6b565b5b828203905092915050565b6000612cad82612cec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d2182612d28565b9050919050565b6000612d3382612cec565b9050919050565b6000612d4582612d0c565b9050919050565b82818337600083830152505050565b60005b83811015612d79578082015181840152602081019050612d5e565b83811115612d88576000848401525b50505050565b60006002820490506001821680612da657607f821691505b60208210811415612dba57612db9612ec9565b5b50919050565b612dc982612f27565b810181811067ffffffffffffffff82111715612de857612de7612ef8565b5b80604052505050565b6000612dfc82612d0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e2f57612e2e612e6b565b5b600182019050919050565b6000612e4582612d0c565b9150612e5083612d0c565b925082612e6057612e5f612e9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c756e6172206e6f74206f776e6564206279207468697320636f6e7472616374600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616c6c657220646f65736e277420686176652061207265736572766174696f60008201527f6e206f6e2074686973206e667400000000000000000000000000000000000000602082015250565b6133c581612ca2565b81146133d057600080fd5b50565b6133dc81612cb4565b81146133e757600080fd5b50565b6133f381612cc0565b81146133fe57600080fd5b50565b61340a81612d0c565b811461341557600080fd5b5056fea2646970667358221220c31d33a21bffafbd49484a434b6d5cfd9d1ad85fbea12cdf78361ede28c7d6a964736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636352211e116100b8578063a0712d681161007c578063a0712d6814610338578063a22cb46514610354578063b88d4fde14610370578063c87b56dd1461038c578063d7e981c7146103bc578063e985e9c5146103da57610137565b80636352211e1461029257806370a08231146102c2578063715018a6146102f25780638da5cb5b146102fc57806395d89b411461031a57610137565b806323b872dd116100ff57806323b872dd146102065780632e1a7d4d14610222578063397be3fd1461023e57806342842e0e1461025a57806355f804b31461027657610137565b806301ffc9a71461013c578063067cf8321461016c57806306fdde031461019c578063081812fc146101ba578063095ea7b3146101ea575b600080fd5b6101566004803603810190610151919061236c565b61040a565b6040516101639190612817565b60405180910390f35b610186600480360381019061018191906123ff565b6104ec565b60405161019391906127b0565b60405180910390f35b6101a461051f565b6040516101b1919061284d565b60405180910390f35b6101d460048036038101906101cf91906123ff565b6105b1565b6040516101e191906127b0565b60405180910390f35b61020460048036038101906101ff9190612307565b610636565b005b610220600480360381019061021b9190612201565b61074e565b005b61023c600480360381019061023791906123ff565b6107ae565b005b610258600480360381019061025391906123ff565b6108e0565b005b610274600480360381019061026f9190612201565b610a4d565b005b610290600480360381019061028b91906123be565b610a6d565b005b6102ac60048036038101906102a791906123ff565b610ae1565b6040516102b991906127b0565b60405180910390f35b6102dc60048036038101906102d79190612173565b610b93565b6040516102e99190612a8f565b60405180910390f35b6102fa610c4b565b005b610304610ce9565b60405161031191906127b0565b60405180910390f35b610322610d0f565b60405161032f919061284d565b60405180910390f35b610352600480360381019061034d91906123ff565b610da1565b005b61036e600480360381019061036991906122cb565b61102f565b005b61038a60048036038101906103859190612250565b6111b0565b005b6103a660048036038101906103a191906123ff565b611212565b6040516103b3919061284d565b60405180910390f35b6103c46112b9565b6040516103d19190612832565b60405180910390f35b6103f460048036038101906103ef91906121c5565b6112df565b6040516104019190612817565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e482611373565b5b9050919050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000805461052e90612d8e565b80601f016020809104026020016040519081016040528092919081815260200182805461055a90612d8e565b80156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b5050505050905090565b60006105bc826113dd565b6105fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f2906129cf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064182610ae1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990612a2f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d1611449565b73ffffffffffffffffffffffffffffffffffffffff16148061070057506106ff816106fa611449565b6112df565b5b61073f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107369061294f565b60405180910390fd5b6107498383611451565b505050565b61075f610759611449565b8261150a565b61079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612a4f565b60405180910390fd5b6107a98383836115e8565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166107ce82610ae1565b73ffffffffffffffffffffffffffffffffffffffff1614610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061286f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e474597082336040518363ffffffff1660e01b8152600401610881929190612aaa565b602060405180830381600087803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d39190612343565b506108dd81611844565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109529190612a8f565b60206040518083038186803b15801561096a57600080fd5b505afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a2919061219c565b73ffffffffffffffffffffffffffffffffffffffff16146109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef9061286f565b60405180910390fd5b336009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a68838383604051806020016040528060008152506111b0565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac757600080fd5b8060089080519060200190610add929190611f6d565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b819061298f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061296f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca557600080fd5b6000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054610d1e90612d8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4a90612d8e565b8015610d975780601f10610d6c57610100808354040283529160200191610d97565b820191906000526020600020905b815481529060010190602001808311610d7a57829003601f168201915b5050505050905090565b3073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e139190612a8f565b60206040518083038186803b158015610e2b57600080fd5b505afa158015610e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e63919061219c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb09061292f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5190612a6f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0c1adac826000806040518463ffffffff1660e01b8152600401610fba93929190612ae6565b600060405180830381600087803b158015610fd457600080fd5b505af1158015610fe8573d6000803e3d6000fd5b50505050610ff63382611955565b6009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b611037611449565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c906128ef565b60405180910390fd5b80600560006110b2611449565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661115f611449565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111a49190612817565b60405180910390a35050565b6111c16111bb611449565b8361150a565b611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790612a4f565b60405180910390fd5b61120c84848484611b23565b50505050565b606061121d826113dd565b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390612a0f565b60405180910390fd5b6000611266611b7f565b9050600081511161128657604051806020016040528060008152506112b1565b8061129084611c11565b6040516020016112a192919061278c565b6040516020818303038152906040525b915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166114c483610ae1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611515826113dd565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061290f565b60405180910390fd5b600061155f83610ae1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115ce57508373ffffffffffffffffffffffffffffffffffffffff166115b6846105b1565b73ffffffffffffffffffffffffffffffffffffffff16145b806115df57506115de81856112df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661160882610ae1565b73ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611655906129ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906128cf565b60405180910390fd5b6116d9838383611dbe565b6116e4600082611451565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117349190612c6e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461178b9190612be7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061184f82610ae1565b905061185d81600084611dbe565b611868600083611451565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118b89190612c6e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906129af565b60405180910390fd5b6119ce816113dd565b15611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906128af565b60405180910390fd5b611a1a60008383611dbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6a9190612be7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611b2e8484846115e8565b611b3a84848484611dc3565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061288f565b60405180910390fd5b50505050565b606060088054611b8e90612d8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bba90612d8e565b8015611c075780601f10611bdc57610100808354040283529160200191611c07565b820191906000526020600020905b815481529060010190602001808311611bea57829003601f168201915b5050505050905090565b60606000821415611c59576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611db9565b600082905060005b60008214611c8b578080611c7490612df1565b915050600a82611c849190612c3d565b9150611c61565b60008167ffffffffffffffff811115611ccd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cff5781602001600182028036833780820191505090505b5090505b60008514611db257600182611d189190612c6e565b9150600a85611d279190612e3a565b6030611d339190612be7565b60f81b818381518110611d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611dab9190612c3d565b9450611d03565b8093505050505b919050565b505050565b6000611de48473ffffffffffffffffffffffffffffffffffffffff16611f5a565b15611f4d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e0d611449565b8786866040518563ffffffff1660e01b8152600401611e2f94939291906127cb565b602060405180830381600087803b158015611e4957600080fd5b505af1925050508015611e7a57506040513d601f19601f82011682018060405250810190611e779190612395565b60015b611efd573d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b50600081511415611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec9061288f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f52565b600190505b949350505050565b600080823b905060008111915050919050565b828054611f7990612d8e565b90600052602060002090601f016020900481019282611f9b5760008555611fe2565b82601f10611fb457805160ff1916838001178555611fe2565b82800160010185558215611fe2579182015b82811115611fe1578251825591602001919060010190611fc6565b5b509050611fef9190611ff3565b5090565b5b8082111561200c576000816000905550600101611ff4565b5090565b600061202361201e84612b42565b612b1d565b90508281526020810184848401111561203b57600080fd5b612046848285612d4c565b509392505050565b600061206161205c84612b73565b612b1d565b90508281526020810184848401111561207957600080fd5b612084848285612d4c565b509392505050565b60008135905061209b816133bc565b92915050565b6000815190506120b0816133bc565b92915050565b6000813590506120c5816133d3565b92915050565b6000815190506120da816133d3565b92915050565b6000813590506120ef816133ea565b92915050565b600081519050612104816133ea565b92915050565b600082601f83011261211b57600080fd5b813561212b848260208601612010565b91505092915050565b600082601f83011261214557600080fd5b813561215584826020860161204e565b91505092915050565b60008135905061216d81613401565b92915050565b60006020828403121561218557600080fd5b60006121938482850161208c565b91505092915050565b6000602082840312156121ae57600080fd5b60006121bc848285016120a1565b91505092915050565b600080604083850312156121d857600080fd5b60006121e68582860161208c565b92505060206121f78582860161208c565b9150509250929050565b60008060006060848603121561221657600080fd5b60006122248682870161208c565b93505060206122358682870161208c565b92505060406122468682870161215e565b9150509250925092565b6000806000806080858703121561226657600080fd5b60006122748782880161208c565b94505060206122858782880161208c565b93505060406122968782880161215e565b925050606085013567ffffffffffffffff8111156122b357600080fd5b6122bf8782880161210a565b91505092959194509250565b600080604083850312156122de57600080fd5b60006122ec8582860161208c565b92505060206122fd858286016120b6565b9150509250929050565b6000806040838503121561231a57600080fd5b60006123288582860161208c565b92505060206123398582860161215e565b9150509250929050565b60006020828403121561235557600080fd5b6000612363848285016120cb565b91505092915050565b60006020828403121561237e57600080fd5b600061238c848285016120e0565b91505092915050565b6000602082840312156123a757600080fd5b60006123b5848285016120f5565b91505092915050565b6000602082840312156123d057600080fd5b600082013567ffffffffffffffff8111156123ea57600080fd5b6123f684828501612134565b91505092915050565b60006020828403121561241157600080fd5b600061241f8482850161215e565b91505092915050565b61243181612ca2565b82525050565b61244081612cb4565b82525050565b600061245182612ba4565b61245b8185612bba565b935061246b818560208601612d5b565b61247481612f27565b840191505092915050565b61248881612d16565b82525050565b61249781612d3a565b82525050565b60006124a882612baf565b6124b28185612bcb565b93506124c2818560208601612d5b565b6124cb81612f27565b840191505092915050565b60006124e182612baf565b6124eb8185612bdc565b93506124fb818560208601612d5b565b80840191505092915050565b6000612514601783612bcb565b915061251f82612f38565b602082019050919050565b6000612537603283612bcb565b915061254282612f61565b604082019050919050565b600061255a601c83612bcb565b915061256582612fb0565b602082019050919050565b600061257d602483612bcb565b915061258882612fd9565b604082019050919050565b60006125a0601983612bcb565b91506125ab82613028565b602082019050919050565b60006125c3602c83612bcb565b91506125ce82613051565b604082019050919050565b60006125e6602083612bcb565b91506125f1826130a0565b602082019050919050565b6000612609603883612bcb565b9150612614826130c9565b604082019050919050565b600061262c602a83612bcb565b915061263782613118565b604082019050919050565b600061264f602983612bcb565b915061265a82613167565b604082019050919050565b6000612672602083612bcb565b915061267d826131b6565b602082019050919050565b6000612695602c83612bcb565b91506126a0826131df565b604082019050919050565b60006126b8602983612bcb565b91506126c38261322e565b604082019050919050565b60006126db602f83612bcb565b91506126e68261327d565b604082019050919050565b60006126fe602183612bcb565b9150612709826132cc565b604082019050919050565b6000612721600083612bcb565b915061272c8261331b565b600082019050919050565b6000612744603183612bcb565b915061274f8261331e565b604082019050919050565b6000612767602d83612bcb565b91506127728261336d565b604082019050919050565b61278681612d0c565b82525050565b600061279882856124d6565b91506127a482846124d6565b91508190509392505050565b60006020820190506127c56000830184612428565b92915050565b60006080820190506127e06000830187612428565b6127ed6020830186612428565b6127fa604083018561277d565b818103606083015261280c8184612446565b905095945050505050565b600060208201905061282c6000830184612437565b92915050565b6000602082019050612847600083018461247f565b92915050565b60006020820190508181036000830152612867818461249d565b905092915050565b6000602082019050818103600083015261288881612507565b9050919050565b600060208201905081810360008301526128a88161252a565b9050919050565b600060208201905081810360008301526128c88161254d565b9050919050565b600060208201905081810360008301526128e881612570565b9050919050565b6000602082019050818103600083015261290881612593565b9050919050565b60006020820190508181036000830152612928816125b6565b9050919050565b60006020820190508181036000830152612948816125d9565b9050919050565b60006020820190508181036000830152612968816125fc565b9050919050565b600060208201905081810360008301526129888161261f565b9050919050565b600060208201905081810360008301526129a881612642565b9050919050565b600060208201905081810360008301526129c881612665565b9050919050565b600060208201905081810360008301526129e881612688565b9050919050565b60006020820190508181036000830152612a08816126ab565b9050919050565b60006020820190508181036000830152612a28816126ce565b9050919050565b60006020820190508181036000830152612a48816126f1565b9050919050565b60006020820190508181036000830152612a6881612737565b9050919050565b60006020820190508181036000830152612a888161275a565b9050919050565b6000602082019050612aa4600083018461277d565b92915050565b6000606082019050612abf600083018561277d565b612acc6020830184612428565b8181036040830152612add81612714565b90509392505050565b6000606082019050612afb600083018661277d565b612b086020830185612437565b612b15604083018461248e565b949350505050565b6000612b27612b38565b9050612b338282612dc0565b919050565b6000604051905090565b600067ffffffffffffffff821115612b5d57612b5c612ef8565b5b612b6682612f27565b9050602081019050919050565b600067ffffffffffffffff821115612b8e57612b8d612ef8565b5b612b9782612f27565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bf282612d0c565b9150612bfd83612d0c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c3257612c31612e6b565b5b828201905092915050565b6000612c4882612d0c565b9150612c5383612d0c565b925082612c6357612c62612e9a565b5b828204905092915050565b6000612c7982612d0c565b9150612c8483612d0c565b925082821015612c9757612c96612e6b565b5b828203905092915050565b6000612cad82612cec565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d2182612d28565b9050919050565b6000612d3382612cec565b9050919050565b6000612d4582612d0c565b9050919050565b82818337600083830152505050565b60005b83811015612d79578082015181840152602081019050612d5e565b83811115612d88576000848401525b50505050565b60006002820490506001821680612da657607f821691505b60208210811415612dba57612db9612ec9565b5b50919050565b612dc982612f27565b810181811067ffffffffffffffff82111715612de857612de7612ef8565b5b80604052505050565b6000612dfc82612d0c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612e2f57612e2e612e6b565b5b600182019050919050565b6000612e4582612d0c565b9150612e5083612d0c565b925082612e6057612e5f612e9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c756e6172206e6f74206f776e6564206279207468697320636f6e7472616374600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616c6c657220646f65736e277420686176652061207265736572766174696f60008201527f6e206f6e2074686973206e667400000000000000000000000000000000000000602082015250565b6133c581612ca2565b81146133d057600080fd5b50565b6133dc81612cb4565b81146133e757600080fd5b50565b6133f381612cc0565b81146133fe57600080fd5b50565b61340a81612d0c565b811461341557600080fd5b5056fea2646970667358221220c31d33a21bffafbd49484a434b6d5cfd9d1ad85fbea12cdf78361ede28c7d6a964736f6c63430008040033
Deployed Bytecode Sourcemap
32987:1857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20180:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33207:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21125:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22684:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22207:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23574:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34545:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33750:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23984:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33320:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20819:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20549:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33459:112;;;:::i;:::-;;33105:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21294:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34198:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22977:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24240:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21469:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33028:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23343:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20180:305;20282:4;20334:25;20319:40;;;:11;:40;;;;:105;;;;20391:33;20376:48;;;:11;:48;;;;20319:105;:158;;;;20441:36;20465:11;20441:23;:36::i;:::-;20319:158;20299:178;;20180:305;;;:::o;33207:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;21125:100::-;21179:13;21212:5;21205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21125:100;:::o;22684:221::-;22760:7;22788:16;22796:7;22788;:16::i;:::-;22780:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22873:15;:24;22889:7;22873:24;;;;;;;;;;;;;;;;;;;;;22866:31;;22684:221;;;:::o;22207:411::-;22288:13;22304:23;22319:7;22304:14;:23::i;:::-;22288:39;;22352:5;22346:11;;:2;:11;;;;22338:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22446:5;22430:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22455:37;22472:5;22479:12;:10;:12::i;:::-;22455:16;:37::i;:::-;22430:62;22408:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22589:21;22598:2;22602:7;22589:8;:21::i;:::-;22207:411;;;:::o;23574:339::-;23769:41;23788:12;:10;:12::i;:::-;23802:7;23769:18;:41::i;:::-;23761:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23877:28;23887:4;23893:2;23897:7;23877:9;:28::i;:::-;23574:339;;;:::o;34545:186::-;34618:10;34603:25;;:11;34611:2;34603:7;:11::i;:::-;:25;;;34595:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34669:5;;;;;;;;;;;:14;;;34684:2;34688:10;34669:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34714:9;34720:2;34714:5;:9::i;:::-;34545:186;:::o;33750:167::-;33831:10;33810:31;;:5;;;;;;;;;;;:13;;;33824:2;33810:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;;33802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33899:10;33880:12;:16;33893:2;33880:16;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33750:167;:::o;23984:185::-;24122:39;24139:4;24145:2;24149:7;24122:39;;;;;;;;;;;;:16;:39::i;:::-;23984:185;;;:::o;33320:131::-;33406:5;;;;;;;;;;;33392:19;;:10;:19;;;33384:28;;;;;;33433:10;33423:7;:20;;;;;;;;;;;;:::i;:::-;;33320:131;:::o;20819:239::-;20891:7;20911:13;20927:7;:16;20935:7;20927:16;;;;;;;;;;;;;;;;;;;;;20911:32;;20979:1;20962:19;;:5;:19;;;;20954:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21045:5;21038:12;;;20819:239;;;:::o;20549:208::-;20621:7;20666:1;20649:19;;:5;:19;;;;20641:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20733:9;:16;20743:5;20733:16;;;;;;;;;;;;;;;;20726:23;;20549:208;;;:::o;33459:112::-;33528:5;;;;;;;;;;;33514:19;;:10;:19;;;33506:28;;;;;;33561:1;33545:5;;:18;;;;;;;;;;;;;;;;;;33459:112::o;33105:65::-;;;;;;;;;;;;;:::o;21294:104::-;21350:13;21383:7;21376:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21294:104;:::o;34198:339::-;34281:4;34252:34;;:5;;;;;;;;;;;:13;;;34266:2;34252:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;34244:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34362:10;34342:30;;:12;:16;34355:2;34342:16;;;;;;;;;;;;;;;;;;;;;:30;;;34334:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34435:5;;;;;;;;;;;:14;;;34450:2;34454:5;34461:1;34435:28;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34474:21;34480:10;34492:2;34474:5;:21::i;:::-;34513:12;:16;34526:2;34513:16;;;;;;;;;;;;34506:23;;;;;;;;;;;34198:339;:::o;22977:295::-;23092:12;:10;:12::i;:::-;23080:24;;:8;:24;;;;23072:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23192:8;23147:18;:32;23166:12;:10;:12::i;:::-;23147:32;;;;;;;;;;;;;;;:42;23180:8;23147:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23245:8;23216:48;;23231:12;:10;:12::i;:::-;23216:48;;;23255:8;23216:48;;;;;;:::i;:::-;;;;;;;;22977:295;;:::o;24240:328::-;24415:41;24434:12;:10;:12::i;:::-;24448:7;24415:18;:41::i;:::-;24407:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24521:39;24535:4;24541:2;24545:7;24554:5;24521:13;:39::i;:::-;24240:328;;;;:::o;21469:334::-;21542:13;21576:16;21584:7;21576;:16::i;:::-;21568:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21657:21;21681:10;:8;:10::i;:::-;21657:34;;21733:1;21715:7;21709:21;:25;:86;;;;;;;;;;;;;;;;;21761:7;21770:18;:7;:16;:18::i;:::-;21744:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21709:86;21702:93;;;21469:334;;;:::o;33028:70::-;;;;;;;;;;;;;:::o;23343:164::-;23440:4;23464:18;:25;23483:5;23464:25;;;;;;;;;;;;;;;:35;23490:8;23464:35;;;;;;;;;;;;;;;;;;;;;;;;;23457:42;;23343:164;;;;:::o;18729:157::-;18814:4;18853:25;18838:40;;;:11;:40;;;;18831:47;;18729:157;;;:::o;26076:127::-;26141:4;26193:1;26165:30;;:7;:16;26173:7;26165:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26158:37;;26076:127;;;:::o;15713:98::-;15766:7;15793:10;15786:17;;15713:98;:::o;30058:174::-;30160:2;30133:15;:24;30149:7;30133:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30216:7;30212:2;30178:46;;30187:23;30202:7;30187:14;:23::i;:::-;30178:46;;;;;;;;;;;;30058:174;;:::o;26370:348::-;26463:4;26488:16;26496:7;26488;:16::i;:::-;26480:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26564:13;26580:23;26595:7;26580:14;:23::i;:::-;26564:39;;26633:5;26622:16;;:7;:16;;;:51;;;;26666:7;26642:31;;:20;26654:7;26642:11;:20::i;:::-;:31;;;26622:51;:87;;;;26677:32;26694:5;26701:7;26677:16;:32::i;:::-;26622:87;26614:96;;;26370:348;;;;:::o;29362:578::-;29521:4;29494:31;;:23;29509:7;29494:14;:23::i;:::-;:31;;;29486:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29604:1;29590:16;;:2;:16;;;;29582:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29660:39;29681:4;29687:2;29691:7;29660:20;:39::i;:::-;29764:29;29781:1;29785:7;29764:8;:29::i;:::-;29825:1;29806:9;:15;29816:4;29806:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29854:1;29837:9;:13;29847:2;29837:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29885:2;29866:7;:16;29874:7;29866:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29924:7;29920:2;29905:27;;29914:4;29905:27;;;;;;;;;;;;29362:578;;;:::o;28665:360::-;28725:13;28741:23;28756:7;28741:14;:23::i;:::-;28725:39;;28777:48;28798:5;28813:1;28817:7;28777:20;:48::i;:::-;28866:29;28883:1;28887:7;28866:8;:29::i;:::-;28928:1;28908:9;:16;28918:5;28908:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;28947:7;:16;28955:7;28947:16;;;;;;;;;;;;28940:23;;;;;;;;;;;29009:7;29005:1;28981:36;;28990:5;28981:36;;;;;;;;;;;;28665:360;;:::o;28054:382::-;28148:1;28134:16;;:2;:16;;;;28126:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28207:16;28215:7;28207;:16::i;:::-;28206:17;28198:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28269:45;28298:1;28302:2;28306:7;28269:20;:45::i;:::-;28344:1;28327:9;:13;28337:2;28327:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28375:2;28356:7;:16;28364:7;28356:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28420:7;28416:2;28395:33;;28412:1;28395:33;;;;;;;;;;;;28054:382;;:::o;25450:313::-;25607:28;25617:4;25623:2;25627:7;25607:9;:28::i;:::-;25654:48;25677:4;25683:2;25687:7;25696:5;25654:22;:48::i;:::-;25646:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25450:313;;;;:::o;34739:100::-;34791:13;34824:7;34817:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34739:100;:::o;16207:721::-;16263:13;16491:1;16482:5;:10;16478:53;;;16509:10;;;;;;;;;;;;;;;;;;;;;16478:53;16541:12;16556:5;16541:20;;16572:14;16597:78;16612:1;16604:4;:9;16597:78;;16630:8;;;;;:::i;:::-;;;;16661:2;16653:10;;;;;:::i;:::-;;;16597:78;;;16685:19;16717:6;16707:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16685:39;;16735:154;16751:1;16742:5;:10;16735:154;;16779:1;16769:11;;;;;:::i;:::-;;;16846:2;16838:5;:10;;;;:::i;:::-;16825:2;:24;;;;:::i;:::-;16812:39;;16795:6;16802;16795:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16875:2;16866:11;;;;;:::i;:::-;;;16735:154;;;16913:6;16899:21;;;;;16207:721;;;;:::o;32172:126::-;;;;:::o;30797:803::-;30952:4;30973:15;:2;:13;;;:15::i;:::-;30969:624;;;31025:2;31009:36;;;31046:12;:10;:12::i;:::-;31060:4;31066:7;31075:5;31009:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31005:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31272:1;31255:6;:13;:18;31251:272;;;31298:60;;;;;;;;;;:::i;:::-;;;;;;;;31251:272;31473:6;31467:13;31458:6;31454:2;31450:15;31443:38;31005:533;31142:45;;;31132:55;;;:6;:55;;;;31125:62;;;;;30969:624;31577:4;31570:11;;30797:803;;;;;;;:::o;8006:387::-;8066:4;8274:12;8341:7;8329:20;8321:28;;8384:1;8377:4;:8;8370:15;;;8006:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:143::-;909:5;940:6;934:13;925:22;;956:33;983:5;956:33;:::i;:::-;915:80;;;;:::o;1001:133::-;1044:5;1082:6;1069:20;1060:29;;1098:30;1122:5;1098:30;:::i;:::-;1050:84;;;;:::o;1140:137::-;1194:5;1225:6;1219:13;1210:22;;1241:30;1265:5;1241:30;:::i;:::-;1200:77;;;;:::o;1283:137::-;1328:5;1366:6;1353:20;1344:29;;1382:32;1408:5;1382:32;:::i;:::-;1334:86;;;;:::o;1426:141::-;1482:5;1513:6;1507:13;1498:22;;1529:32;1555:5;1529:32;:::i;:::-;1488:79;;;;:::o;1586:271::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:78;1847:3;1839:6;1832:4;1824:6;1820:17;1773:78;:::i;:::-;1764:87;;1647:210;;;;;:::o;1877:273::-;1933:5;1982:3;1975:4;1967:6;1963:17;1959:27;1949:2;;2000:1;1997;1990:12;1949:2;2040:6;2027:20;2065:79;2140:3;2132:6;2125:4;2117:6;2113:17;2065:79;:::i;:::-;2056:88;;1939:211;;;;;:::o;2156:139::-;2202:5;2240:6;2227:20;2218:29;;2256:33;2283:5;2256:33;:::i;:::-;2208:87;;;;:::o;2301:262::-;2360:6;2409:2;2397:9;2388:7;2384:23;2380:32;2377:2;;;2425:1;2422;2415:12;2377:2;2468:1;2493:53;2538:7;2529:6;2518:9;2514:22;2493:53;:::i;:::-;2483:63;;2439:117;2367:196;;;;:::o;2569:284::-;2639:6;2688:2;2676:9;2667:7;2663:23;2659:32;2656:2;;;2704:1;2701;2694:12;2656:2;2747:1;2772:64;2828:7;2819:6;2808:9;2804:22;2772:64;:::i;:::-;2762:74;;2718:128;2646:207;;;;:::o;2859:407::-;2927:6;2935;2984:2;2972:9;2963:7;2959:23;2955:32;2952:2;;;3000:1;2997;2990:12;2952:2;3043:1;3068:53;3113:7;3104:6;3093:9;3089:22;3068:53;:::i;:::-;3058:63;;3014:117;3170:2;3196:53;3241:7;3232:6;3221:9;3217:22;3196:53;:::i;:::-;3186:63;;3141:118;2942:324;;;;;:::o;3272:552::-;3349:6;3357;3365;3414:2;3402:9;3393:7;3389:23;3385:32;3382:2;;;3430:1;3427;3420:12;3382:2;3473:1;3498:53;3543:7;3534:6;3523:9;3519:22;3498:53;:::i;:::-;3488:63;;3444:117;3600:2;3626:53;3671:7;3662:6;3651:9;3647:22;3626:53;:::i;:::-;3616:63;;3571:118;3728:2;3754:53;3799:7;3790:6;3779:9;3775:22;3754:53;:::i;:::-;3744:63;;3699:118;3372:452;;;;;:::o;3830:809::-;3925:6;3933;3941;3949;3998:3;3986:9;3977:7;3973:23;3969:33;3966:2;;;4015:1;4012;4005:12;3966:2;4058:1;4083:53;4128:7;4119:6;4108:9;4104:22;4083:53;:::i;:::-;4073:63;;4029:117;4185:2;4211:53;4256:7;4247:6;4236:9;4232:22;4211:53;:::i;:::-;4201:63;;4156:118;4313:2;4339:53;4384:7;4375:6;4364:9;4360:22;4339:53;:::i;:::-;4329:63;;4284:118;4469:2;4458:9;4454:18;4441:32;4500:18;4492:6;4489:30;4486:2;;;4532:1;4529;4522:12;4486:2;4560:62;4614:7;4605:6;4594:9;4590:22;4560:62;:::i;:::-;4550:72;;4412:220;3956:683;;;;;;;:::o;4645:401::-;4710:6;4718;4767:2;4755:9;4746:7;4742:23;4738:32;4735:2;;;4783:1;4780;4773:12;4735:2;4826:1;4851:53;4896:7;4887:6;4876:9;4872:22;4851:53;:::i;:::-;4841:63;;4797:117;4953:2;4979:50;5021:7;5012:6;5001:9;4997:22;4979:50;:::i;:::-;4969:60;;4924:115;4725:321;;;;;:::o;5052:407::-;5120:6;5128;5177:2;5165:9;5156:7;5152:23;5148:32;5145:2;;;5193:1;5190;5183:12;5145:2;5236:1;5261:53;5306:7;5297:6;5286:9;5282:22;5261:53;:::i;:::-;5251:63;;5207:117;5363:2;5389:53;5434:7;5425:6;5414:9;5410:22;5389:53;:::i;:::-;5379:63;;5334:118;5135:324;;;;;:::o;5465:278::-;5532:6;5581:2;5569:9;5560:7;5556:23;5552:32;5549:2;;;5597:1;5594;5587:12;5549:2;5640:1;5665:61;5718:7;5709:6;5698:9;5694:22;5665:61;:::i;:::-;5655:71;;5611:125;5539:204;;;;:::o;5749:260::-;5807:6;5856:2;5844:9;5835:7;5831:23;5827:32;5824:2;;;5872:1;5869;5862:12;5824:2;5915:1;5940:52;5984:7;5975:6;5964:9;5960:22;5940:52;:::i;:::-;5930:62;;5886:116;5814:195;;;;:::o;6015:282::-;6084:6;6133:2;6121:9;6112:7;6108:23;6104:32;6101:2;;;6149:1;6146;6139:12;6101:2;6192:1;6217:63;6272:7;6263:6;6252:9;6248:22;6217:63;:::i;:::-;6207:73;;6163:127;6091:206;;;;:::o;6303:375::-;6372:6;6421:2;6409:9;6400:7;6396:23;6392:32;6389:2;;;6437:1;6434;6427:12;6389:2;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:2;;;6570:1;6567;6560:12;6524:2;6598:63;6653:7;6644:6;6633:9;6629:22;6598:63;:::i;:::-;6588:73;;6451:220;6379:299;;;;:::o;6684:262::-;6743:6;6792:2;6780:9;6771:7;6767:23;6763:32;6760:2;;;6808:1;6805;6798:12;6760:2;6851:1;6876:53;6921:7;6912:6;6901:9;6897:22;6876:53;:::i;:::-;6866:63;;6822:117;6750:196;;;;:::o;6952:118::-;7039:24;7057:5;7039:24;:::i;:::-;7034:3;7027:37;7017:53;;:::o;7076:109::-;7157:21;7172:5;7157:21;:::i;:::-;7152:3;7145:34;7135:50;;:::o;7191:360::-;7277:3;7305:38;7337:5;7305:38;:::i;:::-;7359:70;7422:6;7417:3;7359:70;:::i;:::-;7352:77;;7438:52;7483:6;7478:3;7471:4;7464:5;7460:16;7438:52;:::i;:::-;7515:29;7537:6;7515:29;:::i;:::-;7510:3;7506:39;7499:46;;7281:270;;;;;:::o;7557:159::-;7658:51;7703:5;7658:51;:::i;:::-;7653:3;7646:64;7636:80;;:::o;7722:147::-;7817:45;7856:5;7817:45;:::i;:::-;7812:3;7805:58;7795:74;;:::o;7875:364::-;7963:3;7991:39;8024:5;7991:39;:::i;:::-;8046:71;8110:6;8105:3;8046:71;:::i;:::-;8039:78;;8126:52;8171:6;8166:3;8159:4;8152:5;8148:16;8126:52;:::i;:::-;8203:29;8225:6;8203:29;:::i;:::-;8198:3;8194:39;8187:46;;7967:272;;;;;:::o;8245:377::-;8351:3;8379:39;8412:5;8379:39;:::i;:::-;8434:89;8516:6;8511:3;8434:89;:::i;:::-;8427:96;;8532:52;8577:6;8572:3;8565:4;8558:5;8554:16;8532:52;:::i;:::-;8609:6;8604:3;8600:16;8593:23;;8355:267;;;;;:::o;8628:366::-;8770:3;8791:67;8855:2;8850:3;8791:67;:::i;:::-;8784:74;;8867:93;8956:3;8867:93;:::i;:::-;8985:2;8980:3;8976:12;8969:19;;8774:220;;;:::o;9000:366::-;9142:3;9163:67;9227:2;9222:3;9163:67;:::i;:::-;9156:74;;9239:93;9328:3;9239:93;:::i;:::-;9357:2;9352:3;9348:12;9341:19;;9146:220;;;:::o;9372:366::-;9514:3;9535:67;9599:2;9594:3;9535:67;:::i;:::-;9528:74;;9611:93;9700:3;9611:93;:::i;:::-;9729:2;9724:3;9720:12;9713:19;;9518:220;;;:::o;9744:366::-;9886:3;9907:67;9971:2;9966:3;9907:67;:::i;:::-;9900:74;;9983:93;10072:3;9983:93;:::i;:::-;10101:2;10096:3;10092:12;10085:19;;9890:220;;;:::o;10116:366::-;10258:3;10279:67;10343:2;10338:3;10279:67;:::i;:::-;10272:74;;10355:93;10444:3;10355:93;:::i;:::-;10473:2;10468:3;10464:12;10457:19;;10262:220;;;:::o;10488:366::-;10630:3;10651:67;10715:2;10710:3;10651:67;:::i;:::-;10644:74;;10727:93;10816:3;10727:93;:::i;:::-;10845:2;10840:3;10836:12;10829:19;;10634:220;;;:::o;10860:366::-;11002:3;11023:67;11087:2;11082:3;11023:67;:::i;:::-;11016:74;;11099:93;11188:3;11099:93;:::i;:::-;11217:2;11212:3;11208:12;11201:19;;11006:220;;;:::o;11232:366::-;11374:3;11395:67;11459:2;11454:3;11395:67;:::i;:::-;11388:74;;11471:93;11560:3;11471:93;:::i;:::-;11589:2;11584:3;11580:12;11573:19;;11378:220;;;:::o;11604:366::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11750:220;;;:::o;11976:366::-;12118:3;12139:67;12203:2;12198:3;12139:67;:::i;:::-;12132:74;;12215:93;12304:3;12215:93;:::i;:::-;12333:2;12328:3;12324:12;12317:19;;12122:220;;;:::o;12348:366::-;12490:3;12511:67;12575:2;12570:3;12511:67;:::i;:::-;12504:74;;12587:93;12676:3;12587:93;:::i;:::-;12705:2;12700:3;12696:12;12689:19;;12494:220;;;:::o;12720:366::-;12862:3;12883:67;12947:2;12942:3;12883:67;:::i;:::-;12876:74;;12959:93;13048:3;12959:93;:::i;:::-;13077:2;13072:3;13068:12;13061:19;;12866:220;;;:::o;13092:366::-;13234:3;13255:67;13319:2;13314:3;13255:67;:::i;:::-;13248:74;;13331:93;13420:3;13331:93;:::i;:::-;13449:2;13444:3;13440:12;13433:19;;13238:220;;;:::o;13464:366::-;13606:3;13627:67;13691:2;13686:3;13627:67;:::i;:::-;13620:74;;13703:93;13792:3;13703:93;:::i;:::-;13821:2;13816:3;13812:12;13805:19;;13610:220;;;:::o;13836:366::-;13978:3;13999:67;14063:2;14058:3;13999:67;:::i;:::-;13992:74;;14075:93;14164:3;14075:93;:::i;:::-;14193:2;14188:3;14184:12;14177:19;;13982:220;;;:::o;14208:364::-;14350:3;14371:66;14435:1;14430:3;14371:66;:::i;:::-;14364:73;;14446:93;14535:3;14446:93;:::i;:::-;14564:1;14559:3;14555:11;14548:18;;14354:218;;;:::o;14578:366::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14724:220;;;:::o;14950:366::-;15092:3;15113:67;15177:2;15172:3;15113:67;:::i;:::-;15106:74;;15189:93;15278:3;15189:93;:::i;:::-;15307:2;15302:3;15298:12;15291:19;;15096:220;;;:::o;15322:118::-;15409:24;15427:5;15409:24;:::i;:::-;15404:3;15397:37;15387:53;;:::o;15446:435::-;15626:3;15648:95;15739:3;15730:6;15648:95;:::i;:::-;15641:102;;15760:95;15851:3;15842:6;15760:95;:::i;:::-;15753:102;;15872:3;15865:10;;15630:251;;;;;:::o;15887:222::-;15980:4;16018:2;16007:9;16003:18;15995:26;;16031:71;16099:1;16088:9;16084:17;16075:6;16031:71;:::i;:::-;15985:124;;;;:::o;16115:640::-;16310:4;16348:3;16337:9;16333:19;16325:27;;16362:71;16430:1;16419:9;16415:17;16406:6;16362:71;:::i;:::-;16443:72;16511:2;16500:9;16496:18;16487:6;16443:72;:::i;:::-;16525;16593:2;16582:9;16578:18;16569:6;16525:72;:::i;:::-;16644:9;16638:4;16634:20;16629:2;16618:9;16614:18;16607:48;16672:76;16743:4;16734:6;16672:76;:::i;:::-;16664:84;;16315:440;;;;;;;:::o;16761:210::-;16848:4;16886:2;16875:9;16871:18;16863:26;;16899:65;16961:1;16950:9;16946:17;16937:6;16899:65;:::i;:::-;16853:118;;;;:::o;16977:250::-;17084:4;17122:2;17111:9;17107:18;17099:26;;17135:85;17217:1;17206:9;17202:17;17193:6;17135:85;:::i;:::-;17089:138;;;;:::o;17233:313::-;17346:4;17384:2;17373:9;17369:18;17361:26;;17433:9;17427:4;17423:20;17419:1;17408:9;17404:17;17397:47;17461:78;17534:4;17525:6;17461:78;:::i;:::-;17453:86;;17351:195;;;;:::o;17552:419::-;17718:4;17756:2;17745:9;17741:18;17733:26;;17805:9;17799:4;17795:20;17791:1;17780:9;17776:17;17769:47;17833:131;17959:4;17833:131;:::i;:::-;17825:139;;17723:248;;;:::o;17977:419::-;18143:4;18181:2;18170:9;18166:18;18158:26;;18230:9;18224:4;18220:20;18216:1;18205:9;18201:17;18194:47;18258:131;18384:4;18258:131;:::i;:::-;18250:139;;18148:248;;;:::o;18402:419::-;18568:4;18606:2;18595:9;18591:18;18583:26;;18655:9;18649:4;18645:20;18641:1;18630:9;18626:17;18619:47;18683:131;18809:4;18683:131;:::i;:::-;18675:139;;18573:248;;;:::o;18827:419::-;18993:4;19031:2;19020:9;19016:18;19008:26;;19080:9;19074:4;19070:20;19066:1;19055:9;19051:17;19044:47;19108:131;19234:4;19108:131;:::i;:::-;19100:139;;18998:248;;;:::o;19252:419::-;19418:4;19456:2;19445:9;19441:18;19433:26;;19505:9;19499:4;19495:20;19491:1;19480:9;19476:17;19469:47;19533:131;19659:4;19533:131;:::i;:::-;19525:139;;19423:248;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19848:248;;;:::o;20102:419::-;20268:4;20306:2;20295:9;20291:18;20283:26;;20355:9;20349:4;20345:20;20341:1;20330:9;20326:17;20319:47;20383:131;20509:4;20383:131;:::i;:::-;20375:139;;20273:248;;;:::o;20527:419::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20780:9;20774:4;20770:20;20766:1;20755:9;20751:17;20744:47;20808:131;20934:4;20808:131;:::i;:::-;20800:139;;20698:248;;;:::o;20952:419::-;21118:4;21156:2;21145:9;21141:18;21133:26;;21205:9;21199:4;21195:20;21191:1;21180:9;21176:17;21169:47;21233:131;21359:4;21233:131;:::i;:::-;21225:139;;21123:248;;;:::o;21377:419::-;21543:4;21581:2;21570:9;21566:18;21558:26;;21630:9;21624:4;21620:20;21616:1;21605:9;21601:17;21594:47;21658:131;21784:4;21658:131;:::i;:::-;21650:139;;21548:248;;;:::o;21802:419::-;21968:4;22006:2;21995:9;21991:18;21983:26;;22055:9;22049:4;22045:20;22041:1;22030:9;22026:17;22019:47;22083:131;22209:4;22083:131;:::i;:::-;22075:139;;21973:248;;;:::o;22227:419::-;22393:4;22431:2;22420:9;22416:18;22408:26;;22480:9;22474:4;22470:20;22466:1;22455:9;22451:17;22444:47;22508:131;22634:4;22508:131;:::i;:::-;22500:139;;22398:248;;;:::o;22652:419::-;22818:4;22856:2;22845:9;22841:18;22833:26;;22905:9;22899:4;22895:20;22891:1;22880:9;22876:17;22869:47;22933:131;23059:4;22933:131;:::i;:::-;22925:139;;22823:248;;;:::o;23077:419::-;23243:4;23281:2;23270:9;23266:18;23258:26;;23330:9;23324:4;23320:20;23316:1;23305:9;23301:17;23294:47;23358:131;23484:4;23358:131;:::i;:::-;23350:139;;23248:248;;;:::o;23502:419::-;23668:4;23706:2;23695:9;23691:18;23683:26;;23755:9;23749:4;23745:20;23741:1;23730:9;23726:17;23719:47;23783:131;23909:4;23783:131;:::i;:::-;23775:139;;23673:248;;;:::o;23927:419::-;24093:4;24131:2;24120:9;24116:18;24108:26;;24180:9;24174:4;24170:20;24166:1;24155:9;24151:17;24144:47;24208:131;24334:4;24208:131;:::i;:::-;24200:139;;24098:248;;;:::o;24352:419::-;24518:4;24556:2;24545:9;24541:18;24533:26;;24605:9;24599:4;24595:20;24591:1;24580:9;24576:17;24569:47;24633:131;24759:4;24633:131;:::i;:::-;24625:139;;24523:248;;;:::o;24777:222::-;24870:4;24908:2;24897:9;24893:18;24885:26;;24921:71;24989:1;24978:9;24974:17;24965:6;24921:71;:::i;:::-;24875:124;;;;:::o;25005:639::-;25227:4;25265:2;25254:9;25250:18;25242:26;;25278:71;25346:1;25335:9;25331:17;25322:6;25278:71;:::i;:::-;25359:72;25427:2;25416:9;25412:18;25403:6;25359:72;:::i;:::-;25478:9;25472:4;25468:20;25463:2;25452:9;25448:18;25441:48;25506:131;25632:4;25506:131;:::i;:::-;25498:139;;25232:412;;;;;:::o;25650:446::-;25801:4;25839:2;25828:9;25824:18;25816:26;;25852:71;25920:1;25909:9;25905:17;25896:6;25852:71;:::i;:::-;25933:66;25995:2;25984:9;25980:18;25971:6;25933:66;:::i;:::-;26009:80;26085:2;26074:9;26070:18;26061:6;26009:80;:::i;:::-;25806:290;;;;;;:::o;26102:129::-;26136:6;26163:20;;:::i;:::-;26153:30;;26192:33;26220:4;26212:6;26192:33;:::i;:::-;26143:88;;;:::o;26237:75::-;26270:6;26303:2;26297:9;26287:19;;26277:35;:::o;26318:307::-;26379:4;26469:18;26461:6;26458:30;26455:2;;;26491:18;;:::i;:::-;26455:2;26529:29;26551:6;26529:29;:::i;:::-;26521:37;;26613:4;26607;26603:15;26595:23;;26384:241;;;:::o;26631:308::-;26693:4;26783:18;26775:6;26772:30;26769:2;;;26805:18;;:::i;:::-;26769:2;26843:29;26865:6;26843:29;:::i;:::-;26835:37;;26927:4;26921;26917:15;26909:23;;26698:241;;;:::o;26945:98::-;26996:6;27030:5;27024:12;27014:22;;27003:40;;;:::o;27049:99::-;27101:6;27135:5;27129:12;27119:22;;27108:40;;;:::o;27154:168::-;27237:11;27271:6;27266:3;27259:19;27311:4;27306:3;27302:14;27287:29;;27249:73;;;;:::o;27328:169::-;27412:11;27446:6;27441:3;27434:19;27486:4;27481:3;27477:14;27462:29;;27424:73;;;;:::o;27503:148::-;27605:11;27642:3;27627:18;;27617:34;;;;:::o;27657:305::-;27697:3;27716:20;27734:1;27716:20;:::i;:::-;27711:25;;27750:20;27768:1;27750:20;:::i;:::-;27745:25;;27904:1;27836:66;27832:74;27829:1;27826:81;27823:2;;;27910:18;;:::i;:::-;27823:2;27954:1;27951;27947:9;27940:16;;27701:261;;;;:::o;27968:185::-;28008:1;28025:20;28043:1;28025:20;:::i;:::-;28020:25;;28059:20;28077:1;28059:20;:::i;:::-;28054:25;;28098:1;28088:2;;28103:18;;:::i;:::-;28088:2;28145:1;28142;28138:9;28133:14;;28010:143;;;;:::o;28159:191::-;28199:4;28219:20;28237:1;28219:20;:::i;:::-;28214:25;;28253:20;28271:1;28253:20;:::i;:::-;28248:25;;28292:1;28289;28286:8;28283:2;;;28297:18;;:::i;:::-;28283:2;28342:1;28339;28335:9;28327:17;;28204:146;;;;:::o;28356:96::-;28393:7;28422:24;28440:5;28422:24;:::i;:::-;28411:35;;28401:51;;;:::o;28458:90::-;28492:7;28535:5;28528:13;28521:21;28510:32;;28500:48;;;:::o;28554:149::-;28590:7;28630:66;28623:5;28619:78;28608:89;;28598:105;;;:::o;28709:126::-;28746:7;28786:42;28779:5;28775:54;28764:65;;28754:81;;;:::o;28841:77::-;28878:7;28907:5;28896:16;;28886:32;;;:::o;28924:154::-;28988:9;29021:51;29066:5;29021:51;:::i;:::-;29008:64;;28998:80;;;:::o;29084:127::-;29148:9;29181:24;29199:5;29181:24;:::i;:::-;29168:37;;29158:53;;;:::o;29217:121::-;29275:9;29308:24;29326:5;29308:24;:::i;:::-;29295:37;;29285:53;;;:::o;29344:154::-;29428:6;29423:3;29418;29405:30;29490:1;29481:6;29476:3;29472:16;29465:27;29395:103;;;:::o;29504:307::-;29572:1;29582:113;29596:6;29593:1;29590:13;29582:113;;;29681:1;29676:3;29672:11;29666:18;29662:1;29657:3;29653:11;29646:39;29618:2;29615:1;29611:10;29606:15;;29582:113;;;29713:6;29710:1;29707:13;29704:2;;;29793:1;29784:6;29779:3;29775:16;29768:27;29704:2;29553:258;;;;:::o;29817:320::-;29861:6;29898:1;29892:4;29888:12;29878:22;;29945:1;29939:4;29935:12;29966:18;29956:2;;30022:4;30014:6;30010:17;30000:27;;29956:2;30084;30076:6;30073:14;30053:18;30050:38;30047:2;;;30103:18;;:::i;:::-;30047:2;29868:269;;;;:::o;30143:281::-;30226:27;30248:4;30226:27;:::i;:::-;30218:6;30214:40;30356:6;30344:10;30341:22;30320:18;30308:10;30305:34;30302:62;30299:2;;;30367:18;;:::i;:::-;30299:2;30407:10;30403:2;30396:22;30186:238;;;:::o;30430:233::-;30469:3;30492:24;30510:5;30492:24;:::i;:::-;30483:33;;30538:66;30531:5;30528:77;30525:2;;;30608:18;;:::i;:::-;30525:2;30655:1;30648:5;30644:13;30637:20;;30473:190;;;:::o;30669:176::-;30701:1;30718:20;30736:1;30718:20;:::i;:::-;30713:25;;30752:20;30770:1;30752:20;:::i;:::-;30747:25;;30791:1;30781:2;;30796:18;;:::i;:::-;30781:2;30837:1;30834;30830:9;30825:14;;30703:142;;;;:::o;30851:180::-;30899:77;30896:1;30889:88;30996:4;30993:1;30986:15;31020:4;31017:1;31010:15;31037:180;31085:77;31082:1;31075:88;31182:4;31179:1;31172:15;31206:4;31203:1;31196:15;31223:180;31271:77;31268:1;31261:88;31368:4;31365:1;31358:15;31392:4;31389:1;31382:15;31409:180;31457:77;31454:1;31447:88;31554:4;31551:1;31544:15;31578:4;31575:1;31568:15;31595:102;31636:6;31687:2;31683:7;31678:2;31671:5;31667:14;31663:28;31653:38;;31643:54;;;:::o;31703:173::-;31843:25;31839:1;31831:6;31827:14;31820:49;31809:67;:::o;31882:237::-;32022:34;32018:1;32010:6;32006:14;31999:58;32091:20;32086:2;32078:6;32074:15;32067:45;31988:131;:::o;32125:178::-;32265:30;32261:1;32253:6;32249:14;32242:54;32231:72;:::o;32309:223::-;32449:34;32445:1;32437:6;32433:14;32426:58;32518:6;32513:2;32505:6;32501:15;32494:31;32415:117;:::o;32538:175::-;32678:27;32674:1;32666:6;32662:14;32655:51;32644:69;:::o;32719:231::-;32859:34;32855:1;32847:6;32843:14;32836:58;32928:14;32923:2;32915:6;32911:15;32904:39;32825:125;:::o;32956:182::-;33096:34;33092:1;33084:6;33080:14;33073:58;33062:76;:::o;33144:243::-;33284:34;33280:1;33272:6;33268:14;33261:58;33353:26;33348:2;33340:6;33336:15;33329:51;33250:137;:::o;33393:229::-;33533:34;33529:1;33521:6;33517:14;33510:58;33602:12;33597:2;33589:6;33585:15;33578:37;33499:123;:::o;33628:228::-;33768:34;33764:1;33756:6;33752:14;33745:58;33837:11;33832:2;33824:6;33820:15;33813:36;33734:122;:::o;33862:182::-;34002:34;33998:1;33990:6;33986:14;33979:58;33968:76;:::o;34050:231::-;34190:34;34186:1;34178:6;34174:14;34167:58;34259:14;34254:2;34246:6;34242:15;34235:39;34156:125;:::o;34287:228::-;34427:34;34423:1;34415:6;34411:14;34404:58;34496:11;34491:2;34483:6;34479:15;34472:36;34393:122;:::o;34521:234::-;34661:34;34657:1;34649:6;34645:14;34638:58;34730:17;34725:2;34717:6;34713:15;34706:42;34627:128;:::o;34761:220::-;34901:34;34897:1;34889:6;34885:14;34878:58;34970:3;34965:2;34957:6;34953:15;34946:28;34867:114;:::o;34987:::-;35093:8;:::o;35107:236::-;35247:34;35243:1;35235:6;35231:14;35224:58;35316:19;35311:2;35303:6;35299:15;35292:44;35213:130;:::o;35349:232::-;35489:34;35485:1;35477:6;35473:14;35466:58;35558:15;35553:2;35545:6;35541:15;35534:40;35455:126;:::o;35587:122::-;35660:24;35678:5;35660:24;:::i;:::-;35653:5;35650:35;35640:2;;35699:1;35696;35689:12;35640:2;35630:79;:::o;35715:116::-;35785:21;35800:5;35785:21;:::i;:::-;35778:5;35775:32;35765:2;;35821:1;35818;35811:12;35765:2;35755:76;:::o;35837:120::-;35909:23;35926:5;35909:23;:::i;:::-;35902:5;35899:34;35889:2;;35947:1;35944;35937:12;35889:2;35879:78;:::o;35963:122::-;36036:24;36054:5;36036:24;:::i;:::-;36029:5;36026:35;36016:2;;36075:1;36072;36065:12;36016:2;36006:79;:::o
Swarm Source
ipfs://c31d33a21bffafbd49484a434b6d5cfd9d1ad85fbea12cdf78361ede28c7d6a9
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.