Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint Token | 15028065 | 885 days ago | IN | 0.15 ETH | 0.01325388 | ||||
Mint Token | 14993235 | 892 days ago | IN | 0.15 ETH | 0.00631696 | ||||
Mint Token | 14991760 | 892 days ago | IN | 0.15 ETH | 0.00701203 | ||||
Mint Token | 14987841 | 893 days ago | IN | 0.15 ETH | 0.00704184 | ||||
Mint Token | 14987254 | 893 days ago | IN | 0.15 ETH | 0.02925752 | ||||
0x60c06040 | 14984916 | 893 days ago | IN | 0 ETH | 0.06491714 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15028065 | 885 days ago | 0.075 ETH | ||||
15028065 | 885 days ago | 0.075 ETH | ||||
14993235 | 892 days ago | 0.075 ETH | ||||
14993235 | 892 days ago | 0.075 ETH | ||||
14991760 | 892 days ago | 0.075 ETH | ||||
14991760 | 892 days ago | 0.075 ETH | ||||
14987841 | 893 days ago | 0.075 ETH | ||||
14987841 | 893 days ago | 0.075 ETH | ||||
14987254 | 893 days ago | 0.075 ETH | ||||
14987254 | 893 days ago | 0.075 ETH |
Loading...
Loading
Contract Name:
s54nftERC721v2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./basicERC20.sol"; import "./ERC721URIStorage.sol"; import "./verifySignature.sol"; contract s54nftERC721v2 is ERC721URIStorage, VerifySignature { address moderator; address creator; uint256 public modFirstRoyalties = 200; //it's cuz has 2 decimal = 2.00 uint256 public modRoyalties = 200; uint256 public creRoyalties = 200; uint256 public cost = 0.001 ether; uint256 public maxSupply = 0; uint256 public supply = 0; uint256 public lastNonce = 0; uint256 public modTime = 7 days; mapping(uint256 => uint8) internal usedNonce; mapping(uint256 => uint256) internal lastTransact; event nftMinted(address to, uint256 count, address payToken, uint256 payAmount, uint256[] tokenIds); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(string memory name, string memory symbol, address setCreator, address setModerator, uint256 setModFirstRoyalties, uint256 setModRoyalties, uint256 setCreRoyalties , uint256 setCost, uint256 setMaxSuplly) ERC721(name, symbol) { moderator = setModerator; modFirstRoyalties = setModFirstRoyalties; modRoyalties = setModRoyalties; creRoyalties = setCreRoyalties; creator = setCreator; cost = setCost; maxSupply = setMaxSuplly; } function modifModRoyalties(uint256 royalties) public onlyModerator { modRoyalties = royalties; } function modifCreRoyalties(uint256 royalties) public onlyCreator { creRoyalties = royalties; } function modifCost(uint256 setCost) public onlyCreator { cost = setCost; } function _setBaseURI(string memory _uri) public onlyModerator { _baseURIstr = _uri; } function calcShares(address tokenOwner, uint256 amount) private view returns(uint256 [] memory) { uint256 svalue = amount; uint256[] memory shares = new uint256[](3); if(amount < 10000){ svalue = svalue * 10000; } if(tokenOwner == creator){ shares[0] = svalue / 10000 * (10000 - modFirstRoyalties); //creator share shares[1] = svalue - shares[0]; //moderator share //shares[1] = svalue / 10000 * modFirstRoyalties; //moderator share if(amount < 10000){ shares[0] = shares[0] / 10000; shares[1] = amount - shares[0]; //shares[1] = shares[1] / 10000; } return shares; } else { uint256 totShares = creRoyalties + modRoyalties; uint256 shareable = svalue / 10000 * totShares; shares[0] = shareable / totShares * creRoyalties; //creator share shares[1] = shareable / totShares * modRoyalties; //moderator share shares[2] = amount - shareable; // seller share if(amount < 10000){ shares[0] = shares[0] / 10000; shares[1] = shares[1] / 10000; shares[2] = shares[2] / 10000; } return shares; } } function distribShares(address tokenOwner, address payToken, uint256 amount) internal { //require(msg.value >= cost, "Amount send not enough"); if(amount > 0){ uint256[] memory _shares = calcShares(tokenOwner, amount); if(payToken == address(0)){ if(tokenOwner != creator && _shares[2] > 0){ //payable(tokenOwner).transfer(shares[2]); require(payable(tokenOwner).send(_shares[2])); } if(_shares[0] > 0){ //payable(creator).transfer( _shares[0]); require(payable(creator).send(_shares[0])); } if(_shares[1] > 0){ //payable(moderator).transfer(_shares[1]); require(payable(moderator).send(_shares[1])); } } else { ERC20 t = ERC20(payToken); require(t.transferFrom(msg.sender, address(this), amount)); if(tokenOwner != creator && _shares[2] > 0){ require(t.transfer(tokenOwner, _shares[2])); } if(_shares[0] > 0){ require(t.transfer(creator, _shares[0])); } if(_shares[1] > 0){ require(t.transfer(moderator, _shares[1])); } } } } function mintToken(address reciver, string[] memory tokenURI, uint256[] memory optionalId, address payToken, uint256 payAmount, uint256 nonce, bytes memory data) public payable returns (uint256[] memory) { uint256 count = tokenURI.length; uint256[] memory tokenIds = new uint256[](count); if(maxSupply != 0){ require(supply + (count - 1) < maxSupply, "Max supply reached"); } if(msg.value > 0 && payToken == address(0)){ payAmount = msg.value; } if(msg.sender != moderator && msg.sender != creator){ lognonce(nonce); require(verifyMint(moderator, reciver, payToken, payAmount, tokenURI, optionalId, nonce, data), "Not allowed"); } distribShares(creator, payToken, payAmount); for (uint256 i = 0; i < count; i++) { supply += 1; uint256 tmpid = supply; // supply as item id if( optionalId[i] > 0 ){ tmpid = optionalId[i]; } if(_exists(tmpid) == false){ tokenIds[i] = tmpid; _mint(reciver, tmpid); _setTokenURI(tmpid, tokenURI[i]); lastTransact[tmpid]=block.timestamp; } else { revert("TokenId Used"); } } emit nftMinted(reciver, count, payToken, payAmount, tokenIds); return tokenIds; } function buy( address from, uint256 tokenid, address reciver, address payToken, uint256 payAmount, uint256 nonce, bytes memory data ) public payable { if(msg.value > 0 && payToken == address(0)){ payAmount = msg.value; } if(msg.sender != moderator){ lognonce(nonce); require(verifyBuy(moderator, from, tokenid, reciver, payToken, payAmount, nonce, data), "Not allowed"); } distribShares(from, payToken, payAmount); _transfer(from, reciver, tokenid); lastTransact[tokenid]=block.timestamp; } function transferFrom( address from, address to, uint256 tokenid ) public payable virtual override { ifAllOk(tokenid); distribShares(ownerOf(tokenid), address(0), msg.value); _transfer(from, to, tokenid); lastTransact[tokenid] = block.timestamp; } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenid, bytes memory _data ) public payable virtual override { ifAllOk(tokenid); distribShares(from, address(0), msg.value); _safeTransfer(from, to, tokenid, _data); lastTransact[tokenid]=block.timestamp; } function burn(uint256 tokenid) public virtual { ifAllOk(tokenid); _burn(tokenid); } // function ownerOf(uint256 tokenId) public view virtual override returns (address) { // address owner = _owners[tokenId]; // return owner; // } function totalSupply() public view returns (uint256) { return maxSupply; } function approveSpendERC20(address token, address spender, uint256 value) public onlyModerator returns (bool) { ERC20 t = ERC20(token); return t.approve(spender, value); } function withdraw() public payable onlyModerator { require(payable(msg.sender).send(address(this).balance)); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return creator; } /** * @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 onlyCreator { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = creator; creator = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } modifier onlyCreator { require(msg.sender == creator, "Only owner function"); _; } modifier onlyModerator { require(msg.sender == moderator, "Only Moderator Function"); _; } function ifAprovedOrOwner(uint256 tokenid) private view { require(_isApprovedOrOwner(_msgSender(), tokenid), "ERC721: caller is not owner nor approved"); } function ifcanModerate(uint256 tokenid) private view { require(lastTransact[tokenid] + modTime > block.timestamp, "Moderation time over"); } function ifAllOk(uint256 tokenid) internal view { if(msg.sender != moderator ){ ifAprovedOrOwner(tokenid); //require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); } else { ifcanModerate(tokenid); //require(lastTransact[tokenId] + modTime > block.timestamp, "Moderation time over"); } } function lognonce(uint256 nonce) internal { require(usedNonce[nonce] != 1, "Nonce already Used"); if(nonce > lastNonce){ lastNonce = nonce; } usedNonce[nonce] = 1; } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ERC20Basic { function totalSupply() public virtual view returns (uint256); function balanceOf(address who) public virtual view returns (uint256); function transfer(address to, uint256 value) public virtual returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } abstract contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public virtual view returns (uint256); function transferFrom(address from, address to, uint256 value) public virtual returns (bool); function approve(address spender, uint256 value) public virtual returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; import "./IERC721Receiver.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ abstract contract ERC721 is Context, ERC165, IERC721 { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; string internal _baseURIstr = "https://ipfs.io/ipfs/"; // Mapping from token ID to owner address mapping(uint256 => address) internal _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 returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual 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 _baseURIstr; } /** * @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 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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @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 payable; /** * @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 payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT 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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.3; /* Signature Verification How to Sign and Verify # Signing 1. Create message to sign 2. Hash the message 3. Sign the hash (off chain, keep your private key secret) # Verify 1. Recreate hash from the original message 2. Recover signer from signature and hash 3. Compare recovered signer to claimed signer */ contract VerifySignature { /* 1. Unlock MetaMask account ethereum.enable() */ /* 2. Get message hash to sign getMessageHash( 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C, 123, "coffee and donuts", 1 ) hash = "0xcf36ac4f97dc10d91fc2cbb20d718e94a8cbfe0f82eaedc6a4aa38946fb797cd" */ function getBuyMessageHash( address from, uint256 tokenid, address reciver, address payToken, uint256 payAmount, uint256 _nonce ) internal pure returns (bytes32) { return keccak256(abi.encodePacked(from, tokenid, reciver, payToken, payAmount, _nonce)); } function getMintMessageHash( address _reciver, address _payToken, uint256 _value, string[] memory _tokenURI, uint256[] memory optionalId, uint256 _nonce ) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_reciver, _payToken, _value, abi.encode(_tokenURI), optionalId, _nonce)); } /* 3. Sign message hash # using browser account = "copy paste account of signer here" ethereum.request({ method: "personal_sign", params: [account, hash]}).then(console.log) # using web3 web3.personal.sign(hash, web3.eth.defaultAccount, console.log) Signature will be different for different accounts 0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b */ function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) { /* Signature is produced by signing a keccak256 hash with the following format: "\x19Ethereum Signed Message\n" + len(msg) + msg */ return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) ); } /* 4. Verify signature signer = 0xB273216C05A8c0D4F0a4Dd0d7Bae1D2EfFE636dd to = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C amount = 123 message = "coffee and donuts" nonce = 1 signature = 0x993dab3dd91f5c6dc28e17439be475478f5635c92a56e17e82349d3fb2f166196f466c0b4e0c146f285204f0dcb13e5ae67bc33f4b888ec32dfe0a063e8f3f781b */ function verifyBuy( address _signer, address from, uint256 tokenid, address reciver, address payToken, uint256 payAmount, uint256 _nonce, bytes memory signature ) internal pure returns (bool) { bytes32 messageHash = getBuyMessageHash(from, tokenid, reciver, payToken, payAmount, _nonce); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; } function verifyMint( address _signer, address _reciver, address _payToken, uint256 _value, string[] memory tokenURI, uint256[] memory optionalId, uint256 _nonce, bytes memory signature ) internal pure returns (bool) { bytes32 messageHash = getMintMessageHash(_reciver, _payToken, _value, tokenURI, optionalId, _nonce); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; } function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) internal pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature(bytes memory sig) internal pure returns ( bytes32 r, bytes32 s, uint8 v ) { require(sig.length == 65, "invalid signature length"); assembly { /* First 32 bytes stores the length of the signature add(sig, 32) = pointer of sig + 32 effectively, skips first 32 bytes of signature mload(p) loads next 32 bytes starting at the memory address p into memory */ // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } // implicitly return (r, s, v) } }
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":"address","name":"setCreator","type":"address"},{"internalType":"address","name":"setModerator","type":"address"},{"internalType":"uint256","name":"setModFirstRoyalties","type":"uint256"},{"internalType":"uint256","name":"setModRoyalties","type":"uint256"},{"internalType":"uint256","name":"setCreRoyalties","type":"uint256"},{"internalType":"uint256","name":"setCost","type":"uint256"},{"internalType":"uint256","name":"setMaxSuplly","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"address","name":"payToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"payAmount","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"nftMinted","type":"event"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"_setBaseURI","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":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveSpendERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"address","name":"reciver","type":"address"},{"internalType":"address","name":"payToken","type":"address"},{"internalType":"uint256","name":"payAmount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reciver","type":"address"},{"internalType":"string[]","name":"tokenURI","type":"string[]"},{"internalType":"uint256[]","name":"optionalId","type":"uint256[]"},{"internalType":"address","name":"payToken","type":"address"},{"internalType":"uint256","name":"payAmount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintToken","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"modFirstRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"setCost","type":"uint256"}],"name":"modifCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"royalties","type":"uint256"}],"name":"modifCreRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"royalties","type":"uint256"}],"name":"modifModRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c0604052601560808190527f68747470733a2f2f697066732e696f2f697066732f000000000000000000000060a090815262000040916002919062000124565b5060c8600a5560c8600b5560c8600c5566038d7ea4c68000600d556000600e556000600f55600060105562093a806011553480156200007e57600080fd5b506040516200351438038062003514833981016040819052620000a1916200029e565b885189908990620000ba90600090602085019062000124565b508051620000d090600190602084019062000124565b5050600880546001600160a01b03199081166001600160a01b03998a1617909155600a9690965550600b93909355600c919091556009805490931694909316939093179055600d55600e5550620003b19050565b82805462000132906200035e565b90600052602060002090601f016020900481019282620001565760008555620001a1565b82601f106200017157805160ff1916838001178555620001a1565b82800160010185558215620001a1579182015b82811115620001a157825182559160200191906001019062000184565b50620001af929150620001b3565b5090565b5b80821115620001af5760008155600101620001b4565b80516001600160a01b0381168114620001e257600080fd5b919050565b600082601f830112620001f957600080fd5b81516001600160401b03808211156200021657620002166200039b565b604051601f8301601f19908116603f011681019082821181831017156200024157620002416200039b565b816040528381526020925086838588010111156200025e57600080fd5b600091505b8382101562000282578582018301518183018401529082019062000263565b83821115620002945760008385830101525b9695505050505050565b60008060008060008060008060006101208a8c031215620002be57600080fd5b89516001600160401b0380821115620002d657600080fd5b620002e48d838e01620001e7565b9a5060208c0151915080821115620002fb57600080fd5b506200030a8c828d01620001e7565b9850506200031b60408b01620001ca565b96506200032b60608b01620001ca565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b600181811c908216806200037357607f821691505b602082108114156200039557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61315380620003c16000396000f3fe6080604052600436106101ee5760003560e01c806358b2971a1161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb0114610512578063e985e9c514610528578063f2fde38b14610548578063f8321b9514610568578063f98fc0c51461058857600080fd5b8063a22cb4651461049f578063b88d4fde146104bf578063c87b56dd146104d2578063ca889d80146104f257600080fd5b80637e681223116100dc5780637e681223146104365780638da5cb5b1461045657806395d89b41146104745780639f3793301461048957600080fd5b806358b2971a146103c05780636352211e146103e057806366aca6381461040057806370a082311461041657600080fd5b806323b872dd1161018557806342842e0e1161015457806342842e0e1461036157806342966c681461037457806352631ab41461039457806352cfc8c3146103aa57600080fd5b806323b872dd14610306578063245eddd21461031957806331b5b907146103395780633ccfd60b1461035957600080fd5b8063081812fc116101c1578063081812fc14610283578063095ea7b3146102bb57806313faede6146102db57806318160ddd146102f157600080fd5b806301ffc9a7146101f3578063047fc9aa14610228578063062e8e901461024c57806306fdde0314610261575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612bf9565b61059e565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023e600f5481565b60405190815260200161021f565b61025f61025a366004612b5f565b6105f0565b005b34801561026d57600080fd5b506102766106b5565b60405161021f9190612e8b565b34801561028f57600080fd5b506102a361029e366004612c68565b610747565b6040516001600160a01b03909116815260200161021f565b3480156102c757600080fd5b5061025f6102d6366004612b35565b6107cf565b3480156102e757600080fd5b5061023e600d5481565b3480156102fd57600080fd5b50600e5461023e565b61025f610314366004612920565b6108e5565b34801561032557600080fd5b5061025f610334366004612c68565b610922565b34801561034557600080fd5b5061025f610354366004612c33565b610951565b61025f610992565b61025f61036f366004612920565b6109e2565b34801561038057600080fd5b5061025f61038f366004612c68565b6109fd565b3480156103a057600080fd5b5061023e60105481565b3480156103b657600080fd5b5061023e60115481565b3480156103cc57600080fd5b5061025f6103db366004612c68565b610a12565b3480156103ec57600080fd5b506102a36103fb366004612c68565b610a41565b34801561040c57600080fd5b5061023e600c5481565b34801561042257600080fd5b5061023e6104313660046128d2565b610ab8565b34801561044257600080fd5b50610213610451366004612920565b610b3f565b34801561046257600080fd5b506009546001600160a01b03166102a3565b34801561048057600080fd5b50610276610bfa565b34801561049557600080fd5b5061023e600b5481565b3480156104ab57600080fd5b5061025f6104ba366004612afe565b610c09565b61025f6104cd36600461295c565b610cce565b3480156104de57600080fd5b506102766104ed366004612c68565b610d05565b3480156104fe57600080fd5b5061025f61050d366004612c68565b610e6f565b34801561051e57600080fd5b5061023e600e5481565b34801561053457600080fd5b506102136105433660046128ed565b610e9e565b34801561055457600080fd5b5061025f6105633660046128d2565b610ecc565b61057b6105763660046129c4565b610f64565b60405161021f9190612e78565b34801561059457600080fd5b5061023e600a5481565b60006001600160e01b031982166380ac58cd60e01b14806105cf57506001600160e01b03198216635b5e139f60e01b145b806105ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60003411801561060757506001600160a01b038416155b15610610573492505b6008546001600160a01b031633146106865761062b82611246565b600854610647906001600160a01b0316888888888888886112c8565b6106865760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064015b60405180910390fd5b610691878585611363565b61069c87868861184f565b5050506000928352505060136020526040902042905550565b6060600080546106c490613037565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090613037565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050505050905090565b6000610752826119ef565b6107b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161067d565b506000908152600560205260409020546001600160a01b031690565b60006107da82610a41565b9050806001600160a01b0316836001600160a01b031614156108485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161067d565b336001600160a01b038216148061086457506108648133610e9e565b6108d65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161067d565b6108e08383611a0c565b505050565b6108ee81611a7a565b6109026108fa82610a41565b600034611363565b61090d83838361184f565b60009081526013602052604090204290555050565b6009546001600160a01b0316331461094c5760405162461bcd60e51b815260040161067d90612ef0565b600c55565b6008546001600160a01b0316331461097b5760405162461bcd60e51b815260040161067d90612f1d565b805161098e906002906020840190612705565b5050565b6008546001600160a01b031633146109bc5760405162461bcd60e51b815260040161067d90612f1d565b60405133904780156108fc02916000818181858888f193505050506109e057600080fd5b565b6108e083838360405180602001604052806000815250610cce565b610a0681611a7a565b610a0f81611a9e565b50565b6008546001600160a01b03163314610a3c5760405162461bcd60e51b815260040161067d90612f1d565b600b55565b6000818152600360205260408120546001600160a01b0316806105ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161067d565b60006001600160a01b038216610b235760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161067d565b506001600160a01b031660009081526004602052604090205490565b6008546000906001600160a01b03163314610b6c5760405162461bcd60e51b815260040161067d90612f1d565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b390604401602060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf19190612bdc565b95945050505050565b6060600180546106c490613037565b6001600160a01b038216331415610c625760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161067d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610cd782611a7a565b610ce384600034611363565b610cef84848484611ade565b5060009081526013602052604090204290555050565b6060610d10826119ef565b610d765760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161067d565b60008281526007602052604081208054610d8f90613037565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb90613037565b8015610e085780601f10610ddd57610100808354040283529160200191610e08565b820191906000526020600020905b815481529060010190602001808311610deb57829003601f168201915b505050505090506000610e19611b11565b9050805160001415610e2c575092915050565b815115610e5e578082604051602001610e46929190612d65565b60405160208183030381529060405292505050919050565b610e6784611b20565b949350505050565b6009546001600160a01b03163314610e995760405162461bcd60e51b815260040161067d90612ef0565b600d55565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6009546001600160a01b03163314610ef65760405162461bcd60e51b815260040161067d90612ef0565b6001600160a01b038116610f5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161067d565b610a0f81611beb565b855160609060008167ffffffffffffffff811115610f8457610f846130e3565b604051908082528060200260200182016040528015610fad578160200160208202803683370190505b509050600e5460001461101757600e54610fc8600184612ff4565b600f54610fd59190612fa9565b106110175760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015260640161067d565b60003411801561102e57506001600160a01b038716155b15611037573495505b6008546001600160a01b0316331480159061105d57506009546001600160a01b03163314155b156110c15761106b85611246565b600854611087906001600160a01b03168b89898d8d8b8b611c3d565b6110c15760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161067d565b6009546110d8906001600160a01b03168888611363565b60005b828110156111f9576001600f60008282546110f69190612fa9565b9091555050600f5489516000908b9084908110611115576111156130cd565b6020026020010151111561114057898281518110611135576111356130cd565b602002602001015190505b611149816119ef565b6111af5780838381518110611160576111606130cd565b6020026020010181815250506111768c82611c4e565b611199818c848151811061118c5761118c6130cd565b6020026020010151611d81565b60008181526013602052604090204290556111e6565b60405162461bcd60e51b815260206004820152600c60248201526b151bdad95b925908155cd95960a21b604482015260640161067d565b50806111f181613072565b9150506110db565b507f2ad7ca0d3c2e5ecc29a9466186263310753b53fbb5a0f710be5fb496c8e120828a83898985604051611231959493929190612dd1565b60405180910390a19998505050505050505050565b60008181526012602052604090205460ff166001141561129d5760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e48155cd95960721b604482015260640161067d565b6010548111156112ad5760108190555b6000908152601260205260409020805460ff19166001179055565b6000806112d9898989898989611e0c565b90506000611334826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90508a6001600160a01b031661134a8286611e7a565b6001600160a01b0316149b9a5050505050505050505050565b80156108e05760006113758483611ef9565b90506001600160a01b0383166114fc576009546001600160a01b038581169116148015906113bd57506000816002815181106113b3576113b36130cd565b6020026020010151115b1561140d57836001600160a01b03166108fc826002815181106113e2576113e26130cd565b60200260200101519081150290604051600060405180830381858888f1935050505061140d57600080fd5b600081600081518110611422576114226130cd565b602002602001015111156114815760095481516001600160a01b03909116906108fc908390600090611456576114566130cd565b60200260200101519081150290604051600060405180830381858888f1935050505061148157600080fd5b600081600181518110611496576114966130cd565b602002602001015111156114f75760085481516001600160a01b03909116906108fc90839060019081106114cc576114cc6130cd565b60200260200101519081150290604051600060405180830381858888f193505050506114f757600080fd5b611849565b6040516323b872dd60e01b81523360048201523060248201526044810183905283906001600160a01b038216906323b872dd90606401602060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190612bdc565b61158d57600080fd5b6009546001600160a01b038681169116148015906115c557506000826002815181106115bb576115bb6130cd565b6020026020010151115b1561168157806001600160a01b031663a9059cbb86846002815181106115ed576115ed6130cd565b60200260200101516040518363ffffffff1660e01b81526004016116269291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116789190612bdc565b61168157600080fd5b600082600081518110611696576116966130cd565b602002602001015111156117635760095482516001600160a01b038084169263a9059cbb9291169085906000906116cf576116cf6130cd565b60200260200101516040518363ffffffff1660e01b81526004016117089291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175a9190612bdc565b61176357600080fd5b600082600181518110611778576117786130cd565b602002602001015111156118475760085482516001600160a01b038084169263a9059cbb92911690859060019081106117b3576117b36130cd565b60200260200101516040518363ffffffff1660e01b81526004016117ec9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612bdc565b61184757600080fd5b505b50505050565b826001600160a01b031661186282610a41565b6001600160a01b0316146118ca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161067d565b6001600160a01b03821661192c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161067d565b611937600082611a0c565b6001600160a01b0383166000908152600460205260408120805460019290611960908490612ff4565b90915550506001600160a01b038216600090815260046020526040812080546001929061198e908490612fa9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a4182610a41565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546001600160a01b03163314611a9557610a0f81612227565b610a0f8161228e565b611aa7816122ef565b60008181526007602052604090208054611ac090613037565b159050610a0f576000818152600760205260408120610a0f91612789565b611ae984848461184f565b611af58484848461238a565b6118495760405162461bcd60e51b815260040161067d90612e9e565b6060600280546106c490613037565b6060611b2b826119ef565b611b8f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161067d565b6000611b99611b11565b90506000815111611bb95760405180602001604052806000815250611be4565b80611bc384612497565b604051602001611bd4929190612d65565b6040516020818303038152906040525b9392505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806112d9898989898989612595565b6001600160a01b038216611ca45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161067d565b611cad816119ef565b15611cfa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161067d565b6001600160a01b0382166000908152600460205260408120805460019290611d23908490612fa9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611d8a826119ef565b611ded5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161067d565b600082815260076020908152604090912082516108e092840190612705565b6040516bffffffffffffffffffffffff19606088811b821660208401526034830188905286811b8216605484015285901b166068820152607c8101839052609c810182905260009060bc015b6040516020818303038152906040528051906020012090509695505050505050565b600080600080611e89856125cf565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ee4573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080516003808252608082019092526060918391600091602082018580368337019050509050612710841015611f3957611f3682612710612fd5565b91505b6009546001600160a01b038681169116141561207857600a54611f5e90612710612ff4565b611f6a61271084612fc1565b611f749190612fd5565b81600081518110611f8757611f876130cd565b60200260200101818152505080600081518110611fa657611fa66130cd565b602002602001015182611fb99190612ff4565b81600181518110611fcc57611fcc6130cd565b60200260200101818152505061271084101561206f5761271081600081518110611ff857611ff86130cd565b602002602001015161200a9190612fc1565b8160008151811061201d5761201d6130cd565b6020026020010181815250508060008151811061203c5761203c6130cd565b60200260200101518461204f9190612ff4565b81600181518110612062576120626130cd565b6020026020010181815250505b91506105ea9050565b6000600b54600c5461208a9190612fa9565b905060008161209b61271086612fc1565b6120a59190612fd5565b600c549091506120b58383612fc1565b6120bf9190612fd5565b836000815181106120d2576120d26130cd565b6020908102919091010152600b546120ea8383612fc1565b6120f49190612fd5565b83600181518110612107576121076130cd565b602090810291909101015261211c8187612ff4565b8360028151811061212f5761212f6130cd565b60200260200101818152505061271086101561221b576127108360008151811061215b5761215b6130cd565b602002602001015161216d9190612fc1565b83600081518110612180576121806130cd565b602002602001018181525050612710836001815181106121a2576121a26130cd565b60200260200101516121b49190612fc1565b836001815181106121c7576121c76130cd565b602002602001018181525050612710836002815181106121e9576121e96130cd565b60200260200101516121fb9190612fc1565b8360028151811061220e5761220e6130cd565b6020026020010181815250505b829450505050506105ea565b6122313382612643565b610a0f5760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b606482015260840161067d565b60115460008281526013602052604090205442916122ab91612fa9565b11610a0f5760405162461bcd60e51b815260206004820152601460248201527326b7b232b930ba34b7b7103a34b6b29037bb32b960611b604482015260640161067d565b60006122fa82610a41565b9050612307600083611a0c565b6001600160a01b0381166000908152600460205260408120805460019290612330908490612ff4565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561248c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123ce903390899088908890600401612d94565b602060405180830381600087803b1580156123e857600080fd5b505af1925050508015612418575060408051601f3d908101601f1916820190925261241591810190612c16565b60015b612472573d808015612446576040519150601f19603f3d011682016040523d82523d6000602084013e61244b565b606091505b50805161246a5760405162461bcd60e51b815260040161067d90612e9e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e67565b506001949350505050565b6060816124bb5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124e557806124cf81613072565b91506124de9050600a83612fc1565b91506124bf565b60008167ffffffffffffffff811115612500576125006130e3565b6040519080825280601f01601f19166020018201604052801561252a576020820181803683370190505b5090505b8415610e675761253f600183612ff4565b915061254c600a8661308d565b612557906030612fa9565b60f81b81838151811061256c5761256c6130cd565b60200101906001600160f81b031916908160001a90535061258e600a86612fc1565b945061252e565b6000868686866040516020016125ab9190612e16565b60408051601f1981840301815290829052611e589493929188908890602001612ce8565b600080600083516041146126255760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161067d565b50505060208101516040820151606090920151909260009190911a90565b600061264e826119ef565b6126af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161067d565b60006126ba83610a41565b9050806001600160a01b0316846001600160a01b031614806126f55750836001600160a01b03166126ea84610747565b6001600160a01b0316145b80610e675750610e678185610e9e565b82805461271190613037565b90600052602060002090601f0160209004810192826127335760008555612779565b82601f1061274c57805160ff1916838001178555612779565b82800160010185558215612779579182015b8281111561277957825182559160200191906001019061275e565b506127859291506127bf565b5090565b50805461279590613037565b6000825580601f106127a5575050565b601f016020900490600052602060002090810190610a0f91905b5b8082111561278557600081556001016127c0565b80356001600160a01b03811681146127eb57600080fd5b919050565b600082601f83011261280157600080fd5b8135602061281661281183612f85565b612f54565b80838252828201915082860187848660051b890101111561283657600080fd5b60005b8581101561285557813584529284019290840190600101612839565b5090979650505050505050565b600082601f83011261287357600080fd5b813567ffffffffffffffff81111561288d5761288d6130e3565b6128a0601f8201601f1916602001612f54565b8181528460208386010111156128b557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156128e457600080fd5b611be4826127d4565b6000806040838503121561290057600080fd5b612909836127d4565b9150612917602084016127d4565b90509250929050565b60008060006060848603121561293557600080fd5b61293e846127d4565b925061294c602085016127d4565b9150604084013590509250925092565b6000806000806080858703121561297257600080fd5b61297b856127d4565b9350612989602086016127d4565b925060408501359150606085013567ffffffffffffffff8111156129ac57600080fd5b6129b887828801612862565b91505092959194509250565b600080600080600080600060e0888a0312156129df57600080fd5b6129e8886127d4565b9650602088013567ffffffffffffffff80821115612a0557600080fd5b818a0191508a601f830112612a1957600080fd5b612a266128118335612f85565b8083358252602082019150602084018d6020863560051b8701011115612a4b57600080fd5b60005b8535811015612a8a578482351115612a6557600080fd5b612a758f60208435890101612862565b84526020938401939190910190600101612a4e565b50909950505060408a0135915080821115612aa457600080fd5b612ab08b838c016127f0565b9650612abe60608b016127d4565b955060808a0135945060a08a0135935060c08a0135915080821115612ae257600080fd5b50612aef8a828b01612862565b91505092959891949750929550565b60008060408385031215612b1157600080fd5b612b1a836127d4565b91506020830135612b2a816130f9565b809150509250929050565b60008060408385031215612b4857600080fd5b612b51836127d4565b946020939093013593505050565b600080600080600080600060e0888a031215612b7a57600080fd5b612b83886127d4565b965060208801359550612b98604089016127d4565b9450612ba6606089016127d4565b93506080880135925060a0880135915060c088013567ffffffffffffffff811115612bd057600080fd5b612aef8a828b01612862565b600060208284031215612bee57600080fd5b8151611be4816130f9565b600060208284031215612c0b57600080fd5b8135611be481613107565b600060208284031215612c2857600080fd5b8151611be481613107565b600060208284031215612c4557600080fd5b813567ffffffffffffffff811115612c5c57600080fd5b610e6784828501612862565b600060208284031215612c7a57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015612cb157815187529582019590820190600101612c95565b509495945050505050565b60008151808452612cd481602086016020860161300b565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808960601b168352808860601b1660148401525085602883015284516020612d268260488601838a0161300b565b85519184016048019181870160005b82811015612d5157815185529383019390830190600101612d35565b505050938152909201979650505050505050565b60008351612d7781846020880161300b565b835190830190612d8b81836020880161300b565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dc790830184612cbc565b9695505050505050565b6001600160a01b03868116825260208201869052841660408201526060810183905260a060808201819052600090612e0b90830184612c81565b979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612e6b57603f19888603018452612e59858351612cbc565b94509285019290850190600101612e3d565b5092979650505050505050565b602081526000611be46020830184612c81565b602081526000611be46020830184612cbc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526013908201527227b7363c9037bbb732b910333ab731ba34b7b760691b604082015260600190565b60208082526017908201527f4f6e6c79204d6f64657261746f722046756e6374696f6e000000000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f7d57612f7d6130e3565b604052919050565b600067ffffffffffffffff821115612f9f57612f9f6130e3565b5060051b60200190565b60008219821115612fbc57612fbc6130a1565b500190565b600082612fd057612fd06130b7565b500490565b6000816000190483118215151615612fef57612fef6130a1565b500290565b600082821015613006576130066130a1565b500390565b60005b8381101561302657818101518382015260200161300e565b838111156118495750506000910152565b600181811c9082168061304b57607f821691505b6020821081141561306c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613086576130866130a1565b5060010190565b60008261309c5761309c6130b7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610a0f57600080fd5b6001600160e01b031981168114610a0f57600080fdfea2646970667358221220d7e4d0821bff71ffa56034b934df4f8364316b21f82f63f2436c3346126ab3ca64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000097d5c310bcd8d6b204b54abfab35cef4383438e8000000000000000000000000355e175199064947ca73118f5969703d395c6d06000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000001c436974697a656e73204f6c656b73616e6472205a696e6368656e6b6f0000000000000000000000000000000000000000000000000000000000000000000000024f5a000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806358b2971a1161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb0114610512578063e985e9c514610528578063f2fde38b14610548578063f8321b9514610568578063f98fc0c51461058857600080fd5b8063a22cb4651461049f578063b88d4fde146104bf578063c87b56dd146104d2578063ca889d80146104f257600080fd5b80637e681223116100dc5780637e681223146104365780638da5cb5b1461045657806395d89b41146104745780639f3793301461048957600080fd5b806358b2971a146103c05780636352211e146103e057806366aca6381461040057806370a082311461041657600080fd5b806323b872dd1161018557806342842e0e1161015457806342842e0e1461036157806342966c681461037457806352631ab41461039457806352cfc8c3146103aa57600080fd5b806323b872dd14610306578063245eddd21461031957806331b5b907146103395780633ccfd60b1461035957600080fd5b8063081812fc116101c1578063081812fc14610283578063095ea7b3146102bb57806313faede6146102db57806318160ddd146102f157600080fd5b806301ffc9a7146101f3578063047fc9aa14610228578063062e8e901461024c57806306fdde0314610261575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612bf9565b61059e565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023e600f5481565b60405190815260200161021f565b61025f61025a366004612b5f565b6105f0565b005b34801561026d57600080fd5b506102766106b5565b60405161021f9190612e8b565b34801561028f57600080fd5b506102a361029e366004612c68565b610747565b6040516001600160a01b03909116815260200161021f565b3480156102c757600080fd5b5061025f6102d6366004612b35565b6107cf565b3480156102e757600080fd5b5061023e600d5481565b3480156102fd57600080fd5b50600e5461023e565b61025f610314366004612920565b6108e5565b34801561032557600080fd5b5061025f610334366004612c68565b610922565b34801561034557600080fd5b5061025f610354366004612c33565b610951565b61025f610992565b61025f61036f366004612920565b6109e2565b34801561038057600080fd5b5061025f61038f366004612c68565b6109fd565b3480156103a057600080fd5b5061023e60105481565b3480156103b657600080fd5b5061023e60115481565b3480156103cc57600080fd5b5061025f6103db366004612c68565b610a12565b3480156103ec57600080fd5b506102a36103fb366004612c68565b610a41565b34801561040c57600080fd5b5061023e600c5481565b34801561042257600080fd5b5061023e6104313660046128d2565b610ab8565b34801561044257600080fd5b50610213610451366004612920565b610b3f565b34801561046257600080fd5b506009546001600160a01b03166102a3565b34801561048057600080fd5b50610276610bfa565b34801561049557600080fd5b5061023e600b5481565b3480156104ab57600080fd5b5061025f6104ba366004612afe565b610c09565b61025f6104cd36600461295c565b610cce565b3480156104de57600080fd5b506102766104ed366004612c68565b610d05565b3480156104fe57600080fd5b5061025f61050d366004612c68565b610e6f565b34801561051e57600080fd5b5061023e600e5481565b34801561053457600080fd5b506102136105433660046128ed565b610e9e565b34801561055457600080fd5b5061025f6105633660046128d2565b610ecc565b61057b6105763660046129c4565b610f64565b60405161021f9190612e78565b34801561059457600080fd5b5061023e600a5481565b60006001600160e01b031982166380ac58cd60e01b14806105cf57506001600160e01b03198216635b5e139f60e01b145b806105ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60003411801561060757506001600160a01b038416155b15610610573492505b6008546001600160a01b031633146106865761062b82611246565b600854610647906001600160a01b0316888888888888886112c8565b6106865760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064015b60405180910390fd5b610691878585611363565b61069c87868861184f565b5050506000928352505060136020526040902042905550565b6060600080546106c490613037565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090613037565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050505050905090565b6000610752826119ef565b6107b35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161067d565b506000908152600560205260409020546001600160a01b031690565b60006107da82610a41565b9050806001600160a01b0316836001600160a01b031614156108485760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161067d565b336001600160a01b038216148061086457506108648133610e9e565b6108d65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161067d565b6108e08383611a0c565b505050565b6108ee81611a7a565b6109026108fa82610a41565b600034611363565b61090d83838361184f565b60009081526013602052604090204290555050565b6009546001600160a01b0316331461094c5760405162461bcd60e51b815260040161067d90612ef0565b600c55565b6008546001600160a01b0316331461097b5760405162461bcd60e51b815260040161067d90612f1d565b805161098e906002906020840190612705565b5050565b6008546001600160a01b031633146109bc5760405162461bcd60e51b815260040161067d90612f1d565b60405133904780156108fc02916000818181858888f193505050506109e057600080fd5b565b6108e083838360405180602001604052806000815250610cce565b610a0681611a7a565b610a0f81611a9e565b50565b6008546001600160a01b03163314610a3c5760405162461bcd60e51b815260040161067d90612f1d565b600b55565b6000818152600360205260408120546001600160a01b0316806105ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161067d565b60006001600160a01b038216610b235760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161067d565b506001600160a01b031660009081526004602052604090205490565b6008546000906001600160a01b03163314610b6c5760405162461bcd60e51b815260040161067d90612f1d565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b390604401602060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf19190612bdc565b95945050505050565b6060600180546106c490613037565b6001600160a01b038216331415610c625760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161067d565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610cd782611a7a565b610ce384600034611363565b610cef84848484611ade565b5060009081526013602052604090204290555050565b6060610d10826119ef565b610d765760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161067d565b60008281526007602052604081208054610d8f90613037565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb90613037565b8015610e085780601f10610ddd57610100808354040283529160200191610e08565b820191906000526020600020905b815481529060010190602001808311610deb57829003601f168201915b505050505090506000610e19611b11565b9050805160001415610e2c575092915050565b815115610e5e578082604051602001610e46929190612d65565b60405160208183030381529060405292505050919050565b610e6784611b20565b949350505050565b6009546001600160a01b03163314610e995760405162461bcd60e51b815260040161067d90612ef0565b600d55565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6009546001600160a01b03163314610ef65760405162461bcd60e51b815260040161067d90612ef0565b6001600160a01b038116610f5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161067d565b610a0f81611beb565b855160609060008167ffffffffffffffff811115610f8457610f846130e3565b604051908082528060200260200182016040528015610fad578160200160208202803683370190505b509050600e5460001461101757600e54610fc8600184612ff4565b600f54610fd59190612fa9565b106110175760405162461bcd60e51b815260206004820152601260248201527113585e081cdd5c1c1b1e481c995858da195960721b604482015260640161067d565b60003411801561102e57506001600160a01b038716155b15611037573495505b6008546001600160a01b0316331480159061105d57506009546001600160a01b03163314155b156110c15761106b85611246565b600854611087906001600160a01b03168b89898d8d8b8b611c3d565b6110c15760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161067d565b6009546110d8906001600160a01b03168888611363565b60005b828110156111f9576001600f60008282546110f69190612fa9565b9091555050600f5489516000908b9084908110611115576111156130cd565b6020026020010151111561114057898281518110611135576111356130cd565b602002602001015190505b611149816119ef565b6111af5780838381518110611160576111606130cd565b6020026020010181815250506111768c82611c4e565b611199818c848151811061118c5761118c6130cd565b6020026020010151611d81565b60008181526013602052604090204290556111e6565b60405162461bcd60e51b815260206004820152600c60248201526b151bdad95b925908155cd95960a21b604482015260640161067d565b50806111f181613072565b9150506110db565b507f2ad7ca0d3c2e5ecc29a9466186263310753b53fbb5a0f710be5fb496c8e120828a83898985604051611231959493929190612dd1565b60405180910390a19998505050505050505050565b60008181526012602052604090205460ff166001141561129d5760405162461bcd60e51b8152602060048201526012602482015271139bdb98d948185b1c9958591e48155cd95960721b604482015260640161067d565b6010548111156112ad5760108190555b6000908152601260205260409020805460ff19166001179055565b6000806112d9898989898989611e0c565b90506000611334826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90508a6001600160a01b031661134a8286611e7a565b6001600160a01b0316149b9a5050505050505050505050565b80156108e05760006113758483611ef9565b90506001600160a01b0383166114fc576009546001600160a01b038581169116148015906113bd57506000816002815181106113b3576113b36130cd565b6020026020010151115b1561140d57836001600160a01b03166108fc826002815181106113e2576113e26130cd565b60200260200101519081150290604051600060405180830381858888f1935050505061140d57600080fd5b600081600081518110611422576114226130cd565b602002602001015111156114815760095481516001600160a01b03909116906108fc908390600090611456576114566130cd565b60200260200101519081150290604051600060405180830381858888f1935050505061148157600080fd5b600081600181518110611496576114966130cd565b602002602001015111156114f75760085481516001600160a01b03909116906108fc90839060019081106114cc576114cc6130cd565b60200260200101519081150290604051600060405180830381858888f193505050506114f757600080fd5b611849565b6040516323b872dd60e01b81523360048201523060248201526044810183905283906001600160a01b038216906323b872dd90606401602060405180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190612bdc565b61158d57600080fd5b6009546001600160a01b038681169116148015906115c557506000826002815181106115bb576115bb6130cd565b6020026020010151115b1561168157806001600160a01b031663a9059cbb86846002815181106115ed576115ed6130cd565b60200260200101516040518363ffffffff1660e01b81526004016116269291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116789190612bdc565b61168157600080fd5b600082600081518110611696576116966130cd565b602002602001015111156117635760095482516001600160a01b038084169263a9059cbb9291169085906000906116cf576116cf6130cd565b60200260200101516040518363ffffffff1660e01b81526004016117089291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561172257600080fd5b505af1158015611736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175a9190612bdc565b61176357600080fd5b600082600181518110611778576117786130cd565b602002602001015111156118475760085482516001600160a01b038084169263a9059cbb92911690859060019081106117b3576117b36130cd565b60200260200101516040518363ffffffff1660e01b81526004016117ec9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190612bdc565b61184757600080fd5b505b50505050565b826001600160a01b031661186282610a41565b6001600160a01b0316146118ca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161067d565b6001600160a01b03821661192c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161067d565b611937600082611a0c565b6001600160a01b0383166000908152600460205260408120805460019290611960908490612ff4565b90915550506001600160a01b038216600090815260046020526040812080546001929061198e908490612fa9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a4182610a41565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6008546001600160a01b03163314611a9557610a0f81612227565b610a0f8161228e565b611aa7816122ef565b60008181526007602052604090208054611ac090613037565b159050610a0f576000818152600760205260408120610a0f91612789565b611ae984848461184f565b611af58484848461238a565b6118495760405162461bcd60e51b815260040161067d90612e9e565b6060600280546106c490613037565b6060611b2b826119ef565b611b8f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161067d565b6000611b99611b11565b90506000815111611bb95760405180602001604052806000815250611be4565b80611bc384612497565b604051602001611bd4929190612d65565b6040516020818303038152906040525b9392505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806112d9898989898989612595565b6001600160a01b038216611ca45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161067d565b611cad816119ef565b15611cfa5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161067d565b6001600160a01b0382166000908152600460205260408120805460019290611d23908490612fa9565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611d8a826119ef565b611ded5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b606482015260840161067d565b600082815260076020908152604090912082516108e092840190612705565b6040516bffffffffffffffffffffffff19606088811b821660208401526034830188905286811b8216605484015285901b166068820152607c8101839052609c810182905260009060bc015b6040516020818303038152906040528051906020012090509695505050505050565b600080600080611e89856125cf565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ee4573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080516003808252608082019092526060918391600091602082018580368337019050509050612710841015611f3957611f3682612710612fd5565b91505b6009546001600160a01b038681169116141561207857600a54611f5e90612710612ff4565b611f6a61271084612fc1565b611f749190612fd5565b81600081518110611f8757611f876130cd565b60200260200101818152505080600081518110611fa657611fa66130cd565b602002602001015182611fb99190612ff4565b81600181518110611fcc57611fcc6130cd565b60200260200101818152505061271084101561206f5761271081600081518110611ff857611ff86130cd565b602002602001015161200a9190612fc1565b8160008151811061201d5761201d6130cd565b6020026020010181815250508060008151811061203c5761203c6130cd565b60200260200101518461204f9190612ff4565b81600181518110612062576120626130cd565b6020026020010181815250505b91506105ea9050565b6000600b54600c5461208a9190612fa9565b905060008161209b61271086612fc1565b6120a59190612fd5565b600c549091506120b58383612fc1565b6120bf9190612fd5565b836000815181106120d2576120d26130cd565b6020908102919091010152600b546120ea8383612fc1565b6120f49190612fd5565b83600181518110612107576121076130cd565b602090810291909101015261211c8187612ff4565b8360028151811061212f5761212f6130cd565b60200260200101818152505061271086101561221b576127108360008151811061215b5761215b6130cd565b602002602001015161216d9190612fc1565b83600081518110612180576121806130cd565b602002602001018181525050612710836001815181106121a2576121a26130cd565b60200260200101516121b49190612fc1565b836001815181106121c7576121c76130cd565b602002602001018181525050612710836002815181106121e9576121e96130cd565b60200260200101516121fb9190612fc1565b8360028151811061220e5761220e6130cd565b6020026020010181815250505b829450505050506105ea565b6122313382612643565b610a0f5760405162461bcd60e51b815260206004820152602860248201527f4552433732313a2063616c6c6572206973206e6f74206f776e6572206e6f7220604482015267185c1c1c9bdd995960c21b606482015260840161067d565b60115460008281526013602052604090205442916122ab91612fa9565b11610a0f5760405162461bcd60e51b815260206004820152601460248201527326b7b232b930ba34b7b7103a34b6b29037bb32b960611b604482015260640161067d565b60006122fa82610a41565b9050612307600083611a0c565b6001600160a01b0381166000908152600460205260408120805460019290612330908490612ff4565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561248c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123ce903390899088908890600401612d94565b602060405180830381600087803b1580156123e857600080fd5b505af1925050508015612418575060408051601f3d908101601f1916820190925261241591810190612c16565b60015b612472573d808015612446576040519150601f19603f3d011682016040523d82523d6000602084013e61244b565b606091505b50805161246a5760405162461bcd60e51b815260040161067d90612e9e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e67565b506001949350505050565b6060816124bb5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156124e557806124cf81613072565b91506124de9050600a83612fc1565b91506124bf565b60008167ffffffffffffffff811115612500576125006130e3565b6040519080825280601f01601f19166020018201604052801561252a576020820181803683370190505b5090505b8415610e675761253f600183612ff4565b915061254c600a8661308d565b612557906030612fa9565b60f81b81838151811061256c5761256c6130cd565b60200101906001600160f81b031916908160001a90535061258e600a86612fc1565b945061252e565b6000868686866040516020016125ab9190612e16565b60408051601f1981840301815290829052611e589493929188908890602001612ce8565b600080600083516041146126255760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161067d565b50505060208101516040820151606090920151909260009190911a90565b600061264e826119ef565b6126af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161067d565b60006126ba83610a41565b9050806001600160a01b0316846001600160a01b031614806126f55750836001600160a01b03166126ea84610747565b6001600160a01b0316145b80610e675750610e678185610e9e565b82805461271190613037565b90600052602060002090601f0160209004810192826127335760008555612779565b82601f1061274c57805160ff1916838001178555612779565b82800160010185558215612779579182015b8281111561277957825182559160200191906001019061275e565b506127859291506127bf565b5090565b50805461279590613037565b6000825580601f106127a5575050565b601f016020900490600052602060002090810190610a0f91905b5b8082111561278557600081556001016127c0565b80356001600160a01b03811681146127eb57600080fd5b919050565b600082601f83011261280157600080fd5b8135602061281661281183612f85565b612f54565b80838252828201915082860187848660051b890101111561283657600080fd5b60005b8581101561285557813584529284019290840190600101612839565b5090979650505050505050565b600082601f83011261287357600080fd5b813567ffffffffffffffff81111561288d5761288d6130e3565b6128a0601f8201601f1916602001612f54565b8181528460208386010111156128b557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156128e457600080fd5b611be4826127d4565b6000806040838503121561290057600080fd5b612909836127d4565b9150612917602084016127d4565b90509250929050565b60008060006060848603121561293557600080fd5b61293e846127d4565b925061294c602085016127d4565b9150604084013590509250925092565b6000806000806080858703121561297257600080fd5b61297b856127d4565b9350612989602086016127d4565b925060408501359150606085013567ffffffffffffffff8111156129ac57600080fd5b6129b887828801612862565b91505092959194509250565b600080600080600080600060e0888a0312156129df57600080fd5b6129e8886127d4565b9650602088013567ffffffffffffffff80821115612a0557600080fd5b818a0191508a601f830112612a1957600080fd5b612a266128118335612f85565b8083358252602082019150602084018d6020863560051b8701011115612a4b57600080fd5b60005b8535811015612a8a578482351115612a6557600080fd5b612a758f60208435890101612862565b84526020938401939190910190600101612a4e565b50909950505060408a0135915080821115612aa457600080fd5b612ab08b838c016127f0565b9650612abe60608b016127d4565b955060808a0135945060a08a0135935060c08a0135915080821115612ae257600080fd5b50612aef8a828b01612862565b91505092959891949750929550565b60008060408385031215612b1157600080fd5b612b1a836127d4565b91506020830135612b2a816130f9565b809150509250929050565b60008060408385031215612b4857600080fd5b612b51836127d4565b946020939093013593505050565b600080600080600080600060e0888a031215612b7a57600080fd5b612b83886127d4565b965060208801359550612b98604089016127d4565b9450612ba6606089016127d4565b93506080880135925060a0880135915060c088013567ffffffffffffffff811115612bd057600080fd5b612aef8a828b01612862565b600060208284031215612bee57600080fd5b8151611be4816130f9565b600060208284031215612c0b57600080fd5b8135611be481613107565b600060208284031215612c2857600080fd5b8151611be481613107565b600060208284031215612c4557600080fd5b813567ffffffffffffffff811115612c5c57600080fd5b610e6784828501612862565b600060208284031215612c7a57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015612cb157815187529582019590820190600101612c95565b509495945050505050565b60008151808452612cd481602086016020860161300b565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808960601b168352808860601b1660148401525085602883015284516020612d268260488601838a0161300b565b85519184016048019181870160005b82811015612d5157815185529383019390830190600101612d35565b505050938152909201979650505050505050565b60008351612d7781846020880161300b565b835190830190612d8b81836020880161300b565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dc790830184612cbc565b9695505050505050565b6001600160a01b03868116825260208201869052841660408201526060810183905260a060808201819052600090612e0b90830184612c81565b979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612e6b57603f19888603018452612e59858351612cbc565b94509285019290850190600101612e3d565b5092979650505050505050565b602081526000611be46020830184612c81565b602081526000611be46020830184612cbc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526013908201527227b7363c9037bbb732b910333ab731ba34b7b760691b604082015260600190565b60208082526017908201527f4f6e6c79204d6f64657261746f722046756e6374696f6e000000000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f7d57612f7d6130e3565b604052919050565b600067ffffffffffffffff821115612f9f57612f9f6130e3565b5060051b60200190565b60008219821115612fbc57612fbc6130a1565b500190565b600082612fd057612fd06130b7565b500490565b6000816000190483118215151615612fef57612fef6130a1565b500290565b600082821015613006576130066130a1565b500390565b60005b8381101561302657818101518382015260200161300e565b838111156118495750506000910152565b600181811c9082168061304b57607f821691505b6020821081141561306c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613086576130866130a1565b5060010190565b60008261309c5761309c6130b7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610a0f57600080fd5b6001600160e01b031981168114610a0f57600080fdfea2646970667358221220d7e4d0821bff71ffa56034b934df4f8364316b21f82f63f2436c3346126ab3ca64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000097d5c310bcd8d6b204b54abfab35cef4383438e8000000000000000000000000355e175199064947ca73118f5969703d395c6d06000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000001c436974697a656e73204f6c656b73616e6472205a696e6368656e6b6f0000000000000000000000000000000000000000000000000000000000000000000000024f5a000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Citizens Oleksandr Zinchenko
Arg [1] : symbol (string): OZ
Arg [2] : setCreator (address): 0x97D5C310bCD8d6b204B54abfab35CEF4383438e8
Arg [3] : setModerator (address): 0x355e175199064947Ca73118f5969703D395c6d06
Arg [4] : setModFirstRoyalties (uint256): 5000
Arg [5] : setModRoyalties (uint256): 200
Arg [6] : setCreRoyalties (uint256): 200
Arg [7] : setCost (uint256): 0
Arg [8] : setMaxSuplly (uint256): 500
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000097d5c310bcd8d6b204b54abfab35cef4383438e8
Arg [3] : 000000000000000000000000355e175199064947ca73118f5969703d395c6d06
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [6] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [9] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [10] : 436974697a656e73204f6c656b73616e6472205a696e6368656e6b6f00000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 4f5a000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
157:10787:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1536:305:4;;;;;;;;;;-1:-1:-1;1536:305:4;;;;;:::i;:::-;;:::i;:::-;;;13539:14:13;;13532:22;13514:41;;13502:2;13487:18;1536:305:4;;;;;;;;534:29:0;;;;;;;;;;;;;;;;;;;23961:25:13;;;23949:2;23934:18;534:29:0;23815:177:13;6640:677:0;;;;;;:::i;:::-;;:::i;:::-;;2481:91:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4022:221::-;;;;;;;;;;-1:-1:-1;4022:221:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10496:32:13;;;10478:51;;10466:2;10451:18;4022:221:4;10332:203:13;3545:411:4;;;;;;;;;;-1:-1:-1;3545:411:4;;;;;:::i;:::-;;:::i;452:39:0:-;;;;;;;;;;;;;;;;8565:88;;;;;;;;;;-1:-1:-1;8636:9:0;;8565:88;;7329:346;;;;;;:::i;:::-;;:::i;1671:108::-;;;;;;;;;;-1:-1:-1;1671:108:0;;;;;:::i;:::-;;:::i;1891:99::-;;;;;;;;;;-1:-1:-1;1891:99:0;;;;;:::i;:::-;;:::i;8881:124::-;;;:::i;7687:193::-;;;;;;:::i;:::-;;:::i;8276:106::-;;;;;;;;;;-1:-1:-1;8276:106:0;;;;;:::i;:::-;;:::i;572:29::-;;;;;;;;;;;;;;;;610:34;;;;;;;;;;;;;;;;1549:110;;;;;;;;;;-1:-1:-1;1549:110:0;;;;;:::i;:::-;;:::i;2175:239:4:-;;;;;;;;;;-1:-1:-1;2175:239:4;;;;;:::i;:::-;;:::i;401:38:0:-;;;;;;;;;;;;;;;;1905:208:4;;;;;;;;;;-1:-1:-1;1905:208:4;;;;;:::i;:::-;;:::i;8661::0:-;;;;;;;;;;-1:-1:-1;8661:208:0;;;;;:::i;:::-;;:::i;9086:88::-;;;;;;;;;;-1:-1:-1;9159:7:0;;-1:-1:-1;;;;;9159:7:0;9086:88;;2641:95:4;;;;;;;;;;;;;:::i;356:38:0:-;;;;;;;;;;;;;;;;4315:295:4;;;;;;;;;;-1:-1:-1;4315:295:4;;;;;:::i;:::-;;:::i;7892:376:0:-;;;;;;:::i;:::-;;:::i;404:679:5:-;;;;;;;;;;-1:-1:-1;404:679:5;;;;;:::i;:::-;;:::i;1791:88:0:-;;;;;;;;;;-1:-1:-1;1791:88:0;;;;;:::i;:::-;;:::i;498:29::-;;;;;;;;;;;;;;;;4681:164:4;;;;;;;;;;-1:-1:-1;4681:164:4;;;;;:::i;:::-;;:::i;9329:194:0:-;;;;;;;;;;-1:-1:-1;9329:194:0;;;;;:::i;:::-;;:::i;5053:1579::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;279:38::-;;;;;;;;;;;;;;;;1536:305:4;1638:4;-1:-1:-1;;;;;;1675:40:4;;-1:-1:-1;;;1675:40:4;;:105;;-1:-1:-1;;;;;;;1732:48:4;;-1:-1:-1;;;1732:48:4;1675:105;:158;;;-1:-1:-1;;;;;;;;;;896:40:3;;;1797:36:4;1655:178;1536:305;-1:-1:-1;;1536:305:4:o;6640:677:0:-;6885:1;6873:9;:13;:39;;;;-1:-1:-1;;;;;;6890:22:0;;;6873:39;6870:91;;;6940:9;6928:21;;6870:91;6990:9;;-1:-1:-1;;;;;6990:9:0;6976:10;:23;6973:186;;7015:15;7024:5;7015:8;:15::i;:::-;7063:9;;7053:78;;-1:-1:-1;;;;;7063:9:0;7074:4;7080:7;7089;7098:8;7108:9;7119:5;7126:4;7053:9;:78::i;:::-;7045:102;;;;-1:-1:-1;;;7045:102:0;;20702:2:13;7045:102:0;;;20684:21:13;20741:2;20721:18;;;20714:30;-1:-1:-1;;;20760:18:13;;;20753:41;20811:18;;7045:102:0;;;;;;;;;7171:40;7185:4;7191:8;7201:9;7171:13;:40::i;:::-;7224:33;7234:4;7240:7;7249;7224:9;:33::i;:::-;-1:-1:-1;;;7270:21:0;;;;-1:-1:-1;;7270:12:0;:21;;;;;7292:15;7270:37;;-1:-1:-1;6640:677:0:o;2481:91:4:-;2526:13;2559:5;2552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:91;:::o;4022:221::-;4098:7;4126:16;4134:7;4126;:16::i;:::-;4118:73;;;;-1:-1:-1;;;4118:73:4;;20289:2:13;4118:73:4;;;20271:21:13;20328:2;20308:18;;;20301:30;20367:34;20347:18;;;20340:62;-1:-1:-1;;;20418:18:13;;;20411:42;20470:19;;4118:73:4;20087:408:13;4118:73:4;-1:-1:-1;4211:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4211:24:4;;4022:221::o;3545:411::-;3626:13;3642:23;3657:7;3642:14;:23::i;:::-;3626:39;;3690:5;-1:-1:-1;;;;;3684:11:4;:2;-1:-1:-1;;;;;3684:11:4;;;3676:57;;;;-1:-1:-1;;;3676:57:4;;21868:2:13;3676:57:4;;;21850:21:13;21907:2;21887:18;;;21880:30;21946:34;21926:18;;;21919:62;-1:-1:-1;;;21997:18:13;;;21990:31;22038:19;;3676:57:4;21666:397:13;3676:57:4;682:10:2;-1:-1:-1;;;;;3768:21:4;;;;:62;;-1:-1:-1;3793:37:4;3810:5;682:10:2;4681:164:4;:::i;3793:37::-;3746:168;;;;-1:-1:-1;;;3746:168:4;;17099:2:13;3746:168:4;;;17081:21:13;17138:2;17118:18;;;17111:30;17177:34;17157:18;;;17150:62;17248:26;17228:18;;;17221:54;17292:19;;3746:168:4;16897:420:13;3746:168:4;3927:21;3936:2;3940:7;3927:8;:21::i;:::-;3615:341;3545:411;;:::o;7329:346:0:-;7473:16;7481:7;7473;:16::i;:::-;7510:54;7524:16;7532:7;7524;:16::i;:::-;7550:1;7554:9;7510:13;:54::i;:::-;7585:28;7595:4;7601:2;7605:7;7585:9;:28::i;:::-;7626:21;;;;:12;:21;;;;;7650:15;7626:39;;-1:-1:-1;;7329:346:0:o;1671:108::-;9768:7;;-1:-1:-1;;;;;9768:7:0;9754:10;:21;9746:53;;;;-1:-1:-1;;;9746:53:0;;;;;;;:::i;:::-;1747:12:::1;:24:::0;1671:108::o;1891:99::-;9887:9;;-1:-1:-1;;;;;9887:9:0;9873:10;:23;9865:59;;;;-1:-1:-1;;;9865:59:0;;;;;;;:::i;:::-;1964:18;;::::1;::::0;:11:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1891:99:::0;:::o;8881:124::-;9887:9;;-1:-1:-1;;;;;9887:9:0;9873:10;:23;9865:59;;;;-1:-1:-1;;;9865:59:0;;;;;;;:::i;:::-;8949:47:::1;::::0;8957:10:::1;::::0;8974:21:::1;8949:47:::0;::::1;;;::::0;::::1;::::0;;;8974:21;8957:10;8949:47;::::1;;;;;;8941:56;;;::::0;::::1;;8881:124::o:0;7687:193::-;7833:39;7850:4;7856:2;7860:7;7833:39;;;;;;;;;;;;:16;:39::i;8276:106::-;8333:16;8341:7;8333;:16::i;:::-;8360:14;8366:7;8360:5;:14::i;:::-;8276:106;:::o;1549:110::-;9887:9;;-1:-1:-1;;;;;9887:9:0;9873:10;:23;9865:59;;;;-1:-1:-1;;;9865:59:0;;;;;;;:::i;:::-;1627:12:::1;:24:::0;1549:110::o;2175:239:4:-;2247:7;2283:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2283:16:4;2318:19;2310:73;;;;-1:-1:-1;;;2310:73:4;;18276:2:13;2310:73:4;;;18258:21:13;18315:2;18295:18;;;18288:30;18354:34;18334:18;;;18327:62;-1:-1:-1;;;18405:18:13;;;18398:39;18454:19;;2310:73:4;18074:405:13;1905:208:4;1977:7;-1:-1:-1;;;;;2005:19:4;;1997:74;;;;-1:-1:-1;;;1997:74:4;;17865:2:13;1997:74:4;;;17847:21:13;17904:2;17884:18;;;17877:30;17943:34;17923:18;;;17916:62;-1:-1:-1;;;17994:18:13;;;17987:40;18044:19;;1997:74:4;17663:406:13;1997:74:4;-1:-1:-1;;;;;;2089:16:4;;;;;:9;:16;;;;;;;1905:208::o;8661::0:-;9887:9;;8774:4;;-1:-1:-1;;;;;9887:9:0;9873:10;:23;9865:59;;;;-1:-1:-1;;;9865:59:0;;;;;;;:::i;:::-;8836:25:::1;::::0;-1:-1:-1;;;8836:25:0;;-1:-1:-1;;;;;11605:32:13;;;8836:25:0::1;::::0;::::1;11587:51:13::0;11654:18;;;11647:34;;;8812:5:0;;8836:9;;::::1;::::0;::::1;::::0;11560:18:13;;8836:25:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8829:32:::0;8661:208;-1:-1:-1;;;;;8661:208:0:o;2641:95:4:-;2688:13;2721:7;2714:14;;;;;:::i;4315:295::-;-1:-1:-1;;;;;4418:24:4;;682:10:2;4418:24:4;;4410:62;;;;-1:-1:-1;;;4410:62:4;;16332:2:13;4410:62:4;;;16314:21:13;16371:2;16351:18;;;16344:30;16410:27;16390:18;;;16383:55;16455:18;;4410:62:4;16130:349:13;4410:62:4;682:10:2;4485:32:4;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4485:42:4;;;;;;;;;;;;:53;;-1:-1:-1;;4485:53:4;;;;;;;;;;4554:48;;13514:41:13;;;4485:42:4;;682:10:2;4554:48:4;;13487:18:13;4554:48:4;;;;;;;4315:295;;:::o;7892:376:0:-;8069:16;8077:7;8069;:16::i;:::-;8106:42;8120:4;8134:1;8138:9;8106:13;:42::i;:::-;8161:39;8175:4;8181:2;8185:7;8194:5;8161:13;:39::i;:::-;-1:-1:-1;8213:21:0;;;;:12;:21;;;;;8235:15;8213:37;;-1:-1:-1;;7892:376:0:o;404:679:5:-;477:13;511:16;519:7;511;:16::i;:::-;503:78;;;;-1:-1:-1;;;503:78:5;;19462:2:13;503:78:5;;;19444:21:13;19501:2;19481:18;;;19474:30;19540:34;19520:18;;;19513:62;-1:-1:-1;;;19591:18:13;;;19584:47;19648:19;;503:78:5;19260:413:13;503:78:5;594:23;620:19;;;:10;:19;;;;;594:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;650:18;671:10;:8;:10::i;:::-;650:31;;763:4;757:18;779:1;757:23;753:72;;;-1:-1:-1;804:9:5;404:679;-1:-1:-1;;404:679:5:o;753:72::-;929:23;;:27;925:108;;1004:4;1010:9;987:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;973:48;;;;404:679;;;:::o;925:108::-;1052:23;1067:7;1052:14;:23::i;:::-;1045:30;404:679;-1:-1:-1;;;;404:679:5:o;1791:88:0:-;9768:7;;-1:-1:-1;;;;;9768:7:0;9754:10;:21;9746:53;;;;-1:-1:-1;;;9746:53:0;;;;;;;:::i;:::-;1857:4:::1;:14:::0;1791:88::o;4681:164:4:-;-1:-1:-1;;;;;4802:25:4;;;4778:4;4802:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4681:164::o;9329:194:0:-;9768:7;;-1:-1:-1;;;;;9768:7:0;9754:10;:21;9746:53;;;;-1:-1:-1;;;9746:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9420:22:0;::::1;9412:73;;;::::0;-1:-1:-1;;;9412:73:0;;14814:2:13;9412:73:0::1;::::0;::::1;14796:21:13::0;14853:2;14833:18;;;14826:30;14892:34;14872:18;;;14865:62;-1:-1:-1;;;14943:18:13;;;14936:36;14989:19;;9412:73:0::1;14612:402:13::0;9412:73:0::1;9496:19;9506:8;9496:9;:19::i;5053:1579::-:0;5351:15;;5291:16;;5335:13;5351:15;5405:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5405:20:0;;5377:48;;5441:9;;5454:1;5441:14;5438:108;;5502:9;;5489;5497:1;5489:5;:9;:::i;:::-;5479:6;;:20;;;;:::i;:::-;:32;5471:63;;;;-1:-1:-1;;;5471:63:0;;22965:2:13;5471:63:0;;;22947:21:13;23004:2;22984:18;;;22977:30;-1:-1:-1;;;23023:18:13;;;23016:48;23081:18;;5471:63:0;22763:342:13;5471:63:0;5573:1;5561:9;:13;:39;;;;-1:-1:-1;;;;;;5578:22:0;;;5561:39;5558:91;;;5628:9;5616:21;;5558:91;5678:9;;-1:-1:-1;;;;;5678:9:0;5664:10;:23;;;;:48;;-1:-1:-1;5705:7:0;;-1:-1:-1;;;;;5705:7:0;5691:10;:21;;5664:48;5661:219;;;5728:15;5737:5;5728:8;:15::i;:::-;5777:9;;5766:86;;-1:-1:-1;;;;;5777:9:0;5788:7;5797:8;5807:9;5818:8;5828:10;5840:5;5847:4;5766:10;:86::i;:::-;5758:110;;;;-1:-1:-1;;;5758:110:0;;20702:2:13;5758:110:0;;;20684:21:13;20741:2;20721:18;;;20714:30;-1:-1:-1;;;20760:18:13;;;20753:41;20811:18;;5758:110:0;20500:335:13;5758:110:0;5914:7;;5900:43;;-1:-1:-1;;;;;5914:7:0;5923:8;5933:9;5900:13;:43::i;:::-;5961:9;5956:567;5980:5;5976:1;:9;5956:567;;;6031:1;6021:6;;:11;;;;;;;:::i;:::-;;;;-1:-1:-1;;6065:6:0;;6113:13;;6049;;6113:10;;6124:1;;6113:13;;;;;;:::i;:::-;;;;;;;:17;6109:95;;;6175:10;6186:1;6175:13;;;;;;;;:::i;:::-;;;;;;;6167:21;;6109:95;6223:14;6231:5;6223:7;:14::i;:::-;6220:290;;6280:5;6266:8;6275:1;6266:11;;;;;;;;:::i;:::-;;;;;;:19;;;;;6304:21;6310:7;6319:5;6304;:21::i;:::-;6345:32;6358:5;6365:8;6374:1;6365:11;;;;;;;;:::i;:::-;;;;;;;6345:12;:32::i;:::-;6396:19;;;;:12;:19;;;;;6416:15;6396:35;;6220:290;;;6472:22;;-1:-1:-1;;;6472:22:0;;17524:2:13;6472:22:0;;;17506:21:13;17563:2;17543:18;;;17536:30;-1:-1:-1;;;17582:18:13;;;17575:42;17634:18;;6472:22:0;17322:336:13;6220:290:0;-1:-1:-1;5987:3:0;;;;:::i;:::-;;;;5956:567;;;;6540:56;6550:7;6559:5;6566:8;6576:9;6587:8;6540:56;;;;;;;;;;:::i;:::-;;;;;;;;6614:8;5053:1579;-1:-1:-1;;;;;;;;;5053:1579:0:o;10716:219::-;10777:16;;;;:9;:16;;;;;;;;;:21;;10769:52;;;;-1:-1:-1;;;10769:52:0;;22270:2:13;10769:52:0;;;22252:21:13;22309:2;22289:18;;;22282:30;-1:-1:-1;;;22328:18:13;;;22321:48;22386:18;;10769:52:0;22068:342:13;10769:52:0;10843:9;;10835:5;:17;10832:65;;;10868:9;:17;;;10832:65;10907:16;;;;:9;:16;;;;;:20;;-1:-1:-1;;10907:20:0;10926:1;10907:20;;;10716:219::o;2779:533:12:-;3042:4;3059:19;3081:70;3099:4;3105:7;3114;3123:8;3133:9;3144:6;3081:17;:70::i;:::-;3059:92;;3162:28;3193:36;3217:11;2309:66;;10189::13;2309::12;;;10177:79:13;10272:12;;;10265:28;;;2068:7:12;;10309:12:13;;2309:66:12;;;;;;;;;;;;2281:109;;;;;;2261:129;;1963:435;;;;3193:36;3162:67;;3297:7;-1:-1:-1;;;;;3247:57:12;:46;3261:20;3283:9;3247:13;:46::i;:::-;-1:-1:-1;;;;;3247:57:12;;;2779:533;-1:-1:-1;;;;;;;;;;;2779:533:12:o;3473:1568:0:-;3640:10;;3637:1395;;3668:24;3695:30;3706:10;3718:6;3695:10;:30::i;:::-;3668:57;-1:-1:-1;;;;;;3757:22:0;;3754:1265;;3834:7;;-1:-1:-1;;;;;3820:21:0;;;3834:7;;3820:21;;;;:39;;;3858:1;3845:7;3853:1;3845:10;;;;;;;;:::i;:::-;;;;;;;:14;3820:39;3817:195;;;3963:10;-1:-1:-1;;;;;3955:24:0;:36;3980:7;3988:1;3980:10;;;;;;;;:::i;:::-;;;;;;;3955:36;;;;;;;;;;;;;;;;;;;;;;;3947:45;;;;;;4046:1;4033:7;4041:1;4033:10;;;;;;;;:::i;:::-;;;;;;;:14;4030:166;;;4150:7;;4164:10;;-1:-1:-1;;;;;4150:7:0;;;;4142:33;;4164:7;;4150;;4164:10;;;;:::i;:::-;;;;;;;4142:33;;;;;;;;;;;;;;;;;;;;;;;4134:42;;;;;;4230:1;4217:7;4225:1;4217:10;;;;;;;;:::i;:::-;;;;;;;:14;4214:169;;;4335:9;;4351:10;;-1:-1:-1;;;;;4335:9:0;;;;4327:35;;4351:7;;4335:9;;4351:10;;;;;;:::i;:::-;;;;;;;4327:35;;;;;;;;;;;;;;;;;;;;;;;4319:44;;;;;;3754:1265;;;4513:49;;-1:-1:-1;;;4513:49:0;;4528:10;4513:49;;;10780:34:13;4548:4:0;10830:18:13;;;10823:43;10882:18;;;10875:34;;;4459:8:0;;-1:-1:-1;;;;;4513:14:0;;;;;10715:18:13;;4513:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4505:58;;;;;;4633:7;;-1:-1:-1;;;;;4619:21:0;;;4633:7;;4619:21;;;;:40;;;4658:1;4645:7;4653:1;4645:10;;;;;;;;:::i;:::-;;;;;;;:14;4619:40;4616:130;;;4691:1;-1:-1:-1;;;;;4691:10:0;;4702;4714:7;4722:1;4714:10;;;;;;;;:::i;:::-;;;;;;;4691:34;;;;;;;;;;;;;;;-1:-1:-1;;;;;11605:32:13;;;;11587:51;;11669:2;11654:18;;11647:34;11575:2;11560:18;;11413:274;4691:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4683:43;;;;;;4780:1;4767:7;4775:1;4767:10;;;;;;;;:::i;:::-;;;;;;;:14;4764:101;;;4824:7;;4833:10;;-1:-1:-1;;;;;4813:10:0;;;;;;4824:7;;;4833;;4824;;4833:10;;;;:::i;:::-;;;;;;;4813:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;11605:32:13;;;;11587:51;;11669:2;11654:18;;11647:34;11575:2;11560:18;;11413:274;4813:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4805:40;;;;;;4899:1;4886:7;4894:1;4886:10;;;;;;;;:::i;:::-;;;;;;;:14;4883:103;;;4943:9;;4954:10;;-1:-1:-1;;;;;4932:10:0;;;;;;4943:9;;;4954:7;;4943:9;;4954:10;;;;;;:::i;:::-;;;;;;;4932:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;11605:32:13;;;;11587:51;;11669:2;11654:18;;11647:34;11575:2;11560:18;;11413:274;4932:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4924:42;;;;;;4422:597;3754:1265;3651:1381;3473:1568;;;:::o;9643:578:4:-;9802:4;-1:-1:-1;;;;;9775:31:4;:23;9790:7;9775:14;:23::i;:::-;-1:-1:-1;;;;;9775:31:4;;9767:85;;;;-1:-1:-1;;;9767:85:4;;21042:2:13;9767:85:4;;;21024:21:13;21081:2;21061:18;;;21054:30;21120:34;21100:18;;;21093:62;-1:-1:-1;;;21171:18:13;;;21164:39;21220:19;;9767:85:4;20840:405:13;9767:85:4;-1:-1:-1;;;;;9871:16:4;;9863:65;;;;-1:-1:-1;;;9863:65:4;;15927:2:13;9863:65:4;;;15909:21:13;15966:2;15946:18;;;15939:30;16005:34;15985:18;;;15978:62;-1:-1:-1;;;16056:18:13;;;16049:34;16100:19;;9863:65:4;15725:400:13;9863:65:4;10045:29;10062:1;10066:7;10045:8;:29::i;:::-;-1:-1:-1;;;;;10087:15:4;;;;;;:9;:15;;;;;:20;;10106:1;;10087:15;:20;;10106:1;;10087:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10118:13:4;;;;;;:9;:13;;;;;:18;;10135:1;;10118:13;:18;;10135:1;;10118:18;:::i;:::-;;;;-1:-1:-1;;10147:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10147:21:4;-1:-1:-1;;;;;10147:21:4;;;;;;;;;10186:27;;10147:16;;10186:27;;;;;;;9643:578;;;:::o;6357:127::-;6422:4;6446:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6446:16:4;:30;;;6357:127::o;10339:174::-;10414:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10414:29:4;-1:-1:-1;;;;;10414:29:4;;;;;;;;:24;;10468:23;10414:24;10468:14;:23::i;:::-;-1:-1:-1;;;;;10459:46:4;;;;;;;;;;;10339:174;;:::o;10289:419:0:-;10365:9;;-1:-1:-1;;;;;10365:9:0;10351:10;:23;10348:353;;10391:25;10408:7;10391:16;:25::i;10348:353::-;10568:22;10582:7;10568:13;:22::i;1685:206:5:-;1754:20;1766:7;1754:11;:20::i;:::-;1797:19;;;;:10;:19;;;;;1791:33;;;;;:::i;:::-;:38;;-1:-1:-1;1787:97:5;;1853:19;;;;:10;:19;;;;;1846:26;;;:::i;5729:315:4:-;5886:28;5896:4;5902:2;5906:7;5886:9;:28::i;:::-;5933:48;5956:4;5962:2;5966:7;5975:5;5933:22;:48::i;:::-;5925:111;;;;-1:-1:-1;;;5925:111:4;;;;;;;:::i;3380:103::-;3431:13;3464:11;3457:18;;;;;:::i;2807:325::-;2871:13;2905:16;2913:7;2905;:16::i;:::-;2897:76;;;;-1:-1:-1;;;2897:76:4;;21452:2:13;2897:76:4;;;21434:21:13;21491:2;21471:18;;;21464:30;21530:34;21510:18;;;21503:62;-1:-1:-1;;;21581:18:13;;;21574:45;21636:19;;2897:76:4;21250:411:13;2897:76:4;2986:21;3010:10;:8;:10::i;:::-;2986:34;;3062:1;3044:7;3038:21;:25;:86;;;;;;;;;;;;;;;;;3090:7;3099:18;:7;:16;:18::i;:::-;3073:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3038:86;3031:93;2807:325;-1:-1:-1;;;2807:325:4:o;9531:175:0:-;9606:7;;;-1:-1:-1;;;;;9624:18:0;;;-1:-1:-1;;;;;;9624:18:0;;;;;;;9658:40;;9606:7;;;9624:18;9606:7;;9658:40;;9587:16;;9658:40;9576:130;9531:175;:::o;3324:564:12:-;3611:4;3628:19;3650:77;3669:8;3679:9;3690:6;3698:8;3708:10;3720:6;3650:18;:77::i;8335:382:4:-;-1:-1:-1;;;;;8415:16:4;;8407:61;;;;-1:-1:-1;;;8407:61:4;;19101:2:13;8407:61:4;;;19083:21:13;;;19120:18;;;19113:30;19179:34;19159:18;;;19152:62;19231:18;;8407:61:4;18899:356:13;8407:61:4;8488:16;8496:7;8488;:16::i;:::-;8487:17;8479:58;;;;-1:-1:-1;;;8479:58:4;;15221:2:13;8479:58:4;;;15203:21:13;15260:2;15240:18;;;15233:30;15299;15279:18;;;15272:58;15347:18;;8479:58:4;15019:352:13;8479:58:4;-1:-1:-1;;;;;8608:13:4;;;;;;:9;:13;;;;;:18;;8625:1;;8608:13;:18;;8625:1;;8608:18;:::i;:::-;;;;-1:-1:-1;;8637:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;8637:21:4;-1:-1:-1;;;;;8637:21:4;;;;;;;;8676:33;;8637:16;;;8676:33;;8637:16;;8676:33;8335:382;;:::o;1239:217:5:-;1339:16;1347:7;1339;:16::i;:::-;1331:75;;;;-1:-1:-1;;;1331:75:5;;18686:2:13;1331:75:5;;;18668:21:13;18725:2;18705:18;;;18698:30;18764:34;18744:18;;;18737:62;-1:-1:-1;;;18815:18:13;;;18808:44;18869:19;;1331:75:5;18484:410:13;1331:75:5;1417:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;759:327:12:-;1008:69;;-1:-1:-1;;9193:2:13;9189:15;;;9185:24;;1008:69:12;;;9173:37:13;9226:12;;;9219:28;;;9281:15;;;9277:24;;9263:12;;;9256:46;9336:15;;;9332:24;9318:12;;;9311:46;9373:12;;;9366:28;;;9410:13;;;9403:29;;;971:7:12;;9448:13:13;;1008:69:12;;;;;;;;;;;;;998:80;;;;;;991:87;;759:327;;;;;;;;:::o;3896:283::-;4025:7;4051:9;4062;4073:7;4084:26;4099:10;4084:14;:26::i;:::-;4130:41;;;;;;;;;;;;13793:25:13;;;13866:4;13854:17;;13834:18;;;13827:45;;;;13888:18;;;13881:34;;;13931:18;;;13924:34;;;4050:60:12;;-1:-1:-1;4050:60:12;;-1:-1:-1;4050:60:12;-1:-1:-1;4130:41:12;;13765:19:13;;4130:41:12;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:41:12;;-1:-1:-1;;4130:41:12;;;3896:283;-1:-1:-1;;;;;;;3896:283:12:o;1998:1463:0:-;2175:16;;;2189:1;2175:16;;;;;;;;;2075:17;;2132:6;;2115:14;;2175:16;;;2075:17;;2175:16;;;;;-1:-1:-1;2175:16:0;2149:42;;2216:5;2207:6;:14;2204:68;;;2246:14;:6;2255:5;2246:14;:::i;:::-;2237:23;;2204:68;2301:7;;-1:-1:-1;;;;;2287:21:0;;;2301:7;;2287:21;2284:1170;;;2375:17;;2367:25;;:5;:25;:::i;:::-;2349:14;2358:5;2349:6;:14;:::i;:::-;:44;;;;:::i;:::-;2337:6;2344:1;2337:9;;;;;;;;:::i;:::-;;;;;;:56;;;;;2445:6;2452:1;2445:9;;;;;;;;:::i;:::-;;;;;;;2436:6;:18;;;;:::i;:::-;2424:6;2431:1;2424:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;2582:5;2573:6;:14;2570:181;;;2631:5;2619:6;2626:1;2619:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;2607:6;2614:1;2607:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;2676:6;2683:1;2676:9;;;;;;;;:::i;:::-;;;;;;;2667:6;:18;;;;:::i;:::-;2655:6;2662:1;2655:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;2570:181;2774:6;-1:-1:-1;2767:13:0;;-1:-1:-1;2767:13:0;2284:1170;2831:17;2866:12;;2851;;:27;;;;:::i;:::-;2831:47;-1:-1:-1;2907:17:0;2831:47;2928:14;2937:5;2928:6;:14;:::i;:::-;:26;;;;:::i;:::-;3019:12;;2907:47;;-1:-1:-1;2995:21:0;3007:9;2907:47;2995:21;:::i;:::-;:36;;;;:::i;:::-;2983:6;2990:1;2983:9;;;;;;;;:::i;:::-;;;;;;;;;;:48;3098:12;;3074:21;3086:9;3074;:21;:::i;:::-;:36;;;;:::i;:::-;3062:6;3069:1;3062:9;;;;;;;;:::i;:::-;;;;;;;;;;:48;3169:18;3178:9;3169:6;:18;:::i;:::-;3157:6;3164:1;3157:9;;;;;;;;:::i;:::-;;;;;;:30;;;;;3232:5;3223:6;:14;3220:178;;;3281:5;3269:6;3276:1;3269:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;3257:6;3264:1;3257:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;3329:5;3317:6;3324:1;3317:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;3305:6;3312:1;3305:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;3377:5;3365:6;3372:1;3365:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;3353:6;3360:1;3353:9;;;;;;;;:::i;:::-;;;;;;:29;;;;;3220:178;3421:6;3414:13;;;;;;;;9950:169;10025:41;682:10:2;10058:7:0;10025:18;:41::i;:::-;10017:94;;;;-1:-1:-1;;;10017:94:0;;19880:2:13;10017:94:0;;;19862:21:13;19919:2;19899:18;;;19892:30;19958:34;19938:18;;;19931:62;-1:-1:-1;;;20009:18:13;;;20002:38;20057:19;;10017:94:0;19678:404:13;10127:154:0;10223:7;;10199:21;;;;:12;:21;;;;;;10233:15;;10199:31;;;:::i;:::-;:49;10191:82;;;;-1:-1:-1;;;10191:82:0;;15578:2:13;10191:82:0;;;15560:21:13;15617:2;15597:18;;;15590:30;-1:-1:-1;;;15636:18:13;;;15629:50;15696:18;;10191:82:0;15376:344:13;8946:360:4;9006:13;9022:23;9037:7;9022:14;:23::i;:::-;9006:39;;9147:29;9164:1;9168:7;9147:8;:29::i;:::-;-1:-1:-1;;;;;9189:16:4;;;;;;:9;:16;;;;;:21;;9209:1;;9189:16;:21;;9209:1;;9189:21;:::i;:::-;;;;-1:-1:-1;;9228:16:4;;;;:7;:16;;;;;;9221:23;;-1:-1:-1;;;;;;9221:23:4;;;9262:36;9236:7;;9228:16;-1:-1:-1;;;;;9262:36:4;;;;;9228:16;;9262:36;8995:311;8946:360;:::o;11078:799::-;11233:4;-1:-1:-1;;;;;11254:13:4;;1066:20:1;1114:8;11250:620:4;;11290:72;;-1:-1:-1;;;11290:72:4;;-1:-1:-1;;;;;11290:36:4;;;;;:72;;682:10:2;;11341:4:4;;11347:7;;11356:5;;11290:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11290:72:4;;;;;;;;-1:-1:-1;;11290:72:4;;;;;;;;;;;;:::i;:::-;;;11286:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11532:13:4;;11528:272;;11575:60;;-1:-1:-1;;;11575:60:4;;;;;;;:::i;11528:272::-;11750:6;11744:13;11735:6;11731:2;11727:15;11720:38;11286:529;-1:-1:-1;;;;;;11413:51:4;-1:-1:-1;;;11413:51:4;;-1:-1:-1;11406:58:4;;11250:620;-1:-1:-1;11854:4:4;11078:799;;;;;;:::o;288:723:10:-;344:13;565:10;561:53;;-1:-1:-1;;592:10:10;;;;;;;;;;;;-1:-1:-1;;;592:10:10;;;;;288:723::o;561:53::-;639:5;624:12;680:78;687:9;;680:78;;713:8;;;;:::i;:::-;;-1:-1:-1;736:10:10;;-1:-1:-1;744:2:10;736:10;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;790:17:10;;768:39;;818:154;825:10;;818:154;;852:11;862:1;852:11;;:::i;:::-;;-1:-1:-1;921:10:10;929:2;921:5;:10;:::i;:::-;908:24;;:2;:24;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;878:56:10;;;;;;;;-1:-1:-1;949:11:10;958:2;949:11;;:::i;:::-;;;818:154;;1098:371:12;1335:7;1389:8;1399:9;1410:6;1429:9;1418:21;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1418:21:12;;;;;;;;;;1372:88;;;;;1441:10;;1453:6;;1418:21;1372:88;;:::i;4187:893::-;4293:9;4317;4341:7;4384:3;:10;4398:2;4384:16;4376:53;;;;-1:-1:-1;;;4376:53:12;;23664:2:13;4376:53:12;;;23646:21:13;23703:2;23683:18;;;23676:30;23742:26;23722:18;;;23715:54;23786:18;;4376:53:12;23462:348:13;4376:53:12;-1:-1:-1;;;4838:2:12;4829:12;;4823:19;4908:2;4899:12;;4893:19;5015:2;5006:12;;;5000:19;4823;;4997:1;4992:28;;;;;4187:893::o;6651:348:4:-;6744:4;6769:16;6777:7;6769;:16::i;:::-;6761:73;;;;-1:-1:-1;;;6761:73:4;;16686:2:13;6761:73:4;;;16668:21:13;16725:2;16705:18;;;16698:30;16764:34;16744:18;;;16737:62;-1:-1:-1;;;16815:18:13;;;16808:42;16867:19;;6761:73:4;16484:408:13;6761:73:4;6845:13;6861:23;6876:7;6861:14;:23::i;:::-;6845:39;;6914:5;-1:-1:-1;;;;;6903:16:4;:7;-1:-1:-1;;;;;6903:16:4;;:51;;;;6947:7;-1:-1:-1;;;;;6923:31:4;:20;6935:7;6923:11;:20::i;:::-;-1:-1:-1;;;;;6923:31:4;;6903:51;:87;;;;6958:32;6975:5;6982:7;6958:16;:32::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:13;82:20;;-1:-1:-1;;;;;131:31:13;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:672::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;403:59;419:42;458:2;419:42;:::i;:::-;403:59;:::i;:::-;484:3;508:2;503:3;496:15;536:2;531:3;527:12;520:19;;571:2;563:6;559:15;623:3;618:2;612;609:1;605:10;597:6;593:23;589:32;586:41;583:61;;;640:1;637;630:12;583:61;662:1;672:163;686:2;683:1;680:9;672:163;;;743:17;;731:30;;781:12;;;;813;;;;704:1;697:9;672:163;;;-1:-1:-1;853:5:13;;192:672;-1:-1:-1;;;;;;;192:672:13:o;869:530::-;911:5;964:3;957:4;949:6;945:17;941:27;931:55;;982:1;979;972:12;931:55;1018:6;1005:20;1044:18;1040:2;1037:26;1034:52;;;1066:18;;:::i;:::-;1110:55;1153:2;1134:13;;-1:-1:-1;;1130:27:13;1159:4;1126:38;1110:55;:::i;:::-;1190:2;1181:7;1174:19;1236:3;1229:4;1224:2;1216:6;1212:15;1208:26;1205:35;1202:55;;;1253:1;1250;1243:12;1202:55;1318:2;1311:4;1303:6;1299:17;1292:4;1283:7;1279:18;1266:55;1366:1;1341:16;;;1359:4;1337:27;1330:38;;;;1345:7;869:530;-1:-1:-1;;;869:530:13:o;1404:186::-;1463:6;1516:2;1504:9;1495:7;1491:23;1487:32;1484:52;;;1532:1;1529;1522:12;1484:52;1555:29;1574:9;1555:29;:::i;1595:260::-;1663:6;1671;1724:2;1712:9;1703:7;1699:23;1695:32;1692:52;;;1740:1;1737;1730:12;1692:52;1763:29;1782:9;1763:29;:::i;:::-;1753:39;;1811:38;1845:2;1834:9;1830:18;1811:38;:::i;:::-;1801:48;;1595:260;;;;;:::o;1860:328::-;1937:6;1945;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2045:29;2064:9;2045:29;:::i;:::-;2035:39;;2093:38;2127:2;2116:9;2112:18;2093:38;:::i;:::-;2083:48;;2178:2;2167:9;2163:18;2150:32;2140:42;;1860:328;;;;;:::o;2193:537::-;2288:6;2296;2304;2312;2365:3;2353:9;2344:7;2340:23;2336:33;2333:53;;;2382:1;2379;2372:12;2333:53;2405:29;2424:9;2405:29;:::i;:::-;2395:39;;2453:38;2487:2;2476:9;2472:18;2453:38;:::i;:::-;2443:48;;2538:2;2527:9;2523:18;2510:32;2500:42;;2593:2;2582:9;2578:18;2565:32;2620:18;2612:6;2609:30;2606:50;;;2652:1;2649;2642:12;2606:50;2675:49;2716:7;2707:6;2696:9;2692:22;2675:49;:::i;:::-;2665:59;;;2193:537;;;;;;;:::o;2735:1747::-;2917:6;2925;2933;2941;2949;2957;2965;3018:3;3006:9;2997:7;2993:23;2989:33;2986:53;;;3035:1;3032;3025:12;2986:53;3058:29;3077:9;3058:29;:::i;:::-;3048:39;;3138:2;3127:9;3123:18;3110:32;3161:18;3202:2;3194:6;3191:14;3188:34;;;3218:1;3215;3208:12;3188:34;3256:6;3245:9;3241:22;3231:32;;3301:7;3294:4;3290:2;3286:13;3282:27;3272:55;;3323:1;3320;3313:12;3272:55;3347:73;3363:56;3415:2;3402:16;3363:56;:::i;3347:73::-;3442:3;3479:2;3466:16;3461:3;3454:29;3508:2;3503:3;3499:12;3492:19;;3539:2;3535;3531:11;3601:7;3596:2;3589;3576:16;3573:1;3569:24;3565:2;3561:33;3557:42;3554:55;3551:75;;;3622:1;3619;3612:12;3551:75;3644:1;3654:280;3681:2;3668:16;3665:1;3662:23;3654:280;;;3752:2;3746:3;3733:17;3730:25;3727:45;;;3768:1;3765;3758:12;3727:45;3797:62;3851:7;3846:2;3839:3;3826:17;3822:2;3818:26;3814:35;3797:62;:::i;:::-;3785:75;;3889:2;3880:12;;;;3912;;;;;3700:1;3693:9;3654:280;;;-1:-1:-1;3953:5:13;;-1:-1:-1;;;4011:2:13;3996:18;;3983:32;;-1:-1:-1;4027:16:13;;;4024:36;;;4056:1;4053;4046:12;4024:36;4079:63;4134:7;4123:8;4112:9;4108:24;4079:63;:::i;:::-;4069:73;;4161:38;4195:2;4184:9;4180:18;4161:38;:::i;:::-;4151:48;;4246:3;4235:9;4231:19;4218:33;4208:43;;4298:3;4287:9;4283:19;4270:33;4260:43;;4356:3;4345:9;4341:19;4328:33;4312:49;;4386:2;4376:8;4373:16;4370:36;;;4402:1;4399;4392:12;4370:36;;4425:51;4468:7;4457:8;4446:9;4442:24;4425:51;:::i;:::-;4415:61;;;2735:1747;;;;;;;;;;:::o;4487:315::-;4552:6;4560;4613:2;4601:9;4592:7;4588:23;4584:32;4581:52;;;4629:1;4626;4619:12;4581:52;4652:29;4671:9;4652:29;:::i;:::-;4642:39;;4731:2;4720:9;4716:18;4703:32;4744:28;4766:5;4744:28;:::i;:::-;4791:5;4781:15;;;4487:315;;;;;:::o;4807:254::-;4875:6;4883;4936:2;4924:9;4915:7;4911:23;4907:32;4904:52;;;4952:1;4949;4942:12;4904:52;4975:29;4994:9;4975:29;:::i;:::-;4965:39;5051:2;5036:18;;;;5023:32;;-1:-1:-1;;;4807:254:13:o;5066:750::-;5188:6;5196;5204;5212;5220;5228;5236;5289:3;5277:9;5268:7;5264:23;5260:33;5257:53;;;5306:1;5303;5296:12;5257:53;5329:29;5348:9;5329:29;:::i;:::-;5319:39;;5405:2;5394:9;5390:18;5377:32;5367:42;;5428:38;5462:2;5451:9;5447:18;5428:38;:::i;:::-;5418:48;;5485:38;5519:2;5508:9;5504:18;5485:38;:::i;:::-;5475:48;;5570:3;5559:9;5555:19;5542:33;5532:43;;5622:3;5611:9;5607:19;5594:33;5584:43;;5678:3;5667:9;5663:19;5650:33;5706:18;5698:6;5695:30;5692:50;;;5738:1;5735;5728:12;5692:50;5761:49;5802:7;5793:6;5782:9;5778:22;5761:49;:::i;5821:245::-;5888:6;5941:2;5929:9;5920:7;5916:23;5912:32;5909:52;;;5957:1;5954;5947:12;5909:52;5989:9;5983:16;6008:28;6030:5;6008:28;:::i;6071:245::-;6129:6;6182:2;6170:9;6161:7;6157:23;6153:32;6150:52;;;6198:1;6195;6188:12;6150:52;6237:9;6224:23;6256:30;6280:5;6256:30;:::i;6321:249::-;6390:6;6443:2;6431:9;6422:7;6418:23;6414:32;6411:52;;;6459:1;6456;6449:12;6411:52;6491:9;6485:16;6510:30;6534:5;6510:30;:::i;6575:321::-;6644:6;6697:2;6685:9;6676:7;6672:23;6668:32;6665:52;;;6713:1;6710;6703:12;6665:52;6753:9;6740:23;6786:18;6778:6;6775:30;6772:50;;;6818:1;6815;6808:12;6772:50;6841:49;6882:7;6873:6;6862:9;6858:22;6841:49;:::i;6901:180::-;6960:6;7013:2;7001:9;6992:7;6988:23;6984:32;6981:52;;;7029:1;7026;7019:12;6981:52;-1:-1:-1;7052:23:13;;6901:180;-1:-1:-1;6901:180:13:o;7086:435::-;7139:3;7177:5;7171:12;7204:6;7199:3;7192:19;7230:4;7259:2;7254:3;7250:12;7243:19;;7296:2;7289:5;7285:14;7317:1;7327:169;7341:6;7338:1;7335:13;7327:169;;;7402:13;;7390:26;;7436:12;;;;7471:15;;;;7363:1;7356:9;7327:169;;;-1:-1:-1;7512:3:13;;7086:435;-1:-1:-1;;;;;7086:435:13:o;7526:257::-;7567:3;7605:5;7599:12;7632:6;7627:3;7620:19;7648:63;7704:6;7697:4;7692:3;7688:14;7681:4;7674:5;7670:16;7648:63;:::i;:::-;7765:2;7744:15;-1:-1:-1;;7740:29:13;7731:39;;;;7772:4;7727:50;;7526:257;-1:-1:-1;;7526:257:13:o;7788:1061::-;8107:3;8139:26;8135:31;8208:2;8199:6;8195:2;8191:15;8187:24;8182:3;8175:37;8263:2;8254:6;8250:2;8246:15;8242:24;8237:2;8232:3;8228:12;8221:46;;8297:6;8292:2;8287:3;8283:12;8276:28;8333:6;8327:13;8359:4;8372:60;8425:6;8420:2;8415:3;8411:12;8406:2;8398:6;8394:15;8372:60;:::i;:::-;8504:13;;8458:16;;;8476:2;8454:25;;8563:15;;;8596:1;8606:177;8620:8;8617:1;8614:15;8606:177;;;8685:13;;8671:28;;8721:14;;;;8758:15;;;;8644:1;8637:9;8606:177;;;-1:-1:-1;;;8792:21:13;;;8829:14;;;;;-1:-1:-1;;;;;;;7788:1061:13:o;9472:470::-;9651:3;9689:6;9683:13;9705:53;9751:6;9746:3;9739:4;9731:6;9727:17;9705:53;:::i;:::-;9821:13;;9780:16;;;;9843:57;9821:13;9780:16;9877:4;9865:17;;9843:57;:::i;:::-;9916:20;;9472:470;-1:-1:-1;;;;9472:470:13:o;10920:488::-;-1:-1:-1;;;;;11189:15:13;;;11171:34;;11241:15;;11236:2;11221:18;;11214:43;11288:2;11273:18;;11266:34;;;11336:3;11331:2;11316:18;;11309:31;;;11114:4;;11357:45;;11382:19;;11374:6;11357:45;:::i;:::-;11349:53;10920:488;-1:-1:-1;;;;;;10920:488:13:o;11692:604::-;-1:-1:-1;;;;;12021:15:13;;;12003:34;;12068:2;12053:18;;12046:34;;;12116:15;;12111:2;12096:18;;12089:43;12163:2;12148:18;;12141:34;;;11983:3;12206;12191:19;;12184:32;;;11946:4;;12233:57;;12270:19;;12262:6;12233:57;:::i;:::-;12225:65;11692:604;-1:-1:-1;;;;;;;11692:604:13:o;12301:802::-;12463:4;12492:2;12532;12521:9;12517:18;12562:2;12551:9;12544:21;12585:6;12620;12614:13;12651:6;12643;12636:22;12689:2;12678:9;12674:18;12667:25;;12751:2;12741:6;12738:1;12734:14;12723:9;12719:30;12715:39;12701:53;;12789:2;12781:6;12777:15;12810:1;12820:254;12834:6;12831:1;12828:13;12820:254;;;12927:2;12923:7;12911:9;12903:6;12899:22;12895:36;12890:3;12883:49;12955:39;12987:6;12978;12972:13;12955:39;:::i;:::-;12945:49;-1:-1:-1;13052:12:13;;;;13017:15;;;;12856:1;12849:9;12820:254;;;-1:-1:-1;13091:6:13;;12301:802;-1:-1:-1;;;;;;;12301:802:13:o;13108:261::-;13287:2;13276:9;13269:21;13250:4;13307:56;13359:2;13348:9;13344:18;13336:6;13307:56;:::i;13969:219::-;14118:2;14107:9;14100:21;14081:4;14138:44;14178:2;14167:9;14163:18;14155:6;14138:44;:::i;14193:414::-;14395:2;14377:21;;;14434:2;14414:18;;;14407:30;14473:34;14468:2;14453:18;;14446:62;-1:-1:-1;;;14539:2:13;14524:18;;14517:48;14597:3;14582:19;;14193:414::o;22415:343::-;22617:2;22599:21;;;22656:2;22636:18;;;22629:30;-1:-1:-1;;;22690:2:13;22675:18;;22668:49;22749:2;22734:18;;22415:343::o;23110:347::-;23312:2;23294:21;;;23351:2;23331:18;;;23324:30;23390:25;23385:2;23370:18;;23363:53;23448:2;23433:18;;23110:347::o;23997:275::-;24068:2;24062:9;24133:2;24114:13;;-1:-1:-1;;24110:27:13;24098:40;;24168:18;24153:34;;24189:22;;;24150:62;24147:88;;;24215:18;;:::i;:::-;24251:2;24244:22;23997:275;;-1:-1:-1;23997:275:13:o;24277:182::-;24336:4;24369:18;24361:6;24358:30;24355:56;;;24391:18;;:::i;:::-;-1:-1:-1;24436:1:13;24432:14;24448:4;24428:25;;24277:182::o;24464:128::-;24504:3;24535:1;24531:6;24528:1;24525:13;24522:39;;;24541:18;;:::i;:::-;-1:-1:-1;24577:9:13;;24464:128::o;24597:120::-;24637:1;24663;24653:35;;24668:18;;:::i;:::-;-1:-1:-1;24702:9:13;;24597:120::o;24722:168::-;24762:7;24828:1;24824;24820:6;24816:14;24813:1;24810:21;24805:1;24798:9;24791:17;24787:45;24784:71;;;24835:18;;:::i;:::-;-1:-1:-1;24875:9:13;;24722:168::o;24895:125::-;24935:4;24963:1;24960;24957:8;24954:34;;;24968:18;;:::i;:::-;-1:-1:-1;25005:9:13;;24895:125::o;25025:258::-;25097:1;25107:113;25121:6;25118:1;25115:13;25107:113;;;25197:11;;;25191:18;25178:11;;;25171:39;25143:2;25136:10;25107:113;;;25238:6;25235:1;25232:13;25229:48;;;-1:-1:-1;;25273:1:13;25255:16;;25248:27;25025:258::o;25288:380::-;25367:1;25363:12;;;;25410;;;25431:61;;25485:4;25477:6;25473:17;25463:27;;25431:61;25538:2;25530:6;25527:14;25507:18;25504:38;25501:161;;;25584:10;25579:3;25575:20;25572:1;25565:31;25619:4;25616:1;25609:15;25647:4;25644:1;25637:15;25501:161;;25288:380;;;:::o;25673:135::-;25712:3;-1:-1:-1;;25733:17:13;;25730:43;;;25753:18;;:::i;:::-;-1:-1:-1;25800:1:13;25789:13;;25673:135::o;25813:112::-;25845:1;25871;25861:35;;25876:18;;:::i;:::-;-1:-1:-1;25910:9:13;;25813:112::o;25930:127::-;25991:10;25986:3;25982:20;25979:1;25972:31;26022:4;26019:1;26012:15;26046:4;26043:1;26036:15;26062:127;26123:10;26118:3;26114:20;26111:1;26104:31;26154:4;26151:1;26144:15;26178:4;26175:1;26168:15;26194:127;26255:10;26250:3;26246:20;26243:1;26236:31;26286:4;26283:1;26276:15;26310:4;26307:1;26300:15;26326:127;26387:10;26382:3;26378:20;26375:1;26368:31;26418:4;26415:1;26408:15;26442:4;26439:1;26432:15;26458:118;26544:5;26537:13;26530:21;26523:5;26520:32;26510:60;;26566:1;26563;26556:12;26581:131;-1:-1:-1;;;;;;26655:32:13;;26645:43;;26635:71;;26702:1;26699;26692:12
Swarm Source
ipfs://d7e4d0821bff71ffa56034b934df4f8364316b21f82f63f2436c3346126ab3ca
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.