ERC-721
Overview
Max Total Supply
6,629 AKFC
Holders
2,307
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 AKFCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ApeKidsFC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-03 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/access/Ownable.sol /** * @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); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: contracts/ApeKidsFC.sol contract ApeKidsFC is ERC721, Ownable { using Strings for uint256; using ECDSA for bytes32; //AKC contract IERC721Enumerable akcContract; //NFT params string public baseURI; string public defaultURI; string public mycontractURI; bool public finalizeBaseUri = false; uint256 private currentSupply; //mint parameters uint256 public maxSupply = 12626; uint256[] public stagePrice = [0, 0.1626 ether, 0.1626 ether, 0.0926 ether,0.0926 ether, 0.1626 ether]; //price for each stage uint256[] public stageLimit = [0, 2627, 2627, 12626, 12626, 12626]; //mint limit for each stage address public signer; //WL signing key mapping(uint256 => bool) public akcClaimed; //whether an AKC tokenId has been claimed mapping(uint8 => mapping(address => uint8)) public mint_count; //mint_count[stage][addr] //withdraw address[] fundRecipients = [ 0x261D83Bb62b54B4eBEAe76195b13d190e292e22f, 0xe778d58088967D9F62874f493Dd374266Dba248D ]; uint256[] receivePercentagePt = [4500, 5500]; //state bool public paused = false; uint8 public stage = 0; //royalty address public royaltyAddr; uint256 public royaltyBasis; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _defaultURI, address _akc, address _signer, address _royaltyAddr, uint256 _royaltyBasis ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); defaultURI = _defaultURI; akcContract = IERC721Enumerable(_akc); signer = _signer; royaltyAddr = _royaltyAddr; royaltyBasis = _royaltyBasis; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function supportsInterface(bytes4 interfaceId) public view override(ERC721) returns (bool) { return interfaceId == 0xe8a3d485 /* contractURI() */ || interfaceId == 0x2a55205a /* ERC-2981 royaltyInfo() */ || super.supportsInterface(interfaceId); } function ownedAKC(uint256[] memory _tokenIdsToClaim) public view returns (bool) { for (uint256 i; i < _tokenIdsToClaim.length; i++) { if(akcContract.ownerOf(_tokenIdsToClaim[i]) != msg.sender) return false; } return true; } function mint(uint8 mint_num, uint256[] memory _tokenIdsToClaim, uint8 wl_max, bytes memory signature) public payable { require(!paused, "Contract paused"); require((stage>0) && (stage<=5), "Invalid stage"); uint256 supply = totalSupply(); require(mint_num > 0,"at least 1 mint"); require(supply + mint_num <= stageLimit[stage], "Hit stage limit"); require(msg.value >= mint_num * stagePrice[stage], "Insufficient eth"); require(supply + mint_num <= maxSupply, "max supply reached"); if(stage==1){ require(mint_num + mint_count[stage][msg.sender] <= wl_max, "Exceed WL limit"); require(signature.length > 0, "Missing signature"); require(checkSig(msg.sender, wl_max, signature), "Invalid signature"); mint_count[stage][msg.sender] += mint_num; }else if(stage==2){ require(signature.length > 0, "Missing signature"); require(checkSig(msg.sender, wl_max, signature), "Invalid signture"); }else if(stage==3){ require(mint_num == _tokenIdsToClaim.length, "Mint more than claim"); for(uint256 i;i<_tokenIdsToClaim.length;i++){ require(akcContract.ownerOf(_tokenIdsToClaim[i]) == msg.sender, "Not owner of claim"); require(akcClaimed[_tokenIdsToClaim[i]] == false, "Already claimed"); akcClaimed[_tokenIdsToClaim[i]] = true; } }else if(stage==4){ require(ownedAKC(_tokenIdsToClaim), "Not owned"); }else if(stage==5){ } currentSupply += mint_num; for (uint256 i = 1; i <= mint_num; i++) { _safeMint(msg.sender, supply + i); } } function checkSig(address _addr, uint8 cnt, bytes memory signature) public view returns(bool){ return signer == keccak256(abi.encodePacked('AKFC', _addr, cnt, stage)).recover(signature); } function tokensOfOwner(address _owner, uint startId, uint endId) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index = 0; for (uint256 tokenId = startId; tokenId <= endId; tokenId++) { if (index == tokenCount) break; if (ownerOf(tokenId) == _owner) { result[index] = tokenId; index++; } } return result; } } function totalSupply() public view returns (uint256) { return currentSupply; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : defaultURI; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(mycontractURI)); } //ERC-2981 function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount){ return (royaltyAddr, _salePrice * royaltyBasis / 10000); } //only owner functions --- function setBaseURI(string memory _newBaseURI) public onlyOwner { require(!finalizeBaseUri); baseURI = _newBaseURI; } function finalizeBaseURI() public onlyOwner { finalizeBaseUri = true; } function setContractURI(string memory _contractURI) public onlyOwner { mycontractURI = _contractURI; //return format based on https://docs.opensea.io/docs/contract-level-metadata } function setRoyalty(address _royaltyAddr, uint256 _royaltyBasis) public onlyOwner { royaltyAddr = _royaltyAddr; royaltyBasis = _royaltyBasis; } function nextStage() public onlyOwner { require(stage<5); stage++; } function pause(bool _state) public onlyOwner { paused = _state; } function reserveMint(uint256 _mintAmount, address _to) public onlyOwner { uint256 supply = totalSupply(); require(supply + _mintAmount <= maxSupply, "max supply reached"); currentSupply += _mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } //fund withdraw functions --- function withdrawFund() public onlyOwner { uint256 currentBal = address(this).balance; require(currentBal > 0); for (uint256 i = 0; i < fundRecipients.length-1; i++) { _withdraw(fundRecipients[i], currentBal * receivePercentagePt[i] / 10000); } //final address receives remainder to prevent ether dust _withdraw(fundRecipients[fundRecipients.length-1], address(this).balance); } function _withdraw(address _addr, uint256 _amt) private { (bool success,) = _addr.call{value: _amt}(""); require(success, "Transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_defaultURI","type":"string"},{"internalType":"address","name":"_akc","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_royaltyAddr","type":"address"},{"internalType":"uint256","name":"_royaltyBasis","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"akcClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint8","name":"cnt","type":"uint8"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"checkSig","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeBaseUri","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"mint_num","type":"uint8"},{"internalType":"uint256[]","name":"_tokenIdsToClaim","type":"uint256[]"},{"internalType":"uint8","name":"wl_max","type":"uint8"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"mint_count","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mycontractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIdsToClaim","type":"uint256[]"}],"name":"ownedAKC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddr","type":"address"},{"internalType":"uint256","name":"_royaltyBasis","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stageLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stagePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_owner","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"endId","type":"uint256"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFund","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600b805460ff19169055613152600d5561014060405260006080908152670241abd6a87a800060a081905260c0819052670148fb359a33800060e081905261010052610120526200005590600e906006620002f5565b506040805160c08101825260008152610a436020820181905291810191909152613152606082018190526080820181905260a08201526200009b90600f90600662000350565b506040805180820190915273261d83bb62b54b4ebeae76195b13d190e292e22f815273e778d58088967d9f62874f493dd374266dba248d6020820152620000e790601390600262000394565b5060408051808201909152611194815261157c60208201526200010f90601490600262000350565b506015805461ffff191690553480156200012857600080fd5b5060405162003a4438038062003a448339810160408190526200014b9162000554565b87518890889062000164906000906020850190620003ec565b5080516200017a906001906020840190620003ec565b50505062000197620001916200021660201b60201c565b6200021a565b620001a2866200026c565b8451620001b7906009906020880190620003ec565b50600780546001600160a01b039586166001600160a01b0319918216179091556010805494861694909116939093179092556015805491909316620100000262010000600160b01b03199091161790915560165550620006a292505050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b600b5460ff1615620002dc57600080fd5b8051620002f1906008906020840190620003ec565b5050565b8280548282559060005260206000209081019282156200033e579160200282015b828111156200033e57825182906001600160401b031690559160200191906001019062000316565b506200034c92915062000469565b5090565b8280548282559060005260206000209081019282156200033e579160200282015b828111156200033e578251829061ffff1690559160200191906001019062000371565b8280548282559060005260206000209081019282156200033e579160200282015b828111156200033e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003b5565b828054620003fa906200064f565b90600052602060002090601f0160209004810192826200041e57600085556200033e565b82601f106200043957805160ff19168380011785556200033e565b828001600101855582156200033e579182015b828111156200033e5782518255916020019190600101906200044c565b5b808211156200034c57600081556001016200046a565b80516001600160a01b03811681146200049857600080fd5b919050565b600082601f830112620004af57600080fd5b81516001600160401b0380821115620004cc57620004cc6200068c565b604051601f8301601f19908116603f01168101908282118183101715620004f757620004f76200068c565b816040528381526020925086838588010111156200051457600080fd5b600091505b8382101562000538578582018301518183018401529082019062000519565b838211156200054a5760008385830101525b9695505050505050565b600080600080600080600080610100898b0312156200057257600080fd5b88516001600160401b03808211156200058a57600080fd5b620005988c838d016200049d565b995060208b0151915080821115620005af57600080fd5b620005bd8c838d016200049d565b985060408b0151915080821115620005d457600080fd5b620005e28c838d016200049d565b975060608b0151915080821115620005f957600080fd5b50620006088b828c016200049d565b9550506200061960808a0162000480565b93506200062960a08a0162000480565b92506200063960c08a0162000480565b915060e089015190509295985092959890939650565b600181811c908216806200066457607f821691505b602082108114156200068657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61339280620006b26000396000f3fe6080604052600436106102725760003560e01c8063715018a61161014f578063c87b56dd116100c1578063eb1503a71161007a578063eb1503a71461079d578063ec5c0963146107bd578063ee3743ab146107dd578063f053d370146107f2578063f2fde38b1461080c578063f831210a1461082c57600080fd5b8063c87b56dd146106c4578063cd6a3379146106e4578063d5abeb0114610714578063e07fa3c11461072a578063e8a3d4851461073f578063e985e9c51461075457600080fd5b8063a22cb46511610113578063a22cb46514610602578063b88d4fde14610622578063c040e6b814610642578063c43b793414610661578063c6ec690914610681578063c839fe941461069757600080fd5b8063715018a6146105875780637fc4f9f71461059c5780638da5cb5b146105af578063938e3d7b146105cd57806395d89b41146105ed57600080fd5b806337c3fdbc116101e85780635c975abb116101ac5780635c975abb146104e357806360b02f70146104fd5780636352211e1461051d578063639d7e111461053d5780636c0360eb1461055257806370a082311461056757600080fd5b806337c3fdbc1461042c5780633a367a671461044157806342842e0e146104565780634e6287b81461047657806355f804b3146104c357600080fd5b806310fd332b1161023a57806310fd332b1461034857806318160ddd14610368578063238ac9331461038757806323b872dd146103a75780632a55205a146103c75780633009c0831461040657600080fd5b806301ffc9a71461027757806302329a29146102ac57806306fdde03146102ce578063081812fc146102f0578063095ea7b314610328575b600080fd5b34801561028357600080fd5b50610297610292366004612d7a565b61084c565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612d5f565b610892565b005b3480156102da57600080fd5b506102e36108d8565b6040516102a3919061306a565b3480156102fc57600080fd5b5061031061030b366004612dfd565b61096a565b6040516001600160a01b0390911681526020016102a3565b34801561033457600080fd5b506102cc610343366004612c69565b6109ff565b34801561035457600080fd5b506102cc610363366004612c69565b610b15565b34801561037457600080fd5b50600c545b6040519081526020016102a3565b34801561039357600080fd5b50601054610310906001600160a01b031681565b3480156103b357600080fd5b506102cc6103c2366004612b87565b610b6d565b3480156103d357600080fd5b506103e76103e2366004612e3b565b610b9e565b604080516001600160a01b0390931683526020830191909152016102a3565b34801561041257600080fd5b50601554610310906201000090046001600160a01b031681565b34801561043857600080fd5b506102cc610bde565b34801561044d57600080fd5b506102e3610c17565b34801561046257600080fd5b506102cc610471366004612b87565b610ca5565b34801561048257600080fd5b506104b1610491366004612e5d565b601260209081526000928352604080842090915290825290205460ff1681565b60405160ff90911681526020016102a3565b3480156104cf57600080fd5b506102cc6104de366004612db4565b610cc0565b3480156104ef57600080fd5b506015546102979060ff1681565b34801561050957600080fd5b506102cc610518366004612e16565b610d11565b34801561052957600080fd5b50610310610538366004612dfd565b610de6565b34801561054957600080fd5b506102e3610e5d565b34801561055e57600080fd5b506102e3610e6a565b34801561057357600080fd5b50610379610582366004612b14565b610e77565b34801561059357600080fd5b506102cc610efe565b6102cc6105aa366004612e79565b610f34565b3480156105bb57600080fd5b506006546001600160a01b0316610310565b3480156105d957600080fd5b506102cc6105e8366004612db4565b611656565b3480156105f957600080fd5b506102e3611693565b34801561060e57600080fd5b506102cc61061d366004612c34565b6116a2565b34801561062e57600080fd5b506102cc61063d366004612bc8565b611767565b34801561064e57600080fd5b506015546104b190610100900460ff1681565b34801561066d57600080fd5b5061037961067c366004612dfd565b611799565b34801561068d57600080fd5b5061037960165481565b3480156106a357600080fd5b506106b76106b2366004612c95565b6117ba565b6040516102a39190613026565b3480156106d057600080fd5b506102e36106df366004612dfd565b6118b1565b3480156106f057600080fd5b506102976106ff366004612dfd565b60116020526000908152604090205460ff1681565b34801561072057600080fd5b50610379600d5481565b34801561073657600080fd5b506102cc611a06565b34801561074b57600080fd5b506102e3611b19565b34801561076057600080fd5b5061029761076f366004612b4e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a957600080fd5b506102976107b8366004612cca565b611b41565b3480156107c957600080fd5b506103796107d8366004612dfd565b611bdc565b3480156107e957600080fd5b506102cc611bec565b3480156107fe57600080fd5b50600b546102979060ff1681565b34801561081857600080fd5b506102cc610827366004612b14565b611c61565b34801561083857600080fd5b50610297610847366004612d2a565b611cf9565b600063e8a3d48560e01b6001600160e01b03198316148061087d575063152a902d60e11b6001600160e01b03198316145b8061088c575061088c82611dd7565b92915050565b6006546001600160a01b031633146108c55760405162461bcd60e51b81526004016108bc906130cf565b60405180910390fd5b6015805460ff1916911515919091179055565b6060600080546108e790613239565b80601f016020809104026020016040519081016040528092919081815260200182805461091390613239565b80156109605780601f1061093557610100808354040283529160200191610960565b820191906000526020600020905b81548152906001019060200180831161094357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109e35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108bc565b506000908152600460205260409020546001600160a01b031690565b6000610a0a82610de6565b9050806001600160a01b0316836001600160a01b03161415610a785760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108bc565b336001600160a01b0382161480610a945750610a94813361076f565b610b065760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108bc565b610b108383611e27565b505050565b6006546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016108bc906130cf565b601580546001600160a01b03909316620100000262010000600160b01b031990931692909217909155601655565b610b773382611e95565b610b935760405162461bcd60e51b81526004016108bc90613104565b610b10838383611f8c565b600080601560029054906101000a90046001600160a01b031661271060165485610bc891906131d7565b610bd291906131c3565b915091505b9250929050565b6006546001600160a01b03163314610c085760405162461bcd60e51b81526004016108bc906130cf565b600b805460ff19166001179055565b60098054610c2490613239565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5090613239565b8015610c9d5780601f10610c7257610100808354040283529160200191610c9d565b820191906000526020600020905b815481529060010190602001808311610c8057829003601f168201915b505050505081565b610b1083838360405180602001604052806000815250611767565b6006546001600160a01b03163314610cea5760405162461bcd60e51b81526004016108bc906130cf565b600b5460ff1615610cfa57600080fd5b8051610d0d906008906020840190612957565b5050565b6006546001600160a01b03163314610d3b5760405162461bcd60e51b81526004016108bc906130cf565b6000610d46600c5490565b600d54909150610d568483613186565b1115610d995760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b60448201526064016108bc565b82600c6000828254610dab9190613186565b90915550600190505b838111610de057610dce83610dc98385613186565b61212c565b80610dd881613274565b915050610db4565b50505050565b6000818152600260205260408120546001600160a01b03168061088c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108bc565b600a8054610c2490613239565b60088054610c2490613239565b60006001600160a01b038216610ee25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108bc565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f285760405162461bcd60e51b81526004016108bc906130cf565b610f326000612146565b565b60155460ff1615610f795760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016108bc565b601554610100900460ff1615801590610f9e5750601554600561010090910460ff1611155b610fda5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461676560981b60448201526064016108bc565b6000610fe5600c5490565b905060008560ff161161102c5760405162461bcd60e51b815260206004820152600f60248201526e185d081b19585cdd080c481b5a5b9d608a1b60448201526064016108bc565b601554600f80549091610100900460ff1690811061104c5761104c613305565b90600052602060002001548560ff16826110669190613186565b11156110a65760405162461bcd60e51b815260206004820152600f60248201526e121a5d081cdd1859d9481b1a5b5a5d608a1b60448201526064016108bc565b601554600e80549091610100900460ff169081106110c6576110c6613305565b90600052602060002001548560ff166110df91906131d7565b3410156111215760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce840cae8d60831b60448201526064016108bc565b600d5461113160ff871683613186565b11156111745760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b60448201526064016108bc565b60155460ff61010090910416600114156112e757601554610100900460ff9081166000908152601260209081526040808320338452909152902054818516916111be91168761319e565b60ff1611156112015760405162461bcd60e51b815260206004820152600f60248201526e115e18d959590815d3081b1a5b5a5d608a1b60448201526064016108bc565b60008251116112465760405162461bcd60e51b81526020600482015260116024820152704d697373696e67207369676e617475726560781b60448201526064016108bc565b611251338484611b41565b6112915760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016108bc565b60155460ff610100909104811660009081526012602090815260408083203384529091528120805488939192916112ca9185911661319e565b92506101000a81548160ff021916908360ff160217905550611606565b601554610100900460ff166002141561138e57600082511161133f5760405162461bcd60e51b81526020600482015260116024820152704d697373696e67207369676e617475726560781b60448201526064016108bc565b61134a338484611b41565b6113895760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207369676e7475726560801b60448201526064016108bc565b611606565b601554610100900460ff16600314156115b25783518560ff16146113eb5760405162461bcd60e51b81526020600482015260146024820152734d696e74206d6f7265207468616e20636c61696d60601b60448201526064016108bc565b60005b84518110156115ac57600754855133916001600160a01b031690636352211e9088908590811061142057611420613305565b60200260200101516040518263ffffffff1660e01b815260040161144691815260200190565b60206040518083038186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114969190612b31565b6001600160a01b0316146114e15760405162461bcd60e51b81526020600482015260126024820152714e6f74206f776e6572206f6620636c61696d60701b60448201526064016108bc565b601160008683815181106114f7576114f7613305565b60209081029190910181015182528101919091526040016000205460ff16156115545760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016108bc565b60016011600087848151811061156c5761156c613305565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115a490613274565b9150506113ee565b50611606565b601554610100900460ff1660041415611606576115ce84611cf9565b6113895760405162461bcd60e51b8152602060048201526009602482015268139bdd081bdddb995960ba1b60448201526064016108bc565b8460ff16600c600082825461161b9190613186565b90915550600190505b8560ff16811161164e5761163c33610dc98385613186565b8061164681613274565b915050611624565b505050505050565b6006546001600160a01b031633146116805760405162461bcd60e51b81526004016108bc906130cf565b8051610d0d90600a906020840190612957565b6060600180546108e790613239565b6001600160a01b0382163314156116fb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108bc565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117713383611e95565b61178d5760405162461bcd60e51b81526004016108bc90613104565b610de084848484612198565b600e81815481106117a957600080fd5b600091825260209091200154905081565b606060006117c785610e77565b9050806117e45750506040805160008152602081019091526118aa565b60008167ffffffffffffffff8111156117ff576117ff61331b565b604051908082528060200260200182016040528015611828578160200160208202803683370190505b5090506000855b8581116118a35783821415611843576118a3565b876001600160a01b031661185682610de6565b6001600160a01b03161415611891578083838151811061187857611878613305565b60209081029190910101528161188d81613274565b9250505b8061189b81613274565b91505061182f565b5090925050505b9392505050565b6000818152600260205260409020546060906001600160a01b03166119305760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108bc565b600061193a6121cb565b905060008151116119d5576009805461195290613239565b80601f016020809104026020016040519081016040528092919081815260200182805461197e90613239565b80156119cb5780601f106119a0576101008083540402835291602001916119cb565b820191906000526020600020905b8154815290600101906020018083116119ae57829003601f168201915b50505050506118aa565b806119df846121da565b6040516020016119f0929190612f1e565b6040516020818303038152906040529392505050565b6006546001600160a01b03163314611a305760405162461bcd60e51b81526004016108bc906130cf565b4780611a3b57600080fd5b60005b601354611a4d906001906131f6565b811015611ad557611ac360138281548110611a6a57611a6a613305565b9060005260206000200160009054906101000a90046001600160a01b031661271060148481548110611a9e57611a9e613305565b906000526020600020015485611ab491906131d7565b611abe91906131c3565b6122d8565b80611acd81613274565b915050611a3e565b5060138054611b169190611aeb906001906131f6565b81548110611afb57611afb613305565b6000918252602090912001546001600160a01b0316476122d8565b50565b6060600a604051602001611b2d9190612f4d565b604051602081830303815290604052905090565b60155460405163414b464360e01b60208201526bffffffffffffffffffffffff19606086901b1660248201526001600160f81b031960f885811b8216603884015261010090930490921b9091166039820152600090611bc3908390603a016040516020818303038152906040528051906020012061236d90919063ffffffff16565b6010546001600160a01b03918216911614949350505050565b600f81815481106117a957600080fd5b6006546001600160a01b03163314611c165760405162461bcd60e51b81526004016108bc906130cf565b601554600561010090910460ff1610611c2e57600080fd5b60158054610100900460ff16906001611c468361328f565b91906101000a81548160ff021916908360ff16021790555050565b6006546001600160a01b03163314611c8b5760405162461bcd60e51b81526004016108bc906130cf565b6001600160a01b038116611cf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bc565b611b1681612146565b6000805b8251811015611dce57600754835133916001600160a01b031690636352211e90869085908110611d2f57611d2f613305565b60200260200101516040518263ffffffff1660e01b8152600401611d5591815260200190565b60206040518083038186803b158015611d6d57600080fd5b505afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da59190612b31565b6001600160a01b031614611dbc5750600092915050565b80611dc681613274565b915050611cfd565b50600192915050565b60006001600160e01b031982166380ac58cd60e01b1480611e0857506001600160e01b03198216635b5e139f60e01b145b8061088c57506301ffc9a760e01b6001600160e01b031983161461088c565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5c82610de6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611f0e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108bc565b6000611f1983610de6565b9050806001600160a01b0316846001600160a01b03161480611f545750836001600160a01b0316611f498461096a565b6001600160a01b0316145b80611f8457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611f9f82610de6565b6001600160a01b0316146120075760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108bc565b6001600160a01b0382166120695760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108bc565b612074600082611e27565b6001600160a01b038316600090815260036020526040812080546001929061209d9084906131f6565b90915550506001600160a01b03821660009081526003602052604081208054600192906120cb908490613186565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d0d828260405180602001604052806000815250612391565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121a3848484611f8c565b6121af848484846123c4565b610de05760405162461bcd60e51b81526004016108bc9061307d565b6060600880546108e790613239565b6060816121fe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612228578061221281613274565b91506122219050600a836131c3565b9150612202565b60008167ffffffffffffffff8111156122435761224361331b565b6040519080825280601f01601f19166020018201604052801561226d576020820181803683370190505b5090505b8415611f84576122826001836131f6565b915061228f600a866132af565b61229a906030613186565b60f81b8183815181106122af576122af613305565b60200101906001600160f81b031916908160001a9053506122d1600a866131c3565b9450612271565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612325576040519150601f19603f3d011682016040523d82523d6000602084013e61232a565b606091505b5050905080610b105760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108bc565b600080600061237c85856124d1565b915091506123898161253e565b509392505050565b61239b83836126f9565b6123a860008484846123c4565b610b105760405162461bcd60e51b81526004016108bc9061307d565b60006001600160a01b0384163b156124c657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612408903390899088908890600401612fe9565b602060405180830381600087803b15801561242257600080fd5b505af1925050508015612452575060408051601f3d908101601f1916820190925261244f91810190612d97565b60015b6124ac573d808015612480576040519150601f19603f3d011682016040523d82523d6000602084013e612485565b606091505b5080516124a45760405162461bcd60e51b81526004016108bc9061307d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f84565b506001949350505050565b6000808251604114156125085760208301516040840151606085015160001a6124fc8782858561283b565b94509450505050610bd7565b8251604014156125325760208301516040840151612527868383612928565b935093505050610bd7565b50600090506002610bd7565b6000816004811115612552576125526132ef565b141561255b5750565b600181600481111561256f5761256f6132ef565b14156125bd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108bc565b60028160048111156125d1576125d16132ef565b141561261f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108bc565b6003816004811115612633576126336132ef565b141561268c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108bc565b60048160048111156126a0576126a06132ef565b1415611b165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108bc565b6001600160a01b03821661274f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108bc565b6000818152600260205260409020546001600160a01b0316156127b45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108bc565b6001600160a01b03821660009081526003602052604081208054600192906127dd908490613186565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612872575060009050600361291f565b8460ff16601b1415801561288a57508460ff16601c14155b1561289b575060009050600461291f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156128ef573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129185760006001925092505061291f565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b016129498782888561283b565b935093505050935093915050565b82805461296390613239565b90600052602060002090601f01602090048101928261298557600085556129cb565b82601f1061299e57805160ff19168380011785556129cb565b828001600101855582156129cb579182015b828111156129cb5782518255916020019190600101906129b0565b506129d79291506129db565b5090565b5b808211156129d757600081556001016129dc565b600067ffffffffffffffff831115612a0a57612a0a61331b565b612a1d601f8401601f1916602001613155565b9050828152838383011115612a3157600080fd5b828260208301376000602084830101529392505050565b600082601f830112612a5957600080fd5b8135602067ffffffffffffffff821115612a7557612a7561331b565b8160051b612a84828201613155565b838152828101908684018388018501891015612a9f57600080fd5b600093505b85841015612ac2578035835260019390930192918401918401612aa4565b50979650505050505050565b80358015158114612ade57600080fd5b919050565b600082601f830112612af457600080fd5b6118aa838335602085016129f0565b803560ff81168114612ade57600080fd5b600060208284031215612b2657600080fd5b81356118aa81613331565b600060208284031215612b4357600080fd5b81516118aa81613331565b60008060408385031215612b6157600080fd5b8235612b6c81613331565b91506020830135612b7c81613331565b809150509250929050565b600080600060608486031215612b9c57600080fd5b8335612ba781613331565b92506020840135612bb781613331565b929592945050506040919091013590565b60008060008060808587031215612bde57600080fd5b8435612be981613331565b93506020850135612bf981613331565b925060408501359150606085013567ffffffffffffffff811115612c1c57600080fd5b612c2887828801612ae3565b91505092959194509250565b60008060408385031215612c4757600080fd5b8235612c5281613331565b9150612c6060208401612ace565b90509250929050565b60008060408385031215612c7c57600080fd5b8235612c8781613331565b946020939093013593505050565b600080600060608486031215612caa57600080fd5b8335612cb581613331565b95602085013595506040909401359392505050565b600080600060608486031215612cdf57600080fd5b8335612cea81613331565b9250612cf860208501612b03565b9150604084013567ffffffffffffffff811115612d1457600080fd5b612d2086828701612ae3565b9150509250925092565b600060208284031215612d3c57600080fd5b813567ffffffffffffffff811115612d5357600080fd5b611f8484828501612a48565b600060208284031215612d7157600080fd5b6118aa82612ace565b600060208284031215612d8c57600080fd5b81356118aa81613346565b600060208284031215612da957600080fd5b81516118aa81613346565b600060208284031215612dc657600080fd5b813567ffffffffffffffff811115612ddd57600080fd5b8201601f81018413612dee57600080fd5b611f84848235602084016129f0565b600060208284031215612e0f57600080fd5b5035919050565b60008060408385031215612e2957600080fd5b823591506020830135612b7c81613331565b60008060408385031215612e4e57600080fd5b50508035926020909101359150565b60008060408385031215612e7057600080fd5b612b6c83612b03565b60008060008060808587031215612e8f57600080fd5b612e9885612b03565b9350602085013567ffffffffffffffff80821115612eb557600080fd5b612ec188838901612a48565b9450612ecf60408801612b03565b93506060870135915080821115612ee557600080fd5b50612c2887828801612ae3565b60008151808452612f0a81602086016020860161320d565b601f01601f19169290920160200192915050565b60008351612f3081846020880161320d565b835190830190612f4481836020880161320d565b01949350505050565b600080835481600182811c915080831680612f6957607f831692505b6020808410821415612f8957634e487b7160e01b86526022600452602486fd5b818015612f9d5760018114612fae57612fdb565b60ff19861689528489019650612fdb565b60008a81526020902060005b86811015612fd35781548b820152908501908301612fba565b505084890196505b509498975050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061301c90830184612ef2565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561305e57835183529284019291840191600101613042565b50909695505050505050565b6020815260006118aa6020830184612ef2565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561317e5761317e61331b565b604052919050565b60008219821115613199576131996132c3565b500190565b600060ff821660ff84168060ff038211156131bb576131bb6132c3565b019392505050565b6000826131d2576131d26132d9565b500490565b60008160001904831182151516156131f1576131f16132c3565b500290565b600082821015613208576132086132c3565b500390565b60005b83811015613228578181015183820152602001613210565b83811115610de05750506000910152565b600181811c9082168061324d57607f821691505b6020821081141561326e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613288576132886132c3565b5060010190565b600060ff821660ff8114156132a6576132a66132c3565b60010192915050565b6000826132be576132be6132d9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b1657600080fd5b6001600160e01b031981168114611b1657600080fdfea264697066735822122064dbada49ec1c2aba8fc1cbf59df4d7806e5ac060d72c192e76e8c095691d4ca64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000009bf252f97891b907f002f2887eff9246e3054080000000000000000000000000a62d22803189cb16946f7018b4f5cc17bd82a781000000000000000000000000e778d58088967d9f62874f493dd374266dba248d00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000134170654b696473466f6f7462616c6c436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414b464300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e6170656b696473636c75622e696f2f6170692f616b66632d74656d702f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063715018a61161014f578063c87b56dd116100c1578063eb1503a71161007a578063eb1503a71461079d578063ec5c0963146107bd578063ee3743ab146107dd578063f053d370146107f2578063f2fde38b1461080c578063f831210a1461082c57600080fd5b8063c87b56dd146106c4578063cd6a3379146106e4578063d5abeb0114610714578063e07fa3c11461072a578063e8a3d4851461073f578063e985e9c51461075457600080fd5b8063a22cb46511610113578063a22cb46514610602578063b88d4fde14610622578063c040e6b814610642578063c43b793414610661578063c6ec690914610681578063c839fe941461069757600080fd5b8063715018a6146105875780637fc4f9f71461059c5780638da5cb5b146105af578063938e3d7b146105cd57806395d89b41146105ed57600080fd5b806337c3fdbc116101e85780635c975abb116101ac5780635c975abb146104e357806360b02f70146104fd5780636352211e1461051d578063639d7e111461053d5780636c0360eb1461055257806370a082311461056757600080fd5b806337c3fdbc1461042c5780633a367a671461044157806342842e0e146104565780634e6287b81461047657806355f804b3146104c357600080fd5b806310fd332b1161023a57806310fd332b1461034857806318160ddd14610368578063238ac9331461038757806323b872dd146103a75780632a55205a146103c75780633009c0831461040657600080fd5b806301ffc9a71461027757806302329a29146102ac57806306fdde03146102ce578063081812fc146102f0578063095ea7b314610328575b600080fd5b34801561028357600080fd5b50610297610292366004612d7a565b61084c565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612d5f565b610892565b005b3480156102da57600080fd5b506102e36108d8565b6040516102a3919061306a565b3480156102fc57600080fd5b5061031061030b366004612dfd565b61096a565b6040516001600160a01b0390911681526020016102a3565b34801561033457600080fd5b506102cc610343366004612c69565b6109ff565b34801561035457600080fd5b506102cc610363366004612c69565b610b15565b34801561037457600080fd5b50600c545b6040519081526020016102a3565b34801561039357600080fd5b50601054610310906001600160a01b031681565b3480156103b357600080fd5b506102cc6103c2366004612b87565b610b6d565b3480156103d357600080fd5b506103e76103e2366004612e3b565b610b9e565b604080516001600160a01b0390931683526020830191909152016102a3565b34801561041257600080fd5b50601554610310906201000090046001600160a01b031681565b34801561043857600080fd5b506102cc610bde565b34801561044d57600080fd5b506102e3610c17565b34801561046257600080fd5b506102cc610471366004612b87565b610ca5565b34801561048257600080fd5b506104b1610491366004612e5d565b601260209081526000928352604080842090915290825290205460ff1681565b60405160ff90911681526020016102a3565b3480156104cf57600080fd5b506102cc6104de366004612db4565b610cc0565b3480156104ef57600080fd5b506015546102979060ff1681565b34801561050957600080fd5b506102cc610518366004612e16565b610d11565b34801561052957600080fd5b50610310610538366004612dfd565b610de6565b34801561054957600080fd5b506102e3610e5d565b34801561055e57600080fd5b506102e3610e6a565b34801561057357600080fd5b50610379610582366004612b14565b610e77565b34801561059357600080fd5b506102cc610efe565b6102cc6105aa366004612e79565b610f34565b3480156105bb57600080fd5b506006546001600160a01b0316610310565b3480156105d957600080fd5b506102cc6105e8366004612db4565b611656565b3480156105f957600080fd5b506102e3611693565b34801561060e57600080fd5b506102cc61061d366004612c34565b6116a2565b34801561062e57600080fd5b506102cc61063d366004612bc8565b611767565b34801561064e57600080fd5b506015546104b190610100900460ff1681565b34801561066d57600080fd5b5061037961067c366004612dfd565b611799565b34801561068d57600080fd5b5061037960165481565b3480156106a357600080fd5b506106b76106b2366004612c95565b6117ba565b6040516102a39190613026565b3480156106d057600080fd5b506102e36106df366004612dfd565b6118b1565b3480156106f057600080fd5b506102976106ff366004612dfd565b60116020526000908152604090205460ff1681565b34801561072057600080fd5b50610379600d5481565b34801561073657600080fd5b506102cc611a06565b34801561074b57600080fd5b506102e3611b19565b34801561076057600080fd5b5061029761076f366004612b4e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a957600080fd5b506102976107b8366004612cca565b611b41565b3480156107c957600080fd5b506103796107d8366004612dfd565b611bdc565b3480156107e957600080fd5b506102cc611bec565b3480156107fe57600080fd5b50600b546102979060ff1681565b34801561081857600080fd5b506102cc610827366004612b14565b611c61565b34801561083857600080fd5b50610297610847366004612d2a565b611cf9565b600063e8a3d48560e01b6001600160e01b03198316148061087d575063152a902d60e11b6001600160e01b03198316145b8061088c575061088c82611dd7565b92915050565b6006546001600160a01b031633146108c55760405162461bcd60e51b81526004016108bc906130cf565b60405180910390fd5b6015805460ff1916911515919091179055565b6060600080546108e790613239565b80601f016020809104026020016040519081016040528092919081815260200182805461091390613239565b80156109605780601f1061093557610100808354040283529160200191610960565b820191906000526020600020905b81548152906001019060200180831161094357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109e35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108bc565b506000908152600460205260409020546001600160a01b031690565b6000610a0a82610de6565b9050806001600160a01b0316836001600160a01b03161415610a785760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108bc565b336001600160a01b0382161480610a945750610a94813361076f565b610b065760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108bc565b610b108383611e27565b505050565b6006546001600160a01b03163314610b3f5760405162461bcd60e51b81526004016108bc906130cf565b601580546001600160a01b03909316620100000262010000600160b01b031990931692909217909155601655565b610b773382611e95565b610b935760405162461bcd60e51b81526004016108bc90613104565b610b10838383611f8c565b600080601560029054906101000a90046001600160a01b031661271060165485610bc891906131d7565b610bd291906131c3565b915091505b9250929050565b6006546001600160a01b03163314610c085760405162461bcd60e51b81526004016108bc906130cf565b600b805460ff19166001179055565b60098054610c2490613239565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5090613239565b8015610c9d5780601f10610c7257610100808354040283529160200191610c9d565b820191906000526020600020905b815481529060010190602001808311610c8057829003601f168201915b505050505081565b610b1083838360405180602001604052806000815250611767565b6006546001600160a01b03163314610cea5760405162461bcd60e51b81526004016108bc906130cf565b600b5460ff1615610cfa57600080fd5b8051610d0d906008906020840190612957565b5050565b6006546001600160a01b03163314610d3b5760405162461bcd60e51b81526004016108bc906130cf565b6000610d46600c5490565b600d54909150610d568483613186565b1115610d995760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b60448201526064016108bc565b82600c6000828254610dab9190613186565b90915550600190505b838111610de057610dce83610dc98385613186565b61212c565b80610dd881613274565b915050610db4565b50505050565b6000818152600260205260408120546001600160a01b03168061088c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108bc565b600a8054610c2490613239565b60088054610c2490613239565b60006001600160a01b038216610ee25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108bc565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f285760405162461bcd60e51b81526004016108bc906130cf565b610f326000612146565b565b60155460ff1615610f795760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016108bc565b601554610100900460ff1615801590610f9e5750601554600561010090910460ff1611155b610fda5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461676560981b60448201526064016108bc565b6000610fe5600c5490565b905060008560ff161161102c5760405162461bcd60e51b815260206004820152600f60248201526e185d081b19585cdd080c481b5a5b9d608a1b60448201526064016108bc565b601554600f80549091610100900460ff1690811061104c5761104c613305565b90600052602060002001548560ff16826110669190613186565b11156110a65760405162461bcd60e51b815260206004820152600f60248201526e121a5d081cdd1859d9481b1a5b5a5d608a1b60448201526064016108bc565b601554600e80549091610100900460ff169081106110c6576110c6613305565b90600052602060002001548560ff166110df91906131d7565b3410156111215760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce840cae8d60831b60448201526064016108bc565b600d5461113160ff871683613186565b11156111745760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b60448201526064016108bc565b60155460ff61010090910416600114156112e757601554610100900460ff9081166000908152601260209081526040808320338452909152902054818516916111be91168761319e565b60ff1611156112015760405162461bcd60e51b815260206004820152600f60248201526e115e18d959590815d3081b1a5b5a5d608a1b60448201526064016108bc565b60008251116112465760405162461bcd60e51b81526020600482015260116024820152704d697373696e67207369676e617475726560781b60448201526064016108bc565b611251338484611b41565b6112915760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016108bc565b60155460ff610100909104811660009081526012602090815260408083203384529091528120805488939192916112ca9185911661319e565b92506101000a81548160ff021916908360ff160217905550611606565b601554610100900460ff166002141561138e57600082511161133f5760405162461bcd60e51b81526020600482015260116024820152704d697373696e67207369676e617475726560781b60448201526064016108bc565b61134a338484611b41565b6113895760405162461bcd60e51b815260206004820152601060248201526f496e76616c6964207369676e7475726560801b60448201526064016108bc565b611606565b601554610100900460ff16600314156115b25783518560ff16146113eb5760405162461bcd60e51b81526020600482015260146024820152734d696e74206d6f7265207468616e20636c61696d60601b60448201526064016108bc565b60005b84518110156115ac57600754855133916001600160a01b031690636352211e9088908590811061142057611420613305565b60200260200101516040518263ffffffff1660e01b815260040161144691815260200190565b60206040518083038186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114969190612b31565b6001600160a01b0316146114e15760405162461bcd60e51b81526020600482015260126024820152714e6f74206f776e6572206f6620636c61696d60701b60448201526064016108bc565b601160008683815181106114f7576114f7613305565b60209081029190910181015182528101919091526040016000205460ff16156115545760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016108bc565b60016011600087848151811061156c5761156c613305565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115a490613274565b9150506113ee565b50611606565b601554610100900460ff1660041415611606576115ce84611cf9565b6113895760405162461bcd60e51b8152602060048201526009602482015268139bdd081bdddb995960ba1b60448201526064016108bc565b8460ff16600c600082825461161b9190613186565b90915550600190505b8560ff16811161164e5761163c33610dc98385613186565b8061164681613274565b915050611624565b505050505050565b6006546001600160a01b031633146116805760405162461bcd60e51b81526004016108bc906130cf565b8051610d0d90600a906020840190612957565b6060600180546108e790613239565b6001600160a01b0382163314156116fb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108bc565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117713383611e95565b61178d5760405162461bcd60e51b81526004016108bc90613104565b610de084848484612198565b600e81815481106117a957600080fd5b600091825260209091200154905081565b606060006117c785610e77565b9050806117e45750506040805160008152602081019091526118aa565b60008167ffffffffffffffff8111156117ff576117ff61331b565b604051908082528060200260200182016040528015611828578160200160208202803683370190505b5090506000855b8581116118a35783821415611843576118a3565b876001600160a01b031661185682610de6565b6001600160a01b03161415611891578083838151811061187857611878613305565b60209081029190910101528161188d81613274565b9250505b8061189b81613274565b91505061182f565b5090925050505b9392505050565b6000818152600260205260409020546060906001600160a01b03166119305760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108bc565b600061193a6121cb565b905060008151116119d5576009805461195290613239565b80601f016020809104026020016040519081016040528092919081815260200182805461197e90613239565b80156119cb5780601f106119a0576101008083540402835291602001916119cb565b820191906000526020600020905b8154815290600101906020018083116119ae57829003601f168201915b50505050506118aa565b806119df846121da565b6040516020016119f0929190612f1e565b6040516020818303038152906040529392505050565b6006546001600160a01b03163314611a305760405162461bcd60e51b81526004016108bc906130cf565b4780611a3b57600080fd5b60005b601354611a4d906001906131f6565b811015611ad557611ac360138281548110611a6a57611a6a613305565b9060005260206000200160009054906101000a90046001600160a01b031661271060148481548110611a9e57611a9e613305565b906000526020600020015485611ab491906131d7565b611abe91906131c3565b6122d8565b80611acd81613274565b915050611a3e565b5060138054611b169190611aeb906001906131f6565b81548110611afb57611afb613305565b6000918252602090912001546001600160a01b0316476122d8565b50565b6060600a604051602001611b2d9190612f4d565b604051602081830303815290604052905090565b60155460405163414b464360e01b60208201526bffffffffffffffffffffffff19606086901b1660248201526001600160f81b031960f885811b8216603884015261010090930490921b9091166039820152600090611bc3908390603a016040516020818303038152906040528051906020012061236d90919063ffffffff16565b6010546001600160a01b03918216911614949350505050565b600f81815481106117a957600080fd5b6006546001600160a01b03163314611c165760405162461bcd60e51b81526004016108bc906130cf565b601554600561010090910460ff1610611c2e57600080fd5b60158054610100900460ff16906001611c468361328f565b91906101000a81548160ff021916908360ff16021790555050565b6006546001600160a01b03163314611c8b5760405162461bcd60e51b81526004016108bc906130cf565b6001600160a01b038116611cf05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bc565b611b1681612146565b6000805b8251811015611dce57600754835133916001600160a01b031690636352211e90869085908110611d2f57611d2f613305565b60200260200101516040518263ffffffff1660e01b8152600401611d5591815260200190565b60206040518083038186803b158015611d6d57600080fd5b505afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da59190612b31565b6001600160a01b031614611dbc5750600092915050565b80611dc681613274565b915050611cfd565b50600192915050565b60006001600160e01b031982166380ac58cd60e01b1480611e0857506001600160e01b03198216635b5e139f60e01b145b8061088c57506301ffc9a760e01b6001600160e01b031983161461088c565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5c82610de6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611f0e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108bc565b6000611f1983610de6565b9050806001600160a01b0316846001600160a01b03161480611f545750836001600160a01b0316611f498461096a565b6001600160a01b0316145b80611f8457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611f9f82610de6565b6001600160a01b0316146120075760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108bc565b6001600160a01b0382166120695760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108bc565b612074600082611e27565b6001600160a01b038316600090815260036020526040812080546001929061209d9084906131f6565b90915550506001600160a01b03821660009081526003602052604081208054600192906120cb908490613186565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d0d828260405180602001604052806000815250612391565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121a3848484611f8c565b6121af848484846123c4565b610de05760405162461bcd60e51b81526004016108bc9061307d565b6060600880546108e790613239565b6060816121fe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612228578061221281613274565b91506122219050600a836131c3565b9150612202565b60008167ffffffffffffffff8111156122435761224361331b565b6040519080825280601f01601f19166020018201604052801561226d576020820181803683370190505b5090505b8415611f84576122826001836131f6565b915061228f600a866132af565b61229a906030613186565b60f81b8183815181106122af576122af613305565b60200101906001600160f81b031916908160001a9053506122d1600a866131c3565b9450612271565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612325576040519150601f19603f3d011682016040523d82523d6000602084013e61232a565b606091505b5050905080610b105760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108bc565b600080600061237c85856124d1565b915091506123898161253e565b509392505050565b61239b83836126f9565b6123a860008484846123c4565b610b105760405162461bcd60e51b81526004016108bc9061307d565b60006001600160a01b0384163b156124c657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612408903390899088908890600401612fe9565b602060405180830381600087803b15801561242257600080fd5b505af1925050508015612452575060408051601f3d908101601f1916820190925261244f91810190612d97565b60015b6124ac573d808015612480576040519150601f19603f3d011682016040523d82523d6000602084013e612485565b606091505b5080516124a45760405162461bcd60e51b81526004016108bc9061307d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f84565b506001949350505050565b6000808251604114156125085760208301516040840151606085015160001a6124fc8782858561283b565b94509450505050610bd7565b8251604014156125325760208301516040840151612527868383612928565b935093505050610bd7565b50600090506002610bd7565b6000816004811115612552576125526132ef565b141561255b5750565b600181600481111561256f5761256f6132ef565b14156125bd5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108bc565b60028160048111156125d1576125d16132ef565b141561261f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108bc565b6003816004811115612633576126336132ef565b141561268c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108bc565b60048160048111156126a0576126a06132ef565b1415611b165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108bc565b6001600160a01b03821661274f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108bc565b6000818152600260205260409020546001600160a01b0316156127b45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108bc565b6001600160a01b03821660009081526003602052604081208054600192906127dd908490613186565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612872575060009050600361291f565b8460ff16601b1415801561288a57508460ff16601c14155b1561289b575060009050600461291f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156128ef573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129185760006001925092505061291f565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b016129498782888561283b565b935093505050935093915050565b82805461296390613239565b90600052602060002090601f01602090048101928261298557600085556129cb565b82601f1061299e57805160ff19168380011785556129cb565b828001600101855582156129cb579182015b828111156129cb5782518255916020019190600101906129b0565b506129d79291506129db565b5090565b5b808211156129d757600081556001016129dc565b600067ffffffffffffffff831115612a0a57612a0a61331b565b612a1d601f8401601f1916602001613155565b9050828152838383011115612a3157600080fd5b828260208301376000602084830101529392505050565b600082601f830112612a5957600080fd5b8135602067ffffffffffffffff821115612a7557612a7561331b565b8160051b612a84828201613155565b838152828101908684018388018501891015612a9f57600080fd5b600093505b85841015612ac2578035835260019390930192918401918401612aa4565b50979650505050505050565b80358015158114612ade57600080fd5b919050565b600082601f830112612af457600080fd5b6118aa838335602085016129f0565b803560ff81168114612ade57600080fd5b600060208284031215612b2657600080fd5b81356118aa81613331565b600060208284031215612b4357600080fd5b81516118aa81613331565b60008060408385031215612b6157600080fd5b8235612b6c81613331565b91506020830135612b7c81613331565b809150509250929050565b600080600060608486031215612b9c57600080fd5b8335612ba781613331565b92506020840135612bb781613331565b929592945050506040919091013590565b60008060008060808587031215612bde57600080fd5b8435612be981613331565b93506020850135612bf981613331565b925060408501359150606085013567ffffffffffffffff811115612c1c57600080fd5b612c2887828801612ae3565b91505092959194509250565b60008060408385031215612c4757600080fd5b8235612c5281613331565b9150612c6060208401612ace565b90509250929050565b60008060408385031215612c7c57600080fd5b8235612c8781613331565b946020939093013593505050565b600080600060608486031215612caa57600080fd5b8335612cb581613331565b95602085013595506040909401359392505050565b600080600060608486031215612cdf57600080fd5b8335612cea81613331565b9250612cf860208501612b03565b9150604084013567ffffffffffffffff811115612d1457600080fd5b612d2086828701612ae3565b9150509250925092565b600060208284031215612d3c57600080fd5b813567ffffffffffffffff811115612d5357600080fd5b611f8484828501612a48565b600060208284031215612d7157600080fd5b6118aa82612ace565b600060208284031215612d8c57600080fd5b81356118aa81613346565b600060208284031215612da957600080fd5b81516118aa81613346565b600060208284031215612dc657600080fd5b813567ffffffffffffffff811115612ddd57600080fd5b8201601f81018413612dee57600080fd5b611f84848235602084016129f0565b600060208284031215612e0f57600080fd5b5035919050565b60008060408385031215612e2957600080fd5b823591506020830135612b7c81613331565b60008060408385031215612e4e57600080fd5b50508035926020909101359150565b60008060408385031215612e7057600080fd5b612b6c83612b03565b60008060008060808587031215612e8f57600080fd5b612e9885612b03565b9350602085013567ffffffffffffffff80821115612eb557600080fd5b612ec188838901612a48565b9450612ecf60408801612b03565b93506060870135915080821115612ee557600080fd5b50612c2887828801612ae3565b60008151808452612f0a81602086016020860161320d565b601f01601f19169290920160200192915050565b60008351612f3081846020880161320d565b835190830190612f4481836020880161320d565b01949350505050565b600080835481600182811c915080831680612f6957607f831692505b6020808410821415612f8957634e487b7160e01b86526022600452602486fd5b818015612f9d5760018114612fae57612fdb565b60ff19861689528489019650612fdb565b60008a81526020902060005b86811015612fd35781548b820152908501908301612fba565b505084890196505b509498975050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061301c90830184612ef2565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561305e57835183529284019291840191600101613042565b50909695505050505050565b6020815260006118aa6020830184612ef2565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561317e5761317e61331b565b604052919050565b60008219821115613199576131996132c3565b500190565b600060ff821660ff84168060ff038211156131bb576131bb6132c3565b019392505050565b6000826131d2576131d26132d9565b500490565b60008160001904831182151516156131f1576131f16132c3565b500290565b600082821015613208576132086132c3565b500390565b60005b83811015613228578181015183820152602001613210565b83811115610de05750506000910152565b600181811c9082168061324d57607f821691505b6020821081141561326e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613288576132886132c3565b5060010190565b600060ff821660ff8114156132a6576132a66132c3565b60010192915050565b6000826132be576132be6132d9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b1657600080fd5b6001600160e01b031981168114611b1657600080fdfea264697066735822122064dbada49ec1c2aba8fc1cbf59df4d7806e5ac060d72c192e76e8c095691d4ca64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000009bf252f97891b907f002f2887eff9246e3054080000000000000000000000000a62d22803189cb16946f7018b4f5cc17bd82a781000000000000000000000000e778d58088967d9f62874f493dd374266dba248d00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000134170654b696473466f6f7462616c6c436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414b464300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e6170656b696473636c75622e696f2f6170692f616b66632d74656d702f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ApeKidsFootballClub
Arg [1] : _symbol (string): AKFC
Arg [2] : _initBaseURI (string): https://api.apekidsclub.io/api/akfc-temp/
Arg [3] : _defaultURI (string):
Arg [4] : _akc (address): 0x9Bf252f97891b907F002F2887EfF9246e3054080
Arg [5] : _signer (address): 0xA62D22803189Cb16946f7018b4f5cc17bd82A781
Arg [6] : _royaltyAddr (address): 0xe778d58088967D9F62874f493Dd374266Dba248D
Arg [7] : _royaltyBasis (uint256): 750
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 0000000000000000000000009bf252f97891b907f002f2887eff9246e3054080
Arg [5] : 000000000000000000000000a62d22803189cb16946f7018b4f5cc17bd82a781
Arg [6] : 000000000000000000000000e778d58088967d9f62874f493dd374266dba248d
Arg [7] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [9] : 4170654b696473466f6f7462616c6c436c756200000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [11] : 414b464300000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [13] : 68747470733a2f2f6170692e6170656b696473636c75622e696f2f6170692f61
Arg [14] : 6b66632d74656d702f0000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44487:7311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46285:270;;;;;;;;;;-1:-1:-1;46285:270:0;;;;;:::i;:::-;;:::i;:::-;;;12980:14:1;;12973:22;12955:41;;12943:2;12928:18;46285:270:0;;;;;;;;50786:73;;;;;;;;;;-1:-1:-1;50786:73:0;;;;;:::i;:::-;;:::i;:::-;;21227:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22770:219::-;;;;;;;;;;-1:-1:-1;22770:219:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;11362:32:1;;;11344:51;;11332:2;11317:18;22770:219:0;11198:203:1;22299:407:0;;;;;;;;;;-1:-1:-1;22299:407:0;;;;;:::i;:::-;;:::i;50541:156::-;;;;;;;;;;-1:-1:-1;50541:156:0;;;;;:::i;:::-;;:::i;49251:86::-;;;;;;;;;;-1:-1:-1;49318:13:0;;49251:86;;;26849:25:1;;;26837:2;26822:18;49251:86:0;26703:177:1;45108:21:0;;;;;;;;;;-1:-1:-1;45108:21:0;;;;-1:-1:-1;;;;;45108:21:0;;;23650:337;;;;;;;;;;-1:-1:-1;23650:337:0;;;;;:::i;:::-;;:::i;49899:194::-;;;;;;;;;;-1:-1:-1;49899:194:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;12091:32:1;;;12073:51;;12155:2;12140:18;;12133:34;;;;12046:18;49899:194:0;11899:274:1;45625:26:0;;;;;;;;;;-1:-1:-1;45625:26:0;;;;;;;-1:-1:-1;;;;;45625:26:0;;;50261:79;;;;;;;;;;;;;:::i;44682:24::-;;;;;;;;;;;;;:::i;24056:185::-;;;;;;;;;;-1:-1:-1;24056:185:0;;;;;:::i;:::-;;:::i;45249:61::-;;;;;;;;;;-1:-1:-1;45249:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27057:4:1;27045:17;;;27027:36;;27015:2;27000:18;45249:61:0;26885:184:1;50127:130:0;;;;;;;;;;-1:-1:-1;50127:130:0;;;;;:::i;:::-;;:::i;45554:26::-;;;;;;;;;;-1:-1:-1;45554:26:0;;;;;;;;50863:317;;;;;;;;;;-1:-1:-1;50863:317:0;;;;;:::i;:::-;;:::i;20923:239::-;;;;;;;;;;-1:-1:-1;20923:239:0;;;;;:::i;:::-;;:::i;44711:27::-;;;;;;;;;;;;;:::i;44656:21::-;;;;;;;;;;;;;:::i;20655:208::-;;;;;;;;;;-1:-1:-1;20655:208:0;;;;;:::i;:::-;;:::i;34881:94::-;;;;;;;;;;;;;:::i;46824:1607::-;;;;;;:::i;:::-;;:::i;34234:87::-;;;;;;;;;;-1:-1:-1;34307:6:0;;-1:-1:-1;;;;;34307:6:0;34234:87;;50344:193;;;;;;;;;;-1:-1:-1;50344:193:0;;;;;:::i;:::-;;:::i;21394:104::-;;;;;;;;;;;;;:::i;23059:293::-;;;;;;;;;;-1:-1:-1;23059:293:0;;;;;:::i;:::-;;:::i;24310:328::-;;;;;;;;;;-1:-1:-1;24310:328:0;;;;;:::i;:::-;;:::i;45585:22::-;;;;;;;;;;-1:-1:-1;45585:22:0;;;;;;;;;;;44875:102;;;;;;;;;;-1:-1:-1;44875:102:0;;;;;:::i;:::-;;:::i;45656:27::-;;;;;;;;;;;;;;;;48635:612;;;;;;;;;;-1:-1:-1;48635:612:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49341:414::-;;;;;;;;;;-1:-1:-1;49341:414:0;;;;;:::i;:::-;;:::i;45158:42::-;;;;;;;;;;-1:-1:-1;45158:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44838:32;;;;;;;;;;;;;;;;51217:418;;;;;;;;;;;;;:::i;49759:122::-;;;;;;;;;;;;;:::i;23421:164::-;;;;;;;;;;-1:-1:-1;23421:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23542:25:0;;;23518:4;23542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23421:164;48435:196;;;;;;;;;;-1:-1:-1;48435:196:0;;;;;:::i;:::-;;:::i;45006:66::-;;;;;;;;;;-1:-1:-1;45006:66:0;;;;;:::i;:::-;;:::i;50701:81::-;;;;;;;;;;;;;:::i;44743:35::-;;;;;;;;;;-1:-1:-1;44743:35:0;;;;;;;;35128:192;;;;;;;;;;-1:-1:-1;35128:192:0;;;;;:::i;:::-;;:::i;46559:261::-;;;;;;;;;;-1:-1:-1;46559:261:0;;;;;:::i;:::-;;:::i;46285:270::-;46370:4;-1:-1:-1;;;;;;;;;46392:25:0;;;;:81;;-1:-1:-1;;;;;;;;;;46448:25:0;;;46392:81;:157;;;;46513:36;46537:11;46513:23;:36::i;:::-;46385:164;46285:270;-1:-1:-1;;46285:270:0:o;50786:73::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;;;;;;;;;50838:6:::1;:15:::0;;-1:-1:-1;;50838:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50786:73::o;21227:100::-;21281:13;21314:5;21307:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21227:100;:::o;22770:219::-;22846:7;26233:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26233:16:0;22866:73;;;;-1:-1:-1;;;22866:73:0;;24141:2:1;22866:73:0;;;24123:21:1;24180:2;24160:18;;;24153:30;24219:34;24199:18;;;24192:62;-1:-1:-1;;;24270:18:1;;;24263:42;24322:19;;22866:73:0;23939:408:1;22866:73:0;-1:-1:-1;22957:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22957:24:0;;22770:219::o;22299:407::-;22380:13;22396:23;22411:7;22396:14;:23::i;:::-;22380:39;;22444:5;-1:-1:-1;;;;;22438:11:0;:2;-1:-1:-1;;;;;22438:11:0;;;22430:57;;;;-1:-1:-1;;;22430:57:0;;25741:2:1;22430:57:0;;;25723:21:1;25780:2;25760:18;;;25753:30;25819:34;25799:18;;;25792:62;-1:-1:-1;;;25870:18:1;;;25863:31;25911:19;;22430:57:0;25539:397:1;22430:57:0;15937:10;-1:-1:-1;;;;;22520:21:0;;;;:62;;-1:-1:-1;22545:37:0;22562:5;15937:10;23421:164;:::i;22545:37::-;22498:168;;;;-1:-1:-1;;;22498:168:0;;21095:2:1;22498:168:0;;;21077:21:1;21134:2;21114:18;;;21107:30;21173:34;21153:18;;;21146:62;21244:26;21224:18;;;21217:54;21288:19;;22498:168:0;20893:420:1;22498:168:0;22677:21;22686:2;22690:7;22677:8;:21::i;:::-;22369:337;22299:407;;:::o;50541:156::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50630:11:::1;:26:::0;;-1:-1:-1;;;;;50630:26:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;50630:26:0;;::::1;::::0;;;::::1;::::0;;;50663:12:::1;:28:::0;50541:156::o;23650:337::-;23845:41;15937:10;23878:7;23845:18;:41::i;:::-;23837:103;;;;-1:-1:-1;;;23837:103:0;;;;;;;:::i;:::-;23951:28;23961:4;23967:2;23971:7;23951:9;:28::i;49899:194::-;49985:16;50003:21;50040:11;;;;;;;;;-1:-1:-1;;;;;50040:11:0;50081:5;50066:12;;50053:10;:25;;;;:::i;:::-;:33;;;;:::i;:::-;50032:55;;;;49899:194;;;;;;:::o;50261:79::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50312:15:::1;:22:::0;;-1:-1:-1;;50312:22:0::1;50330:4;50312:22;::::0;;50261:79::o;44682:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24056:185::-;24194:39;24211:4;24217:2;24221:7;24194:39;;;;;;;;;;;;:16;:39::i;50127:130::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50207:15:::1;::::0;::::1;;50206:16;50198:25;;;::::0;::::1;;50230:21:::0;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;50127:130:::0;:::o;50863:317::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50946:14:::1;50963:13;49318::::0;;;49251:86;50963:13:::1;51015:9;::::0;50946:30;;-1:-1:-1;50991:20:0::1;51000:11:::0;50946:30;50991:20:::1;:::i;:::-;:33;;50983:64;;;::::0;-1:-1:-1;;;50983:64:0;;22744:2:1;50983:64:0::1;::::0;::::1;22726:21:1::0;22783:2;22763:18;;;22756:30;-1:-1:-1;;;22802:18:1;;;22795:48;22860:18;;50983:64:0::1;22542:342:1::0;50983:64:0::1;51071:11;51054:13;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;51106:1:0::1;::::0;-1:-1:-1;51089:86:0::1;51114:11;51109:1;:16;51089:86;;51141:26;51151:3:::0;51156:10:::1;51165:1:::0;51156:6;:10:::1;:::i;:::-;51141:9;:26::i;:::-;51127:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51089:86;;;;50935:245;50863:317:::0;;:::o;20923:239::-;20995:7;21031:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21031:16:0;21066:19;21058:73;;;;-1:-1:-1;;;21058:73:0;;21931:2:1;21058:73:0;;;21913:21:1;21970:2;21950:18;;;21943:30;22009:34;21989:18;;;21982:62;-1:-1:-1;;;22060:18:1;;;22053:39;22109:19;;21058:73:0;21729:405:1;44711:27:0;;;;;;;:::i;44656:21::-;;;;;;;:::i;20655:208::-;20727:7;-1:-1:-1;;;;;20755:19:0;;20747:74;;;;-1:-1:-1;;;20747:74:0;;21520:2:1;20747:74:0;;;21502:21:1;21559:2;21539:18;;;21532:30;21598:34;21578:18;;;21571:62;-1:-1:-1;;;21649:18:1;;;21642:40;21699:19;;20747:74:0;21318:406:1;20747:74:0;-1:-1:-1;;;;;;20839:16:0;;;;;:9;:16;;;;;;;20655:208::o;34881:94::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;34946:21:::1;34964:1;34946:9;:21::i;:::-;34881:94::o:0;46824:1607::-;46958:6;;;;46957:7;46949:35;;;;-1:-1:-1;;;46949:35:0;;17113:2:1;46949:35:0;;;17095:21:1;17152:2;17132:18;;;17125:30;-1:-1:-1;;;17171:18:1;;;17164:45;17226:18;;46949:35:0;16911:339:1;46949:35:0;47000:5;;;;;;;:7;;;;46999:23;;-1:-1:-1;47013:5:0;;47020:1;47013:5;;;;;;:8;;46999:23;46991:49;;;;-1:-1:-1;;;46991:49:0;;14189:2:1;46991:49:0;;;14171:21:1;14228:2;14208:18;;;14201:30;-1:-1:-1;;;14247:18:1;;;14240:43;14300:18;;46991:49:0;13987:337:1;46991:49:0;47047:14;47064:13;49318;;;49251:86;47064:13;47047:30;;47103:1;47092:8;:12;;;47084:39;;;;-1:-1:-1;;;47084:39:0;;20751:2:1;47084:39:0;;;20733:21:1;20790:2;20770:18;;;20763:30;-1:-1:-1;;;20809:18:1;;;20802:45;20864:18;;47084:39:0;20549:339:1;47084:39:0;47170:5;;47159:10;:17;;:10;;47170:5;;;;;;47159:17;;;;;;:::i;:::-;;;;;;;;;47147:8;47138:17;;:6;:17;;;;:::i;:::-;:38;;47130:66;;;;-1:-1:-1;;;47130:66:0;;17457:2:1;47130:66:0;;;17439:21:1;17496:2;17476:18;;;17469:30;-1:-1:-1;;;17515:18:1;;;17508:45;17570:18;;47130:66:0;17255:339:1;47130:66:0;47246:5;;47235:10;:17;;:10;;47246:5;;;;;;47235:17;;;;;;:::i;:::-;;;;;;;;;47224:8;:28;;;;;;:::i;:::-;47211:9;:41;;47203:70;;;;-1:-1:-1;;;47203:70:0;;17801:2:1;47203:70:0;;;17783:21:1;17840:2;17820:18;;;17813:30;-1:-1:-1;;;17859:18:1;;;17852:46;17915:18;;47203:70:0;17599:340:1;47203:70:0;47309:9;;47288:17;;;;:6;:17;:::i;:::-;:30;;47280:61;;;;-1:-1:-1;;;47280:61:0;;22744:2:1;47280:61:0;;;22726:21:1;22783:2;22763:18;;;22756:30;-1:-1:-1;;;22802:18:1;;;22795:48;22860:18;;47280:61:0;22542:342:1;47280:61:0;47351:5;;;;;;;;;:8;47348:950;;;47399:5;;;;;47377:50;47399:5;;;47388:17;;;;:10;:17;;;;;;;;47406:10;47388:29;;;;;;;;47377:50;;;;:40;;47388:29;47377:8;:40;:::i;:::-;:50;;;;47369:78;;;;-1:-1:-1;;;47369:78:0;;26561:2:1;47369:78:0;;;26543:21:1;26600:2;26580:18;;;26573:30;-1:-1:-1;;;26619:18:1;;;26612:45;26674:18;;47369:78:0;26359:339:1;47369:78:0;47483:1;47464:9;:16;:20;47456:50;;;;-1:-1:-1;;;47456:50:0;;14531:2:1;47456:50:0;;;14513:21:1;14570:2;14550:18;;;14543:30;-1:-1:-1;;;14589:18:1;;;14582:47;14646:18;;47456:50:0;14329:341:1;47456:50:0;47523:39;47532:10;47544:6;47552:9;47523:8;:39::i;:::-;47515:69;;;;-1:-1:-1;;;47515:69:0;;19589:2:1;47515:69:0;;;19571:21:1;19628:2;19608:18;;;19601:30;-1:-1:-1;;;19647:18:1;;;19640:47;19704:18;;47515:69:0;19387:341:1;47515:69:0;47604:5;;;;;;;;;47593:17;;;;:10;:17;;;;;;;;47611:10;47593:29;;;;;;;:41;;47626:8;;47593:29;;:17;:41;;47626:8;;47593:41;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47348:950;;;47650:5;;;;;;;47657:1;47650:8;47647:651;;;47695:1;47676:9;:16;:20;47668:50;;;;-1:-1:-1;;;47668:50:0;;14531:2:1;47668:50:0;;;14513:21:1;14570:2;14550:18;;;14543:30;-1:-1:-1;;;14589:18:1;;;14582:47;14646:18;;47668:50:0;14329:341:1;47668:50:0;47735:39;47744:10;47756:6;47764:9;47735:8;:39::i;:::-;47727:68;;;;-1:-1:-1;;;47727:68:0;;23796:2:1;47727:68:0;;;23778:21:1;23835:2;23815:18;;;23808:30;-1:-1:-1;;;23854:18:1;;;23847:46;23910:18;;47727:68:0;23594:340:1;47727:68:0;47647:651;;;47811:5;;;;;;;47818:1;47811:8;47808:490;;;47849:16;:23;47837:8;:35;;;47829:68;;;;-1:-1:-1;;;47829:68:0;;14877:2:1;47829:68:0;;;14859:21:1;14916:2;14896:18;;;14889:30;-1:-1:-1;;;14935:18:1;;;14928:50;14995:18;;47829:68:0;14675:344:1;47829:68:0;47910:9;47906:278;47922:16;:23;47920:1;:25;47906:278;;;47969:11;;47989:19;;48013:10;;-1:-1:-1;;;;;47969:11:0;;:19;;47989:16;;48006:1;;47989:19;;;;;;:::i;:::-;;;;;;;47969:40;;;;;;;;;;;;;26849:25:1;;26837:2;26822:18;;26703:177;47969:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47969:54:0;;47961:85;;;;-1:-1:-1;;;47961:85:0;;18905:2:1;47961:85:0;;;18887:21:1;18944:2;18924:18;;;18917:30;-1:-1:-1;;;18963:18:1;;;18956:48;19021:18;;47961:85:0;18703:342:1;47961:85:0;48065:10;:31;48076:16;48093:1;48076:19;;;;;;;;:::i;:::-;;;;;;;;;;;;48065:31;;;;;;;;;;-1:-1:-1;48065:31:0;;;;:40;48057:68;;;;-1:-1:-1;;;48057:68:0;;23452:2:1;48057:68:0;;;23434:21:1;23491:2;23471:18;;;23464:30;-1:-1:-1;;;23510:18:1;;;23503:45;23565:18;;48057:68:0;23250:339:1;48057:68:0;48170:4;48136:10;:31;48147:16;48164:1;48147:19;;;;;;;;:::i;:::-;;;;;;;48136:31;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;47946:3;;;;;:::i;:::-;;;;47906:278;;;;47808:490;;;48199:5;;;;;;;48206:1;48199:8;48196:102;;;48225:26;48234:16;48225:8;:26::i;:::-;48217:48;;;;-1:-1:-1;;;48217:48:0;;19252:2:1;48217:48:0;;;19234:21:1;19291:1;19271:18;;;19264:29;-1:-1:-1;;;19309:18:1;;;19302:39;19358:18;;48217:48:0;19050:332:1;48196:102:0;48321:8;48304:25;;:13;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;48353:1:0;;-1:-1:-1;48336:90:0;48361:8;48356:13;;:1;:13;48336:90;;48385:33;48395:10;48407;48416:1;48407:6;:10;:::i;48385:33::-;48371:3;;;;:::i;:::-;;;;48336:90;;;;46942:1489;46824:1607;;;;:::o;50344:193::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50420:28;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;21394:104::-:0;21450:13;21483:7;21476:14;;;;;:::i;23059:293::-;-1:-1:-1;;;;;23162:24:0;;15937:10;23162:24;;23154:62;;;;-1:-1:-1;;;23154:62:0;;18551:2:1;23154:62:0;;;18533:21:1;18590:2;18570:18;;;18563:30;18629:27;18609:18;;;18602:55;18674:18;;23154:62:0;18349:349:1;23154:62:0;15937:10;23227:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23227:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23227:53:0;;;;;;;;;;23296:48;;12955:41:1;;;23227:42:0;;15937:10;23296:48;;12928:18:1;23296:48:0;;;;;;;23059:293;;:::o;24310:328::-;24485:41;15937:10;24518:7;24485:18;:41::i;:::-;24477:103;;;;-1:-1:-1;;;24477:103:0;;;;;;;:::i;:::-;24591:39;24605:4;24611:2;24615:7;24624:5;24591:13;:39::i;44875:102::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44875:102:0;:::o;48635:612::-;48722:16;48748:18;48769:17;48779:6;48769:9;:17::i;:::-;48748:38;-1:-1:-1;48797:15:0;48793:449;;-1:-1:-1;;48832:16:0;;;48846:1;48832:16;;;;;;;;48825:23;;48793:449;48873:23;48913:10;48899:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48899:25:0;-1:-1:-1;48873:51:0;-1:-1:-1;48935:13:0;48986:7;48963:248;49006:5;48995:7;:16;48963:248;;49052:10;49043:5;:19;49039:30;;;49064:5;;49039:30;49108:6;-1:-1:-1;;;;;49088:26:0;:16;49096:7;49088;:16::i;:::-;-1:-1:-1;;;;;49088:26:0;;49084:116;;;49151:7;49135:6;49142:5;49135:13;;;;;;;;:::i;:::-;;;;;;;;;;:23;49177:7;;;;:::i;:::-;;;;49084:116;49013:9;;;;:::i;:::-;;;;48963:248;;;-1:-1:-1;49228:6:0;;-1:-1:-1;;;48635:612:0;;;;;;:::o;49341:414::-;26209:4;26233:16;;;:7;:16;;;;;;49439:13;;-1:-1:-1;;;;;26233:16:0;49464:97;;;;-1:-1:-1;;;49464:97:0;;25325:2:1;49464:97:0;;;25307:21:1;25364:2;25344:18;;;25337:30;25403:34;25383:18;;;25376:62;-1:-1:-1;;;25454:18:1;;;25447:45;25509:19;;49464:97:0;25123:411:1;49464:97:0;49568:28;49599:10;:8;:10::i;:::-;49568:41;;49654:1;49629:14;49623:28;:32;:126;;49739:10;49623:126;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49691:14;49707:18;:7;:16;:18::i;:::-;49674:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49616:133;49341:414;-1:-1:-1;;;49341:414:0:o;51217:418::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;51286:21:::1;51322:14:::0;51314:23:::1;;;::::0;::::1;;51349:9;51344:144;51368:14;:21:::0;:23:::1;::::0;51390:1:::1;::::0;51368:23:::1;:::i;:::-;51364:1;:27;51344:144;;;51407:73;51417:14;51432:1;51417:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51417:17:0::1;51474:5;51449:19;51469:1;51449:22;;;;;;;;:::i;:::-;;;;;;;;;51436:10;:35;;;;:::i;:::-;:43;;;;:::i;:::-;51407:9;:73::i;:::-;51393:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51344:144;;;-1:-1:-1::0;51566:14:0::1;51581:21:::0;;51556:73:::1;::::0;51566:14;51581:23:::1;::::0;51603:1:::1;::::0;51581:23:::1;:::i;:::-;51566:39;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;51566:39:0::1;51607:21;51556:9;:73::i;:::-;51258:377;51217:418::o:0;49759:122::-;49803:13;49860;49843:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;49829:46;;49759:122;:::o;48435:196::-;48599:5;;48562:43;;-1:-1:-1;;;48562:43:0;;;10913:19:1;-1:-1:-1;;10969:2:1;10965:15;;;10961:53;10948:11;;;10941:74;-1:-1:-1;;;;;;11038:3:1;11081:16;;;11077:25;;11063:12;;;11056:47;48599:5:0;;;;11137:16:1;;;;;;11119:12;;;11112:47;48523:4:0;;48552:73;;48615:9;;11175:12:1;;48562:43:0;;;;;;;;;;;;48552:54;;;;;;:62;;:73;;;;:::i;:::-;48542:6;;-1:-1:-1;;;;;48542:83:0;;;:6;;:83;;48435:196;-1:-1:-1;;;;48435:196:0:o;45006:66::-;;;;;;;;;;;;50701:81;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;50754:5:::1;::::0;50760:1:::1;50754:5;::::0;;::::1;;;:7;50746:16;;;::::0;::::1;;50769:5;:7:::0;;::::1;::::0;::::1;;;::::0;:5:::1;:7;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;50701:81::o:0;35128:192::-;34307:6;;-1:-1:-1;;;;;34307:6:0;15937:10;34452:23;34444:68;;;;-1:-1:-1;;;34444:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35217:22:0;::::1;35209:73;;;::::0;-1:-1:-1;;;35209:73:0;;16005:2:1;35209:73:0::1;::::0;::::1;15987:21:1::0;16044:2;16024:18;;;16017:30;16083:34;16063:18;;;16056:62;-1:-1:-1;;;16134:18:1;;;16127:36;16180:19;;35209:73:0::1;15803:402:1::0;35209:73:0::1;35293:19;35303:8;35293:9;:19::i;46559:261::-:0;46633:4;46651:9;46646:147;46666:16;:23;46662:1;:27;46646:147;;;46708:11;;46728:19;;46752:10;;-1:-1:-1;;;;;46708:11:0;;:19;;46728:16;;46745:1;;46728:19;;;;;;:::i;:::-;;;;;;;46708:40;;;;;;;;;;;;;26849:25:1;;26837:2;26822:18;;26703:177;46708:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46708:54:0;;46705:80;;-1:-1:-1;46780:5:0;;46559:261;-1:-1:-1;;46559:261:0:o;46705:80::-;46691:3;;;;:::i;:::-;;;;46646:147;;;-1:-1:-1;46810:4:0;;46559:261;-1:-1:-1;;46559:261:0:o;20288:305::-;20390:4;-1:-1:-1;;;;;;20427:40:0;;-1:-1:-1;;;20427:40:0;;:105;;-1:-1:-1;;;;;;;20484:48:0;;-1:-1:-1;;;20484:48:0;20427:105;:158;;;-1:-1:-1;;;;;;;;;;18966:40:0;;;20549:36;18857:157;30090:174;30165:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30165:29:0;-1:-1:-1;;;;;30165:29:0;;;;;;;;:24;;30219:23;30165:24;30219:14;:23::i;:::-;-1:-1:-1;;;;;30210:46:0;;;;;;;;;;;30090:174;;:::o;26436:348::-;26529:4;26233:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26233:16:0;26546:73;;;;-1:-1:-1;;;26546:73:0;;20338:2:1;26546:73:0;;;20320:21:1;20377:2;20357:18;;;20350:30;20416:34;20396:18;;;20389:62;-1:-1:-1;;;20467:18:1;;;20460:42;20519:19;;26546:73:0;20136:408:1;26546:73:0;26630:13;26646:23;26661:7;26646:14;:23::i;:::-;26630:39;;26699:5;-1:-1:-1;;;;;26688:16:0;:7;-1:-1:-1;;;;;26688:16:0;;:51;;;;26732:7;-1:-1:-1;;;;;26708:31:0;:20;26720:7;26708:11;:20::i;:::-;-1:-1:-1;;;;;26708:31:0;;26688:51;:87;;;-1:-1:-1;;;;;;23542:25:0;;;23518:4;23542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26743:32;26680:96;26436:348;-1:-1:-1;;;;26436:348:0:o;29404:570::-;29563:4;-1:-1:-1;;;;;29536:31:0;:23;29551:7;29536:14;:23::i;:::-;-1:-1:-1;;;;;29536:31:0;;29528:85;;;;-1:-1:-1;;;29528:85:0;;24915:2:1;29528:85:0;;;24897:21:1;24954:2;24934:18;;;24927:30;24993:34;24973:18;;;24966:62;-1:-1:-1;;;25044:18:1;;;25037:39;25093:19;;29528:85:0;24713:405:1;29528:85:0;-1:-1:-1;;;;;29632:16:0;;29624:65;;;;-1:-1:-1;;;29624:65:0;;18146:2:1;29624:65:0;;;18128:21:1;18185:2;18165:18;;;18158:30;18224:34;18204:18;;;18197:62;-1:-1:-1;;;18275:18:1;;;18268:34;18319:19;;29624:65:0;17944:400:1;29624:65:0;29802:29;29819:1;29823:7;29802:8;:29::i;:::-;-1:-1:-1;;;;;29842:15:0;;;;;;:9;:15;;;;;:20;;29861:1;;29842:15;:20;;29861:1;;29842:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29873:13:0;;;;;;:9;:13;;;;;:18;;29890:1;;29873:13;:18;;29890:1;;29873:18;:::i;:::-;;;;-1:-1:-1;;29902:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29902:21:0;-1:-1:-1;;;;;29902:21:0;;;;;;;;;29939:27;;29902:16;;29939:27;;;;;;;29404:570;;;:::o;27124:110::-;27200:26;27210:2;27214:7;27200:26;;;;;;;;;;;;:9;:26::i;35326:173::-;35401:6;;;-1:-1:-1;;;;;35418:17:0;;;-1:-1:-1;;;;;;35418:17:0;;;;;;;35451:40;;35401:6;;;35418:17;35401:6;;35451:40;;35382:16;;35451:40;35371:128;35326:173;:::o;25518:315::-;25675:28;25685:4;25691:2;25695:7;25675:9;:28::i;:::-;25722:48;25745:4;25751:2;25755:7;25764:5;25722:22;:48::i;:::-;25714:111;;;;-1:-1:-1;;;25714:111:0;;;;;;;:::i;46166:102::-;46226:13;46255:7;46248:14;;;;;:::i;16343:721::-;16399:13;16618:10;16614:53;;-1:-1:-1;;16645:10:0;;;;;;;;;;;;-1:-1:-1;;;16645:10:0;;;;;16343:721::o;16614:53::-;16692:5;16677:12;16733:78;16740:9;;16733:78;;16766:8;;;;:::i;:::-;;-1:-1:-1;16789:10:0;;-1:-1:-1;16797:2:0;16789:10;;:::i;:::-;;;16733:78;;;16821:19;16853:6;16843:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16843:17:0;;16821:39;;16871:154;16878:10;;16871:154;;16905:11;16915:1;16905:11;;:::i;:::-;;-1:-1:-1;16974:10:0;16982:2;16974:5;:10;:::i;:::-;16961:24;;:2;:24;:::i;:::-;16948:39;;16931:6;16938;16931:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16931:56:0;;;;;;;;-1:-1:-1;17002:11:0;17011:2;17002:11;;:::i;:::-;;;16871:154;;51639:156;51703:12;51720:5;-1:-1:-1;;;;;51720:10:0;51738:4;51720:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51702:45;;;51762:7;51754:35;;;;-1:-1:-1;;;51754:35:0;;16412:2:1;51754:35:0;;;16394:21:1;16451:2;16431:18;;;16424:30;-1:-1:-1;;;16470:18:1;;;16463:45;16525:18;;51754:35:0;16210:339:1;39800:231:0;39878:7;39899:17;39918:18;39940:27;39951:4;39957:9;39940:10;:27::i;:::-;39898:69;;;;39978:18;39990:5;39978:11;:18::i;:::-;-1:-1:-1;40014:9:0;39800:231;-1:-1:-1;;;39800:231:0:o;27459:321::-;27589:18;27595:2;27599:7;27589:5;:18::i;:::-;27640:54;27671:1;27675:2;27679:7;27688:5;27640:22;:54::i;:::-;27618:154;;;;-1:-1:-1;;;27618:154:0;;;;;;;:::i;30827:799::-;30982:4;-1:-1:-1;;;;;31003:13:0;;8289:20;8337:8;30999:620;;31039:72;;-1:-1:-1;;;31039:72:0;;-1:-1:-1;;;;;31039:36:0;;;;;:72;;15937:10;;31090:4;;31096:7;;31105:5;;31039:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31039:72:0;;;;;;;;-1:-1:-1;;31039:72:0;;;;;;;;;;;;:::i;:::-;;;31035:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31281:13:0;;31277:272;;31324:60;;-1:-1:-1;;;31324:60:0;;;;;;;:::i;31277:272::-;31499:6;31493:13;31484:6;31480:2;31476:15;31469:38;31035:529;-1:-1:-1;;;;;;31162:51:0;-1:-1:-1;;;31162:51:0;;-1:-1:-1;31155:58:0;;30999:620;-1:-1:-1;31603:4:0;30827:799;;;;;;:::o;37692:1308::-;37773:7;37782:12;38007:9;:16;38027:2;38007:22;38003:990;;;38303:4;38288:20;;38282:27;38353:4;38338:20;;38332:27;38411:4;38396:20;;38390:27;38046:9;38382:36;38454:25;38465:4;38382:36;38282:27;38332;38454:10;:25::i;:::-;38447:32;;;;;;;;;38003:990;38501:9;:16;38521:2;38501:22;38497:496;;;38776:4;38761:20;;38755:27;38827:4;38812:20;;38806:27;38869:23;38880:4;38755:27;38806;38869:10;:23::i;:::-;38862:30;;;;;;;;38497:496;-1:-1:-1;38941:1:0;;-1:-1:-1;38945:35:0;38925:56;;35965:643;36043:20;36034:5;:29;;;;;;;;:::i;:::-;;36030:571;;;35965:643;:::o;36030:571::-;36141:29;36132:5;:38;;;;;;;;:::i;:::-;;36128:473;;;36187:34;;-1:-1:-1;;;36187:34:0;;13836:2:1;36187:34:0;;;13818:21:1;13875:2;13855:18;;;13848:30;13914:26;13894:18;;;13887:54;13958:18;;36187:34:0;13634:348:1;36128:473:0;36252:35;36243:5;:44;;;;;;;;:::i;:::-;;36239:362;;;36304:41;;-1:-1:-1;;;36304:41:0;;15226:2:1;36304:41:0;;;15208:21:1;15265:2;15245:18;;;15238:30;15304:33;15284:18;;;15277:61;15355:18;;36304:41:0;15024:355:1;36239:362:0;36376:30;36367:5;:39;;;;;;;;:::i;:::-;;36363:238;;;36423:44;;-1:-1:-1;;;36423:44:0;;19935:2:1;36423:44:0;;;19917:21:1;19974:2;19954:18;;;19947:30;20013:34;19993:18;;;19986:62;-1:-1:-1;;;20064:18:1;;;20057:32;20106:19;;36423:44:0;19733:398:1;36363:238:0;36498:30;36489:5;:39;;;;;;;;:::i;:::-;;36485:116;;;36545:44;;-1:-1:-1;;;36545:44:0;;22341:2:1;36545:44:0;;;22323:21:1;22380:2;22360:18;;;22353:30;22419:34;22399:18;;;22392:62;-1:-1:-1;;;22470:18:1;;;22463:32;22512:19;;36545:44:0;22139:398:1;28114:376:0;-1:-1:-1;;;;;28194:16:0;;28186:61;;;;-1:-1:-1;;;28186:61:0;;23091:2:1;28186:61:0;;;23073:21:1;;;23110:18;;;23103:30;23169:34;23149:18;;;23142:62;23221:18;;28186:61:0;22889:356:1;28186:61:0;26209:4;26233:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26233:16:0;:30;28258:58;;;;-1:-1:-1;;;28258:58:0;;16756:2:1;28258:58:0;;;16738:21:1;16795:2;16775:18;;;16768:30;16834;16814:18;;;16807:58;16882:18;;28258:58:0;16554:352:1;28258:58:0;-1:-1:-1;;;;;28383:13:0;;;;;;:9;:13;;;;;:18;;28400:1;;28383:13;:18;;28400:1;;28383:18;:::i;:::-;;;;-1:-1:-1;;28412:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28412:21:0;-1:-1:-1;;;;;28412:21:0;;;;;;;;28449:33;;28412:16;;;28449:33;;28412:16;;28449:33;28114:376;;:::o;41293:1628::-;41424:7;;42358:66;42345:79;;42341:163;;;-1:-1:-1;42457:1:0;;-1:-1:-1;42461:30:0;42441:51;;42341:163;42518:1;:7;;42523:2;42518:7;;:18;;;;;42529:1;:7;;42534:2;42529:7;;42518:18;42514:102;;;-1:-1:-1;42569:1:0;;-1:-1:-1;42573:30:0;42553:51;;42514:102;42728:24;;;42711:14;42728:24;;;;;;;;;13234:25:1;;;13307:4;13295:17;;13275:18;;;13268:45;;;;13329:18;;;13322:34;;;13372:18;;;13365:34;;;42728:24:0;;13206:19:1;;42728:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42728:24:0;;-1:-1:-1;;42728:24:0;;;-1:-1:-1;;;;;;;42767:20:0;;42763:103;;42820:1;42824:29;42804:50;;;;;;;42763:103;42884:6;-1:-1:-1;42892:20:0;;-1:-1:-1;41293:1628:0;;;;;;;;:::o;40292:391::-;40406:7;;-1:-1:-1;;;;;40507:75:0;;40609:3;40605:12;;;40619:2;40601:21;40650:25;40661:4;40601:21;40670:1;40507:75;40650:10;:25::i;:::-;40643:32;;;;;;40292:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:723::-;479:5;532:3;525:4;517:6;513:17;509:27;499:55;;550:1;547;540:12;499:55;586:6;573:20;612:4;635:18;631:2;628:26;625:52;;;657:18;;:::i;:::-;703:2;700:1;696:10;726:28;750:2;746;742:11;726:28;:::i;:::-;788:15;;;819:12;;;;851:15;;;885;;;881:24;;878:33;-1:-1:-1;875:53:1;;;924:1;921;914:12;875:53;946:1;937:10;;956:163;970:2;967:1;964:9;956:163;;;1027:17;;1015:30;;988:1;981:9;;;;;1065:12;;;;1097;;956:163;;;-1:-1:-1;1137:5:1;425:723;-1:-1:-1;;;;;;;425:723:1:o;1153:160::-;1218:20;;1274:13;;1267:21;1257:32;;1247:60;;1303:1;1300;1293:12;1247:60;1153:160;;;:::o;1318:220::-;1360:5;1413:3;1406:4;1398:6;1394:17;1390:27;1380:55;;1431:1;1428;1421:12;1380:55;1453:79;1528:3;1519:6;1506:20;1499:4;1491:6;1487:17;1453:79;:::i;1543:156::-;1609:20;;1669:4;1658:16;;1648:27;;1638:55;;1689:1;1686;1679:12;1704:247;1763:6;1816:2;1804:9;1795:7;1791:23;1787:32;1784:52;;;1832:1;1829;1822:12;1784:52;1871:9;1858:23;1890:31;1915:5;1890:31;:::i;1956:251::-;2026:6;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2127:9;2121:16;2146:31;2171:5;2146:31;:::i;2212:388::-;2280:6;2288;2341:2;2329:9;2320:7;2316:23;2312:32;2309:52;;;2357:1;2354;2347:12;2309:52;2396:9;2383:23;2415:31;2440:5;2415:31;:::i;:::-;2465:5;-1:-1:-1;2522:2:1;2507:18;;2494:32;2535:33;2494:32;2535:33;:::i;:::-;2587:7;2577:17;;;2212:388;;;;;:::o;2605:456::-;2682:6;2690;2698;2751:2;2739:9;2730:7;2726:23;2722:32;2719:52;;;2767:1;2764;2757:12;2719:52;2806:9;2793:23;2825:31;2850:5;2825:31;:::i;:::-;2875:5;-1:-1:-1;2932:2:1;2917:18;;2904:32;2945:33;2904:32;2945:33;:::i;:::-;2605:456;;2997:7;;-1:-1:-1;;;3051:2:1;3036:18;;;;3023:32;;2605:456::o;3066:665::-;3161:6;3169;3177;3185;3238:3;3226:9;3217:7;3213:23;3209:33;3206:53;;;3255:1;3252;3245:12;3206:53;3294:9;3281:23;3313:31;3338:5;3313:31;:::i;:::-;3363:5;-1:-1:-1;3420:2:1;3405:18;;3392:32;3433:33;3392:32;3433:33;:::i;:::-;3485:7;-1:-1:-1;3539:2:1;3524:18;;3511:32;;-1:-1:-1;3594:2:1;3579:18;;3566:32;3621:18;3610:30;;3607:50;;;3653:1;3650;3643:12;3607:50;3676:49;3717:7;3708:6;3697:9;3693:22;3676:49;:::i;:::-;3666:59;;;3066:665;;;;;;;:::o;3736:315::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3917:9;3904:23;3936:31;3961:5;3936:31;:::i;:::-;3986:5;-1:-1:-1;4010:35:1;4041:2;4026:18;;4010:35;:::i;:::-;4000:45;;3736:315;;;;;:::o;4056:::-;4124:6;4132;4185:2;4173:9;4164:7;4160:23;4156:32;4153:52;;;4201:1;4198;4191:12;4153:52;4240:9;4227:23;4259:31;4284:5;4259:31;:::i;:::-;4309:5;4361:2;4346:18;;;;4333:32;;-1:-1:-1;;;4056:315:1:o;4376:383::-;4453:6;4461;4469;4522:2;4510:9;4501:7;4497:23;4493:32;4490:52;;;4538:1;4535;4528:12;4490:52;4577:9;4564:23;4596:31;4621:5;4596:31;:::i;:::-;4646:5;4698:2;4683:18;;4670:32;;-1:-1:-1;4749:2:1;4734:18;;;4721:32;;4376:383;-1:-1:-1;;;4376:383:1:o;4764:525::-;4848:6;4856;4864;4917:2;4905:9;4896:7;4892:23;4888:32;4885:52;;;4933:1;4930;4923:12;4885:52;4972:9;4959:23;4991:31;5016:5;4991:31;:::i;:::-;5041:5;-1:-1:-1;5065:36:1;5097:2;5082:18;;5065:36;:::i;:::-;5055:46;;5152:2;5141:9;5137:18;5124:32;5179:18;5171:6;5168:30;5165:50;;;5211:1;5208;5201:12;5165:50;5234:49;5275:7;5266:6;5255:9;5251:22;5234:49;:::i;:::-;5224:59;;;4764:525;;;;;:::o;5294:348::-;5378:6;5431:2;5419:9;5410:7;5406:23;5402:32;5399:52;;;5447:1;5444;5437:12;5399:52;5487:9;5474:23;5520:18;5512:6;5509:30;5506:50;;;5552:1;5549;5542:12;5506:50;5575:61;5628:7;5619:6;5608:9;5604:22;5575:61;:::i;5647:180::-;5703:6;5756:2;5744:9;5735:7;5731:23;5727:32;5724:52;;;5772:1;5769;5762:12;5724:52;5795:26;5811:9;5795:26;:::i;5832:245::-;5890:6;5943:2;5931:9;5922:7;5918:23;5914:32;5911:52;;;5959:1;5956;5949:12;5911:52;5998:9;5985:23;6017:30;6041:5;6017:30;:::i;6082:249::-;6151:6;6204:2;6192:9;6183:7;6179:23;6175:32;6172:52;;;6220:1;6217;6210:12;6172:52;6252:9;6246:16;6271:30;6295:5;6271:30;:::i;6336:450::-;6405:6;6458:2;6446:9;6437:7;6433:23;6429:32;6426:52;;;6474:1;6471;6464:12;6426:52;6514:9;6501:23;6547:18;6539:6;6536:30;6533:50;;;6579:1;6576;6569:12;6533:50;6602:22;;6655:4;6647:13;;6643:27;-1:-1:-1;6633:55:1;;6684:1;6681;6674:12;6633:55;6707:73;6772:7;6767:2;6754:16;6749:2;6745;6741:11;6707:73;:::i;6791:180::-;6850:6;6903:2;6891:9;6882:7;6878:23;6874:32;6871:52;;;6919:1;6916;6909:12;6871:52;-1:-1:-1;6942:23:1;;6791:180;-1:-1:-1;6791:180:1:o;6976:315::-;7044:6;7052;7105:2;7093:9;7084:7;7080:23;7076:32;7073:52;;;7121:1;7118;7111:12;7073:52;7157:9;7144:23;7134:33;;7217:2;7206:9;7202:18;7189:32;7230:31;7255:5;7230:31;:::i;7296:248::-;7364:6;7372;7425:2;7413:9;7404:7;7400:23;7396:32;7393:52;;;7441:1;7438;7431:12;7393:52;-1:-1:-1;;7464:23:1;;;7534:2;7519:18;;;7506:32;;-1:-1:-1;7296:248:1:o;7549:317::-;7615:6;7623;7676:2;7664:9;7655:7;7651:23;7647:32;7644:52;;;7692:1;7689;7682:12;7644:52;7715:27;7732:9;7715:27;:::i;7871:708::-;7987:6;7995;8003;8011;8064:3;8052:9;8043:7;8039:23;8035:33;8032:53;;;8081:1;8078;8071:12;8032:53;8104:27;8121:9;8104:27;:::i;:::-;8094:37;;8182:2;8171:9;8167:18;8154:32;8205:18;8246:2;8238:6;8235:14;8232:34;;;8262:1;8259;8252:12;8232:34;8285:61;8338:7;8329:6;8318:9;8314:22;8285:61;:::i;:::-;8275:71;;8365:36;8397:2;8386:9;8382:18;8365:36;:::i;:::-;8355:46;;8454:2;8443:9;8439:18;8426:32;8410:48;;8483:2;8473:8;8470:16;8467:36;;;8499:1;8496;8489:12;8467:36;;8522:51;8565:7;8554:8;8543:9;8539:24;8522:51;:::i;8584:257::-;8625:3;8663:5;8657:12;8690:6;8685:3;8678:19;8706:63;8762:6;8755:4;8750:3;8746:14;8739:4;8732:5;8728:16;8706:63;:::i;:::-;8823:2;8802:15;-1:-1:-1;;8798:29:1;8789:39;;;;8830:4;8785:50;;8584:257;-1:-1:-1;;8584:257:1:o;8846:470::-;9025:3;9063:6;9057:13;9079:53;9125:6;9120:3;9113:4;9105:6;9101:17;9079:53;:::i;:::-;9195:13;;9154:16;;;;9217:57;9195:13;9154:16;9251:4;9239:17;;9217:57;:::i;:::-;9290:20;;8846:470;-1:-1:-1;;;;8846:470:1:o;9321:1099::-;9449:3;9478:1;9511:6;9505:13;9541:3;9563:1;9591:9;9587:2;9583:18;9573:28;;9651:2;9640:9;9636:18;9673;9663:61;;9717:4;9709:6;9705:17;9695:27;;9663:61;9743:2;9791;9783:6;9780:14;9760:18;9757:38;9754:165;;;-1:-1:-1;;;9818:33:1;;9874:4;9871:1;9864:15;9904:4;9825:3;9892:17;9754:165;9935:18;9962:104;;;;10080:1;10075:320;;;;9928:467;;9962:104;-1:-1:-1;;9995:24:1;;9983:37;;10040:16;;;;-1:-1:-1;9962:104:1;;10075:320;27427:1;27420:14;;;27464:4;27451:18;;10170:1;10184:165;10198:6;10195:1;10192:13;10184:165;;;10276:14;;10263:11;;;10256:35;10319:16;;;;10213:10;;10184:165;;;10188:3;;10378:6;10373:3;10369:16;10362:23;;9928:467;-1:-1:-1;10411:3:1;;9321:1099;-1:-1:-1;;;;;;;;9321:1099:1:o;11406:488::-;-1:-1:-1;;;;;11675:15:1;;;11657:34;;11727:15;;11722:2;11707:18;;11700:43;11774:2;11759:18;;11752:34;;;11822:3;11817:2;11802:18;;11795:31;;;11600:4;;11843:45;;11868:19;;11860:6;11843:45;:::i;:::-;11835:53;11406:488;-1:-1:-1;;;;;;11406:488:1:o;12178:632::-;12349:2;12401:21;;;12471:13;;12374:18;;;12493:22;;;12320:4;;12349:2;12572:15;;;;12546:2;12531:18;;;12320:4;12615:169;12629:6;12626:1;12623:13;12615:169;;;12690:13;;12678:26;;12759:15;;;;12724:12;;;;12651:1;12644:9;12615:169;;;-1:-1:-1;12801:3:1;;12178:632;-1:-1:-1;;;;;;12178:632:1:o;13410:219::-;13559:2;13548:9;13541:21;13522:4;13579:44;13619:2;13608:9;13604:18;13596:6;13579:44;:::i;15384:414::-;15586:2;15568:21;;;15625:2;15605:18;;;15598:30;15664:34;15659:2;15644:18;;15637:62;-1:-1:-1;;;15730:2:1;15715:18;;15708:48;15788:3;15773:19;;15384:414::o;24352:356::-;24554:2;24536:21;;;24573:18;;;24566:30;24632:34;24627:2;24612:18;;24605:62;24699:2;24684:18;;24352:356::o;25941:413::-;26143:2;26125:21;;;26182:2;26162:18;;;26155:30;26221:34;26216:2;26201:18;;26194:62;-1:-1:-1;;;26287:2:1;26272:18;;26265:47;26344:3;26329:19;;25941:413::o;27074:275::-;27145:2;27139:9;27210:2;27191:13;;-1:-1:-1;;27187:27:1;27175:40;;27245:18;27230:34;;27266:22;;;27227:62;27224:88;;;27292:18;;:::i;:::-;27328:2;27321:22;27074:275;;-1:-1:-1;27074:275:1:o;27480:128::-;27520:3;27551:1;27547:6;27544:1;27541:13;27538:39;;;27557:18;;:::i;:::-;-1:-1:-1;27593:9:1;;27480:128::o;27613:204::-;27651:3;27687:4;27684:1;27680:12;27719:4;27716:1;27712:12;27754:3;27748:4;27744:14;27739:3;27736:23;27733:49;;;27762:18;;:::i;:::-;27798:13;;27613:204;-1:-1:-1;;;27613:204:1:o;27822:120::-;27862:1;27888;27878:35;;27893:18;;:::i;:::-;-1:-1:-1;27927:9:1;;27822:120::o;27947:168::-;27987:7;28053:1;28049;28045:6;28041:14;28038:1;28035:21;28030:1;28023:9;28016:17;28012:45;28009:71;;;28060:18;;:::i;:::-;-1:-1:-1;28100:9:1;;27947:168::o;28120:125::-;28160:4;28188:1;28185;28182:8;28179:34;;;28193:18;;:::i;:::-;-1:-1:-1;28230:9:1;;28120:125::o;28250:258::-;28322:1;28332:113;28346:6;28343:1;28340:13;28332:113;;;28422:11;;;28416:18;28403:11;;;28396:39;28368:2;28361:10;28332:113;;;28463:6;28460:1;28457:13;28454:48;;;-1:-1:-1;;28498:1:1;28480:16;;28473:27;28250:258::o;28513:380::-;28592:1;28588:12;;;;28635;;;28656:61;;28710:4;28702:6;28698:17;28688:27;;28656:61;28763:2;28755:6;28752:14;28732:18;28729:38;28726:161;;;28809:10;28804:3;28800:20;28797:1;28790:31;28844:4;28841:1;28834:15;28872:4;28869:1;28862:15;28726:161;;28513:380;;;:::o;28898:135::-;28937:3;-1:-1:-1;;28958:17:1;;28955:43;;;28978:18;;:::i;:::-;-1:-1:-1;29025:1:1;29014:13;;28898:135::o;29038:175::-;29075:3;29119:4;29112:5;29108:16;29148:4;29139:7;29136:17;29133:43;;;29156:18;;:::i;:::-;29205:1;29192:15;;29038:175;-1:-1:-1;;29038:175:1:o;29218:112::-;29250:1;29276;29266:35;;29281:18;;:::i;:::-;-1:-1:-1;29315:9:1;;29218:112::o;29335:127::-;29396:10;29391:3;29387:20;29384:1;29377:31;29427:4;29424:1;29417:15;29451:4;29448:1;29441:15;29467:127;29528:10;29523:3;29519:20;29516:1;29509:31;29559:4;29556:1;29549:15;29583:4;29580:1;29573:15;29599:127;29660:10;29655:3;29651:20;29648:1;29641:31;29691:4;29688:1;29681:15;29715:4;29712:1;29705:15;29731:127;29792:10;29787:3;29783:20;29780:1;29773:31;29823:4;29820:1;29813:15;29847:4;29844:1;29837:15;29863:127;29924:10;29919:3;29915:20;29912:1;29905:31;29955:4;29952:1;29945:15;29979:4;29976:1;29969:15;29995:131;-1:-1:-1;;;;;30070:31:1;;30060:42;;30050:70;;30116:1;30113;30106:12;30131:131;-1:-1:-1;;;;;;30205:32:1;;30195:43;;30185:71;;30252:1;30249;30242:12
Swarm Source
ipfs://64dbada49ec1c2aba8fc1cbf59df4d7806e5ac060d72c192e76e8c095691d4ca
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.