ERC-721
Overview
Max Total Supply
0
Holders
1
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FantomMangaTest
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-12-05 */ pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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.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/FantomMangaTest.sol pragma solidity ^0.8.1; contract FantomMangaTest is ERC721, Ownable { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Base URI string private _baseURIextended; constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {} function setBaseURI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } function mint( address _to, uint256 _tokenId, string memory tokenURI_ ) external onlyOwner() { _mint(_to, _tokenId); _setTokenURI(_tokenId, tokenURI_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI_","type":"string"}],"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":"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":"baseURI_","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620034b2380380620034b28339818101604052810190620000379190620003b0565b818181600090805190602001906200005192919062000163565b5080600190805190602001906200006a92919062000163565b5050506200008d620000816200009560201b60201c565b6200009d60201b60201c565b50506200049a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001719062000464565b90600052602060002090601f016020900481019282620001955760008555620001e1565b82601f10620001b057805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e0578251825591602001919060010190620001c3565b5b509050620001f09190620001f4565b5090565b5b808211156200020f576000816000905550600101620001f5565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200027c8262000231565b810181811067ffffffffffffffff821117156200029e576200029d62000242565b5b80604052505050565b6000620002b362000213565b9050620002c1828262000271565b919050565b600067ffffffffffffffff821115620002e457620002e362000242565b5b620002ef8262000231565b9050602081019050919050565b60005b838110156200031c578082015181840152602081019050620002ff565b838111156200032c576000848401525b50505050565b6000620003496200034384620002c6565b620002a7565b9050828152602081018484840111156200036857620003676200022c565b5b62000375848285620002fc565b509392505050565b600082601f83011262000395576200039462000227565b5b8151620003a784826020860162000332565b91505092915050565b60008060408385031215620003ca57620003c96200021d565b5b600083015167ffffffffffffffff811115620003eb57620003ea62000222565b5b620003f9858286016200037d565b925050602083015167ffffffffffffffff8111156200041d576200041c62000222565b5b6200042b858286016200037d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200047d57607f821691505b6020821081141562000494576200049362000435565b5b50919050565b61300880620004aa6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102cb578063c87b56dd146102e7578063d3fc986414610317578063e985e9c514610333578063f2fde38b1461036357610116565b8063715018a6146102695780638da5cb5b1461027357806395d89b4114610291578063a22cb465146102af57610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d157806355f804b3146101ed5780636352211e1461020957806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611ca2565b61037f565b6040516101429190611cea565b60405180910390f35b610153610461565b6040516101609190611d9e565b60405180910390f35b610183600480360381019061017e9190611df6565b6104f3565b6040516101909190611e64565b60405180910390f35b6101b360048036038101906101ae9190611eab565b610578565b005b6101cf60048036038101906101ca9190611eeb565b610690565b005b6101eb60048036038101906101e69190611eeb565b6106f0565b005b61020760048036038101906102029190612073565b610710565b005b610223600480360381019061021e9190611df6565b6107a6565b6040516102309190611e64565b60405180910390f35b610253600480360381019061024e91906120bc565b610858565b60405161026091906120f8565b60405180910390f35b610271610910565b005b61027b610998565b6040516102889190611e64565b60405180910390f35b6102996109c2565b6040516102a69190611d9e565b60405180910390f35b6102c960048036038101906102c4919061213f565b610a54565b005b6102e560048036038101906102e09190612220565b610bd5565b005b61030160048036038101906102fc9190611df6565b610c37565b60405161030e9190611d9e565b60405180910390f35b610331600480360381019061032c91906122a3565b610daa565b005b61034d60048036038101906103489190612312565b610e3f565b60405161035a9190611cea565b60405180910390f35b61037d600480360381019061037891906120bc565b610ed3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045a575061045982610fcb565b5b9050919050565b60606000805461047090612381565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612381565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82611035565b61053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053490612425565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610583826107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb906124b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106136110a1565b73ffffffffffffffffffffffffffffffffffffffff16148061064257506106418161063c6110a1565b610e3f565b5b610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067890612549565b60405180910390fd5b61068b83836110a9565b505050565b6106a161069b6110a1565b82611162565b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d7906125db565b60405180910390fd5b6106eb838383611240565b505050565b61070b83838360405180602001604052806000815250610bd5565b505050565b6107186110a1565b73ffffffffffffffffffffffffffffffffffffffff16610736610998565b73ffffffffffffffffffffffffffffffffffffffff161461078c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078390612647565b60405180910390fd5b80600890805190602001906107a2929190611b93565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906126d9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c09061276b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109186110a1565b73ffffffffffffffffffffffffffffffffffffffff16610936610998565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612647565b60405180910390fd5b610996600061149c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109d190612381565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd90612381565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b610a5c6110a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac1906127d7565b60405180910390fd5b8060056000610ad76110a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b846110a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610bc99190611cea565b60405180910390a35050565b610be6610be06110a1565b83611162565b610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906125db565b60405180910390fd5b610c3184848484611562565b50505050565b6060610c4282611035565b610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890612869565b60405180910390fd5b6000600760008481526020019081526020016000208054610ca190612381565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612381565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b505050505090506000610d2b6115be565b9050600081511415610d41578192505050610da5565b600082511115610d76578082604051602001610d5e9291906128c5565b60405160208183030381529060405292505050610da5565b80610d8085611650565b604051602001610d919291906128c5565b604051602081830303815290604052925050505b919050565b610db26110a1565b73ffffffffffffffffffffffffffffffffffffffff16610dd0610998565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90612647565b60405180910390fd5b610e3083836117b1565b610e3a828261197f565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610edb6110a1565b73ffffffffffffffffffffffffffffffffffffffff16610ef9610998565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612647565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb69061295b565b60405180910390fd5b610fc88161149c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661111c836107a6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061116d82611035565b6111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906129ed565b60405180910390fd5b60006111b7836107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061122657508373ffffffffffffffffffffffffffffffffffffffff1661120e846104f3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061123757506112368185610e3f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611260826107a6565b73ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90612a7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90612b11565b60405180910390fd5b6113318383836119f3565b61133c6000826110a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138c9190612b60565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e39190612b94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61156d848484611240565b611579848484846119f8565b6115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90612c5c565b60405180910390fd5b50505050565b6060600880546115cd90612381565b80601f01602080910402602001604051908101604052809291908181526020018280546115f990612381565b80156116465780601f1061161b57610100808354040283529160200191611646565b820191906000526020600020905b81548152906001019060200180831161162957829003601f168201915b5050505050905090565b60606000821415611698576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117ac565b600082905060005b600082146116ca5780806116b390612c7c565b915050600a826116c39190612cf4565b91506116a0565b60008167ffffffffffffffff8111156116e6576116e5611f48565b5b6040519080825280601f01601f1916602001820160405280156117185781602001600182028036833780820191505090505b5090505b600085146117a5576001826117319190612b60565b9150600a856117409190612d25565b603061174c9190612b94565b60f81b81838151811061176257611761612d56565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561179e9190612cf4565b945061171c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890612dd1565b60405180910390fd5b61182a81611035565b1561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190612e3d565b60405180910390fd5b611876600083836119f3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c69190612b94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61198882611035565b6119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612ecf565b60405180910390fd5b806007600084815260200190815260200160002090805190602001906119ee929190611b93565b505050565b505050565b6000611a198473ffffffffffffffffffffffffffffffffffffffff16611b80565b15611b73578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a426110a1565b8786866040518563ffffffff1660e01b8152600401611a649493929190612f44565b6020604051808303816000875af1925050508015611aa057506040513d601f19601f82011682018060405250810190611a9d9190612fa5565b60015b611b23573d8060008114611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b50600081511415611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b78565b600190505b949350505050565b600080823b905060008111915050919050565b828054611b9f90612381565b90600052602060002090601f016020900481019282611bc15760008555611c08565b82601f10611bda57805160ff1916838001178555611c08565b82800160010185558215611c08579182015b82811115611c07578251825591602001919060010190611bec565b5b509050611c159190611c19565b5090565b5b80821115611c32576000816000905550600101611c1a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c7f81611c4a565b8114611c8a57600080fd5b50565b600081359050611c9c81611c76565b92915050565b600060208284031215611cb857611cb7611c40565b5b6000611cc684828501611c8d565b91505092915050565b60008115159050919050565b611ce481611ccf565b82525050565b6000602082019050611cff6000830184611cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d3f578082015181840152602081019050611d24565b83811115611d4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d7082611d05565b611d7a8185611d10565b9350611d8a818560208601611d21565b611d9381611d54565b840191505092915050565b60006020820190508181036000830152611db88184611d65565b905092915050565b6000819050919050565b611dd381611dc0565b8114611dde57600080fd5b50565b600081359050611df081611dca565b92915050565b600060208284031215611e0c57611e0b611c40565b5b6000611e1a84828501611de1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e4e82611e23565b9050919050565b611e5e81611e43565b82525050565b6000602082019050611e796000830184611e55565b92915050565b611e8881611e43565b8114611e9357600080fd5b50565b600081359050611ea581611e7f565b92915050565b60008060408385031215611ec257611ec1611c40565b5b6000611ed085828601611e96565b9250506020611ee185828601611de1565b9150509250929050565b600080600060608486031215611f0457611f03611c40565b5b6000611f1286828701611e96565b9350506020611f2386828701611e96565b9250506040611f3486828701611de1565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f8082611d54565b810181811067ffffffffffffffff82111715611f9f57611f9e611f48565b5b80604052505050565b6000611fb2611c36565b9050611fbe8282611f77565b919050565b600067ffffffffffffffff821115611fde57611fdd611f48565b5b611fe782611d54565b9050602081019050919050565b82818337600083830152505050565b600061201661201184611fc3565b611fa8565b90508281526020810184848401111561203257612031611f43565b5b61203d848285611ff4565b509392505050565b600082601f83011261205a57612059611f3e565b5b813561206a848260208601612003565b91505092915050565b60006020828403121561208957612088611c40565b5b600082013567ffffffffffffffff8111156120a7576120a6611c45565b5b6120b384828501612045565b91505092915050565b6000602082840312156120d2576120d1611c40565b5b60006120e084828501611e96565b91505092915050565b6120f281611dc0565b82525050565b600060208201905061210d60008301846120e9565b92915050565b61211c81611ccf565b811461212757600080fd5b50565b60008135905061213981612113565b92915050565b6000806040838503121561215657612155611c40565b5b600061216485828601611e96565b92505060206121758582860161212a565b9150509250929050565b600067ffffffffffffffff82111561219a57612199611f48565b5b6121a382611d54565b9050602081019050919050565b60006121c36121be8461217f565b611fa8565b9050828152602081018484840111156121df576121de611f43565b5b6121ea848285611ff4565b509392505050565b600082601f83011261220757612206611f3e565b5b81356122178482602086016121b0565b91505092915050565b6000806000806080858703121561223a57612239611c40565b5b600061224887828801611e96565b945050602061225987828801611e96565b935050604061226a87828801611de1565b925050606085013567ffffffffffffffff81111561228b5761228a611c45565b5b612297878288016121f2565b91505092959194509250565b6000806000606084860312156122bc576122bb611c40565b5b60006122ca86828701611e96565b93505060206122db86828701611de1565b925050604084013567ffffffffffffffff8111156122fc576122fb611c45565b5b61230886828701612045565b9150509250925092565b6000806040838503121561232957612328611c40565b5b600061233785828601611e96565b925050602061234885828601611e96565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061239957607f821691505b602082108114156123ad576123ac612352565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061240f602c83611d10565b915061241a826123b3565b604082019050919050565b6000602082019050818103600083015261243e81612402565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006124a1602183611d10565b91506124ac82612445565b604082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612533603883611d10565b915061253e826124d7565b604082019050919050565b6000602082019050818103600083015261256281612526565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006125c5603183611d10565b91506125d082612569565b604082019050919050565b600060208201905081810360008301526125f4816125b8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612631602083611d10565b915061263c826125fb565b602082019050919050565b6000602082019050818103600083015261266081612624565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006126c3602983611d10565b91506126ce82612667565b604082019050919050565b600060208201905081810360008301526126f2816126b6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612755602a83611d10565b9150612760826126f9565b604082019050919050565b6000602082019050818103600083015261278481612748565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006127c1601983611d10565b91506127cc8261278b565b602082019050919050565b600060208201905081810360008301526127f0816127b4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612853602f83611d10565b915061285e826127f7565b604082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b600081905092915050565b600061289f82611d05565b6128a98185612889565b93506128b9818560208601611d21565b80840191505092915050565b60006128d18285612894565b91506128dd8284612894565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612945602683611d10565b9150612950826128e9565b604082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129d7602c83611d10565b91506129e28261297b565b604082019050919050565b60006020820190508181036000830152612a06816129ca565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612a69602983611d10565b9150612a7482612a0d565b604082019050919050565b60006020820190508181036000830152612a9881612a5c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612afb602483611d10565b9150612b0682612a9f565b604082019050919050565b60006020820190508181036000830152612b2a81612aee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b6b82611dc0565b9150612b7683611dc0565b925082821015612b8957612b88612b31565b5b828203905092915050565b6000612b9f82611dc0565b9150612baa83611dc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bdf57612bde612b31565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612c46603283611d10565b9150612c5182612bea565b604082019050919050565b60006020820190508181036000830152612c7581612c39565b9050919050565b6000612c8782611dc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cba57612cb9612b31565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cff82611dc0565b9150612d0a83611dc0565b925082612d1a57612d19612cc5565b5b828204905092915050565b6000612d3082611dc0565b9150612d3b83611dc0565b925082612d4b57612d4a612cc5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612dbb602083611d10565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612e27601c83611d10565b9150612e3282612df1565b602082019050919050565b60006020820190508181036000830152612e5681612e1a565b9050919050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612eb9602c83611d10565b9150612ec482612e5d565b604082019050919050565b60006020820190508181036000830152612ee881612eac565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612f1682612eef565b612f208185612efa565b9350612f30818560208601611d21565b612f3981611d54565b840191505092915050565b6000608082019050612f596000830187611e55565b612f666020830186611e55565b612f7360408301856120e9565b8181036060830152612f858184612f0b565b905095945050505050565b600081519050612f9f81611c76565b92915050565b600060208284031215612fbb57612fba611c40565b5b6000612fc984828501612f90565b9150509291505056fea26469706673582212204811737bc707af8d0daf1970700fa7df4864e3d0d88d717e931f5277fe642afb64736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102cb578063c87b56dd146102e7578063d3fc986414610317578063e985e9c514610333578063f2fde38b1461036357610116565b8063715018a6146102695780638da5cb5b1461027357806395d89b4114610291578063a22cb465146102af57610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d157806355f804b3146101ed5780636352211e1461020957806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611ca2565b61037f565b6040516101429190611cea565b60405180910390f35b610153610461565b6040516101609190611d9e565b60405180910390f35b610183600480360381019061017e9190611df6565b6104f3565b6040516101909190611e64565b60405180910390f35b6101b360048036038101906101ae9190611eab565b610578565b005b6101cf60048036038101906101ca9190611eeb565b610690565b005b6101eb60048036038101906101e69190611eeb565b6106f0565b005b61020760048036038101906102029190612073565b610710565b005b610223600480360381019061021e9190611df6565b6107a6565b6040516102309190611e64565b60405180910390f35b610253600480360381019061024e91906120bc565b610858565b60405161026091906120f8565b60405180910390f35b610271610910565b005b61027b610998565b6040516102889190611e64565b60405180910390f35b6102996109c2565b6040516102a69190611d9e565b60405180910390f35b6102c960048036038101906102c4919061213f565b610a54565b005b6102e560048036038101906102e09190612220565b610bd5565b005b61030160048036038101906102fc9190611df6565b610c37565b60405161030e9190611d9e565b60405180910390f35b610331600480360381019061032c91906122a3565b610daa565b005b61034d60048036038101906103489190612312565b610e3f565b60405161035a9190611cea565b60405180910390f35b61037d600480360381019061037891906120bc565b610ed3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045a575061045982610fcb565b5b9050919050565b60606000805461047090612381565b80601f016020809104026020016040519081016040528092919081815260200182805461049c90612381565b80156104e95780601f106104be576101008083540402835291602001916104e9565b820191906000526020600020905b8154815290600101906020018083116104cc57829003601f168201915b5050505050905090565b60006104fe82611035565b61053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053490612425565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610583826107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105eb906124b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106136110a1565b73ffffffffffffffffffffffffffffffffffffffff16148061064257506106418161063c6110a1565b610e3f565b5b610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067890612549565b60405180910390fd5b61068b83836110a9565b505050565b6106a161069b6110a1565b82611162565b6106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d7906125db565b60405180910390fd5b6106eb838383611240565b505050565b61070b83838360405180602001604052806000815250610bd5565b505050565b6107186110a1565b73ffffffffffffffffffffffffffffffffffffffff16610736610998565b73ffffffffffffffffffffffffffffffffffffffff161461078c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078390612647565b60405180910390fd5b80600890805190602001906107a2929190611b93565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906126d9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c09061276b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109186110a1565b73ffffffffffffffffffffffffffffffffffffffff16610936610998565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612647565b60405180910390fd5b610996600061149c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546109d190612381565b80601f01602080910402602001604051908101604052809291908181526020018280546109fd90612381565b8015610a4a5780601f10610a1f57610100808354040283529160200191610a4a565b820191906000526020600020905b815481529060010190602001808311610a2d57829003601f168201915b5050505050905090565b610a5c6110a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac1906127d7565b60405180910390fd5b8060056000610ad76110a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b846110a1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610bc99190611cea565b60405180910390a35050565b610be6610be06110a1565b83611162565b610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906125db565b60405180910390fd5b610c3184848484611562565b50505050565b6060610c4282611035565b610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890612869565b60405180910390fd5b6000600760008481526020019081526020016000208054610ca190612381565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612381565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b505050505090506000610d2b6115be565b9050600081511415610d41578192505050610da5565b600082511115610d76578082604051602001610d5e9291906128c5565b60405160208183030381529060405292505050610da5565b80610d8085611650565b604051602001610d919291906128c5565b604051602081830303815290604052925050505b919050565b610db26110a1565b73ffffffffffffffffffffffffffffffffffffffff16610dd0610998565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90612647565b60405180910390fd5b610e3083836117b1565b610e3a828261197f565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610edb6110a1565b73ffffffffffffffffffffffffffffffffffffffff16610ef9610998565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612647565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb69061295b565b60405180910390fd5b610fc88161149c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661111c836107a6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061116d82611035565b6111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906129ed565b60405180910390fd5b60006111b7836107a6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061122657508373ffffffffffffffffffffffffffffffffffffffff1661120e846104f3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061123757506112368185610e3f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611260826107a6565b73ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90612a7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90612b11565b60405180910390fd5b6113318383836119f3565b61133c6000826110a9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138c9190612b60565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e39190612b94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61156d848484611240565b611579848484846119f8565b6115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90612c5c565b60405180910390fd5b50505050565b6060600880546115cd90612381565b80601f01602080910402602001604051908101604052809291908181526020018280546115f990612381565b80156116465780601f1061161b57610100808354040283529160200191611646565b820191906000526020600020905b81548152906001019060200180831161162957829003601f168201915b5050505050905090565b60606000821415611698576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117ac565b600082905060005b600082146116ca5780806116b390612c7c565b915050600a826116c39190612cf4565b91506116a0565b60008167ffffffffffffffff8111156116e6576116e5611f48565b5b6040519080825280601f01601f1916602001820160405280156117185781602001600182028036833780820191505090505b5090505b600085146117a5576001826117319190612b60565b9150600a856117409190612d25565b603061174c9190612b94565b60f81b81838151811061176257611761612d56565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561179e9190612cf4565b945061171c565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890612dd1565b60405180910390fd5b61182a81611035565b1561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190612e3d565b60405180910390fd5b611876600083836119f3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c69190612b94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61198882611035565b6119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612ecf565b60405180910390fd5b806007600084815260200190815260200160002090805190602001906119ee929190611b93565b505050565b505050565b6000611a198473ffffffffffffffffffffffffffffffffffffffff16611b80565b15611b73578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a426110a1565b8786866040518563ffffffff1660e01b8152600401611a649493929190612f44565b6020604051808303816000875af1925050508015611aa057506040513d601f19601f82011682018060405250810190611a9d9190612fa5565b60015b611b23573d8060008114611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b50600081511415611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b78565b600190505b949350505050565b600080823b905060008111915050919050565b828054611b9f90612381565b90600052602060002090601f016020900481019282611bc15760008555611c08565b82601f10611bda57805160ff1916838001178555611c08565b82800160010185558215611c08579182015b82811115611c07578251825591602001919060010190611bec565b5b509050611c159190611c19565b5090565b5b80821115611c32576000816000905550600101611c1a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c7f81611c4a565b8114611c8a57600080fd5b50565b600081359050611c9c81611c76565b92915050565b600060208284031215611cb857611cb7611c40565b5b6000611cc684828501611c8d565b91505092915050565b60008115159050919050565b611ce481611ccf565b82525050565b6000602082019050611cff6000830184611cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d3f578082015181840152602081019050611d24565b83811115611d4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d7082611d05565b611d7a8185611d10565b9350611d8a818560208601611d21565b611d9381611d54565b840191505092915050565b60006020820190508181036000830152611db88184611d65565b905092915050565b6000819050919050565b611dd381611dc0565b8114611dde57600080fd5b50565b600081359050611df081611dca565b92915050565b600060208284031215611e0c57611e0b611c40565b5b6000611e1a84828501611de1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e4e82611e23565b9050919050565b611e5e81611e43565b82525050565b6000602082019050611e796000830184611e55565b92915050565b611e8881611e43565b8114611e9357600080fd5b50565b600081359050611ea581611e7f565b92915050565b60008060408385031215611ec257611ec1611c40565b5b6000611ed085828601611e96565b9250506020611ee185828601611de1565b9150509250929050565b600080600060608486031215611f0457611f03611c40565b5b6000611f1286828701611e96565b9350506020611f2386828701611e96565b9250506040611f3486828701611de1565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f8082611d54565b810181811067ffffffffffffffff82111715611f9f57611f9e611f48565b5b80604052505050565b6000611fb2611c36565b9050611fbe8282611f77565b919050565b600067ffffffffffffffff821115611fde57611fdd611f48565b5b611fe782611d54565b9050602081019050919050565b82818337600083830152505050565b600061201661201184611fc3565b611fa8565b90508281526020810184848401111561203257612031611f43565b5b61203d848285611ff4565b509392505050565b600082601f83011261205a57612059611f3e565b5b813561206a848260208601612003565b91505092915050565b60006020828403121561208957612088611c40565b5b600082013567ffffffffffffffff8111156120a7576120a6611c45565b5b6120b384828501612045565b91505092915050565b6000602082840312156120d2576120d1611c40565b5b60006120e084828501611e96565b91505092915050565b6120f281611dc0565b82525050565b600060208201905061210d60008301846120e9565b92915050565b61211c81611ccf565b811461212757600080fd5b50565b60008135905061213981612113565b92915050565b6000806040838503121561215657612155611c40565b5b600061216485828601611e96565b92505060206121758582860161212a565b9150509250929050565b600067ffffffffffffffff82111561219a57612199611f48565b5b6121a382611d54565b9050602081019050919050565b60006121c36121be8461217f565b611fa8565b9050828152602081018484840111156121df576121de611f43565b5b6121ea848285611ff4565b509392505050565b600082601f83011261220757612206611f3e565b5b81356122178482602086016121b0565b91505092915050565b6000806000806080858703121561223a57612239611c40565b5b600061224887828801611e96565b945050602061225987828801611e96565b935050604061226a87828801611de1565b925050606085013567ffffffffffffffff81111561228b5761228a611c45565b5b612297878288016121f2565b91505092959194509250565b6000806000606084860312156122bc576122bb611c40565b5b60006122ca86828701611e96565b93505060206122db86828701611de1565b925050604084013567ffffffffffffffff8111156122fc576122fb611c45565b5b61230886828701612045565b9150509250925092565b6000806040838503121561232957612328611c40565b5b600061233785828601611e96565b925050602061234885828601611e96565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061239957607f821691505b602082108114156123ad576123ac612352565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061240f602c83611d10565b915061241a826123b3565b604082019050919050565b6000602082019050818103600083015261243e81612402565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006124a1602183611d10565b91506124ac82612445565b604082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612533603883611d10565b915061253e826124d7565b604082019050919050565b6000602082019050818103600083015261256281612526565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006125c5603183611d10565b91506125d082612569565b604082019050919050565b600060208201905081810360008301526125f4816125b8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612631602083611d10565b915061263c826125fb565b602082019050919050565b6000602082019050818103600083015261266081612624565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006126c3602983611d10565b91506126ce82612667565b604082019050919050565b600060208201905081810360008301526126f2816126b6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612755602a83611d10565b9150612760826126f9565b604082019050919050565b6000602082019050818103600083015261278481612748565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006127c1601983611d10565b91506127cc8261278b565b602082019050919050565b600060208201905081810360008301526127f0816127b4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612853602f83611d10565b915061285e826127f7565b604082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b600081905092915050565b600061289f82611d05565b6128a98185612889565b93506128b9818560208601611d21565b80840191505092915050565b60006128d18285612894565b91506128dd8284612894565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612945602683611d10565b9150612950826128e9565b604082019050919050565b6000602082019050818103600083015261297481612938565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006129d7602c83611d10565b91506129e28261297b565b604082019050919050565b60006020820190508181036000830152612a06816129ca565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000612a69602983611d10565b9150612a7482612a0d565b604082019050919050565b60006020820190508181036000830152612a9881612a5c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612afb602483611d10565b9150612b0682612a9f565b604082019050919050565b60006020820190508181036000830152612b2a81612aee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b6b82611dc0565b9150612b7683611dc0565b925082821015612b8957612b88612b31565b5b828203905092915050565b6000612b9f82611dc0565b9150612baa83611dc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bdf57612bde612b31565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612c46603283611d10565b9150612c5182612bea565b604082019050919050565b60006020820190508181036000830152612c7581612c39565b9050919050565b6000612c8782611dc0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cba57612cb9612b31565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612cff82611dc0565b9150612d0a83611dc0565b925082612d1a57612d19612cc5565b5b828204905092915050565b6000612d3082611dc0565b9150612d3b83611dc0565b925082612d4b57612d4a612cc5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000612dbb602083611d10565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612e27601c83611d10565b9150612e3282612df1565b602082019050919050565b60006020820190508181036000830152612e5681612e1a565b9050919050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612eb9602c83611d10565b9150612ec482612e5d565b604082019050919050565b60006020820190508181036000830152612ee881612eac565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612f1682612eef565b612f208185612efa565b9350612f30818560208601611d21565b612f3981611d54565b840191505092915050565b6000608082019050612f596000830187611e55565b612f666020830186611e55565b612f7360408301856120e9565b8181036060830152612f858184612f0b565b905095945050505050565b600081519050612f9f81611c76565b92915050565b600060208284031215612fbb57612fba611c40565b5b6000612fc984828501612f90565b9150509291505056fea26469706673582212204811737bc707af8d0daf1970700fa7df4864e3d0d88d717e931f5277fe642afb64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string):
Arg [1] : _symbol (string):
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
34576:2061:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22374:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23319:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24878:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24401:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25768:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26178:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34980:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23013:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22743:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2375:94;;;:::i;:::-;;1724:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23488:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25171:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26434:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35511:861;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36394:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25537:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2624:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22374:305;22476:4;22528:25;22513:40;;;:11;:40;;;;:105;;;;22585:33;22570:48;;;:11;:48;;;;22513:105;:158;;;;22635:36;22659:11;22635:23;:36::i;:::-;22513:158;22493:178;;22374:305;;;:::o;23319:100::-;23373:13;23406:5;23399:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23319:100;:::o;24878:221::-;24954:7;24982:16;24990:7;24982;:16::i;:::-;24974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25067:15;:24;25083:7;25067:24;;;;;;;;;;;;;;;;;;;;;25060:31;;24878:221;;;:::o;24401:411::-;24482:13;24498:23;24513:7;24498:14;:23::i;:::-;24482:39;;24546:5;24540:11;;:2;:11;;;;24532:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24640:5;24624:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24649:37;24666:5;24673:12;:10;:12::i;:::-;24649:16;:37::i;:::-;24624:62;24602:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24783:21;24792:2;24796:7;24783:8;:21::i;:::-;24471:341;24401:411;;:::o;25768:339::-;25963:41;25982:12;:10;:12::i;:::-;25996:7;25963:18;:41::i;:::-;25955:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26071:28;26081:4;26087:2;26091:7;26071:9;:28::i;:::-;25768:339;;;:::o;26178:185::-;26316:39;26333:4;26339:2;26343:7;26316:39;;;;;;;;;;;;:16;:39::i;:::-;26178:185;;;:::o;34980:119::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:8:::1;35060:16;:27;;;;;;;;;;;;:::i;:::-;;34980:119:::0;:::o;23013:239::-;23085:7;23105:13;23121:7;:16;23129:7;23121:16;;;;;;;;;;;;;;;;;;;;;23105:32;;23173:1;23156:19;;:5;:19;;;;23148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23239:5;23232:12;;;23013:239;;;:::o;22743:208::-;22815:7;22860:1;22843:19;;:5;:19;;;;22835:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22927:9;:16;22937:5;22927:16;;;;;;;;;;;;;;;;22920:23;;22743:208;;;:::o;2375:94::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2440:21:::1;2458:1;2440:9;:21::i;:::-;2375:94::o:0;1724:87::-;1770:7;1797:6;;;;;;;;;;;1790:13;;1724:87;:::o;23488:104::-;23544:13;23577:7;23570:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23488:104;:::o;25171:295::-;25286:12;:10;:12::i;:::-;25274:24;;:8;:24;;;;25266:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25386:8;25341:18;:32;25360:12;:10;:12::i;:::-;25341:32;;;;;;;;;;;;;;;:42;25374:8;25341:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25439:8;25410:48;;25425:12;:10;:12::i;:::-;25410:48;;;25449:8;25410:48;;;;;;:::i;:::-;;;;;;;;25171:295;;:::o;26434:328::-;26609:41;26628:12;:10;:12::i;:::-;26642:7;26609:18;:41::i;:::-;26601:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:39;26729:4;26735:2;26739:7;26748:5;26715:13;:39::i;:::-;26434:328;;;;:::o;35511:861::-;35584:13;35622:16;35630:7;35622;:16::i;:::-;35614:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35707:23;35733:10;:19;35744:7;35733:19;;;;;;;;;;;35707:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35767:18;35788:10;:8;:10::i;:::-;35767:31;;35916:1;35900:4;35894:18;:23;35890:80;;;35945:9;35938:16;;;;;;35890:80;36108:1;36088:9;36082:23;:27;36078:116;;;36161:4;36167:9;36144:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36130:48;;;;;;36078:116;36334:4;36340:18;:7;:16;:18::i;:::-;36317:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36303:57;;;;35511:861;;;;:::o;36394:236::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36550:20:::1;36556:3;36561:8;36550:5;:20::i;:::-;36585:33;36598:8;36608:9;36585:12;:33::i;:::-;36394:236:::0;;;:::o;25537:164::-;25634:4;25658:18;:25;25677:5;25658:25;;;;;;;;;;;;;;;:35;25684:8;25658:35;;;;;;;;;;;;;;;;;;;;;;;;;25651:42;;25537:164;;;;:::o;2624:192::-;1955:12;:10;:12::i;:::-;1944:23;;:7;:5;:7::i;:::-;:23;;;1936:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2733:1:::1;2713:22;;:8;:22;;;;2705:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2789:19;2799:8;2789:9;:19::i;:::-;2624:192:::0;:::o;20847:157::-;20932:4;20971:25;20956:40;;;:11;:40;;;;20949:47;;20847:157;;;:::o;28272:127::-;28337:4;28389:1;28361:30;;:7;:16;28369:7;28361:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28354:37;;28272:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;32254:174::-;32356:2;32329:15;:24;32345:7;32329:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32412:7;32408:2;32374:46;;32383:23;32398:7;32383:14;:23::i;:::-;32374:46;;;;;;;;;;;;32254:174;;:::o;28566:348::-;28659:4;28684:16;28692:7;28684;:16::i;:::-;28676:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28760:13;28776:23;28791:7;28776:14;:23::i;:::-;28760:39;;28829:5;28818:16;;:7;:16;;;:51;;;;28862:7;28838:31;;:20;28850:7;28838:11;:20::i;:::-;:31;;;28818:51;:87;;;;28873:32;28890:5;28897:7;28873:16;:32::i;:::-;28818:87;28810:96;;;28566:348;;;;:::o;31558:578::-;31717:4;31690:31;;:23;31705:7;31690:14;:23::i;:::-;:31;;;31682:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31800:1;31786:16;;:2;:16;;;;31778:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31856:39;31877:4;31883:2;31887:7;31856:20;:39::i;:::-;31960:29;31977:1;31981:7;31960:8;:29::i;:::-;32021:1;32002:9;:15;32012:4;32002:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32050:1;32033:9;:13;32043:2;32033:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32081:2;32062:7;:16;32070:7;32062:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32120:7;32116:2;32101:27;;32110:4;32101:27;;;;;;;;;;;;31558:578;;;:::o;2824:173::-;2880:16;2899:6;;;;;;;;;;;2880:25;;2925:8;2916:6;;:17;;;;;;;;;;;;;;;;;;2980:8;2949:40;;2970:8;2949:40;;;;;;;;;;;;2869:128;2824:173;:::o;27644:315::-;27801:28;27811:4;27817:2;27821:7;27801:9;:28::i;:::-;27848:48;27871:4;27877:2;27881:7;27890:5;27848:22;:48::i;:::-;27840:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27644:315;;;;:::o;35366:125::-;35426:13;35463:16;35456:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35366:125;:::o;18359:723::-;18415:13;18645:1;18636:5;:10;18632:53;;;18663:10;;;;;;;;;;;;;;;;;;;;;18632:53;18695:12;18710:5;18695:20;;18726:14;18751:78;18766:1;18758:4;:9;18751:78;;18784:8;;;;;:::i;:::-;;;;18815:2;18807:10;;;;;:::i;:::-;;;18751:78;;;18839:19;18871:6;18861:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18839:39;;18889:154;18905:1;18896:5;:10;18889:154;;18933:1;18923:11;;;;;:::i;:::-;;;19000:2;18992:5;:10;;;;:::i;:::-;18979:2;:24;;;;:::i;:::-;18966:39;;18949:6;18956;18949:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19029:2;19020:11;;;;;:::i;:::-;;;18889:154;;;19067:6;19053:21;;;;;18359:723;;;;:::o;30250:382::-;30344:1;30330:16;;:2;:16;;;;30322:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:16;30411:7;30403;:16::i;:::-;30402:17;30394:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30465:45;30494:1;30498:2;30502:7;30465:20;:45::i;:::-;30540:1;30523:9;:13;30533:2;30523:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30571:2;30552:7;:16;30560:7;30552:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30616:7;30612:2;30591:33;;30608:1;30591:33;;;;;;;;;;;;30250:382;;:::o;35119:227::-;35223:16;35231:7;35223;:16::i;:::-;35215:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35325:9;35303:10;:19;35314:7;35303:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;35119:227;;:::o;34364:126::-;;;;:::o;32993:799::-;33148:4;33169:15;:2;:13;;;:15::i;:::-;33165:620;;;33221:2;33205:36;;;33242:12;:10;:12::i;:::-;33256:4;33262:7;33271:5;33205:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33201:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33464:1;33447:6;:13;:18;33443:272;;;33490:60;;;;;;;;;;:::i;:::-;;;;;;;;33443:272;33665:6;33659:13;33650:6;33646:2;33642:15;33635:38;33201:529;33338:41;;;33328:51;;;:6;:51;;;;33321:58;;;;;33165:620;33769:4;33762:11;;32993:799;;;;;;;:::o;10773:387::-;10833:4;11041:12;11108:7;11096:20;11088:28;;11151:1;11144:4;:8;11137:15;;;10773:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:117;5795:1;5792;5785:12;5809:180;5857:77;5854:1;5847:88;5954:4;5951:1;5944:15;5978:4;5975:1;5968:15;5995:281;6078:27;6100:4;6078:27;:::i;:::-;6070:6;6066:40;6208:6;6196:10;6193:22;6172:18;6160:10;6157:34;6154:62;6151:88;;;6219:18;;:::i;:::-;6151:88;6259:10;6255:2;6248:22;6038:238;5995:281;;:::o;6282:129::-;6316:6;6343:20;;:::i;:::-;6333:30;;6372:33;6400:4;6392:6;6372:33;:::i;:::-;6282:129;;;:::o;6417:308::-;6479:4;6569:18;6561:6;6558:30;6555:56;;;6591:18;;:::i;:::-;6555:56;6629:29;6651:6;6629:29;:::i;:::-;6621:37;;6713:4;6707;6703:15;6695:23;;6417:308;;;:::o;6731:154::-;6815:6;6810:3;6805;6792:30;6877:1;6868:6;6863:3;6859:16;6852:27;6731:154;;;:::o;6891:412::-;6969:5;6994:66;7010:49;7052:6;7010:49;:::i;:::-;6994:66;:::i;:::-;6985:75;;7083:6;7076:5;7069:21;7121:4;7114:5;7110:16;7159:3;7150:6;7145:3;7141:16;7138:25;7135:112;;;7166:79;;:::i;:::-;7135:112;7256:41;7290:6;7285:3;7280;7256:41;:::i;:::-;6975:328;6891:412;;;;;:::o;7323:340::-;7379:5;7428:3;7421:4;7413:6;7409:17;7405:27;7395:122;;7436:79;;:::i;:::-;7395:122;7553:6;7540:20;7578:79;7653:3;7645:6;7638:4;7630:6;7626:17;7578:79;:::i;:::-;7569:88;;7385:278;7323:340;;;;:::o;7669:509::-;7738:6;7787:2;7775:9;7766:7;7762:23;7758:32;7755:119;;;7793:79;;:::i;:::-;7755:119;7941:1;7930:9;7926:17;7913:31;7971:18;7963:6;7960:30;7957:117;;;7993:79;;:::i;:::-;7957:117;8098:63;8153:7;8144:6;8133:9;8129:22;8098:63;:::i;:::-;8088:73;;7884:287;7669:509;;;;:::o;8184:329::-;8243:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:119;;;8298:79;;:::i;:::-;8260:119;8418:1;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8389:117;8184:329;;;;:::o;8519:118::-;8606:24;8624:5;8606:24;:::i;:::-;8601:3;8594:37;8519:118;;:::o;8643:222::-;8736:4;8774:2;8763:9;8759:18;8751:26;;8787:71;8855:1;8844:9;8840:17;8831:6;8787:71;:::i;:::-;8643:222;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:799::-;11728:6;11736;11744;11793:2;11781:9;11772:7;11768:23;11764:32;11761:119;;;11799:79;;:::i;:::-;11761:119;11919:1;11944:53;11989:7;11980:6;11969:9;11965:22;11944:53;:::i;:::-;11934:63;;11890:117;12046:2;12072:53;12117:7;12108:6;12097:9;12093:22;12072:53;:::i;:::-;12062:63;;12017:118;12202:2;12191:9;12187:18;12174:32;12233:18;12225:6;12222:30;12219:117;;;12255:79;;:::i;:::-;12219:117;12360:63;12415:7;12406:6;12395:9;12391:22;12360:63;:::i;:::-;12350:73;;12145:288;11641:799;;;;;:::o;12446:474::-;12514:6;12522;12571:2;12559:9;12550:7;12546:23;12542:32;12539:119;;;12577:79;;:::i;:::-;12539:119;12697:1;12722:53;12767:7;12758:6;12747:9;12743:22;12722:53;:::i;:::-;12712:63;;12668:117;12824:2;12850:53;12895:7;12886:6;12875:9;12871:22;12850:53;:::i;:::-;12840:63;;12795:118;12446:474;;;;;:::o;12926:180::-;12974:77;12971:1;12964:88;13071:4;13068:1;13061:15;13095:4;13092:1;13085:15;13112:320;13156:6;13193:1;13187:4;13183:12;13173:22;;13240:1;13234:4;13230:12;13261:18;13251:81;;13317:4;13309:6;13305:17;13295:27;;13251:81;13379:2;13371:6;13368:14;13348:18;13345:38;13342:84;;;13398:18;;:::i;:::-;13342:84;13163:269;13112:320;;;:::o;13438:231::-;13578:34;13574:1;13566:6;13562:14;13555:58;13647:14;13642:2;13634:6;13630:15;13623:39;13438:231;:::o;13675:366::-;13817:3;13838:67;13902:2;13897:3;13838:67;:::i;:::-;13831:74;;13914:93;14003:3;13914:93;:::i;:::-;14032:2;14027:3;14023:12;14016:19;;13675:366;;;:::o;14047:419::-;14213:4;14251:2;14240:9;14236:18;14228:26;;14300:9;14294:4;14290:20;14286:1;14275:9;14271:17;14264:47;14328:131;14454:4;14328:131;:::i;:::-;14320:139;;14047:419;;;:::o;14472:220::-;14612:34;14608:1;14600:6;14596:14;14589:58;14681:3;14676:2;14668:6;14664:15;14657:28;14472:220;:::o;14698:366::-;14840:3;14861:67;14925:2;14920:3;14861:67;:::i;:::-;14854:74;;14937:93;15026:3;14937:93;:::i;:::-;15055:2;15050:3;15046:12;15039:19;;14698:366;;;:::o;15070:419::-;15236:4;15274:2;15263:9;15259:18;15251:26;;15323:9;15317:4;15313:20;15309:1;15298:9;15294:17;15287:47;15351:131;15477:4;15351:131;:::i;:::-;15343:139;;15070:419;;;:::o;15495:243::-;15635:34;15631:1;15623:6;15619:14;15612:58;15704:26;15699:2;15691:6;15687:15;15680:51;15495:243;:::o;15744:366::-;15886:3;15907:67;15971:2;15966:3;15907:67;:::i;:::-;15900:74;;15983:93;16072:3;15983:93;:::i;:::-;16101:2;16096:3;16092:12;16085:19;;15744:366;;;:::o;16116:419::-;16282:4;16320:2;16309:9;16305:18;16297:26;;16369:9;16363:4;16359:20;16355:1;16344:9;16340:17;16333:47;16397:131;16523:4;16397:131;:::i;:::-;16389:139;;16116:419;;;:::o;16541:236::-;16681:34;16677:1;16669:6;16665:14;16658:58;16750:19;16745:2;16737:6;16733:15;16726:44;16541:236;:::o;16783:366::-;16925:3;16946:67;17010:2;17005:3;16946:67;:::i;:::-;16939:74;;17022:93;17111:3;17022:93;:::i;:::-;17140:2;17135:3;17131:12;17124:19;;16783:366;;;:::o;17155:419::-;17321:4;17359:2;17348:9;17344:18;17336:26;;17408:9;17402:4;17398:20;17394:1;17383:9;17379:17;17372:47;17436:131;17562:4;17436:131;:::i;:::-;17428:139;;17155:419;;;:::o;17580:182::-;17720:34;17716:1;17708:6;17704:14;17697:58;17580:182;:::o;17768:366::-;17910:3;17931:67;17995:2;17990:3;17931:67;:::i;:::-;17924:74;;18007:93;18096:3;18007:93;:::i;:::-;18125:2;18120:3;18116:12;18109:19;;17768:366;;;:::o;18140:419::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18393:9;18387:4;18383:20;18379:1;18368:9;18364:17;18357:47;18421:131;18547:4;18421:131;:::i;:::-;18413:139;;18140:419;;;:::o;18565:228::-;18705:34;18701:1;18693:6;18689:14;18682:58;18774:11;18769:2;18761:6;18757:15;18750:36;18565:228;:::o;18799:366::-;18941:3;18962:67;19026:2;19021:3;18962:67;:::i;:::-;18955:74;;19038:93;19127:3;19038:93;:::i;:::-;19156:2;19151:3;19147:12;19140:19;;18799:366;;;:::o;19171:419::-;19337:4;19375:2;19364:9;19360:18;19352:26;;19424:9;19418:4;19414:20;19410:1;19399:9;19395:17;19388:47;19452:131;19578:4;19452:131;:::i;:::-;19444:139;;19171:419;;;:::o;19596:229::-;19736:34;19732:1;19724:6;19720:14;19713:58;19805:12;19800:2;19792:6;19788:15;19781:37;19596:229;:::o;19831:366::-;19973:3;19994:67;20058:2;20053:3;19994:67;:::i;:::-;19987:74;;20070:93;20159:3;20070:93;:::i;:::-;20188:2;20183:3;20179:12;20172:19;;19831:366;;;:::o;20203:419::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:175::-;20768:27;20764:1;20756:6;20752:14;20745:51;20628:175;:::o;20809:366::-;20951:3;20972:67;21036:2;21031:3;20972:67;:::i;:::-;20965:74;;21048:93;21137:3;21048:93;:::i;:::-;21166:2;21161:3;21157:12;21150:19;;20809:366;;;:::o;21181:419::-;21347:4;21385:2;21374:9;21370:18;21362:26;;21434:9;21428:4;21424:20;21420:1;21409:9;21405:17;21398:47;21462:131;21588:4;21462:131;:::i;:::-;21454:139;;21181:419;;;:::o;21606:234::-;21746:34;21742:1;21734:6;21730:14;21723:58;21815:17;21810:2;21802:6;21798:15;21791:42;21606:234;:::o;21846:366::-;21988:3;22009:67;22073:2;22068:3;22009:67;:::i;:::-;22002:74;;22085:93;22174:3;22085:93;:::i;:::-;22203:2;22198:3;22194:12;22187:19;;21846:366;;;:::o;22218:419::-;22384:4;22422:2;22411:9;22407:18;22399:26;;22471:9;22465:4;22461:20;22457:1;22446:9;22442:17;22435:47;22499:131;22625:4;22499:131;:::i;:::-;22491:139;;22218:419;;;:::o;22643:148::-;22745:11;22782:3;22767:18;;22643:148;;;;:::o;22797:377::-;22903:3;22931:39;22964:5;22931:39;:::i;:::-;22986:89;23068:6;23063:3;22986:89;:::i;:::-;22979:96;;23084:52;23129:6;23124:3;23117:4;23110:5;23106:16;23084:52;:::i;:::-;23161:6;23156:3;23152:16;23145:23;;22907:267;22797:377;;;;:::o;23180:435::-;23360:3;23382:95;23473:3;23464:6;23382:95;:::i;:::-;23375:102;;23494:95;23585:3;23576:6;23494:95;:::i;:::-;23487:102;;23606:3;23599:10;;23180:435;;;;;:::o;23621:225::-;23761:34;23757:1;23749:6;23745:14;23738:58;23830:8;23825:2;23817:6;23813:15;23806:33;23621:225;:::o;23852:366::-;23994:3;24015:67;24079:2;24074:3;24015:67;:::i;:::-;24008:74;;24091:93;24180:3;24091:93;:::i;:::-;24209:2;24204:3;24200:12;24193:19;;23852:366;;;:::o;24224:419::-;24390:4;24428:2;24417:9;24413:18;24405:26;;24477:9;24471:4;24467:20;24463:1;24452:9;24448:17;24441:47;24505:131;24631:4;24505:131;:::i;:::-;24497:139;;24224:419;;;:::o;24649:231::-;24789:34;24785:1;24777:6;24773:14;24766:58;24858:14;24853:2;24845:6;24841:15;24834:39;24649:231;:::o;24886:366::-;25028:3;25049:67;25113:2;25108:3;25049:67;:::i;:::-;25042:74;;25125:93;25214:3;25125:93;:::i;:::-;25243:2;25238:3;25234:12;25227:19;;24886:366;;;:::o;25258:419::-;25424:4;25462:2;25451:9;25447:18;25439:26;;25511:9;25505:4;25501:20;25497:1;25486:9;25482:17;25475:47;25539:131;25665:4;25539:131;:::i;:::-;25531:139;;25258:419;;;:::o;25683:228::-;25823:34;25819:1;25811:6;25807:14;25800:58;25892:11;25887:2;25879:6;25875:15;25868:36;25683:228;:::o;25917:366::-;26059:3;26080:67;26144:2;26139:3;26080:67;:::i;:::-;26073:74;;26156:93;26245:3;26156:93;:::i;:::-;26274:2;26269:3;26265:12;26258:19;;25917:366;;;:::o;26289:419::-;26455:4;26493:2;26482:9;26478:18;26470:26;;26542:9;26536:4;26532:20;26528:1;26517:9;26513:17;26506:47;26570:131;26696:4;26570:131;:::i;:::-;26562:139;;26289:419;;;:::o;26714:223::-;26854:34;26850:1;26842:6;26838:14;26831:58;26923:6;26918:2;26910:6;26906:15;26899:31;26714:223;:::o;26943:366::-;27085:3;27106:67;27170:2;27165:3;27106:67;:::i;:::-;27099:74;;27182:93;27271:3;27182:93;:::i;:::-;27300:2;27295:3;27291:12;27284:19;;26943:366;;;:::o;27315:419::-;27481:4;27519:2;27508:9;27504:18;27496:26;;27568:9;27562:4;27558:20;27554:1;27543:9;27539:17;27532:47;27596:131;27722:4;27596:131;:::i;:::-;27588:139;;27315:419;;;:::o;27740:180::-;27788:77;27785:1;27778:88;27885:4;27882:1;27875:15;27909:4;27906:1;27899:15;27926:191;27966:4;27986:20;28004:1;27986:20;:::i;:::-;27981:25;;28020:20;28038:1;28020:20;:::i;:::-;28015:25;;28059:1;28056;28053:8;28050:34;;;28064:18;;:::i;:::-;28050:34;28109:1;28106;28102:9;28094:17;;27926:191;;;;:::o;28123:305::-;28163:3;28182:20;28200:1;28182:20;:::i;:::-;28177:25;;28216:20;28234:1;28216:20;:::i;:::-;28211:25;;28370:1;28302:66;28298:74;28295:1;28292:81;28289:107;;;28376:18;;:::i;:::-;28289:107;28420:1;28417;28413:9;28406:16;;28123:305;;;;:::o;28434:237::-;28574:34;28570:1;28562:6;28558:14;28551:58;28643:20;28638:2;28630:6;28626:15;28619:45;28434:237;:::o;28677:366::-;28819:3;28840:67;28904:2;28899:3;28840:67;:::i;:::-;28833:74;;28916:93;29005:3;28916:93;:::i;:::-;29034:2;29029:3;29025:12;29018:19;;28677:366;;;:::o;29049:419::-;29215:4;29253:2;29242:9;29238:18;29230:26;;29302:9;29296:4;29292:20;29288:1;29277:9;29273:17;29266:47;29330:131;29456:4;29330:131;:::i;:::-;29322:139;;29049:419;;;:::o;29474:233::-;29513:3;29536:24;29554:5;29536:24;:::i;:::-;29527:33;;29582:66;29575:5;29572:77;29569:103;;;29652:18;;:::i;:::-;29569:103;29699:1;29692:5;29688:13;29681:20;;29474:233;;;:::o;29713:180::-;29761:77;29758:1;29751:88;29858:4;29855:1;29848:15;29882:4;29879:1;29872:15;29899:185;29939:1;29956:20;29974:1;29956:20;:::i;:::-;29951:25;;29990:20;30008:1;29990:20;:::i;:::-;29985:25;;30029:1;30019:35;;30034:18;;:::i;:::-;30019:35;30076:1;30073;30069:9;30064:14;;29899:185;;;;:::o;30090:176::-;30122:1;30139:20;30157:1;30139:20;:::i;:::-;30134:25;;30173:20;30191:1;30173:20;:::i;:::-;30168:25;;30212:1;30202:35;;30217:18;;:::i;:::-;30202:35;30258:1;30255;30251:9;30246:14;;30090:176;;;;:::o;30272:180::-;30320:77;30317:1;30310:88;30417:4;30414:1;30407:15;30441:4;30438:1;30431:15;30458:182;30598:34;30594:1;30586:6;30582:14;30575:58;30458:182;:::o;30646:366::-;30788:3;30809:67;30873:2;30868:3;30809:67;:::i;:::-;30802:74;;30885:93;30974:3;30885:93;:::i;:::-;31003:2;30998:3;30994:12;30987:19;;30646:366;;;:::o;31018:419::-;31184:4;31222:2;31211:9;31207:18;31199:26;;31271:9;31265:4;31261:20;31257:1;31246:9;31242:17;31235:47;31299:131;31425:4;31299:131;:::i;:::-;31291:139;;31018:419;;;:::o;31443:178::-;31583:30;31579:1;31571:6;31567:14;31560:54;31443:178;:::o;31627:366::-;31769:3;31790:67;31854:2;31849:3;31790:67;:::i;:::-;31783:74;;31866:93;31955:3;31866:93;:::i;:::-;31984:2;31979:3;31975:12;31968:19;;31627:366;;;:::o;31999:419::-;32165:4;32203:2;32192:9;32188:18;32180:26;;32252:9;32246:4;32242:20;32238:1;32227:9;32223:17;32216:47;32280:131;32406:4;32280:131;:::i;:::-;32272:139;;31999:419;;;:::o;32424:231::-;32564:34;32560:1;32552:6;32548:14;32541:58;32633:14;32628:2;32620:6;32616:15;32609:39;32424:231;:::o;32661:366::-;32803:3;32824:67;32888:2;32883:3;32824:67;:::i;:::-;32817:74;;32900:93;32989:3;32900:93;:::i;:::-;33018:2;33013:3;33009:12;33002:19;;32661:366;;;:::o;33033:419::-;33199:4;33237:2;33226:9;33222:18;33214:26;;33286:9;33280:4;33276:20;33272:1;33261:9;33257:17;33250:47;33314:131;33440:4;33314:131;:::i;:::-;33306:139;;33033:419;;;:::o;33458:98::-;33509:6;33543:5;33537:12;33527:22;;33458:98;;;:::o;33562:168::-;33645:11;33679:6;33674:3;33667:19;33719:4;33714:3;33710:14;33695:29;;33562:168;;;;:::o;33736:360::-;33822:3;33850:38;33882:5;33850:38;:::i;:::-;33904:70;33967:6;33962:3;33904:70;:::i;:::-;33897:77;;33983:52;34028:6;34023:3;34016:4;34009:5;34005:16;33983:52;:::i;:::-;34060:29;34082:6;34060:29;:::i;:::-;34055:3;34051:39;34044:46;;33826:270;33736:360;;;;:::o;34102:640::-;34297:4;34335:3;34324:9;34320:19;34312:27;;34349:71;34417:1;34406:9;34402:17;34393:6;34349:71;:::i;:::-;34430:72;34498:2;34487:9;34483:18;34474:6;34430:72;:::i;:::-;34512;34580:2;34569:9;34565:18;34556:6;34512:72;:::i;:::-;34631:9;34625:4;34621:20;34616:2;34605:9;34601:18;34594:48;34659:76;34730:4;34721:6;34659:76;:::i;:::-;34651:84;;34102:640;;;;;;;:::o;34748:141::-;34804:5;34835:6;34829:13;34820:22;;34851:32;34877:5;34851:32;:::i;:::-;34748:141;;;;:::o;34895:349::-;34964:6;35013:2;35001:9;34992:7;34988:23;34984:32;34981:119;;;35019:79;;:::i;:::-;34981:119;35139:1;35164:63;35219:7;35210:6;35199:9;35195:22;35164:63;:::i;:::-;35154:73;;35110:127;34895:349;;;;:::o
Swarm Source
ipfs://4811737bc707af8d0daf1970700fa7df4864e3d0d88d717e931f5277fe642afb
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.