Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Royalty Info | 6436823 | 17 days ago | IN | 0 APE | 0.00079902 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
HyApes
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-12-09 */ // https://hyapes.online // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @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 {} } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; library Counters { struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } interface IERC2981 is IERC165 { function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } contract HyApes is Ownable, ERC721, ERC721Enumerable, IERC2981 { using Strings for uint256; using Counters for Counters.Counter; // basic bool private _mintingStarted = false; string private _assetsBaseURI; uint256 private _decimalBase = 3; uint256 private _maxMintPerTx; uint256 private _maxSupply; uint256 private _mintPrice; uint256 private _reflection; // status Counters.Counter private _tokenIds; mapping(uint256 => address) private _originalMinters; uint256 private _totalDividend; mapping(uint256 => uint256) private _claimedDividends; // mint shares uint256 public _mintSharesTeam = 800; uint256 public _mintSharesReflect = 200; // balances uint256 private _balanceTeam; uint256 private _balanceReflections; // events event FundsDirectlyDeposited(address sender, uint256 amount); event FundsReceived(address sender, uint256 amount); event TokensMinted( uint256 currentSupply, uint256 maxSupply, uint256 reflectBalance ); event TokensBurned(uint256 currentSupply, uint256 maxSupply); event MintRewardsClaimed(uint256 claimedAmount, uint256 reflectBalance); uint256 private _royaltyFee = 500; address private _royaltyReceiver; constructor( string memory name, string memory symbol, uint256 maxSupply, uint256 maxMintPerTx, uint256 mintPrice, string memory assetsBaseURI, address royaltyReceiver ) ERC721(name, symbol) { _maxSupply = maxSupply; _mintPrice = mintPrice; _maxMintPerTx = maxMintPerTx; _assetsBaseURI = assetsBaseURI; _reflection = (_actualMintPrice() * _mintSharesReflect) / (10**_decimalBase); _royaltyReceiver = royaltyReceiver; } // --- fallback/received --- // receive() external payable { emit FundsReceived(_msgSender(), msg.value); } fallback() external payable { emit FundsDirectlyDeposited(_msgSender(), msg.value); } // Get the current tokens of owner function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } // --- overrides --- // function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function _baseURI() internal view override(ERC721) returns (string memory) { return _assetsBaseURI; } // --- modifiers --- // modifier whenMintingAllowed() { require( _mintingStarted && _tokenIds.current() < _maxSupply, "Minting not started or sold-out" ); _; } // -- utils -- // function _actualMintPrice() internal view returns (uint256) { return _mintPrice * (10**(18 - _decimalBase)); } /** * @dev allocate funds based on mint shares percentage * _mintSharesTeam: to allocate toward different department spending * _mintSharesReflect: to allocate toward minting rewards */ function _splitMintFees(uint256 payment) internal { if (payment > 0) { uint256 reflect = (payment * _mintSharesReflect) / (10**_decimalBase); _balanceReflections += reflect; _balanceTeam += payment - reflect; } } /** * @dev all tokens belonging to a wallet address */ function _tokensByOwner(address tOwner) internal view returns (uint256[] memory) { uint256 balOf = balanceOf(tOwner); uint256[] memory tokens = new uint256[](balOf); for (uint256 i = 0; i < balOf; i++) { tokens[i] = tokenOfOwnerByIndex(tOwner, i); } return tokens; } /** * @dev calculate earned reflection minus claimed reflections */ function _allEarnedReflection(address tokenOwner) internal view returns (uint256) { uint256[] memory _tokens = _tokensByOwner(tokenOwner); if (_tokens.length == 0) { return 0; } uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; } } return _allEarned; } /** * @dev claim & deduct mint rewards for an address */ function _claimAllMintRewards(address tokenOwner) internal { uint256[] memory _tokens = _tokensByOwner(tokenOwner); require(_tokens.length > 0, "Tokens not found in wallet"); uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; _claimedDividends[_tokens[i]] += _tEarned; } } require(_allEarned > 0, "Insufficient balance"); _balanceReflections -= _allEarned; payable(_msgSender()).transfer(_allEarned); emit MintRewardsClaimed(_allEarned, _balanceReflections); } // --- owners call --- // /** * @dev paying only the portion allocated for team */ function payout() public onlyOwner { uint256 p = _balanceTeam; payable(0x4C40667198cA7d011941EcCBd2b42381bD69B141).transfer( (p * 100) / 100 ); _balanceTeam = 0; } function airdropMint(address recipient, uint256 amount) public onlyOwner { require( (_tokenIds.current()) + amount < _maxSupply, "Exceeds max supply" ); mintToken(recipient, amount, 0); } function airdrop(address[] calldata addresses, uint256[] calldata amounts) public onlyOwner { require(addresses.length > 0 && amounts.length == addresses.length); for (uint256 i = 0; i < addresses.length; i++) { mintToken(addresses[i], amounts[i], 0); } } function setAssetsBaseURI(string memory baseURI) public onlyOwner { require(bytes(baseURI).length > 0, "Empty value"); _assetsBaseURI = baseURI; } function setMintSharesTeam(uint256 _newMintSharesTeam) public onlyOwner { _mintSharesTeam = _newMintSharesTeam; } function setMintSharesReflect(uint256 _newMintSharesReflect) public onlyOwner { _mintSharesReflect = _newMintSharesReflect; } function setMaxMintPerTx(uint256 amount) public onlyOwner { _maxMintPerTx = amount; } function startMinting() public onlyOwner { _mintingStarted = true; } function setMaxSupply(uint256 max) public onlyOwner { require(max >= _tokenIds.current(), "Must be >= current supply"); _maxSupply = max; } function setMintPrice(uint256 price) public onlyOwner { _mintPrice = price; _reflection = (_actualMintPrice() * _mintSharesReflect) / (10**_decimalBase); } // --- token --- // /** * @dev actual mint function and starting dividend tracking for new token */ function mintToken( address recipient, uint256 amount, uint256 payment ) internal { _splitMintFees(payment); uint256 tokenId; for (uint256 i = 0; i < amount; i++) { _tokenIds.increment(); tokenId = _tokenIds.current(); _mint(recipient, tokenId); _originalMinters[tokenId] = recipient; _claimedDividends[tokenId] = _totalDividend; if (payment > 0) { _totalDividend += (_reflection / tokenId); } } emit TokensMinted(totalSupply(), _maxSupply, _balanceReflections); } // --- public --- // /** * @dev public mint function - just some safeguards for fair launch */ function mint(uint256 amount) public payable whenMintingAllowed { require( ((_tokenIds.current() + amount) <= _maxSupply) && (amount <= _maxMintPerTx) && (msg.value >= _actualMintPrice() * amount), "Mint failed" ); mintToken(_msgSender(), amount, msg.value); } /** * @dev only owner should be able to burn token */ function burn(uint256 tokenId) public { require( _isApprovedOrOwner(_msgSender(), tokenId), "Not owner nor approved" ); _burn(tokenId); emit TokensBurned(totalSupply(), _maxSupply); } function tokenURI(uint256 tokenId) public view virtual override(ERC721) returns (string memory) { require(_exists(tokenId), "Nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string( abi.encodePacked( abi.encodePacked(baseURI, tokenId.toString()), "" ) ) : ""; //.json } /** * @dev aggregated contract data */ function cData() public view returns ( bool, uint256, uint256, uint256, uint256, uint256, uint256, string memory ) { return ( _mintingStarted, _decimalBase, totalSupply(), _maxSupply, _mintPrice, _reflection, _maxMintPerTx, _assetsBaseURI ); } /** * @dev mint shares and distribution */ function cShares() public view returns (uint256, uint256) { return (_mintSharesReflect, _mintSharesTeam); } /** * @dev contract balances */ function cBalances() public view returns ( uint256, uint256, uint256 ) { return (address(this).balance, _balanceReflections, _balanceTeam); } /** * @dev account data */ function aData() public view returns ( uint256, uint256, uint256[] memory ) { return ( balanceOf(_msgSender()), _allEarnedReflection(_msgSender()), _tokensByOwner(_msgSender()) ); } function originalMinter(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "Nonexistent token"); return _originalMinters[tokenId]; } /** * @dev claiming mint reflection rewards for an account */ function claimMintRewards() public { _claimAllMintRewards(_msgSender()); } function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "Nonexistent token"); uint256 royalty = (salePrice * _royaltyFee) / 10000; return (_royaltyReceiver, royalty); } function setRoyaltyInfo(address receiver, uint256 fee) public onlyOwner { require(fee <= 1000, "Fee too high"); // Max 10% _royaltyReceiver = receiver; _royaltyFee = fee; } }
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":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"string","name":"assetsBaseURI","type":"string"},{"internalType":"address","name":"royaltyReceiver","type":"address"}],"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDirectlyDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"MintRewardsClaimed","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":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"TokensMinted","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_mintSharesReflect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintSharesTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"originalMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"baseURI","type":"string"}],"name":"setAssetsBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintSharesReflect","type":"uint256"}],"name":"setMintSharesReflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintSharesTeam","type":"uint256"}],"name":"setMintSharesTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600b805460ff191690556003600d5561032060165560c86017556101f4601a5534801562000030575f80fd5b506040516200355538038062003555833981016040819052620000539162000246565b8686620000603362000103565b60016200006e838262000399565b5060026200007d828262000399565b505050600f8590556010839055600e849055600c6200009d838262000399565b50600d54620000ae90600a62000574565b601754620000bb62000152565b620000c7919062000588565b620000d39190620005a2565b601155601b80546001600160a01b0319166001600160a01b039290921691909117905550620005d8945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f600d546012620001649190620005c2565b6200017190600a62000574565b60105462000180919062000588565b905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001a9575f80fd5b81516001600160401b0380821115620001c657620001c662000185565b604051601f8301601f19908116603f01168101908282118183101715620001f157620001f162000185565b81604052838152602092508660208588010111156200020e575f80fd5b5f91505b8382101562000231578582018301518183018401529082019062000212565b5f602085830101528094505050505092915050565b5f805f805f805f60e0888a0312156200025d575f80fd5b87516001600160401b038082111562000274575f80fd5b620002828b838c0162000199565b985060208a015191508082111562000298575f80fd5b620002a68b838c0162000199565b975060408a0151965060608a0151955060808a0151945060a08a0151915080821115620002d1575f80fd5b50620002e08a828b0162000199565b60c08a015190935090506001600160a01b0381168114620002ff575f80fd5b8091505092959891949750929550565b600181811c908216806200032457607f821691505b6020821081036200034357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200039457805f5260205f20601f840160051c81016020851015620003705750805b601f840160051c820191505b8181101562000391575f81556001016200037c565b50505b505050565b81516001600160401b03811115620003b557620003b562000185565b620003cd81620003c684546200030f565b8462000349565b602080601f83116001811462000403575f8415620003eb5750858301515b5f19600386901b1c1916600185901b1785556200045d565b5f85815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b50858210156200045157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004b957815f19048211156200049d576200049d62000465565b80851615620004ab57918102915b93841c93908002906200047e565b509250929050565b5f82620004d1575060016200056e565b81620004df57505f6200056e565b8160018114620004f85760028114620005035762000523565b60019150506200056e565b60ff84111562000517576200051762000465565b50506001821b6200056e565b5060208310610133831016604e8410600b841016171562000548575081810a6200056e565b62000554838362000479565b805f19048211156200056a576200056a62000465565b0290505b92915050565b5f620005818383620004c1565b9392505050565b80820281158282048414176200056e576200056e62000465565b5f82620005bd57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156200056e576200056e62000465565b612f6f80620005e65f395ff3fe608060405260043610610254575f3560e01c806370a0823111610138578063a0712d68116100b5578063ca7d16e711610079578063ca7d16e71461074d578063e2e784d51461076c578063e985e9c51461078b578063f2fde38b146107d2578063f4a0a528146107f1578063f64e7294146108105761029e565b8063a0712d68146106c8578063a22cb465146106db578063a7a2e752146106fa578063b88d4fde1461070f578063c87b56dd1461072e5761029e565b80638da5cb5b116100fc5780638da5cb5b1461062d57806390b5324a1461064957806393912db21461066c57806395d89b41146106a05780639a65ea26146106b45761029e565b806370a0823114610592578063715018a6146105b157806375a03ae2146105c55780638462151c146105ed57806389ac1fa8146106195761029e565b80632f745c59116101d15780634f6ccce7116101955780634f6ccce7146104e3578063616cdb1e146105025780636352211e1461052157806363bd1d4a1461054057806367243482146105545780636f8b44b0146105735761029e565b80632f745c591461044057806342842e0e1461045f57806342966c681461047e5780634608b6791461049d5780634cf7a65e146104c45761029e565b806322ad06701161021857806322ad06701461039057806323b872dd146103af57806324ab6edc146103ce5780632a55205a146103e35780632d414ae5146104215761029e565b806301ffc9a7146102c557806306fdde03146102f9578063081812fc1461031a578063095ea7b31461035157806318160ddd146103725761029e565b3661029e577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b299409893361027c565b3480156102d0575f80fd5b506102e46102df36600461264e565b61082f565b60405190151581526020015b60405180910390f35b348015610304575f80fd5b5061030d610859565b6040516102f091906126b6565b348015610325575f80fd5b506103396103343660046126c8565b6108e9565b6040516001600160a01b0390911681526020016102f0565b34801561035c575f80fd5b5061037061036b3660046126fa565b610974565b005b34801561037d575f80fd5b506009545b6040519081526020016102f0565b34801561039b575f80fd5b506103706103aa3660046126fa565b610a88565b3480156103ba575f80fd5b506103706103c9366004612722565b610b19565b3480156103d9575f80fd5b5061038260175481565b3480156103ee575f80fd5b506104026103fd36600461275b565b610b4b565b604080516001600160a01b0390931683526020830191909152016102f0565b34801561042c575f80fd5b5061033961043b3660046126c8565b610ba7565b34801561044b575f80fd5b5061038261045a3660046126fa565b610be8565b34801561046a575f80fd5b50610370610479366004612722565b610c7c565b348015610489575f80fd5b506103706104983660046126c8565b610c96565b3480156104a8575f80fd5b50601754601654604080519283526020830191909152016102f0565b3480156104cf575f80fd5b506103706104de3660046126c8565b610d35565b3480156104ee575f80fd5b506103826104fd3660046126c8565b610d63565b34801561050d575f80fd5b5061037061051c3660046126c8565b610df3565b34801561052c575f80fd5b5061033961053b3660046126c8565b610e21565b34801561054b575f80fd5b50610370610e97565b34801561055f575f80fd5b5061037061056e3660046127bc565b610f1e565b34801561057e575f80fd5b5061037061058d3660046126c8565b610fbf565b34801561059d575f80fd5b506103826105ac366004612823565b61103f565b3480156105bc575f80fd5b506103706110c4565b3480156105d0575f80fd5b506105d96110f8565b6040516102f098979695949392919061283c565b3480156105f8575f80fd5b5061060c610607366004612823565b6111ce565b6040516102f091906128c4565b348015610624575f80fd5b50610370611281565b348015610638575f80fd5b505f546001600160a01b0316610339565b348015610654575f80fd5b5061065d61128a565b6040516102f0939291906128d6565b348015610677575f80fd5b506106856019546018544792565b604080519384526020840192909252908201526060016102f0565b3480156106ab575f80fd5b5061030d6112b4565b3480156106bf575f80fd5b506103706112c3565b6103706106d63660046126c8565b6112fb565b3480156106e6575f80fd5b506103706106f53660046128fd565b6113e9565b348015610705575f80fd5b5061038260165481565b34801561071a575f80fd5b506103706107293660046129bd565b6114ac565b348015610739575f80fd5b5061030d6107483660046126c8565b6114e4565b348015610758575f80fd5b506103706107673660046126c8565b611581565b348015610777575f80fd5b506103706107863660046126fa565b6115af565b348015610796575f80fd5b506102e46107a5366004612a34565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156107dd575f80fd5b506103706107ec366004612823565b61163f565b3480156107fc575f80fd5b5061037061080b3660046126c8565b6116d6565b34801561081b575f80fd5b5061037061082a366004612a65565b611737565b5f6001600160e01b0319821663152a902d60e11b14806108535750610853826117aa565b92915050565b60606001805461086890612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612aaa565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f6108f3826117ce565b6109595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61097e82610e21565b9050806001600160a01b0316836001600160a01b0316036109eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610950565b336001600160a01b0382161480610a075750610a0781336107a5565b610a795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610950565b610a8383836117ea565b505050565b5f546001600160a01b03163314610ab15760405162461bcd60e51b815260040161095090612adc565b600f5481610abe60125490565b610ac89190612b25565b10610b0a5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610950565b610b1582825f611857565b5050565b610b24335b82611945565b610b405760405162461bcd60e51b815260040161095090612b38565b610a83838383611a2c565b5f80610b56846117ce565b610b725760405162461bcd60e51b815260040161095090612b89565b5f612710601a5485610b849190612bb4565b610b8e9190612bdf565b601b546001600160a01b031693509150505b9250929050565b5f610bb1826117ce565b610bcd5760405162461bcd60e51b815260040161095090612b89565b505f908152601360205260409020546001600160a01b031690565b5f610bf28361103f565b8210610c545760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610950565b506001600160a01b03919091165f908152600760209081526040808320938352929052205490565b610a8383838360405180602001604052805f8152506114ac565b610c9f33610b1e565b610ce45760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610950565b610ced81611bd3565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d610d1760095490565b600f546040805192835260208301919091520160405180910390a150565b5f546001600160a01b03163314610d5e5760405162461bcd60e51b815260040161095090612adc565b601755565b5f610d6d60095490565b8210610dd05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610950565b60098281548110610de357610de3612bf2565b905f5260205f2001549050919050565b5f546001600160a01b03163314610e1c5760405162461bcd60e51b815260040161095090612adc565b600e55565b5f818152600360205260408120546001600160a01b0316806108535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610950565b5f546001600160a01b03163314610ec05760405162461bcd60e51b815260040161095090612adc565b601854734c40667198ca7d011941eccbd2b42381bd69b1416108fc6064610ee78482612bb4565b610ef19190612bdf565b6040518115909202915f818181858888f19350505050158015610f16573d5f803e3d5ffd5b50505f601855565b5f546001600160a01b03163314610f475760405162461bcd60e51b815260040161095090612adc565b8215801590610f5557508083145b610f5d575f80fd5b5f5b83811015610fb857610fb0858583818110610f7c57610f7c612bf2565b9050602002016020810190610f919190612823565b848484818110610fa357610fa3612bf2565b905060200201355f611857565b600101610f5f565b5050505050565b5f546001600160a01b03163314610fe85760405162461bcd60e51b815260040161095090612adc565b60125481101561103a5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610950565b600f55565b5f6001600160a01b0382166110a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610950565b506001600160a01b03165f9081526004602052604090205490565b5f546001600160a01b031633146110ed5760405162461bcd60e51b815260040161095090612adc565b6110f65f611c75565b565b5f805f805f805f6060600b5f9054906101000a900460ff16600d5461111c60095490565b600f54601054601154600e54600c80805461113690612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116290612aaa565b80156111ad5780601f10611184576101008083540402835291602001916111ad565b820191905f5260205f20905b81548152906001019060200180831161119057829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b60605f6111da8361103f565b9050805f036111fc57604080515f80825260208201909252905b509392505050565b5f8167ffffffffffffffff81111561121657611216612936565b60405190808252806020026020018201604052801561123f578160200160208202803683370190505b5090505f5b828110156111f4576112568582610be8565b82828151811061126857611268612bf2565b6020908102919091010152600101611244565b50919050565b6110f633611cc4565b5f8060606112973361103f565b6112a033611e82565b6112a933611f0b565b925092509250909192565b60606002805461086890612aaa565b5f546001600160a01b031633146112ec5760405162461bcd60e51b815260040161095090612adc565b600b805460ff19166001179055565b600b5460ff1680156113105750600f54601254105b61135c5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610950565b600f548161136960125490565b6113739190612b25565b111580156113835750600e548111155b80156113a1575080611393611f98565b61139d9190612bb4565b3410155b6113db5760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610950565b6113e6338234611857565b50565b336001600160a01b038316036114415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610950565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114b63383611945565b6114d25760405162461bcd60e51b815260040161095090612b38565b6114de84848484611fc5565b50505050565b60606114ef826117ce565b61150b5760405162461bcd60e51b815260040161095090612b89565b5f611514611ff8565b90505f8151116115325760405180602001604052805f81525061157a565b8061153c84612007565b60405160200161154d929190612c06565b60408051601f198184030181529082905261156a91602001612c34565b6040516020818303038152906040525b9392505050565b5f546001600160a01b031633146115aa5760405162461bcd60e51b815260040161095090612adc565b601655565b5f546001600160a01b031633146115d85760405162461bcd60e51b815260040161095090612adc565b6103e88111156116195760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610950565b601b80546001600160a01b0319166001600160a01b039390931692909217909155601a55565b5f546001600160a01b031633146116685760405162461bcd60e51b815260040161095090612adc565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b6113e681611c75565b5f546001600160a01b031633146116ff5760405162461bcd60e51b815260040161095090612adc565b6010819055600d5461171290600a612d2f565b60175461171d611f98565b6117279190612bb4565b6117319190612bdf565b60115550565b5f546001600160a01b031633146117605760405162461bcd60e51b815260040161095090612adc565b5f81511161179e5760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610950565b600c610b158282612d7e565b5f6001600160e01b0319821663780e9d6360e01b1480610853575061085382612104565b5f908152600360205260409020546001600160a01b0316151590565b5f81815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181e82610e21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61186081612153565b5f805b838110156118ef57611879601280546001019055565b601254915061188885836121bc565b5f82815260136020908152604080832080546001600160a01b0319166001600160a01b038a1617905560145460159092529091205582156118e757816011546118d19190612bdf565b60145f8282546118e19190612b25565b90915550505b600101611863565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d61191a60095490565b600f54601954604080519384526020840192909252908201526060015b60405180910390a150505050565b5f61194f826117ce565b6119b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610950565b5f6119ba83610e21565b9050806001600160a01b0316846001600160a01b031614806119f55750836001600160a01b03166119ea846108e9565b6001600160a01b0316145b80611a2457506001600160a01b038082165f9081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a3f82610e21565b6001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610950565b6001600160a01b038216611b095760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b611b148383836122f8565b611b1e5f826117ea565b6001600160a01b0383165f908152600460205260408120805460019290611b46908490612e3e565b90915550506001600160a01b0382165f908152600460205260408120805460019290611b73908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f611bdd82610e21565b9050611bea815f846122f8565b611bf45f836117ea565b6001600160a01b0381165f908152600460205260408120805460019290611c1c908490612e3e565b90915550505f8281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f611cce82611f0b565b90505f815111611d205760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610950565b5f805f5b8351811015611dc05760155f858381518110611d4257611d42612bf2565b602002602001015181526020019081526020015f2054601454611d659190612e3e565b91508115611db857611d778284612b25565b92508160155f868481518110611d8f57611d8f612bf2565b602002602001015181526020019081526020015f205f828254611db29190612b25565b90915550505b600101611d24565b505f8211611e075760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610950565b8160195f828254611e189190612e3e565b9091555050604051339083156108fc029084905f818181858888f19350505050158015611e47573d5f803e3d5ffd5b506019546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101611937565b5f80611e8d83611f0b565b905080515f03611e9f57505f92915050565b5f805f5b8351811015611f015760155f858381518110611ec157611ec1612bf2565b602002602001015181526020019081526020015f2054601454611ee49190612e3e565b91508115611ef957611ef68284612b25565b92505b600101611ea3565b5090949350505050565b60605f611f178361103f565b90505f8167ffffffffffffffff811115611f3357611f33612936565b604051908082528060200260200182016040528015611f5c578160200160208202803683370190505b5090505f5b828110156111f457611f738582610be8565b828281518110611f8557611f85612bf2565b6020908102919091010152600101611f61565b5f600d546012611fa89190612e3e565b611fb390600a612d2f565b601054611fc09190612bb4565b905090565b611fd0848484611a2c565b611fdc84848484612303565b6114de5760405162461bcd60e51b815260040161095090612e51565b6060600c805461086890612aaa565b6060815f0361202d5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612056578061204081612ea3565b915061204f9050600a83612bdf565b9150612030565b5f8167ffffffffffffffff81111561207057612070612936565b6040519080825280601f01601f19166020018201604052801561209a576020820181803683370190505b5090505b8415611a24576120af600183612e3e565b91506120bc600a86612ebb565b6120c7906030612b25565b60f81b8183815181106120dc576120dc612bf2565b60200101906001600160f81b03191690815f1a9053506120fd600a86612bdf565b945061209e565b5f6001600160e01b031982166380ac58cd60e01b148061213457506001600160e01b03198216635b5e139f60e01b145b8061085357506301ffc9a760e01b6001600160e01b0319831614610853565b80156113e6575f600d54600a6121699190612d2f565b6017546121769084612bb4565b6121809190612bdf565b90508060195f8282546121939190612b25565b909155506121a390508183612e3e565b60185f8282546121b39190612b25565b90915550505050565b6001600160a01b0382166122125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610950565b61221b816117ce565b156122685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610950565b6122735f83836122f8565b6001600160a01b0382165f90815260046020526040812080546001929061229b908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610a83838383612400565b5f6001600160a01b0384163b156123f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612346903390899088908890600401612ece565b6020604051808303815f875af1925050508015612380575060408051601f3d908101601f1916820190925261237d91810190612f0a565b60015b6123db573d8080156123ad576040519150601f19603f3d011682016040523d82523d5f602084013e6123b2565b606091505b5080515f036123d35760405162461bcd60e51b815260040161095090612e51565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a24565b506001949350505050565b6001600160a01b03831661245a5761245581600980545f838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b61247d565b816001600160a01b0316836001600160a01b03161461247d5761247d83826124b7565b6001600160a01b03821661249457610a8381612550565b826001600160a01b0316826001600160a01b031614610a8357610a8382826125f7565b5f60016124c38461103f565b6124cd9190612e3e565b5f8381526008602052604090205490915080821461251e576001600160a01b0384165f9081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b505f9182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009545f9061256190600190612e3e565b5f838152600a60205260408120546009805493945090928490811061258857612588612bf2565b905f5260205f200154905080600983815481106125a7576125a7612bf2565b5f918252602080832090910192909255828152600a909152604080822084905585825281205560098054806125de576125de612f25565b600190038181905f5260205f20015f9055905550505050565b5f6126018361103f565b6001600160a01b039093165f908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b0319811681146113e6575f80fd5b5f6020828403121561265e575f80fd5b813561157a81612639565b5f5b8381101561268357818101518382015260200161266b565b50505f910152565b5f81518084526126a2816020860160208601612669565b601f01601f19169290920160200192915050565b602081525f61157a602083018461268b565b5f602082840312156126d8575f80fd5b5035919050565b80356001600160a01b03811681146126f5575f80fd5b919050565b5f806040838503121561270b575f80fd5b612714836126df565b946020939093013593505050565b5f805f60608486031215612734575f80fd5b61273d846126df565b925061274b602085016126df565b9150604084013590509250925092565b5f806040838503121561276c575f80fd5b50508035926020909101359150565b5f8083601f84011261278b575f80fd5b50813567ffffffffffffffff8111156127a2575f80fd5b6020830191508360208260051b8501011115610ba0575f80fd5b5f805f80604085870312156127cf575f80fd5b843567ffffffffffffffff808211156127e6575f80fd5b6127f28883890161277b565b9096509450602087013591508082111561280a575f80fd5b506128178782880161277b565b95989497509550505050565b5f60208284031215612833575f80fd5b61157a826126df565b5f6101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e084015261287b8184018561268b565b9b9a5050505050505050505050565b5f815180845260208085019450602084015f5b838110156128b95781518752958201959082019060010161289d565b509495945050505050565b602081525f61157a602083018461288a565b838152826020820152606060408201525f6128f4606083018461288a565b95945050505050565b5f806040838503121561290e575f80fd5b612917836126df565b91506020830135801515811461292b575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561296457612964612936565b604051601f8501601f19908116603f0116810190828211818310171561298c5761298c612936565b816040528093508581528686860111156129a4575f80fd5b858560208301375f602087830101525050509392505050565b5f805f80608085870312156129d0575f80fd5b6129d9856126df565b93506129e7602086016126df565b925060408501359150606085013567ffffffffffffffff811115612a09575f80fd5b8501601f81018713612a19575f80fd5b612a288782356020840161294a565b91505092959194509250565b5f8060408385031215612a45575f80fd5b612a4e836126df565b9150612a5c602084016126df565b90509250929050565b5f60208284031215612a75575f80fd5b813567ffffffffffffffff811115612a8b575f80fd5b8201601f81018413612a9b575f80fd5b611a248482356020840161294a565b600181811c90821680612abe57607f821691505b60208210810361127b57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085357610853612b11565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b808202811582820484141761085357610853612b11565b634e487b7160e01b5f52601260045260245ffd5b5f82612bed57612bed612bcb565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8351612c17818460208801612669565b835190830190612c2b818360208801612669565b01949350505050565b5f8251612c45818460208701612669565b9190910192915050565b600181815b80851115612c8957815f1904821115612c6f57612c6f612b11565b80851615612c7c57918102915b93841c9390800290612c54565b509250929050565b5f82612c9f57506001610853565b81612cab57505f610853565b8160018114612cc15760028114612ccb57612ce7565b6001915050610853565b60ff841115612cdc57612cdc612b11565b50506001821b610853565b5060208310610133831016604e8410600b8410161715612d0a575081810a610853565b612d148383612c4f565b805f1904821115612d2757612d27612b11565b029392505050565b5f61157a8383612c91565b601f821115610a8357805f5260205f20601f840160051c81016020851015612d5f5750805b601f840160051c820191505b81811015610fb8575f8155600101612d6b565b815167ffffffffffffffff811115612d9857612d98612936565b612dac81612da68454612aaa565b84612d3a565b602080601f831160018114612ddf575f8415612dc85750858301515b5f19600386901b1c1916600185901b178555612e36565b5f85815260208120601f198616915b82811015612e0d57888601518255948401946001909101908401612dee565b5085821015612e2a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561085357610853612b11565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201612eb457612eb4612b11565b5060010190565b5f82612ec957612ec9612bcb565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612f009083018461268b565b9695505050505050565b5f60208284031215612f1a575f80fd5b815161157a81612639565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122030ba40e5540320ca4f3c1065760c446c6e95428ecc2da29ff49c97ded7f6b49d64736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000001600000000000000000000000006610dc9ae97d18e8485bfa36bbcdd13fdebb6f510000000000000000000000000000000000000000000000000000000000000006487941706573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054859415045000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6879617065732d617065636861696e2e76657263656c2e6170702f6170692f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260043610610254575f3560e01c806370a0823111610138578063a0712d68116100b5578063ca7d16e711610079578063ca7d16e71461074d578063e2e784d51461076c578063e985e9c51461078b578063f2fde38b146107d2578063f4a0a528146107f1578063f64e7294146108105761029e565b8063a0712d68146106c8578063a22cb465146106db578063a7a2e752146106fa578063b88d4fde1461070f578063c87b56dd1461072e5761029e565b80638da5cb5b116100fc5780638da5cb5b1461062d57806390b5324a1461064957806393912db21461066c57806395d89b41146106a05780639a65ea26146106b45761029e565b806370a0823114610592578063715018a6146105b157806375a03ae2146105c55780638462151c146105ed57806389ac1fa8146106195761029e565b80632f745c59116101d15780634f6ccce7116101955780634f6ccce7146104e3578063616cdb1e146105025780636352211e1461052157806363bd1d4a1461054057806367243482146105545780636f8b44b0146105735761029e565b80632f745c591461044057806342842e0e1461045f57806342966c681461047e5780634608b6791461049d5780634cf7a65e146104c45761029e565b806322ad06701161021857806322ad06701461039057806323b872dd146103af57806324ab6edc146103ce5780632a55205a146103e35780632d414ae5146104215761029e565b806301ffc9a7146102c557806306fdde03146102f9578063081812fc1461031a578063095ea7b31461035157806318160ddd146103725761029e565b3661029e577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b299409893361027c565b3480156102d0575f80fd5b506102e46102df36600461264e565b61082f565b60405190151581526020015b60405180910390f35b348015610304575f80fd5b5061030d610859565b6040516102f091906126b6565b348015610325575f80fd5b506103396103343660046126c8565b6108e9565b6040516001600160a01b0390911681526020016102f0565b34801561035c575f80fd5b5061037061036b3660046126fa565b610974565b005b34801561037d575f80fd5b506009545b6040519081526020016102f0565b34801561039b575f80fd5b506103706103aa3660046126fa565b610a88565b3480156103ba575f80fd5b506103706103c9366004612722565b610b19565b3480156103d9575f80fd5b5061038260175481565b3480156103ee575f80fd5b506104026103fd36600461275b565b610b4b565b604080516001600160a01b0390931683526020830191909152016102f0565b34801561042c575f80fd5b5061033961043b3660046126c8565b610ba7565b34801561044b575f80fd5b5061038261045a3660046126fa565b610be8565b34801561046a575f80fd5b50610370610479366004612722565b610c7c565b348015610489575f80fd5b506103706104983660046126c8565b610c96565b3480156104a8575f80fd5b50601754601654604080519283526020830191909152016102f0565b3480156104cf575f80fd5b506103706104de3660046126c8565b610d35565b3480156104ee575f80fd5b506103826104fd3660046126c8565b610d63565b34801561050d575f80fd5b5061037061051c3660046126c8565b610df3565b34801561052c575f80fd5b5061033961053b3660046126c8565b610e21565b34801561054b575f80fd5b50610370610e97565b34801561055f575f80fd5b5061037061056e3660046127bc565b610f1e565b34801561057e575f80fd5b5061037061058d3660046126c8565b610fbf565b34801561059d575f80fd5b506103826105ac366004612823565b61103f565b3480156105bc575f80fd5b506103706110c4565b3480156105d0575f80fd5b506105d96110f8565b6040516102f098979695949392919061283c565b3480156105f8575f80fd5b5061060c610607366004612823565b6111ce565b6040516102f091906128c4565b348015610624575f80fd5b50610370611281565b348015610638575f80fd5b505f546001600160a01b0316610339565b348015610654575f80fd5b5061065d61128a565b6040516102f0939291906128d6565b348015610677575f80fd5b506106856019546018544792565b604080519384526020840192909252908201526060016102f0565b3480156106ab575f80fd5b5061030d6112b4565b3480156106bf575f80fd5b506103706112c3565b6103706106d63660046126c8565b6112fb565b3480156106e6575f80fd5b506103706106f53660046128fd565b6113e9565b348015610705575f80fd5b5061038260165481565b34801561071a575f80fd5b506103706107293660046129bd565b6114ac565b348015610739575f80fd5b5061030d6107483660046126c8565b6114e4565b348015610758575f80fd5b506103706107673660046126c8565b611581565b348015610777575f80fd5b506103706107863660046126fa565b6115af565b348015610796575f80fd5b506102e46107a5366004612a34565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156107dd575f80fd5b506103706107ec366004612823565b61163f565b3480156107fc575f80fd5b5061037061080b3660046126c8565b6116d6565b34801561081b575f80fd5b5061037061082a366004612a65565b611737565b5f6001600160e01b0319821663152a902d60e11b14806108535750610853826117aa565b92915050565b60606001805461086890612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612aaa565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f6108f3826117ce565b6109595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61097e82610e21565b9050806001600160a01b0316836001600160a01b0316036109eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610950565b336001600160a01b0382161480610a075750610a0781336107a5565b610a795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610950565b610a8383836117ea565b505050565b5f546001600160a01b03163314610ab15760405162461bcd60e51b815260040161095090612adc565b600f5481610abe60125490565b610ac89190612b25565b10610b0a5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610950565b610b1582825f611857565b5050565b610b24335b82611945565b610b405760405162461bcd60e51b815260040161095090612b38565b610a83838383611a2c565b5f80610b56846117ce565b610b725760405162461bcd60e51b815260040161095090612b89565b5f612710601a5485610b849190612bb4565b610b8e9190612bdf565b601b546001600160a01b031693509150505b9250929050565b5f610bb1826117ce565b610bcd5760405162461bcd60e51b815260040161095090612b89565b505f908152601360205260409020546001600160a01b031690565b5f610bf28361103f565b8210610c545760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610950565b506001600160a01b03919091165f908152600760209081526040808320938352929052205490565b610a8383838360405180602001604052805f8152506114ac565b610c9f33610b1e565b610ce45760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610950565b610ced81611bd3565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d610d1760095490565b600f546040805192835260208301919091520160405180910390a150565b5f546001600160a01b03163314610d5e5760405162461bcd60e51b815260040161095090612adc565b601755565b5f610d6d60095490565b8210610dd05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610950565b60098281548110610de357610de3612bf2565b905f5260205f2001549050919050565b5f546001600160a01b03163314610e1c5760405162461bcd60e51b815260040161095090612adc565b600e55565b5f818152600360205260408120546001600160a01b0316806108535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610950565b5f546001600160a01b03163314610ec05760405162461bcd60e51b815260040161095090612adc565b601854734c40667198ca7d011941eccbd2b42381bd69b1416108fc6064610ee78482612bb4565b610ef19190612bdf565b6040518115909202915f818181858888f19350505050158015610f16573d5f803e3d5ffd5b50505f601855565b5f546001600160a01b03163314610f475760405162461bcd60e51b815260040161095090612adc565b8215801590610f5557508083145b610f5d575f80fd5b5f5b83811015610fb857610fb0858583818110610f7c57610f7c612bf2565b9050602002016020810190610f919190612823565b848484818110610fa357610fa3612bf2565b905060200201355f611857565b600101610f5f565b5050505050565b5f546001600160a01b03163314610fe85760405162461bcd60e51b815260040161095090612adc565b60125481101561103a5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610950565b600f55565b5f6001600160a01b0382166110a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610950565b506001600160a01b03165f9081526004602052604090205490565b5f546001600160a01b031633146110ed5760405162461bcd60e51b815260040161095090612adc565b6110f65f611c75565b565b5f805f805f805f6060600b5f9054906101000a900460ff16600d5461111c60095490565b600f54601054601154600e54600c80805461113690612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116290612aaa565b80156111ad5780601f10611184576101008083540402835291602001916111ad565b820191905f5260205f20905b81548152906001019060200180831161119057829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b60605f6111da8361103f565b9050805f036111fc57604080515f80825260208201909252905b509392505050565b5f8167ffffffffffffffff81111561121657611216612936565b60405190808252806020026020018201604052801561123f578160200160208202803683370190505b5090505f5b828110156111f4576112568582610be8565b82828151811061126857611268612bf2565b6020908102919091010152600101611244565b50919050565b6110f633611cc4565b5f8060606112973361103f565b6112a033611e82565b6112a933611f0b565b925092509250909192565b60606002805461086890612aaa565b5f546001600160a01b031633146112ec5760405162461bcd60e51b815260040161095090612adc565b600b805460ff19166001179055565b600b5460ff1680156113105750600f54601254105b61135c5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610950565b600f548161136960125490565b6113739190612b25565b111580156113835750600e548111155b80156113a1575080611393611f98565b61139d9190612bb4565b3410155b6113db5760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610950565b6113e6338234611857565b50565b336001600160a01b038316036114415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610950565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114b63383611945565b6114d25760405162461bcd60e51b815260040161095090612b38565b6114de84848484611fc5565b50505050565b60606114ef826117ce565b61150b5760405162461bcd60e51b815260040161095090612b89565b5f611514611ff8565b90505f8151116115325760405180602001604052805f81525061157a565b8061153c84612007565b60405160200161154d929190612c06565b60408051601f198184030181529082905261156a91602001612c34565b6040516020818303038152906040525b9392505050565b5f546001600160a01b031633146115aa5760405162461bcd60e51b815260040161095090612adc565b601655565b5f546001600160a01b031633146115d85760405162461bcd60e51b815260040161095090612adc565b6103e88111156116195760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610950565b601b80546001600160a01b0319166001600160a01b039390931692909217909155601a55565b5f546001600160a01b031633146116685760405162461bcd60e51b815260040161095090612adc565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b6113e681611c75565b5f546001600160a01b031633146116ff5760405162461bcd60e51b815260040161095090612adc565b6010819055600d5461171290600a612d2f565b60175461171d611f98565b6117279190612bb4565b6117319190612bdf565b60115550565b5f546001600160a01b031633146117605760405162461bcd60e51b815260040161095090612adc565b5f81511161179e5760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610950565b600c610b158282612d7e565b5f6001600160e01b0319821663780e9d6360e01b1480610853575061085382612104565b5f908152600360205260409020546001600160a01b0316151590565b5f81815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181e82610e21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61186081612153565b5f805b838110156118ef57611879601280546001019055565b601254915061188885836121bc565b5f82815260136020908152604080832080546001600160a01b0319166001600160a01b038a1617905560145460159092529091205582156118e757816011546118d19190612bdf565b60145f8282546118e19190612b25565b90915550505b600101611863565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d61191a60095490565b600f54601954604080519384526020840192909252908201526060015b60405180910390a150505050565b5f61194f826117ce565b6119b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610950565b5f6119ba83610e21565b9050806001600160a01b0316846001600160a01b031614806119f55750836001600160a01b03166119ea846108e9565b6001600160a01b0316145b80611a2457506001600160a01b038082165f9081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a3f82610e21565b6001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610950565b6001600160a01b038216611b095760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b611b148383836122f8565b611b1e5f826117ea565b6001600160a01b0383165f908152600460205260408120805460019290611b46908490612e3e565b90915550506001600160a01b0382165f908152600460205260408120805460019290611b73908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f611bdd82610e21565b9050611bea815f846122f8565b611bf45f836117ea565b6001600160a01b0381165f908152600460205260408120805460019290611c1c908490612e3e565b90915550505f8281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f611cce82611f0b565b90505f815111611d205760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610950565b5f805f5b8351811015611dc05760155f858381518110611d4257611d42612bf2565b602002602001015181526020019081526020015f2054601454611d659190612e3e565b91508115611db857611d778284612b25565b92508160155f868481518110611d8f57611d8f612bf2565b602002602001015181526020019081526020015f205f828254611db29190612b25565b90915550505b600101611d24565b505f8211611e075760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610950565b8160195f828254611e189190612e3e565b9091555050604051339083156108fc029084905f818181858888f19350505050158015611e47573d5f803e3d5ffd5b506019546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101611937565b5f80611e8d83611f0b565b905080515f03611e9f57505f92915050565b5f805f5b8351811015611f015760155f858381518110611ec157611ec1612bf2565b602002602001015181526020019081526020015f2054601454611ee49190612e3e565b91508115611ef957611ef68284612b25565b92505b600101611ea3565b5090949350505050565b60605f611f178361103f565b90505f8167ffffffffffffffff811115611f3357611f33612936565b604051908082528060200260200182016040528015611f5c578160200160208202803683370190505b5090505f5b828110156111f457611f738582610be8565b828281518110611f8557611f85612bf2565b6020908102919091010152600101611f61565b5f600d546012611fa89190612e3e565b611fb390600a612d2f565b601054611fc09190612bb4565b905090565b611fd0848484611a2c565b611fdc84848484612303565b6114de5760405162461bcd60e51b815260040161095090612e51565b6060600c805461086890612aaa565b6060815f0361202d5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612056578061204081612ea3565b915061204f9050600a83612bdf565b9150612030565b5f8167ffffffffffffffff81111561207057612070612936565b6040519080825280601f01601f19166020018201604052801561209a576020820181803683370190505b5090505b8415611a24576120af600183612e3e565b91506120bc600a86612ebb565b6120c7906030612b25565b60f81b8183815181106120dc576120dc612bf2565b60200101906001600160f81b03191690815f1a9053506120fd600a86612bdf565b945061209e565b5f6001600160e01b031982166380ac58cd60e01b148061213457506001600160e01b03198216635b5e139f60e01b145b8061085357506301ffc9a760e01b6001600160e01b0319831614610853565b80156113e6575f600d54600a6121699190612d2f565b6017546121769084612bb4565b6121809190612bdf565b90508060195f8282546121939190612b25565b909155506121a390508183612e3e565b60185f8282546121b39190612b25565b90915550505050565b6001600160a01b0382166122125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610950565b61221b816117ce565b156122685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610950565b6122735f83836122f8565b6001600160a01b0382165f90815260046020526040812080546001929061229b908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610a83838383612400565b5f6001600160a01b0384163b156123f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612346903390899088908890600401612ece565b6020604051808303815f875af1925050508015612380575060408051601f3d908101601f1916820190925261237d91810190612f0a565b60015b6123db573d8080156123ad576040519150601f19603f3d011682016040523d82523d5f602084013e6123b2565b606091505b5080515f036123d35760405162461bcd60e51b815260040161095090612e51565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a24565b506001949350505050565b6001600160a01b03831661245a5761245581600980545f838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b61247d565b816001600160a01b0316836001600160a01b03161461247d5761247d83826124b7565b6001600160a01b03821661249457610a8381612550565b826001600160a01b0316826001600160a01b031614610a8357610a8382826125f7565b5f60016124c38461103f565b6124cd9190612e3e565b5f8381526008602052604090205490915080821461251e576001600160a01b0384165f9081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b505f9182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009545f9061256190600190612e3e565b5f838152600a60205260408120546009805493945090928490811061258857612588612bf2565b905f5260205f200154905080600983815481106125a7576125a7612bf2565b5f918252602080832090910192909255828152600a909152604080822084905585825281205560098054806125de576125de612f25565b600190038181905f5260205f20015f9055905550505050565b5f6126018361103f565b6001600160a01b039093165f908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b0319811681146113e6575f80fd5b5f6020828403121561265e575f80fd5b813561157a81612639565b5f5b8381101561268357818101518382015260200161266b565b50505f910152565b5f81518084526126a2816020860160208601612669565b601f01601f19169290920160200192915050565b602081525f61157a602083018461268b565b5f602082840312156126d8575f80fd5b5035919050565b80356001600160a01b03811681146126f5575f80fd5b919050565b5f806040838503121561270b575f80fd5b612714836126df565b946020939093013593505050565b5f805f60608486031215612734575f80fd5b61273d846126df565b925061274b602085016126df565b9150604084013590509250925092565b5f806040838503121561276c575f80fd5b50508035926020909101359150565b5f8083601f84011261278b575f80fd5b50813567ffffffffffffffff8111156127a2575f80fd5b6020830191508360208260051b8501011115610ba0575f80fd5b5f805f80604085870312156127cf575f80fd5b843567ffffffffffffffff808211156127e6575f80fd5b6127f28883890161277b565b9096509450602087013591508082111561280a575f80fd5b506128178782880161277b565b95989497509550505050565b5f60208284031215612833575f80fd5b61157a826126df565b5f6101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e084015261287b8184018561268b565b9b9a5050505050505050505050565b5f815180845260208085019450602084015f5b838110156128b95781518752958201959082019060010161289d565b509495945050505050565b602081525f61157a602083018461288a565b838152826020820152606060408201525f6128f4606083018461288a565b95945050505050565b5f806040838503121561290e575f80fd5b612917836126df565b91506020830135801515811461292b575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561296457612964612936565b604051601f8501601f19908116603f0116810190828211818310171561298c5761298c612936565b816040528093508581528686860111156129a4575f80fd5b858560208301375f602087830101525050509392505050565b5f805f80608085870312156129d0575f80fd5b6129d9856126df565b93506129e7602086016126df565b925060408501359150606085013567ffffffffffffffff811115612a09575f80fd5b8501601f81018713612a19575f80fd5b612a288782356020840161294a565b91505092959194509250565b5f8060408385031215612a45575f80fd5b612a4e836126df565b9150612a5c602084016126df565b90509250929050565b5f60208284031215612a75575f80fd5b813567ffffffffffffffff811115612a8b575f80fd5b8201601f81018413612a9b575f80fd5b611a248482356020840161294a565b600181811c90821680612abe57607f821691505b60208210810361127b57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085357610853612b11565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b808202811582820484141761085357610853612b11565b634e487b7160e01b5f52601260045260245ffd5b5f82612bed57612bed612bcb565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8351612c17818460208801612669565b835190830190612c2b818360208801612669565b01949350505050565b5f8251612c45818460208701612669565b9190910192915050565b600181815b80851115612c8957815f1904821115612c6f57612c6f612b11565b80851615612c7c57918102915b93841c9390800290612c54565b509250929050565b5f82612c9f57506001610853565b81612cab57505f610853565b8160018114612cc15760028114612ccb57612ce7565b6001915050610853565b60ff841115612cdc57612cdc612b11565b50506001821b610853565b5060208310610133831016604e8410600b8410161715612d0a575081810a610853565b612d148383612c4f565b805f1904821115612d2757612d27612b11565b029392505050565b5f61157a8383612c91565b601f821115610a8357805f5260205f20601f840160051c81016020851015612d5f5750805b601f840160051c820191505b81811015610fb8575f8155600101612d6b565b815167ffffffffffffffff811115612d9857612d98612936565b612dac81612da68454612aaa565b84612d3a565b602080601f831160018114612ddf575f8415612dc85750858301515b5f19600386901b1c1916600185901b178555612e36565b5f85815260208120601f198616915b82811015612e0d57888601518255948401946001909101908401612dee565b5085821015612e2a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561085357610853612b11565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201612eb457612eb4612b11565b5060010190565b5f82612ec957612ec9612bcb565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612f009083018461268b565b9695505050505050565b5f60208284031215612f1a575f80fd5b815161157a81612639565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122030ba40e5540320ca4f3c1065760c446c6e95428ecc2da29ff49c97ded7f6b49d64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000001600000000000000000000000006610dc9ae97d18e8485bfa36bbcdd13fdebb6f510000000000000000000000000000000000000000000000000000000000000006487941706573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054859415045000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6879617065732d617065636861696e2e76657263656c2e6170702f6170692f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): HyApes
Arg [1] : symbol (string): HYAPE
Arg [2] : maxSupply (uint256): 5000
Arg [3] : maxMintPerTx (uint256): 100
Arg [4] : mintPrice (uint256): 5000
Arg [5] : assetsBaseURI (string): https://hyapes-apechain.vercel.app/api/
Arg [6] : royaltyReceiver (address): 0x6610DC9Ae97d18e8485bFa36bbcDd13FdEBB6F51
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [6] : 0000000000000000000000006610dc9ae97d18e8485bfa36bbcdd13fdebb6f51
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 4879417065730000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 4859415045000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [12] : 68747470733a2f2f6879617065732d617065636861696e2e76657263656c2e61
Arg [13] : 70702f6170692f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44483:12810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46472:38;920:10;46486:12;46472:38;;;-1:-1:-1;;;;;206:32:1;;;188:51;;46500:9:0;270:2:1;255:18;;248:34;161:18;46472:38:0;;;;;;;44483:12810;;46570:47;920:10;46593:12;840:98;47513:309;;;;;;;;;;-1:-1:-1;47513:309:0;;;;;:::i;:::-;;:::i;:::-;;;844:14:1;;837:22;819:41;;807:2;792:18;47513:309:0;;;;;;;;23480:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25173:308::-;;;;;;;;;;-1:-1:-1;25173:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1976:32:1;;;1958:51;;1946:2;1931:18;25173:308:0;1812:203:1;24696:411:0;;;;;;;;;;-1:-1:-1;24696:411:0;;;;;:::i;:::-;;:::i;:::-;;37968:113;;;;;;;;;;-1:-1:-1;38056:10:0;:17;37968:113;;;2603:25:1;;;2591:2;2576:18;37968:113:0;2457:177:1;51143:245:0;;;;;;;;;;-1:-1:-1;51143:245:0;;;;;:::i;:::-;;:::i;26232:376::-;;;;;;;;;;-1:-1:-1;26232:376:0;;;;;:::i;:::-;;:::i;45176:39::-;;;;;;;;;;;;;;;;56735:343;;;;;;;;;;-1:-1:-1;56735:343:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;206:32:1;;;188:51;;270:2;255:18;;248:34;;;;161:18;56735:343:0;14:274:1;56373:179:0;;;;;;;;;;-1:-1:-1;56373:179:0;;;;;:::i;:::-;;:::i;37549:343::-;;;;;;;;;;-1:-1:-1;37549:343:0;;;;;:::i;:::-;;:::i;26679:185::-;;;;;;;;;;-1:-1:-1;26679:185:0;;;;;:::i;:::-;;:::i;54120:252::-;;;;;;;;;;-1:-1:-1;54120:252:0;;;;;:::i;:::-;;:::i;55577:121::-;;;;;;;;;;-1:-1:-1;55654:18:0;;55674:15;;55577:121;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;3372:18;55577:121:0;3225:248:1;52039:162:0;;;;;;;;;;-1:-1:-1;52039:162:0;;;;;:::i;:::-;;:::i;38158:320::-;;;;;;;;;;-1:-1:-1;38158:320:0;;;;;:::i;:::-;;:::i;52209:99::-;;;;;;;;;;-1:-1:-1;52209:99:0;;;;;:::i;:::-;;:::i;23087:326::-;;;;;;;;;;-1:-1:-1;23087:326:0;;;;;:::i;:::-;;:::i;50918:217::-;;;;;;;;;;;;;:::i;51396:323::-;;;;;;;;;;-1:-1:-1;51396:323:0;;;;;:::i;:::-;;:::i;52406:162::-;;;;;;;;;;-1:-1:-1;52406:162:0;;;;;:::i;:::-;;:::i;22730:295::-;;;;;;;;;;-1:-1:-1;22730:295:0;;;;;:::i;:::-;;:::i;2642:94::-;;;;;;;;;;;;;:::i;54994:515::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;46673:572::-;;;;;;;;;;-1:-1:-1;46673:572:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;56639:88::-;;;;;;;;;;;;;:::i;1991:87::-;;;;;;;;;;-1:-1:-1;2037:7:0;2064:6;-1:-1:-1;;;;;2064:6:0;1991:87;;56042:323;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;55755:235::-;;;;;;;;;;;;55948:19;;55969:12;;55925:21;;55755:235;;;;;6897:25:1;;;6953:2;6938:18;;6931:34;;;;6981:18;;;6974:34;6885:2;6870:18;55755:235:0;6695:319:1;23649:104:0;;;;;;;;;;;;;:::i;52316:82::-;;;;;;;;;;;;;:::i;53689:352::-;;;;;;:::i;:::-;;:::i;25553:327::-;;;;;;;;;;-1:-1:-1;25553:327:0;;;;;:::i;:::-;;:::i;45133:36::-;;;;;;;;;;;;;;;;26935:365;;;;;;;;;;-1:-1:-1;26935:365:0;;;;;:::i;:::-;;:::i;54380:550::-;;;;;;;;;;-1:-1:-1;54380:550:0;;;;;:::i;:::-;;:::i;51904:127::-;;;;;;;;;;-1:-1:-1;51904:127:0;;;;;:::i;:::-;;:::i;57086:204::-;;;;;;;;;;-1:-1:-1;57086:204:0;;;;;:::i;:::-;;:::i;25951:214::-;;;;;;;;;;-1:-1:-1;25951:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;26122:25:0;;;26093:4;26122:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25951:214;2891:229;;;;;;;;;;-1:-1:-1;2891:229:0;;;;;:::i;:::-;;:::i;52576:204::-;;;;;;;;;;-1:-1:-1;52576:204:0;;;;;:::i;:::-;;:::i;51727:169::-;;;;;;;;;;-1:-1:-1;51727:169:0;;;;;:::i;:::-;;:::i;47513:309::-;47678:4;-1:-1:-1;;;;;;47720:41:0;;-1:-1:-1;;;47720:41:0;;:94;;;47778:36;47802:11;47778:23;:36::i;:::-;47700:114;47513:309;-1:-1:-1;;47513:309:0:o;23480:100::-;23534:13;23567:5;23560:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23480:100;:::o;25173:308::-;25294:7;25341:16;25349:7;25341;:16::i;:::-;25319:110;;;;-1:-1:-1;;;25319:110:0;;10117:2:1;25319:110:0;;;10099:21:1;10156:2;10136:18;;;10129:30;10195:34;10175:18;;;10168:62;-1:-1:-1;;;10246:18:1;;;10239:42;10298:19;;25319:110:0;;;;;;;;;-1:-1:-1;25449:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25449:24:0;;25173:308::o;24696:411::-;24777:13;24793:23;24808:7;24793:14;:23::i;:::-;24777:39;;24841:5;-1:-1:-1;;;;;24835:11:0;:2;-1:-1:-1;;;;;24835:11:0;;24827:57;;;;-1:-1:-1;;;24827:57:0;;10530:2:1;24827:57:0;;;10512:21:1;10569:2;10549:18;;;10542:30;10608:34;10588:18;;;10581:62;-1:-1:-1;;;10659:18:1;;;10652:31;10700:19;;24827:57:0;10328:397:1;24827:57:0;920:10;-1:-1:-1;;;;;24919:21:0;;;;:62;;-1:-1:-1;24944:37:0;24961:5;920:10;25951:214;:::i;24944:37::-;24897:168;;;;-1:-1:-1;;;24897:168:0;;10932:2:1;24897:168:0;;;10914:21:1;10971:2;10951:18;;;10944:30;11010:34;10990:18;;;10983:62;11081:26;11061:18;;;11054:54;11125:19;;24897:168:0;10730:420:1;24897:168:0;25078:21;25087:2;25091:7;25078:8;:21::i;:::-;24766:341;24696:411;;:::o;51143:245::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;51282:10:::1;;51273:6;51250:19;:9;43790:14:::0;;43698:114;51250:19:::1;51249:30;;;;:::i;:::-;:43;51227:111;;;::::0;-1:-1:-1;;;51227:111:0;;11980:2:1;51227:111:0::1;::::0;::::1;11962:21:1::0;12019:2;11999:18;;;11992:30;-1:-1:-1;;;12038:18:1;;;12031:48;12096:18;;51227:111:0::1;11778:342:1::0;51227:111:0::1;51349:31;51359:9;51370:6;51378:1;51349:9;:31::i;:::-;51143:245:::0;;:::o;26232:376::-;26441:41;920:10;26460:12;26474:7;26441:18;:41::i;:::-;26419:140;;;;-1:-1:-1;;;26419:140:0;;;;;;;:::i;:::-;26572:28;26582:4;26588:2;26592:7;26572:9;:28::i;56735:343::-;56860:16;56878:21;56925:16;56933:7;56925;:16::i;:::-;56917:46;;;;-1:-1:-1;;;56917:46:0;;;;;;;:::i;:::-;56974:15;57020:5;57005:11;;56993:9;:23;;;;:::i;:::-;56992:33;;;;:::i;:::-;57044:16;;-1:-1:-1;;;;;57044:16:0;;-1:-1:-1;56974:51:0;-1:-1:-1;;56735:343:0;;;;;;:::o;56373:179::-;56435:7;56463:16;56471:7;56463;:16::i;:::-;56455:46;;;;-1:-1:-1;;;56455:46:0;;;;;;;:::i;:::-;-1:-1:-1;56519:25:0;;;;:16;:25;;;;;;-1:-1:-1;;;;;56519:25:0;;56373:179::o;37549:343::-;37691:7;37746:23;37763:5;37746:16;:23::i;:::-;37738:5;:31;37716:124;;;;-1:-1:-1;;;37716:124:0;;13521:2:1;37716:124:0;;;13503:21:1;13560:2;13540:18;;;13533:30;13599:34;13579:18;;;13572:62;-1:-1:-1;;;13650:18:1;;;13643:41;13701:19;;37716:124:0;13319:407:1;37716:124:0;-1:-1:-1;;;;;;37858:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37549:343::o;26679:185::-;26817:39;26834:4;26840:2;26844:7;26817:39;;;;;;;;;;;;:16;:39::i;54120:252::-;54191:41;920:10;54210:12;840:98;54191:41;54169:113;;;;-1:-1:-1;;;54169:113:0;;13933:2:1;54169:113:0;;;13915:21:1;13972:2;13952:18;;;13945:30;-1:-1:-1;;;13991:18:1;;;13984:52;14053:18;;54169:113:0;13731:346:1;54169:113:0;54293:14;54299:7;54293:5;:14::i;:::-;54325:39;54338:13;38056:10;:17;;37968:113;54338:13;54353:10;;54325:39;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;3372:18;54325:39:0;;;;;;;54120:252;:::o;52039:162::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;52151:18:::1;:42:::0;52039:162::o;38158:320::-;38278:7;38333:30;38056:10;:17;;37968:113;38333:30;38325:5;:38;38303:132;;;;-1:-1:-1;;;38303:132:0;;14284:2:1;38303:132:0;;;14266:21:1;14323:2;14303:18;;;14296:30;14362:34;14342:18;;;14335:62;-1:-1:-1;;;14413:18:1;;;14406:42;14465:19;;38303:132:0;14082:408:1;38303:132:0;38453:10;38464:5;38453:17;;;;;;;;:::i;:::-;;;;;;;;;38446:24;;38158:320;;;:::o;52209:99::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;52278:13:::1;:22:::0;52209:99::o;23087:326::-;23204:7;23245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23245:16:0;;23272:110;;;;-1:-1:-1;;;23272:110:0;;14829:2:1;23272:110:0;;;14811:21:1;14868:2;14848:18;;;14841:30;14907:34;14887:18;;;14880:62;-1:-1:-1;;;14958:18:1;;;14951:39;15007:19;;23272:110:0;14627:405:1;50918:217:0;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;50976:12:::1;::::0;51007:42:::1;50999:101;51086:3;51075:7;50976:12:::0;51086:3;51075:7:::1;:::i;:::-;51074:15;;;;:::i;:::-;50999:101;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51126:1:0::1;51111:12;:16:::0;50918:217::o;51396:323::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;51530:20;;;;;:58:::1;;-1:-1:-1::0;51554:34:0;;::::1;51530:58;51522:67;;;::::0;::::1;;51605:9;51600:112;51620:20:::0;;::::1;51600:112;;;51662:38;51672:9;;51682:1;51672:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;51686:7;;51694:1;51686:10;;;;;;;:::i;:::-;;;;;;;51698:1;51662:9;:38::i;:::-;51642:3;;51600:112;;;;51396:323:::0;;;;:::o;52406:162::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;52484:9:::1;43790:14:::0;52477:3:::1;:26;;52469:64;;;::::0;-1:-1:-1;;;52469:64:0;;15239:2:1;52469:64:0::1;::::0;::::1;15221:21:1::0;15278:2;15258:18;;;15251:30;15317:27;15297:18;;;15290:55;15362:18;;52469:64:0::1;15037:349:1::0;52469:64:0::1;52544:10;:16:::0;52406:162::o;22730:295::-;22847:7;-1:-1:-1;;;;;22894:19:0;;22872:111;;;;-1:-1:-1;;;22872:111:0;;15593:2:1;22872:111:0;;;15575:21:1;15632:2;15612:18;;;15605:30;15671:34;15651:18;;;15644:62;-1:-1:-1;;;15722:18:1;;;15715:40;15772:19;;22872:111:0;15391:406:1;22872:111:0;-1:-1:-1;;;;;;23001:16:0;;;;;:9;:16;;;;;;;22730:295::o;2642:94::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;2707:21:::1;2725:1;2707:9;:21::i;:::-;2642:94::o:0;54994:515::-;55073:4;55092:7;55114;55136;55158;55180;55202;55224:13;55287:15;;;;;;;;;;;55317:12;;55344:13;38056:10;:17;;37968:113;55344:13;55372:10;;55397;;55422:11;;55448:13;;55476:14;55265:236;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54994:515;;;;;;;;:::o;46673:572::-;46762:16;46796:18;46817:17;46827:6;46817:9;:17::i;:::-;46796:38;;46849:10;46863:1;46849:15;46845:393;;46926:16;;;46940:1;46926:16;;;;;;;;;;;-1:-1:-1;46919:23:0;46673:572;-1:-1:-1;;;46673:572:0:o;46845:393::-;46975:23;47015:10;47001:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47001:25:0;;46975:51;;47041:13;47069:130;47093:10;47085:5;:18;47069:130;;;47149:34;47169:6;47177:5;47149:19;:34::i;:::-;47133:6;47140:5;47133:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;47105:7;;47069:130;;46845:393;46785:460;46673:572;;;:::o;56639:88::-;56685:34;920:10;56685:20;:34::i;56042:323::-;56121:7;;56165:16;56231:23;920:10;22730:295;:::i;56231:23::-;56269:34;920:10;56269:20;:34::i;:::-;56318:28;920:10;56318:14;:28::i;:::-;56209:148;;;;;;56042:323;;;:::o;23649:104::-;23705:13;23738:7;23731:14;;;;;:::i;52316:82::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;52368:15:::1;:22:::0;;-1:-1:-1;;52368:22:0::1;52386:4;52368:22;::::0;;52316:82::o;53689:352::-;48045:15;;;;:51;;;;-1:-1:-1;48086:10:0;;48064:9;43790:14;48064:32;48045:51;48023:132;;;;-1:-1:-1;;;48023:132:0;;16004:2:1;48023:132:0;;;15986:21:1;16043:2;16023:18;;;16016:30;16082:33;16062:18;;;16055:61;16133:18;;48023:132:0;15802:355:1;48023:132:0;53821:10:::1;;53810:6;53788:19;:9;43790:14:::0;;43698:114;53788:19:::1;:28;;;;:::i;:::-;53787:44;;53786:92;;;;;53864:13;;53854:6;:23;;53786:92;:155;;;;;53934:6;53913:18;:16;:18::i;:::-;:27;;;;:::i;:::-;53900:9;:40;;53786:155;53764:216;;;::::0;-1:-1:-1;;;53764:216:0;;16364:2:1;53764:216:0::1;::::0;::::1;16346:21:1::0;16403:2;16383:18;;;16376:30;-1:-1:-1;;;16422:18:1;;;16415:41;16473:18;;53764:216:0::1;16162:335:1::0;53764:216:0::1;53991:42;920:10:::0;54015:6:::1;54023:9;53991;:42::i;:::-;53689:352:::0;:::o;25553:327::-;920:10;-1:-1:-1;;;;;25688:24:0;;;25680:62;;;;-1:-1:-1;;;25680:62:0;;16704:2:1;25680:62:0;;;16686:21:1;16743:2;16723:18;;;16716:30;16782:27;16762:18;;;16755:55;16827:18;;25680:62:0;16502:349:1;25680:62:0;920:10;25755:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25755:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25755:53:0;;;;;;;;;;25824:48;;819:41:1;;;25755:42:0;;920:10;25824:48;;792:18:1;25824:48:0;;;;;;;25553:327;;:::o;26935:365::-;27124:41;920:10;27157:7;27124:18;:41::i;:::-;27102:140;;;;-1:-1:-1;;;27102:140:0;;;;;;;:::i;:::-;27253:39;27267:4;27273:2;27277:7;27286:5;27253:13;:39::i;:::-;26935:365;;;;:::o;54380:550::-;54506:13;54545:16;54553:7;54545;:16::i;:::-;54537:46;;;;-1:-1:-1;;;54537:46:0;;;;;;;:::i;:::-;54594:21;54618:10;:8;:10::i;:::-;54594:34;;54683:1;54665:7;54659:21;:25;:255;;;;;;;;;;;;;;;;;54793:7;54802:18;:7;:16;:18::i;:::-;54776:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;54776:45:0;;;;;;;;;;54733:140;;54776:45;54733:140;;:::i;:::-;;;;;;;;;;;;;54659:255;54639:275;54380:550;-1:-1:-1;;;54380:550:0:o;51904:127::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;51987:15:::1;:36:::0;51904:127::o;57086:204::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;57184:4:::1;57177:3;:11;;57169:36;;;::::0;-1:-1:-1;;;57169:36:0;;17952:2:1;57169:36:0::1;::::0;::::1;17934:21:1::0;17991:2;17971:18;;;17964:30;-1:-1:-1;;;18010:18:1;;;18003:42;18062:18;;57169:36:0::1;17750:336:1::0;57169:36:0::1;57227:16;:27:::0;;-1:-1:-1;;;;;;57227:27:0::1;-1:-1:-1::0;;;;;57227:27:0;;;::::1;::::0;;;::::1;::::0;;;57265:11:::1;:17:::0;57086:204::o;2891:229::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2994:22:0;::::1;2972:110;;;::::0;-1:-1:-1;;;2972:110:0;;18293:2:1;2972:110:0::1;::::0;::::1;18275:21:1::0;18332:2;18312:18;;;18305:30;18371:34;18351:18;;;18344:62;-1:-1:-1;;;18422:18:1;;;18415:36;18468:19;;2972:110:0::1;18091:402:1::0;2972:110:0::1;3093:19;3103:8;3093:9;:19::i;52576:204::-:0;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;52641:10:::1;:18:::0;;;52759:12:::1;::::0;52755:16:::1;::::0;:2:::1;:16;:::i;:::-;52719:18;;52698;:16;:18::i;:::-;:39;;;;:::i;:::-;52697:75;;;;:::i;:::-;52670:11;:102:::0;-1:-1:-1;52576:204:0:o;51727:169::-;2037:7;2064:6;-1:-1:-1;;;;;2064:6:0;920:10;2211:23;2203:68;;;;-1:-1:-1;;;2203:68:0;;;;;;;:::i;:::-;51836:1:::1;51818:7;51812:21;:25;51804:49;;;::::0;-1:-1:-1;;;51804:49:0;;20068:2:1;51804:49:0::1;::::0;::::1;20050:21:1::0;20107:2;20087:18;;;20080:30;-1:-1:-1;;;20126:18:1;;;20119:41;20177:18;;51804:49:0::1;19866:335:1::0;51804:49:0::1;51864:14;:24;51881:7:::0;51864:14;:24:::1;:::i;37165:300::-:0;37312:4;-1:-1:-1;;;;;;37354:50:0;;-1:-1:-1;;;37354:50:0;;:103;;;37421:36;37445:11;37421:23;:36::i;28847:127::-;28912:4;28936:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28936:16:0;:30;;;28847:127::o;32970:174::-;33045:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33045:29:0;-1:-1:-1;;;;;33045:29:0;;;;;;;;:24;;33099:23;33045:24;33099:14;:23::i;:::-;-1:-1:-1;;;;;33090:46:0;;;;;;;;;;;32970:174;;:::o;52910:654::-;53035:23;53050:7;53035:14;:23::i;:::-;53069:15;;53095:386;53119:6;53115:1;:10;53095:386;;;53147:21;:9;43909:19;;43927:1;43909:19;;;43820:127;53147:21;53193:9;43790:14;53183:29;;53227:25;53233:9;53244:7;53227:5;:25::i;:::-;53267;;;;:16;:25;;;;;;;;:37;;-1:-1:-1;;;;;;53267:37:0;-1:-1:-1;;;;;53267:37:0;;;;;53348:14;;53319:17;:26;;;;;;:43;53381:11;;53377:93;;53446:7;53432:11;;:21;;;;:::i;:::-;53413:14;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;53377:93:0;53127:3;;53095:386;;;;53496:60;53509:13;38056:10;:17;;37968:113;53509:13;53524:10;;53536:19;;53496:60;;;6897:25:1;;;6953:2;6938:18;;6931:34;;;;6981:18;;;6974:34;6885:2;6870:18;53496:60:0;;;;;;;;53024:540;52910:654;;;:::o;29141:452::-;29270:4;29314:16;29322:7;29314;:16::i;:::-;29292:110;;;;-1:-1:-1;;;29292:110:0;;22578:2:1;29292:110:0;;;22560:21:1;22617:2;22597:18;;;22590:30;22656:34;22636:18;;;22629:62;-1:-1:-1;;;22707:18:1;;;22700:42;22759:19;;29292:110:0;22376:408:1;29292:110:0;29413:13;29429:23;29444:7;29429:14;:23::i;:::-;29413:39;;29482:5;-1:-1:-1;;;;;29471:16:0;:7;-1:-1:-1;;;;;29471:16:0;;:64;;;;29528:7;-1:-1:-1;;;;;29504:31:0;:20;29516:7;29504:11;:20::i;:::-;-1:-1:-1;;;;;29504:31:0;;29471:64;:113;;;-1:-1:-1;;;;;;26122:25:0;;;26093:4;26122:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29552:32;29463:122;29141:452;-1:-1:-1;;;;29141:452:0:o;32237:615::-;32410:4;-1:-1:-1;;;;;32383:31:0;:23;32398:7;32383:14;:23::i;:::-;-1:-1:-1;;;;;32383:31:0;;32361:122;;;;-1:-1:-1;;;32361:122:0;;22991:2:1;32361:122:0;;;22973:21:1;23030:2;23010:18;;;23003:30;23069:34;23049:18;;;23042:62;-1:-1:-1;;;23120:18:1;;;23113:39;23169:19;;32361:122:0;22789:405:1;32361:122:0;-1:-1:-1;;;;;32502:16:0;;32494:65;;;;-1:-1:-1;;;32494:65:0;;23401:2:1;32494:65:0;;;23383:21:1;23440:2;23420:18;;;23413:30;23479:34;23459:18;;;23452:62;-1:-1:-1;;;23530:18:1;;;23523:34;23574:19;;32494:65:0;23199:400:1;32494:65:0;32572:39;32593:4;32599:2;32603:7;32572:20;:39::i;:::-;32676:29;32693:1;32697:7;32676:8;:29::i;:::-;-1:-1:-1;;;;;32718:15:0;;;;;;:9;:15;;;;;:20;;32737:1;;32718:15;:20;;32737:1;;32718:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32749:13:0;;;;;;:9;:13;;;;;:18;;32766:1;;32749:13;:18;;32766:1;;32749:18;:::i;:::-;;;;-1:-1:-1;;32778:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32778:21:0;-1:-1:-1;;;;;32778:21:0;;;;;;;;;32817:27;;32778:16;;32817:27;;;;;;;32237:615;;;:::o;31540:360::-;31600:13;31616:23;31631:7;31616:14;:23::i;:::-;31600:39;;31652:48;31673:5;31688:1;31692:7;31652:20;:48::i;:::-;31741:29;31758:1;31762:7;31741:8;:29::i;:::-;-1:-1:-1;;;;;31783:16:0;;;;;;:9;:16;;;;;:21;;31803:1;;31783:16;:21;;31803:1;;31783:21;:::i;:::-;;;;-1:-1:-1;;31822:16:0;;;;:7;:16;;;;;;31815:23;;-1:-1:-1;;;;;;31815:23:0;;;31856:36;31830:7;;31822:16;-1:-1:-1;;;;;31856:36:0;;;;;31822:16;;31856:36;31589:311;31540:360;:::o;3128:173::-;3184:16;3203:6;;-1:-1:-1;;;;;3220:17:0;;;-1:-1:-1;;;;;;3220:17:0;;;;;;3253:40;;3203:6;;;;;;;3253:40;;3184:16;3253:40;3173:128;3128:173;:::o;50030:771::-;50100:24;50127:26;50142:10;50127:14;:26::i;:::-;50100:53;;50189:1;50172:7;:14;:18;50164:57;;;;-1:-1:-1;;;50164:57:0;;23939:2:1;50164:57:0;;;23921:21:1;23978:2;23958:18;;;23951:30;24017:28;23997:18;;;23990:56;24063:18;;50164:57:0;23737:350:1;50164:57:0;50234:18;50263:16;50295:9;50290:278;50314:7;:14;50310:1;:18;50290:278;;;50378:17;:29;50396:7;50404:1;50396:10;;;;;;;;:::i;:::-;;;;;;;50378:29;;;;;;;;;;;;50361:14;;:46;;;;:::i;:::-;50350:57;-1:-1:-1;50426:12:0;;50422:135;;50459:22;50473:8;50459:22;;:::i;:::-;;;50533:8;50500:17;:29;50518:7;50526:1;50518:10;;;;;;;;:::i;:::-;;;;;;;50500:29;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;50422:135:0;50330:3;;50290:278;;;;50601:1;50588:10;:14;50580:47;;;;-1:-1:-1;;;50580:47:0;;24294:2:1;50580:47:0;;;24276:21:1;24333:2;24313:18;;;24306:30;-1:-1:-1;;;24352:18:1;;;24345:50;24412:18;;50580:47:0;24092:344:1;50580:47:0;50661:10;50638:19;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;50682:42:0;;920:10;;50682:42;;;;;50713:10;;50682:42;;;;50713:10;920;50682:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50773:19:0;;50742:51;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;50742:51:0;;3372:18:1;50742:51:0;3225:248:1;49380:568:0;49480:7;49505:24;49532:26;49547:10;49532:14;:26::i;:::-;49505:53;;49573:7;:14;49591:1;49573:19;49569:60;;-1:-1:-1;49616:1:0;;49380:568;-1:-1:-1;;49380:568:0:o;49569:60::-;49639:18;49668:16;49700:9;49695:218;49719:7;:14;49715:1;:18;49695:218;;;49783:17;:29;49801:7;49809:1;49801:10;;;;;;;;:::i;:::-;;;;;;;49783:29;;;;;;;;;;;;49766:14;;:46;;;;:::i;:::-;49755:57;-1:-1:-1;49831:12:0;;49827:75;;49864:22;49878:8;49864:22;;:::i;:::-;;;49827:75;49735:3;;49695:218;;;-1:-1:-1;49930:10:0;;49380:568;-1:-1:-1;;;;49380:568:0:o;48926:361::-;49016:16;49050:13;49066:17;49076:6;49066:9;:17::i;:::-;49050:33;;49094:23;49134:5;49120:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49120:20:0;;49094:46;;49156:9;49151:105;49175:5;49171:1;:9;49151:105;;;49214:30;49234:6;49242:1;49214:19;:30::i;:::-;49202:6;49209:1;49202:9;;;;;;;;:::i;:::-;;;;;;;;;;:42;49182:3;;49151:105;;48206:124;48257:7;48308:12;;48303:2;:17;;;;:::i;:::-;48298:23;;:2;:23;:::i;:::-;48284:10;;:38;;;;:::i;:::-;48277:45;;48206:124;:::o;28182:352::-;28339:28;28349:4;28355:2;28359:7;28339:9;:28::i;:::-;28400:48;28423:4;28429:2;28433:7;28442:5;28400:22;:48::i;:::-;28378:148;;;;-1:-1:-1;;;28378:148:0;;;;;;;:::i;47830:115::-;47890:13;47923:14;47916:21;;;;;:::i;18354:723::-;18410:13;18631:5;18640:1;18631:10;18627:53;;-1:-1:-1;;18658:10:0;;;;;;;;;;;;-1:-1:-1;;;18658:10:0;;;;;18354:723::o;18627:53::-;18705:5;18690:12;18746:78;18753:9;;18746:78;;18779:8;;;;:::i;:::-;;-1:-1:-1;18802:10:0;;-1:-1:-1;18810:2:0;18802:10;;:::i;:::-;;;18746:78;;;18834:19;18866:6;18856:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18856:17:0;;18834:39;;18884:154;18891:10;;18884:154;;18918:11;18928:1;18918:11;;:::i;:::-;;-1:-1:-1;18987:10:0;18995:2;18987:5;:10;:::i;:::-;18974:24;;:2;:24;:::i;:::-;18961:39;;18944:6;18951;18944:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18944:56:0;;;;;;;;-1:-1:-1;19015:11:0;19024:2;19015:11;;:::i;:::-;;;18884:154;;22311:355;22458:4;-1:-1:-1;;;;;;22500:40:0;;-1:-1:-1;;;22500:40:0;;:105;;-1:-1:-1;;;;;;;22557:48:0;;-1:-1:-1;;;22557:48:0;22500:105;:158;;;-1:-1:-1;;;;;;;;;;21029:40:0;;;22622:36;20870:207;48553:293;48618:11;;48614:225;;48646:15;48719:12;;48715:2;:16;;;;:::i;:::-;48675:18;;48665:28;;:7;:28;:::i;:::-;48664:68;;;;:::i;:::-;48646:86;;48772:7;48749:19;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;48810:17:0;;-1:-1:-1;48820:7:0;48810;:17;:::i;:::-;48794:12;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;48553:293:0;:::o;30929:382::-;-1:-1:-1;;;;;31009:16:0;;31001:61;;;;-1:-1:-1;;;31001:61:0;;25319:2:1;31001:61:0;;;25301:21:1;;;25338:18;;;25331:30;25397:34;25377:18;;;25370:62;25449:18;;31001:61:0;25117:356:1;31001:61:0;31082:16;31090:7;31082;:16::i;:::-;31081:17;31073:58;;;;-1:-1:-1;;;31073:58:0;;25680:2:1;31073:58:0;;;25662:21:1;25719:2;25699:18;;;25692:30;25758;25738:18;;;25731:58;25806:18;;31073:58:0;25478:352:1;31073:58:0;31144:45;31173:1;31177:2;31181:7;31144:20;:45::i;:::-;-1:-1:-1;;;;;31202:13:0;;;;;;:9;:13;;;;;:18;;31219:1;;31202:13;:18;;31219:1;;31202:18;:::i;:::-;;;;-1:-1:-1;;31231:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31231:21:0;-1:-1:-1;;;;;31231:21:0;;;;;;;;31270:33;;31231:16;;;31270:33;;31231:16;;31270:33;30929:382;;:::o;47282:223::-;47452:45;47479:4;47485:2;47489:7;47452:26;:45::i;33709:980::-;33864:4;-1:-1:-1;;;;;33885:13:0;;10626:20;10674:8;33881:801;;33938:175;;-1:-1:-1;;;33938:175:0;;-1:-1:-1;;;;;33938:36:0;;;;;:175;;920:10;;34032:4;;34059:7;;34089:5;;33938:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33938:175:0;;;;;;;;-1:-1:-1;;33938:175:0;;;;;;;;;;;;:::i;:::-;;;33917:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34296:6;:13;34313:1;34296:18;34292:320;;34339:108;;-1:-1:-1;;;34339:108:0;;;;;;;:::i;34292:320::-;34562:6;34556:13;34547:6;34543:2;34539:15;34532:38;33917:710;-1:-1:-1;;;;;;34177:51:0;-1:-1:-1;;;34177:51:0;;-1:-1:-1;34170:58:0;;33881:801;-1:-1:-1;34666:4:0;33709:980;;;;;;:::o;39091:589::-;-1:-1:-1;;;;;39297:18:0;;39293:187;;39332:40;39364:7;40507:10;:17;;40480:24;;;;:15;:24;;;;;:44;;;40535:24;;;;;;;;;;;;40403:164;39332:40;39293:187;;;39402:2;-1:-1:-1;;;;;39394:10:0;:4;-1:-1:-1;;;;;39394:10:0;;39390:90;;39421:47;39454:4;39460:7;39421:32;:47::i;:::-;-1:-1:-1;;;;;39494:16:0;;39490:183;;39527:45;39564:7;39527:36;:45::i;39490:183::-;39600:4;-1:-1:-1;;;;;39594:10:0;:2;-1:-1:-1;;;;;39594:10:0;;39590:83;;39621:40;39649:2;39653:7;39621:27;:40::i;41194:1002::-;41474:22;41524:1;41499:22;41516:4;41499:16;:22::i;:::-;:26;;;;:::i;:::-;41536:18;41557:26;;;:17;:26;;;;;;41474:51;;-1:-1:-1;41690:28:0;;;41686:328;;-1:-1:-1;;;;;41757:18:0;;41735:19;41757:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41808:30;;;;;;:44;;;41925:30;;:17;:30;;;;;:43;;;41686:328;-1:-1:-1;42110:26:0;;;;:17;:26;;;;;;;;42103:33;;;-1:-1:-1;;;;;42154:18:0;;;;;:12;:18;;;;;:34;;;;;;;42147:41;41194:1002::o;42491:1079::-;42769:10;:17;42744:22;;42769:21;;42789:1;;42769:21;:::i;:::-;42801:18;42822:24;;;:15;:24;;;;;;43195:10;:26;;42744:46;;-1:-1:-1;42822:24:0;;42744:46;;43195:26;;;;;;:::i;:::-;;;;;;;;;43173:48;;43259:11;43234:10;43245;43234:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;43339:28;;;:15;:28;;;;;;;:41;;;43511:24;;;;;43504:31;43546:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;42562:1008;;;42491:1079;:::o;39981:221::-;40066:14;40083:20;40100:2;40083:16;:20::i;:::-;-1:-1:-1;;;;;40114:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40159:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39981:221:0:o;293:131:1:-;-1:-1:-1;;;;;;367:32:1;;357:43;;347:71;;414:1;411;404:12;429:245;487:6;540:2;528:9;519:7;515:23;511:32;508:52;;;556:1;553;546:12;508:52;595:9;582:23;614:30;638:5;614:30;:::i;871:250::-;956:1;966:113;980:6;977:1;974:13;966:113;;;1056:11;;;1050:18;1037:11;;;1030:39;1002:2;995:10;966:113;;;-1:-1:-1;;1113:1:1;1095:16;;1088:27;871:250::o;1126:271::-;1168:3;1206:5;1200:12;1233:6;1228:3;1221:19;1249:76;1318:6;1311:4;1306:3;1302:14;1295:4;1288:5;1284:16;1249:76;:::i;:::-;1379:2;1358:15;-1:-1:-1;;1354:29:1;1345:39;;;;1386:4;1341:50;;1126:271;-1:-1:-1;;1126:271:1:o;1402:220::-;1551:2;1540:9;1533:21;1514:4;1571:45;1612:2;1601:9;1597:18;1589:6;1571:45;:::i;1627:180::-;1686:6;1739:2;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;-1:-1:-1;1778:23:1;;1627:180;-1:-1:-1;1627:180:1:o;2020:173::-;2088:20;;-1:-1:-1;;;;;2137:31:1;;2127:42;;2117:70;;2183:1;2180;2173:12;2117:70;2020:173;;;:::o;2198:254::-;2266:6;2274;2327:2;2315:9;2306:7;2302:23;2298:32;2295:52;;;2343:1;2340;2333:12;2295:52;2366:29;2385:9;2366:29;:::i;:::-;2356:39;2442:2;2427:18;;;;2414:32;;-1:-1:-1;;;2198:254:1:o;2639:328::-;2716:6;2724;2732;2785:2;2773:9;2764:7;2760:23;2756:32;2753:52;;;2801:1;2798;2791:12;2753:52;2824:29;2843:9;2824:29;:::i;:::-;2814:39;;2872:38;2906:2;2895:9;2891:18;2872:38;:::i;:::-;2862:48;;2957:2;2946:9;2942:18;2929:32;2919:42;;2639:328;;;;;:::o;2972:248::-;3040:6;3048;3101:2;3089:9;3080:7;3076:23;3072:32;3069:52;;;3117:1;3114;3107:12;3069:52;-1:-1:-1;;3140:23:1;;;3210:2;3195:18;;;3182:32;;-1:-1:-1;2972:248:1:o;3478:367::-;3541:8;3551:6;3605:3;3598:4;3590:6;3586:17;3582:27;3572:55;;3623:1;3620;3613:12;3572:55;-1:-1:-1;3646:20:1;;3689:18;3678:30;;3675:50;;;3721:1;3718;3711:12;3675:50;3758:4;3750:6;3746:17;3734:29;;3818:3;3811:4;3801:6;3798:1;3794:14;3786:6;3782:27;3778:38;3775:47;3772:67;;;3835:1;3832;3825:12;3850:773;3972:6;3980;3988;3996;4049:2;4037:9;4028:7;4024:23;4020:32;4017:52;;;4065:1;4062;4055:12;4017:52;4105:9;4092:23;4134:18;4175:2;4167:6;4164:14;4161:34;;;4191:1;4188;4181:12;4161:34;4230:70;4292:7;4283:6;4272:9;4268:22;4230:70;:::i;:::-;4319:8;;-1:-1:-1;4204:96:1;-1:-1:-1;4407:2:1;4392:18;;4379:32;;-1:-1:-1;4423:16:1;;;4420:36;;;4452:1;4449;4442:12;4420:36;;4491:72;4555:7;4544:8;4533:9;4529:24;4491:72;:::i;:::-;3850:773;;;;-1:-1:-1;4582:8:1;-1:-1:-1;;;;3850:773:1:o;4628:186::-;4687:6;4740:2;4728:9;4719:7;4715:23;4711:32;4708:52;;;4756:1;4753;4746:12;4708:52;4779:29;4798:9;4779:29;:::i;4819:753::-;5121:4;5150:3;5194:6;5187:14;5180:22;5169:9;5162:41;5239:6;5234:2;5223:9;5219:18;5212:34;5282:6;5277:2;5266:9;5262:18;5255:34;5325:6;5320:2;5309:9;5305:18;5298:34;5369:6;5363:3;5352:9;5348:19;5341:35;5413:6;5407:3;5396:9;5392:19;5385:35;5457:6;5451:3;5440:9;5436:19;5429:35;5501:2;5495:3;5484:9;5480:19;5473:31;5521:45;5562:2;5551:9;5547:18;5539:6;5521:45;:::i;:::-;5513:53;4819:753;-1:-1:-1;;;;;;;;;;;4819:753:1:o;5577:439::-;5630:3;5668:5;5662:12;5695:6;5690:3;5683:19;5721:4;5750;5745:3;5741:14;5734:21;;5789:4;5782:5;5778:16;5812:1;5822:169;5836:6;5833:1;5830:13;5822:169;;;5897:13;;5885:26;;5931:12;;;;5966:15;;;;5858:1;5851:9;5822:169;;;-1:-1:-1;6007:3:1;;5577:439;-1:-1:-1;;;;;5577:439:1:o;6021:261::-;6200:2;6189:9;6182:21;6163:4;6220:56;6272:2;6261:9;6257:18;6249:6;6220:56;:::i;6287:403::-;6522:6;6511:9;6504:25;6565:6;6560:2;6549:9;6545:18;6538:34;6608:2;6603;6592:9;6588:18;6581:30;6485:4;6628:56;6680:2;6669:9;6665:18;6657:6;6628:56;:::i;:::-;6620:64;6287:403;-1:-1:-1;;;;;6287:403:1:o;7019:347::-;7084:6;7092;7145:2;7133:9;7124:7;7120:23;7116:32;7113:52;;;7161:1;7158;7151:12;7113:52;7184:29;7203:9;7184:29;:::i;:::-;7174:39;;7263:2;7252:9;7248:18;7235:32;7310:5;7303:13;7296:21;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7355:5;7345:15;;;7019:347;;;;;:::o;7371:127::-;7432:10;7427:3;7423:20;7420:1;7413:31;7463:4;7460:1;7453:15;7487:4;7484:1;7477:15;7503:631;7567:5;7597:18;7638:2;7630:6;7627:14;7624:40;;;7644:18;;:::i;:::-;7719:2;7713:9;7687:2;7773:15;;-1:-1:-1;;7769:24:1;;;7795:2;7765:33;7761:42;7749:55;;;7819:18;;;7839:22;;;7816:46;7813:72;;;7865:18;;:::i;:::-;7905:10;7901:2;7894:22;7934:6;7925:15;;7964:6;7956;7949:22;8004:3;7995:6;7990:3;7986:16;7983:25;7980:45;;;8021:1;8018;8011:12;7980:45;8071:6;8066:3;8059:4;8051:6;8047:17;8034:44;8126:1;8119:4;8110:6;8102;8098:19;8094:30;8087:41;;;;7503:631;;;;;:::o;8139:666::-;8234:6;8242;8250;8258;8311:3;8299:9;8290:7;8286:23;8282:33;8279:53;;;8328:1;8325;8318:12;8279:53;8351:29;8370:9;8351:29;:::i;:::-;8341:39;;8399:38;8433:2;8422:9;8418:18;8399:38;:::i;:::-;8389:48;;8484:2;8473:9;8469:18;8456:32;8446:42;;8539:2;8528:9;8524:18;8511:32;8566:18;8558:6;8555:30;8552:50;;;8598:1;8595;8588:12;8552:50;8621:22;;8674:4;8666:13;;8662:27;-1:-1:-1;8652:55:1;;8703:1;8700;8693:12;8652:55;8726:73;8791:7;8786:2;8773:16;8768:2;8764;8760:11;8726:73;:::i;:::-;8716:83;;;8139:666;;;;;;;:::o;8810:260::-;8878:6;8886;8939:2;8927:9;8918:7;8914:23;8910:32;8907:52;;;8955:1;8952;8945:12;8907:52;8978:29;8997:9;8978:29;:::i;:::-;8968:39;;9026:38;9060:2;9049:9;9045:18;9026:38;:::i;:::-;9016:48;;8810:260;;;;;:::o;9075:450::-;9144:6;9197:2;9185:9;9176:7;9172:23;9168:32;9165:52;;;9213:1;9210;9203:12;9165:52;9253:9;9240:23;9286:18;9278:6;9275:30;9272:50;;;9318:1;9315;9308:12;9272:50;9341:22;;9394:4;9386:13;;9382:27;-1:-1:-1;9372:55:1;;9423:1;9420;9413:12;9372:55;9446:73;9511:7;9506:2;9493:16;9488:2;9484;9480:11;9446:73;:::i;9530:380::-;9609:1;9605:12;;;;9652;;;9673:61;;9727:4;9719:6;9715:17;9705:27;;9673:61;9780:2;9772:6;9769:14;9749:18;9746:38;9743:161;;9826:10;9821:3;9817:20;9814:1;9807:31;9861:4;9858:1;9851:15;9889:4;9886:1;9879:15;11155:356;11357:2;11339:21;;;11376:18;;;11369:30;11435:34;11430:2;11415:18;;11408:62;11502:2;11487:18;;11155:356::o;11516:127::-;11577:10;11572:3;11568:20;11565:1;11558:31;11608:4;11605:1;11598:15;11632:4;11629:1;11622:15;11648:125;11713:9;;;11734:10;;;11731:36;;;11747:18;;:::i;12125:413::-;12327:2;12309:21;;;12366:2;12346:18;;;12339:30;12405:34;12400:2;12385:18;;12378:62;-1:-1:-1;;;12471:2:1;12456:18;;12449:47;12528:3;12513:19;;12125:413::o;12543:341::-;12745:2;12727:21;;;12784:2;12764:18;;;12757:30;-1:-1:-1;;;12818:2:1;12803:18;;12796:47;12875:2;12860:18;;12543:341::o;12889:168::-;12962:9;;;12993;;13010:15;;;13004:22;;12990:37;12980:71;;13031:18;;:::i;13062:127::-;13123:10;13118:3;13114:20;13111:1;13104:31;13154:4;13151:1;13144:15;13178:4;13175:1;13168:15;13194:120;13234:1;13260;13250:35;;13265:18;;:::i;:::-;-1:-1:-1;13299:9:1;;13194:120::o;14495:127::-;14556:10;14551:3;14547:20;14544:1;14537:31;14587:4;14584:1;14577:15;14611:4;14608:1;14601:15;16856:496;17035:3;17073:6;17067:13;17089:66;17148:6;17143:3;17136:4;17128:6;17124:17;17089:66;:::i;:::-;17218:13;;17177:16;;;;17240:70;17218:13;17177:16;17287:4;17275:17;;17240:70;:::i;:::-;17326:20;;16856:496;-1:-1:-1;;;;16856:496:1:o;17357:388::-;17587:3;17625:6;17619:13;17641:66;17700:6;17695:3;17688:4;17680:6;17676:17;17641:66;:::i;:::-;17723:16;;;;;17357:388;-1:-1:-1;;17357:388:1:o;18498:416::-;18587:1;18624:5;18587:1;18638:270;18659:7;18649:8;18646:21;18638:270;;;18718:4;18714:1;18710:6;18706:17;18700:4;18697:27;18694:53;;;18727:18;;:::i;:::-;18777:7;18767:8;18763:22;18760:55;;;18797:16;;;;18760:55;18876:22;;;;18836:15;;;;18638:270;;;18642:3;18498:416;;;;;:::o;18919:806::-;18968:5;18998:8;18988:80;;-1:-1:-1;19039:1:1;19053:5;;18988:80;19087:4;19077:76;;-1:-1:-1;19124:1:1;19138:5;;19077:76;19169:4;19187:1;19182:59;;;;19255:1;19250:130;;;;19162:218;;19182:59;19212:1;19203:10;;19226:5;;;19250:130;19287:3;19277:8;19274:17;19271:43;;;19294:18;;:::i;:::-;-1:-1:-1;;19350:1:1;19336:16;;19365:5;;19162:218;;19464:2;19454:8;19451:16;19445:3;19439:4;19436:13;19432:36;19426:2;19416:8;19413:16;19408:2;19402:4;19399:12;19395:35;19392:77;19389:159;;;-1:-1:-1;19501:19:1;;;19533:5;;19389:159;19580:34;19605:8;19599:4;19580:34;:::i;:::-;19650:6;19646:1;19642:6;19638:19;19629:7;19626:32;19623:58;;;19661:18;;:::i;:::-;19699:20;;18919:806;-1:-1:-1;;;18919:806:1:o;19730:131::-;19790:5;19819:36;19846:8;19840:4;19819:36;:::i;20332:518::-;20434:2;20429:3;20426:11;20423:421;;;20470:5;20467:1;20460:16;20514:4;20511:1;20501:18;20584:2;20572:10;20568:19;20565:1;20561:27;20555:4;20551:38;20620:4;20608:10;20605:20;20602:47;;;-1:-1:-1;20643:4:1;20602:47;20698:2;20693:3;20689:12;20686:1;20682:20;20676:4;20672:31;20662:41;;20753:81;20771:2;20764:5;20761:13;20753:81;;;20830:1;20816:16;;20797:1;20786:13;20753:81;;21026:1345;21152:3;21146:10;21179:18;21171:6;21168:30;21165:56;;;21201:18;;:::i;:::-;21230:97;21320:6;21280:38;21312:4;21306:11;21280:38;:::i;:::-;21274:4;21230:97;:::i;:::-;21382:4;;21439:2;21428:14;;21456:1;21451:663;;;;22158:1;22175:6;22172:89;;;-1:-1:-1;22227:19:1;;;22221:26;22172:89;-1:-1:-1;;20983:1:1;20979:11;;;20975:24;20971:29;20961:40;21007:1;21003:11;;;20958:57;22274:81;;21421:944;;21451:663;20279:1;20272:14;;;20316:4;20303:18;;-1:-1:-1;;21487:20:1;;;21605:236;21619:7;21616:1;21613:14;21605:236;;;21708:19;;;21702:26;21687:42;;21800:27;;;;21768:1;21756:14;;;;21635:19;;21605:236;;;21609:3;21869:6;21860:7;21857:19;21854:201;;;21930:19;;;21924:26;-1:-1:-1;;22013:1:1;22009:14;;;22025:3;22005:24;22001:37;21997:42;21982:58;21967:74;;21854:201;;;22101:1;22092:6;22089:1;22085:14;22081:22;22075:4;22068:36;21421:944;;;;;21026:1345;;:::o;23604:128::-;23671:9;;;23692:11;;;23689:37;;;23706:18;;:::i;24441:414::-;24643:2;24625:21;;;24682:2;24662:18;;;24655:30;24721:34;24716:2;24701:18;;24694:62;-1:-1:-1;;;24787:2:1;24772:18;;24765:48;24845:3;24830:19;;24441:414::o;24860:135::-;24899:3;24920:17;;;24917:43;;24940:18;;:::i;:::-;-1:-1:-1;24987:1:1;24976:13;;24860:135::o;25000:112::-;25032:1;25058;25048:35;;25063:18;;:::i;:::-;-1:-1:-1;25097:9:1;;25000:112::o;25835:489::-;-1:-1:-1;;;;;26104:15:1;;;26086:34;;26156:15;;26151:2;26136:18;;26129:43;26203:2;26188:18;;26181:34;;;26251:3;26246:2;26231:18;;26224:31;;;26029:4;;26272:46;;26298:19;;26290:6;26272:46;:::i;:::-;26264:54;25835:489;-1:-1:-1;;;;;;25835:489:1:o;26329:249::-;26398:6;26451:2;26439:9;26430:7;26426:23;26422:32;26419:52;;;26467:1;26464;26457:12;26419:52;26499:9;26493:16;26518:30;26542:5;26518:30;:::i;26583:127::-;26644:10;26639:3;26635:20;26632:1;26625:31;26675:4;26672:1;26665:15;26699:4;26696:1;26689:15
Swarm Source
ipfs://30ba40e5540320ca4f3c1065760c446c6e95428ecc2da29ff49c97ded7f6b49d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.