Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10 ACTESSND
Holders
8
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ACTESSNDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ActusEssendi
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {Proxy} from "@openzeppelin/contracts/proxy/Proxy.sol"; import {ERC721Baseline} from "erc721baseline/contracts/ERC721Baseline.sol"; import {IERC721Baseline} from "erc721baseline/contracts/IERC721Baseline.sol"; import {Base64} from "solady/src/utils/Base64.sol"; /** * @title Actus Essendi * @author 0xG * * @notice * Actus Essendi draws from Aquinas' metaphysical concept that * everything has an essence or nature, but existence (actus essendi) * is what gives an entity its individuality and reality. * * 0xG relates this theory to generative art algorithms, * which symbolize the essence and inherent nature of the artwork, * while their static output, an image, embodies the reality and * individuality of Actus Essendi, capturing a momentary expression of the essence. * * This concept is formalized in this contract as tokens that start with * a unique on-chain generative artwork (the essence) which transforms at every resolution. * * Using the signature on the back of the corresponding physical piece * the collector can permanently transitions the token to Actus Essendi. * * After execution, the token visual reflects the physical piece the collector owns, * serving as a permanent expression of the essence at `tokenId` resolution. */ contract ActusEssendi is ERC721Baseline { /** * @notice Returns the address of the creator, 0xG, who signed the artworks. * * @return The creator address. */ address immutable public creator = msg.sender; /** * @notice Returns the current state of the token. * @dev Available states are: * * 0. Unminted * 1. Essence * 2. Actus Essendi * 3. Burnt * * @return state The token state */ mapping(uint256 tokenId => uint8 state) public tokenState; /** * @notice The artwork description. */ string public description; event ActusEssendi(uint256 _tokenId); event MetadataUpdate(uint256 _tokenId); event Description(string description); error ERC721NonexistentToken(uint256 tokenId); constructor(address ERC721BaselineImplementation) ERC721Baseline( ERC721BaselineImplementation, "Actus Essendi", "ACTESSND" ) { } /** * @notice Returns the generative on-chain artwork (the essence). * Every new token in the collection starts from the essence. * * @return SVG image encoded as a base64 string */ function essence() external pure returns (string memory) { return "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJiYWNrZ3JvdW5kOiNmNWY1ZjUiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxkZWZzPjxmaWx0ZXIgaWQ9ImEiPjxmZVR1cmJ1bGVuY2UgYmFzZUZyZXF1ZW5jeT0iMC4wMDAxIDEiIG51bU9jdGF2ZXM9IjMiIHNlZWQ9IjcwMSIvPjxmZU1vcnBob2xvZ3kgb3BlcmF0b3I9ImRpbGF0ZSIgcmFkaXVzPSI0LjUiLz48ZmVEaXNwbGFjZW1lbnRNYXAgaW49IlNvdXJjZUdyYXBoaWMiIHNjYWxlPSIxNTAwIiB4Q2hhbm5lbFNlbGVjdG9yPSJHIiB5Q2hhbm5lbFNlbGVjdG9yPSJCIi8+PC9maWx0ZXI+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiIGZpbGw9IiNmNWY1ZjUiLz48cmVjdCB3aWR0aD0iNTAwIiBoZWlnaHQ9IjUwMCIgeD0iMjUwIiB5PSIyNTAiIGZpbGw9IiNlMGUwZTAiLz48cmVjdCB3aWR0aD0iNTAwIiBoZWlnaHQ9IjUwMCIgeD0iMjUwIiB5PSIyNTAiIGZpbGw9IiNmNWY1ZjUiIHN0cm9rZT0iIzYwNjA2MCIgc3Ryb2tlLXdpZHRoPSI0MCIgZmlsdGVyPSJ1cmwoI2EpIi8+PHJlY3Qgd2lkdGg9IjIwMCIgaGVpZ2h0PSI1MDAiIHg9IjU4MCIgeT0iMjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1kYXNoYXJyYXk9IjIiIHN0cm9rZS13aWR0aD0iNDAiIGZpbHRlcj0idXJsKCNhKSIvPjwvc3ZnPg=="; } /** * @notice Permanently transitions the token to Actus Essendi. * After execution, the token visual reflects the physical piece the collector owns, * serving as a permanent expression of the essence at `tokenId` resolution. * * @param tokenId The ID of the token to perform Actus Essendi on * @param signature The signature on the back of the physical piece counterpart */ function actusEssendi(uint256 tokenId, bytes calldata signature) external { if ( tokenState[tokenId] != 1 || creator != baseline().recoverCalldata( keccak256(abi.encodePacked(address(this), tokenId)), signature ) || msg.sender != baseline().__ownerOf(tokenId) ) revert IERC721Baseline.Unauthorized(); tokenState[tokenId] = 2; emit ActusEssendi(tokenId); emit MetadataUpdate(tokenId); } /** * @notice Retrieves the token URI for a given tokenId. * * @param tokenId The ID of the token * @return The token URI */ function tokenURI(uint256 tokenId) external view returns (string memory) { uint8 state = tokenState[tokenId]; if (state == 0 || state == 3) revert ERC721NonexistentToken(tokenId); return string.concat( 'data:application/json;base64,', Base64.encode( abi.encodePacked( '{"name":"',(state == 2 ?'Actus Essendi' : 'Essence'),' #',baseline().toString(tokenId),'",', '"created_by":"0xG","description":"',description,'",', '"image":"',(state == 2 ? baseline().__tokenURI(tokenId) : this.essence()),'"}' ), true ) ); } /** * @notice Allows the collector to update the Actus Essendi URI for a given tokenId. * This method exists only as an escape hatch to update the URI in case of issues. * * @param tokenId The ID of the token * @param uri The new URI for Actus Essendi (provided by the creator) * @param signature The signature for authorization (provided by the creator) */ function updateActusEssendiUri(uint256 tokenId, string calldata uri, bytes calldata signature) external { if ( tokenState[tokenId] != 2 || false == _isAuthorized( keccak256(abi.encodePacked(address(this), tokenId, uri)), signature ) || msg.sender != baseline().__ownerOf(tokenId) ) revert IERC721Baseline.Unauthorized(); baseline().__setTokenURI(tokenId, uri); } /** * @notice Allows a collector to redeem a specific tokenId. * * @param tokenId The ID of the token to redeem * @param uri The URI for the token (provided by the creator) * @param signature The signature for authorization (provided by the creator) */ function mint(uint256 tokenId, string calldata uri, bytes calldata signature) external { if ( tokenState[tokenId] > 0 || false == _isAuthorized( keccak256( abi.encodePacked( msg.sender, address(this), tokenId, uri ) ), signature ) ) revert IERC721Baseline.Unauthorized(); tokenState[tokenId] = 1; baseline().__mint(msg.sender, tokenId, uri); } /** * @notice Burns a token with the given tokenId. * * @param tokenId The ID of the token to burn */ function burn(uint256 tokenId) external { if ( msg.sender != baseline().__ownerOf(tokenId) ) revert IERC721Baseline.Unauthorized(); tokenState[tokenId] = 3; baseline().__burn(tokenId); } /** * @notice Sets the artwork description. * * @param desc The new description * @param store Whether the description should be persisted on storage * @param emitEvent Whether calling the function should emit a Description event with the description */ function setDescription(string calldata desc, bool store, bool emitEvent) external { baseline().requireAdmin(msg.sender); if (store) { description = desc; } if (emitEvent) { emit Description(desc); } } function _isAuthorized(bytes32 digest, bytes calldata signature) internal returns (bool) { IERC721Baseline impl = baseline(); return impl.isAdmin(impl.recoverCalldata(digest, signature)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Library to encode strings in Base64. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/Base64.sol) /// @author Modified from (https://github.com/Brechtpd/base64/blob/main/base64.sol) by Brecht Devos - <[email protected]>. library Base64 { /// @dev Encodes `data` using the base64 encoding described in RFC 4648. /// See: https://datatracker.ietf.org/doc/html/rfc4648 /// @param fileSafe Whether to replace '+' with '-' and '/' with '_'. /// @param noPadding Whether to strip away the padding. function encode(bytes memory data, bool fileSafe, bool noPadding) internal pure returns (string memory result) { /// @solidity memory-safe-assembly assembly { let dataLength := mload(data) if dataLength { // Multiply by 4/3 rounded up. // The `shl(2, ...)` is equivalent to multiplying by 4. let encodedLength := shl(2, div(add(dataLength, 2), 3)) // Set `result` to point to the start of the free memory. result := mload(0x40) // Store the table into the scratch space. // Offsetted by -1 byte so that the `mload` will load the character. // We will rewrite the free memory pointer at `0x40` later with // the allocated size. // The magic constant 0x0670 will turn "-_" into "+/". mstore(0x1f, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef") mstore(0x3f, xor("ghijklmnopqrstuvwxyz0123456789-_", mul(iszero(fileSafe), 0x0670))) // Skip the first slot, which stores the length. let ptr := add(result, 0x20) let end := add(ptr, encodedLength) // Run over the input, 3 bytes at a time. for {} 1 {} { data := add(data, 3) // Advance 3 bytes. let input := mload(data) // Write 4 bytes. Optimized for fewer stack operations. mstore8(0, mload(and(shr(18, input), 0x3F))) mstore8(1, mload(and(shr(12, input), 0x3F))) mstore8(2, mload(and(shr(6, input), 0x3F))) mstore8(3, mload(and(input, 0x3F))) mstore(ptr, mload(0x00)) ptr := add(ptr, 4) // Advance 4 bytes. if iszero(lt(ptr, end)) { break } } mstore(0x40, add(end, 0x20)) // Allocate the memory. // Equivalent to `o = [0, 2, 1][dataLength % 3]`. let o := div(2, mod(dataLength, 3)) // Offset `ptr` and pad with '='. We can simply write over the end. mstore(sub(ptr, o), shl(240, 0x3d3d)) // Set `o` to zero if there is padding. o := mul(iszero(iszero(noPadding)), o) mstore(sub(ptr, o), 0) // Zeroize the slot after the string. mstore(result, sub(encodedLength, o)) // Store the length. } } } /// @dev Encodes `data` using the base64 encoding described in RFC 4648. /// Equivalent to `encode(data, false, false)`. function encode(bytes memory data) internal pure returns (string memory result) { result = encode(data, false, false); } /// @dev Encodes `data` using the base64 encoding described in RFC 4648. /// Equivalent to `encode(data, fileSafe, false)`. function encode(bytes memory data, bool fileSafe) internal pure returns (string memory result) { result = encode(data, fileSafe, false); } /// @dev Decodes base64 encoded `data`. /// /// Supports: /// - RFC 4648 (both standard and file-safe mode). /// - RFC 3501 (63: ','). /// /// Does not support: /// - Line breaks. /// /// Note: For performance reasons, /// this function will NOT revert on invalid `data` inputs. /// Outputs for invalid inputs will simply be undefined behaviour. /// It is the user's responsibility to ensure that the `data` /// is a valid base64 encoded string. function decode(string memory data) internal pure returns (bytes memory result) { /// @solidity memory-safe-assembly assembly { let dataLength := mload(data) if dataLength { let decodedLength := mul(shr(2, dataLength), 3) for {} 1 {} { // If padded. if iszero(and(dataLength, 3)) { let t := xor(mload(add(data, dataLength)), 0x3d3d) // forgefmt: disable-next-item decodedLength := sub( decodedLength, add(iszero(byte(30, t)), iszero(byte(31, t))) ) break } // If non-padded. decodedLength := add(decodedLength, sub(and(dataLength, 3), 1)) break } result := mload(0x40) // Write the length of the bytes. mstore(result, decodedLength) // Skip the first slot, which stores the length. let ptr := add(result, 0x20) let end := add(ptr, decodedLength) // Load the table into the scratch space. // Constants are optimized for smaller bytecode with zero gas overhead. // `m` also doubles as the mask of the upper 6 bits. let m := 0xfc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc mstore(0x5b, m) mstore(0x3b, 0x04080c1014181c2024282c3034383c4044484c5054585c6064) mstore(0x1a, 0xf8fcf800fcd0d4d8dce0e4e8ecf0f4) for {} 1 {} { // Read 4 bytes. data := add(data, 4) let input := mload(data) // Write 3 bytes. // forgefmt: disable-next-item mstore(ptr, or( and(m, mload(byte(28, input))), shr(6, or( and(m, mload(byte(29, input))), shr(6, or( and(m, mload(byte(30, input))), shr(6, mload(byte(31, input))) )) )) )) ptr := add(ptr, 3) if iszero(lt(ptr, end)) { break } } mstore(0x40, add(end, 0x20)) // Allocate the memory. mstore(end, 0) // Zeroize the slot after the bytes. mstore(0x60, 0) // Restore the zero slot. } } } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.8.21; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; /** * @title IERC721Baseline * @custom:version v0.1.0-alpha.4 * @notice A baseline ERC721 contract implementation that exposes internal methods to a proxy instance. */ interface IERC721Baseline is IERC721 { /** * @dev The version of the implementation contract. */ function VERSION() external view returns (string memory); /** * @dev Indicates an unauthorized operation or unauthorized access attempt. */ error Unauthorized(); /************************************************ * Initializer ************************************************/ /** * @notice Initializes a proxy contract. * @dev This method MUST be called in the proxy constructor via delegatecall * to initialize the proxy with a name and symbol for the underlying ERC721. * * Additionally this method sets the deployer as owner and admin of the proxy. * * @param name contract name * @param symbol contract symbol */ function initialize(string memory name, string memory symbol) external; /************************************************ * Metadata ************************************************/ /** * Metadata > ERC-4906 events */ /** * @dev This event emits when the metadata of a token is changed. * So that the third-party platforms such as NFT market could * timely update the images and related attributes of the NFT. * * @param _tokenId the token ID being updated */ event MetadataUpdate(uint256 _tokenId); /** * @dev This event emits when the metadata of a range of tokens is changed. * So that the third-party platforms such as NFT market could * timely update the images and related attributes of the NFTs. * * @param _fromTokenId the starting token ID * @param _toTokenId the ending token ID */ event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); /** * @notice The total minted supply. * @dev The supply is decreased when a token is burned. * Generally it is recommended to use a separate counter variable to track the supply available for minting. */ function totalSupply() external view returns (uint256); /** * Token URI methods. * * The ERC721Baseline tokenURI implementation allows to define uris in the following order: * * 1. Token-specific URI by ID. * 2. Shared URI. * 3. Shared base URI + token ID. * 4. Empty string if none of the above was found. */ /** * @notice Returns the token URI for a token ID. * * @param tokenId token ID */ function __tokenURI(uint256 tokenId) external view returns (string memory); /** * @notice Sets the token URI for a token ID. * @dev Emits EIP-4906's `MetadataUpdate` event with the `tokenId`. * This method is internal and only the proxy contract can call it. * * * @param tokenId token ID * @param tokenURI URI pointing to the metadata */ function __setTokenURI(uint256 tokenId, string calldata tokenURI) external; /** * @notice Returns the shared URI for the tokens. * @dev This method is internal and only the proxy contract can call it. */ function __sharedURI() external view returns (string memory); /** * @notice Sets a shared URI for the tokens. * @dev This method doesn't emit the EIP-4906's `BatchMetadataUpdate` event * because ERC721Baseline allows to mint any token ID, starting at any index. * The proxy should emit `BatchMetadataUpdate`. * * This method is internal and only the proxy contract can call it. * * @param sharedURI shared URI for the tokens */ function __setSharedURI(string calldata sharedURI) external; /** * @notice Returns the base URI for the tokens. * @dev When set this URI is prepended to the token ID. */ function __baseURI() external view returns (string memory); /** * @notice Sets a contract-wide base URI. * @dev This method doesn't emit the EIP-4906 `BatchMetadataUpdate` event * because ERC721Baseline allows to mint any token ID, starting at any index. * The proxy should emit `BatchMetadataUpdate`. * * This method is internal and only the proxy contract can call it. * * @param baseURI shared base URI for the tokens */ function __setBaseURI(string calldata baseURI) external; /************************************************ * Internal ERC721 methods exposed to the proxy ************************************************/ /** * @dev Indicates an invalid attempt to call a method from outside of the proxy. */ error NotProxy(); /** * @dev See {ERC721-_ownerOf}. */ function __ownerOf(uint256 tokenId) external returns (address); /** * @dev See {ERC721-_update}. * This method is internal and only the proxy contract can call it. */ function __update(address to, uint256 tokenId, address auth) external returns (address); /** * @dev See {ERC721-_mint}. * This method is internal and only the proxy contract can call it. */ function __mint(address to, uint256 tokenId) external; /** * @dev Similar to {ERC721-_mint} but allows to set a dedicated tokenURI for the token. * This method is internal and only the proxy contract can call it. */ function __mint(address to, uint256 tokenId, string calldata tokenURI) external; /** * @dev See {ERC721-_burn}. * This method is internal and only the proxy contract can call it. */ function __burn(uint256 tokenId) external; /** * @dev See {ERC721-_transfer}. * This method is internal and only the proxy contract can call it. */ function __transfer(address from, address to, uint256 tokenId) external; /** * @notice Allows to enable or disable a `_beforeTokenTransfer` hook method defined in the proxy contract. * @dev This method is internal and only the proxy contract can call it. * * When enabled, the proxy's `_beforeTokenTransfer` hook method is invoked prior to a transfer. * * The proxy's `_beforeTokenTransfer` method is called with the following params: * * - address the transaction's _msgSender() * - address from * - address to * - uint256 tokenId * * This method is internal and only the proxy contract can call it. */ function __setBeforeTokenTransferHookEnabled(bool enabled) external; /** * @dev See {ERC721-_checkOnERC721Received}. * * NOTE: this method accepts an additional first parameter that is the original transaction's `msg.sender`. */ function __checkOnERC721Received(address sender, address from, address to, uint256 tokenId, bytes memory data) external; /** * @dev See {ERC721-_isAuthorized}. */ function __isAuthorized(address owner, address spender, uint256 tokenId) external view returns (bool); /** * @dev See {ERC721-_approve}. * This method is internal and only the proxy contract can call it. */ function __approve(address to, uint256 tokenId, address auth, bool emitEvent) external; /** * @dev See {ERC721-_setApprovalForAll}. * This method is internal and only the proxy contract can call it. */ function __setApprovalForAll(address owner, address operator, bool approved) external; /************************************************ * Access control ************************************************/ /** * Implements a multi-admin system and a minimal Ownable-compatible API. */ /** * Access control > multi-admin system */ /** * @notice Checks if an address is the contract owner or an admin. * * @param addr address to check * @return bool whether the address is an admin or not */ function isAdmin(address addr) external view returns (bool); /** * @dev Emits when an admin is added or removed. * * @param addr address that is being added or removed as an admin * @param add boolean indicating whether the address was grented or revoked admin rights */ event AdminSet(address indexed addr, bool indexed add); /** * @notice Allows to add or remove an admin. * Can only be called by an admin. * * @param addr address to add or remove * @param add boolean indicating whether the address should be granted or revoked rights */ function setAdmin(address addr, bool add) external; /** * @notice Checks whether an address is an admin and reverts with an `Unauthorized` error if not. * @dev Call `requireAdmin` in proxies to implement admin-only public methods. * * @param addr the address to check */ function requireAdmin(address addr) external view; /** * @notice Allows to add or remove an admin. * @dev This method is internal and only the proxy contract can call it. * * @param addr address to add or remove * @param add boolean indicating whether the address should be granted or revoked rights */ function __setAdmin(address addr, bool add) external; /** * Access control > Ownable-compatible API. */ /** * @notice Returns the address of the contract owner. * * @return address of the contract owner */ function owner() external view returns (address); /** * @dev Emits when the contract ownership is transferred. * * @param previousOwner old owner address * @param newOwner new owner address */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @notice Transfers ownership of the contract to a new account. * Can only be called by an admin. * * @param newOwner new owner address */ function transferOwnership(address newOwner) external; /** * @notice Transfers ownership of the contract to a new account. * @dev This method is internal and only the proxy contract can call it. * * @param newOwner new owner address */ function __transferOwnership(address newOwner) external; /************************************************ * Utils ************************************************/ /** * @dev Indicates an invalid signature. */ error InvalidSignature(); /** * @notice Recovers the signer's address from a message digest `hash`, and the `signature`. * * @param hash the message digest that was signed * @param signature the signature for hash * @return result address the recovered address */ function recover(bytes32 hash, bytes memory signature) external view returns (address result); /** * @notice Recovers the signer's address from a message digest `hash`, and the `signature`. * @dev In this method the signature comes from calldata. * * @param hash the message digest that was signed * @param signature the signature for hash * @return result address the recovered address */ function recoverCalldata(bytes32 hash, bytes calldata signature) external view returns (address result); /** * @notice Converts a uint256 to string * * @param value the uint256 to convert * @return string ASCII string decimal representation of `value` */ function toString(uint256 value) external pure returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.21; import {Proxy} from "@openzeppelin/contracts/proxy/Proxy.sol"; import {IERC721Baseline} from "./IERC721Baseline.sol"; /** * @title ERC721Baseline * @custom:version v0.1.0 * @notice A minimal proxy contract for ERC721BaselineImplementation. * * @dev ERC721BaselineImplementation uses ERC-7201 (Namespaced Storage Layout) * to prevent collisions with the proxies storage. * See https://eips.ethereum.org/EIPS/eip-7201. * * Proxies are encouraged, but not required, to use a similar pattern for storage. */ contract ERC721Baseline is Proxy { struct ImplementationSlot { address value; } /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; constructor( address ERC721BaselineImplementation, string memory name, string memory symbol ) { ImplementationSlot storage implementation; assembly { implementation.slot := _IMPLEMENTATION_SLOT } implementation.value = ERC721BaselineImplementation; (bool success, bytes memory reason) = ERC721BaselineImplementation.delegatecall( abi.encodeCall(IERC721Baseline.initialize, (name, symbol)) ); if (success == false) { if (reason.length == 0) revert("Initialization Failed."); assembly { revert(add(32, reason), mload(reason)) } } } function _implementation() internal view override returns (address) { ImplementationSlot storage implementation; assembly { implementation.slot := _IMPLEMENTATION_SLOT } return implementation.value; } function implementation() external view returns (address) { return _implementation(); } /** * @notice Returns a reference to the ERC721BaselineImplementation contract. */ function baseline() internal view returns (IERC721Baseline) { return IERC721Baseline(address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) pragma solidity ^0.8.20; /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overridden so it returns the address to which the fallback * function and {_fallback} should delegate. */ function _implementation() internal view virtual returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _fallback() internal virtual { _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback() external payable virtual { _fallback(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/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`. * * 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; /** * @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 have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev 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 address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @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); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ERC721BaselineImplementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ActusEssendi","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"Description","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"actusEssendi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"essence","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"desc","type":"string"},{"internalType":"bool","name":"store","type":"bool"},{"internalType":"bool","name":"emitEvent","type":"bool"}],"name":"setDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenState","outputs":[{"internalType":"uint8","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"updateActusEssendiUri","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523360805234801562000014575f80fd5b5060405162001aa638038062001aa68339810160408190526200003791620001c3565b604080518082018252600d81526c416374757320457373656e646960981b6020808301919091528251808401845260088152671050d51154d4d39160c21b918101919091527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0386169081178255935185945f91829190620000d3908790879060240162000243565b60408051601f198184030181529181526020820180516001600160e01b031663266c45bb60e11b179052516200010a919062000274565b5f60405180830381855af49150503d805f811462000144576040519150601f19603f3d011682016040523d82523d5f602084013e62000149565b606091505b5090925090508115155f03620001b65780515f03620001ae5760405162461bcd60e51b815260206004820152601660248201527f496e697469616c697a6174696f6e204661696c65642e00000000000000000000604482015260640160405180910390fd5b805181602001fd5b5050505050505062000291565b5f60208284031215620001d4575f80fd5b81516001600160a01b0381168114620001eb575f80fd5b9392505050565b5f5b838110156200020e578181015183820152602001620001f4565b50505f910152565b5f81518084526200022f816020860160208601620001f2565b601f01601f19169290920160200192915050565b604081525f62000257604083018562000216565b82810360208401526200026b818562000216565b95945050505050565b5f825162000287818460208701620001f2565b9190910192915050565b6080516117f6620002b05f395f818160b6015261044701526117f65ff3fe60806040526004361061009b575f3560e01c80637284e416116100635780637284e41614610168578063785cc9971461017c5780639745cc3d1461019b5780639e46b6f7146101db578063a506472a146101fa578063c87b56dd146102195761009b565b806302d05d3f146100a557806342966c68146100f557806348b45f2c146101145780635c60da1b146101335780635c7abcc214610147575b6100a3610238565b005b3480156100b0575f80fd5b506100d87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610100575f80fd5b506100a361010f366004610d3a565b610273565b34801561011f575f80fd5b506100a361012e366004610d96565b61037e565b34801561013e575f80fd5b506100d8610594565b348015610152575f80fd5b5061015b6105cb565b6040516100ec9190610e00565b348015610173575f80fd5b5061015b6105ee565b348015610187575f80fd5b506100a3610196366004610e32565b61067a565b3480156101a6575f80fd5b506101c96101b5366004610d3a565b5f6020819052908152604090205460ff1681565b60405160ff90911681526020016100ec565b3480156101e6575f80fd5b506100a36101f5366004610eb6565b61076f565b348015610205575f80fd5b506100a3610214366004610e32565b610820565b348015610224575f80fd5b5061015b610233366004610d3a565b610916565b61027161026c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b610b3d565b565b604051631f44bb2560e01b8152600481018290523090631f44bb25906024016020604051808303815f875af11580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d29190610f1a565b6001600160a01b0316336001600160a01b031614610302576040516282b42960e81b815260040160405180910390fd5b5f818152602081905260409020805460ff191660031790556103213090565b6001600160a01b031663d1a01520826040518263ffffffff1660e01b815260040161034e91815260200190565b5f604051808303815f87803b158015610365575f80fd5b505af1158015610377573d5f803e3d5ffd5b5050505050565b5f8381526020819052604090205460ff16600114158061047257506040805130606081901b6bffffffffffffffffffffffff191660208084019190915260348084018890528451808503909101815260548401948590528051910120633b98c1d160e21b9093529163ee630744916103fd919086908690605801610f68565b602060405180830381865afa158015610418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043c9190610f1a565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b806104ed5750604051631f44bb2560e01b8152600481018490523090631f44bb25906024016020604051808303815f875af11580156104b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d79190610f1a565b6001600160a01b0316336001600160a01b031614155b1561050a576040516282b42960e81b815260040160405180910390fd5b5f8381526020819052604090819020805460ff19166002179055517f41fe025400223d5e24141e6cef77fea9466ef25000e864c6799111c5a56eb55d906105549085815260200190565b60405180910390a16040518381527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050565b5f6105c67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b6060604051806103e001604052806103be81526020016114036103be9139905090565b600180546105fb90610f81565b80601f016020809104026020016040519081016040528092919081815260200182805461062790610f81565b80156106725780601f1061064957610100808354040283529160200191610672565b820191905f5260205f20905b81548152906001019060200180831161065557829003601f168201915b505050505081565b5f8581526020819052604090205460ff161515806106ce57506106cc33308787876040516020016106af959493929190610fb9565b604051602081830303815290604052805190602001208383610b60565b155b156106eb576040516282b42960e81b815260040160405180910390fd5b5f858152602081905260409020805460ff1916600117905561070a3090565b6001600160a01b0316637a66e596338787876040518563ffffffff1660e01b815260040161073b9493929190610ffb565b5f604051808303815f87803b158015610752575f80fd5b505af1158015610764573d5f803e3d5ffd5b505050505050505050565b30604051632abb908560e11b81523360048201526001600160a01b039190911690635577210a906024015f6040518083038186803b1580156107af575f80fd5b505afa1580156107c1573d5f803e3d5ffd5b5050505081156107da5760016107d884868361108d565b505b801561081a577f8bcd33bdc33e3bcc8a7478b67302b3905987363bfc8d2f03d061a482d858795f8484604051610811929190611148565b60405180910390a15b50505050565b5f8581526020819052604090205460ff1660021415806108575750610855308686866040516020016106af9493929190611163565b155b806108d25750604051631f44bb2560e01b8152600481018690523090631f44bb25906024016020604051808303815f875af1158015610898573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bc9190610f1a565b6001600160a01b0316336001600160a01b031614155b156108ef576040516282b42960e81b815260040160405180910390fd5b6040516358ee717360e01b815230906358ee71739061073b90889088908890600401610f68565b5f8181526020819052604090205460609060ff1680158061093a57508060ff166003145b1561095f57604051637e27328960e01b81526004810184905260240160405180910390fd5b610b168160ff166002146109925760405180604001604052806007815260200166457373656e636560c81b8152506109b9565b6040518060400160405280600d81526020016c416374757320457373656e646960981b8152505b60405163348051d760e11b8152600481018690523090636900a3ae906024015f60405180830381865afa1580156109f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a199190810190611195565b60018460ff16600214610a8d57306001600160a01b0316635c7abcc26040518163ffffffff1660e01b81526004015f60405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a889190810190611195565b610aed565b60405163f5dbba9d60e01b815260048101889052309063f5dbba9d906024015f60405180830381865afa158015610ac6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aed9190810190611195565b604051602001610b009493929190611258565b6040516020818303038152906040526001610c41565b604051602001610b2691906113a3565b604051602081830303815290604052915050919050565b365f80375f80365f845af43d5f803e808015610b57573d5ff35b3d5ffd5b505050565b604051633b98c1d160e21b81525f90309081906324d7806c90829063ee63074490610b93908a908a908a90600401610f68565b602060405180830381865afa158015610bae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd29190610f1a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3891906113e7565b95945050505050565b6060610c4e83835f610c55565b9392505050565b606083518015610d32576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083018181015b6003880197508751603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f811651600353505f518252600482019150808210610cc557602001604052613d3d60f01b60038406600204808303919091525f8615159091029182900352900382525b509392505050565b5f60208284031215610d4a575f80fd5b5035919050565b5f8083601f840112610d61575f80fd5b50813567ffffffffffffffff811115610d78575f80fd5b602083019150836020828501011115610d8f575f80fd5b9250929050565b5f805f60408486031215610da8575f80fd5b83359250602084013567ffffffffffffffff811115610dc5575f80fd5b610dd186828701610d51565b9497909650939450505050565b5f5b83811015610df8578181015183820152602001610de0565b50505f910152565b602081525f8251806020840152610e1e816040850160208701610dde565b601f01601f19169190910160400192915050565b5f805f805f60608688031215610e46575f80fd5b85359450602086013567ffffffffffffffff80821115610e64575f80fd5b610e7089838a01610d51565b90965094506040880135915080821115610e88575f80fd5b50610e9588828901610d51565b969995985093965092949392505050565b8015158114610eb3575f80fd5b50565b5f805f8060608587031215610ec9575f80fd5b843567ffffffffffffffff811115610edf575f80fd5b610eeb87828801610d51565b9095509350506020850135610eff81610ea6565b91506040850135610f0f81610ea6565b939692955090935050565b5f60208284031215610f2a575f80fd5b81516001600160a01b0381168114610c4e575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f610c38604083018486610f40565b600181811c90821680610f9557607f821691505b602082108103610fb357634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6bffffffffffffffffffffffff19808860601b168352808760601b1660148401525084602883015282846048840137505f9101604801908152949350505050565b60018060a01b0385168152836020820152606060408201525f611022606083018486610f40565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b601f821115610b5b575f81815260208120601f850160051c810160208610156110665750805b601f850160051c820191505b8181101561108557828155600101611072565b505050505050565b67ffffffffffffffff8311156110a5576110a561102c565b6110b9836110b38354610f81565b83611040565b5f601f8411600181146110ea575f85156110d35750838201355b5f19600387901b1c1916600186901b178355610377565b5f83815260209020601f19861690835b8281101561111a57868501358255602094850194600190920191016110fa565b5086821015611136575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f61115b602083018486610f40565b949350505050565b6bffffffffffffffffffffffff198560601b168152836014820152818360348301375f91016034019081529392505050565b5f602082840312156111a5575f80fd5b815167ffffffffffffffff808211156111bc575f80fd5b818401915084601f8301126111cf575f80fd5b8151818111156111e1576111e161102c565b604051601f8201601f19908116603f011681019083821181831017156112095761120961102c565b81604052828152876020848701011115611221575f80fd5b611232836020830160208801610dde565b979650505050505050565b5f815161124e818560208601610dde565b9290920192915050565b683d913730b6b2911d1160b91b815284515f90602061127d8260098601838b01610dde565b61202360f01b600992850192830152865161129e81600b8501848b01610dde565b61088b60f21b600b93909101928301527f22637265617465645f6279223a22307847222c226465736372697074696f6e22600d830152611d1160f11b602d8301528554602f905f906112ef81610f81565b6001828116801561130757600181146113205761134d565b60ff19841688870152821515830288018601945061134d565b8b5f52865f205f5b848110156113435781548a8201890152908301908801611328565b5050858389010194505b5050505061139561138761138161136c8461088b60f21b815260020190565b681134b6b0b3b2911d1160b91b815260090190565b8961123d565b61227d60f01b815260020190565b9a9950505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f82516113da81601d850160208701610dde565b91909101601d0192915050565b5f602082840312156113f7575f80fd5b8151610c4e81610ea656fe646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423462577875637a30696148523063446f764c336433647935334d793576636d63764d6a41774d43397a646d636949484e306557786c50534a6959574e725a334a766457356b4f694e6d4e5759315a6a556949485a705a58644362336739496a41674d4341784d444177494445774d444169506a786b5a575a7a506a786d615778305a58496761575139496d4569506a786d5a565231636d4a316247567559325567596d467a5a555a795a5846315a57356a655430694d4334774d44417849444569494735316255396a644746325a584d39496a4d6949484e6c5a575139496a63774d534976506a786d5a553176636e426f623278765a336b676233426c636d463062334939496d5270624746305a534967636d466b6158567a505349304c6a55694c7a34385a6d564561584e776247466a5a57316c626e524e5958416761573439496c4e7664584a6a5a5564795958426f61574d6949484e6a5957786c505349784e5441774969423451326868626d356c62464e6c6247566a6447397950534a484969423551326868626d356c62464e6c6247566a6447397950534a434969382b5043396d615778305a58492b5043396b5a575a7a506a78795a574e30494864705a48526f505349784d4441774969426f5a576c6e61485139496a45774d44416949475a706247773949694e6d4e5759315a6a55694c7a3438636d566a6443423361575230614430694e5441774969426f5a576c6e61485139496a55774d434967654430694d6a557749694235505349794e54416949475a706247773949694e6c4d4755775a5441694c7a3438636d566a6443423361575230614430694e5441774969426f5a576c6e61485139496a55774d434967654430694d6a557749694235505349794e54416949475a706247773949694e6d4e5759315a6a556949484e30636d39725a543069497a59774e6a41324d434967633352796232746c4c5864705a48526f505349304d4349675a6d6c736447567950534a31636d776f493245704969382b50484a6c5933516764326c6b64476739496a49774d434967614756705a326830505349314d44416949486739496a55344d434967655430694d6a55774969426d6157787350534a756232356c4969427a64484a766132553949694e6d5a6d596949484e30636d39725a53316b59584e6f59584a7959586b39496a496949484e30636d39725a53313361575230614430694e44416949475a706248526c636a306964584a734b434e684b534976506a777663335a6e50673d3da2646970667358221220ce20a4b437f534691af2940889b9d3276ab283feb9f0dc052cb1bf2e4a0cec7c64736f6c63430008150033000000000000000000000000faf29f632d24c018fbb043ea21f1d6c28657108a
Deployed Bytecode
0x60806040526004361061009b575f3560e01c80637284e416116100635780637284e41614610168578063785cc9971461017c5780639745cc3d1461019b5780639e46b6f7146101db578063a506472a146101fa578063c87b56dd146102195761009b565b806302d05d3f146100a557806342966c68146100f557806348b45f2c146101145780635c60da1b146101335780635c7abcc214610147575b6100a3610238565b005b3480156100b0575f80fd5b506100d87f000000000000000000000000e1e01dc3e6527d2fef00164f4e938a39e6628b3981565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610100575f80fd5b506100a361010f366004610d3a565b610273565b34801561011f575f80fd5b506100a361012e366004610d96565b61037e565b34801561013e575f80fd5b506100d8610594565b348015610152575f80fd5b5061015b6105cb565b6040516100ec9190610e00565b348015610173575f80fd5b5061015b6105ee565b348015610187575f80fd5b506100a3610196366004610e32565b61067a565b3480156101a6575f80fd5b506101c96101b5366004610d3a565b5f6020819052908152604090205460ff1681565b60405160ff90911681526020016100ec565b3480156101e6575f80fd5b506100a36101f5366004610eb6565b61076f565b348015610205575f80fd5b506100a3610214366004610e32565b610820565b348015610224575f80fd5b5061015b610233366004610d3a565b610916565b61027161026c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b610b3d565b565b604051631f44bb2560e01b8152600481018290523090631f44bb25906024016020604051808303815f875af11580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d29190610f1a565b6001600160a01b0316336001600160a01b031614610302576040516282b42960e81b815260040160405180910390fd5b5f818152602081905260409020805460ff191660031790556103213090565b6001600160a01b031663d1a01520826040518263ffffffff1660e01b815260040161034e91815260200190565b5f604051808303815f87803b158015610365575f80fd5b505af1158015610377573d5f803e3d5ffd5b5050505050565b5f8381526020819052604090205460ff16600114158061047257506040805130606081901b6bffffffffffffffffffffffff191660208084019190915260348084018890528451808503909101815260548401948590528051910120633b98c1d160e21b9093529163ee630744916103fd919086908690605801610f68565b602060405180830381865afa158015610418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043c9190610f1a565b6001600160a01b03167f000000000000000000000000e1e01dc3e6527d2fef00164f4e938a39e6628b396001600160a01b031614155b806104ed5750604051631f44bb2560e01b8152600481018490523090631f44bb25906024016020604051808303815f875af11580156104b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d79190610f1a565b6001600160a01b0316336001600160a01b031614155b1561050a576040516282b42960e81b815260040160405180910390fd5b5f8381526020819052604090819020805460ff19166002179055517f41fe025400223d5e24141e6cef77fea9466ef25000e864c6799111c5a56eb55d906105549085815260200190565b60405180910390a16040518381527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1505050565b5f6105c67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b6060604051806103e001604052806103be81526020016114036103be9139905090565b600180546105fb90610f81565b80601f016020809104026020016040519081016040528092919081815260200182805461062790610f81565b80156106725780601f1061064957610100808354040283529160200191610672565b820191905f5260205f20905b81548152906001019060200180831161065557829003601f168201915b505050505081565b5f8581526020819052604090205460ff161515806106ce57506106cc33308787876040516020016106af959493929190610fb9565b604051602081830303815290604052805190602001208383610b60565b155b156106eb576040516282b42960e81b815260040160405180910390fd5b5f858152602081905260409020805460ff1916600117905561070a3090565b6001600160a01b0316637a66e596338787876040518563ffffffff1660e01b815260040161073b9493929190610ffb565b5f604051808303815f87803b158015610752575f80fd5b505af1158015610764573d5f803e3d5ffd5b505050505050505050565b30604051632abb908560e11b81523360048201526001600160a01b039190911690635577210a906024015f6040518083038186803b1580156107af575f80fd5b505afa1580156107c1573d5f803e3d5ffd5b5050505081156107da5760016107d884868361108d565b505b801561081a577f8bcd33bdc33e3bcc8a7478b67302b3905987363bfc8d2f03d061a482d858795f8484604051610811929190611148565b60405180910390a15b50505050565b5f8581526020819052604090205460ff1660021415806108575750610855308686866040516020016106af9493929190611163565b155b806108d25750604051631f44bb2560e01b8152600481018690523090631f44bb25906024016020604051808303815f875af1158015610898573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bc9190610f1a565b6001600160a01b0316336001600160a01b031614155b156108ef576040516282b42960e81b815260040160405180910390fd5b6040516358ee717360e01b815230906358ee71739061073b90889088908890600401610f68565b5f8181526020819052604090205460609060ff1680158061093a57508060ff166003145b1561095f57604051637e27328960e01b81526004810184905260240160405180910390fd5b610b168160ff166002146109925760405180604001604052806007815260200166457373656e636560c81b8152506109b9565b6040518060400160405280600d81526020016c416374757320457373656e646960981b8152505b60405163348051d760e11b8152600481018690523090636900a3ae906024015f60405180830381865afa1580156109f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a199190810190611195565b60018460ff16600214610a8d57306001600160a01b0316635c7abcc26040518163ffffffff1660e01b81526004015f60405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a889190810190611195565b610aed565b60405163f5dbba9d60e01b815260048101889052309063f5dbba9d906024015f60405180830381865afa158015610ac6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610aed9190810190611195565b604051602001610b009493929190611258565b6040516020818303038152906040526001610c41565b604051602001610b2691906113a3565b604051602081830303815290604052915050919050565b365f80375f80365f845af43d5f803e808015610b57573d5ff35b3d5ffd5b505050565b604051633b98c1d160e21b81525f90309081906324d7806c90829063ee63074490610b93908a908a908a90600401610f68565b602060405180830381865afa158015610bae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd29190610f1a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3891906113e7565b95945050505050565b6060610c4e83835f610c55565b9392505050565b606083518015610d32576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083018181015b6003880197508751603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f811651600353505f518252600482019150808210610cc557602001604052613d3d60f01b60038406600204808303919091525f8615159091029182900352900382525b509392505050565b5f60208284031215610d4a575f80fd5b5035919050565b5f8083601f840112610d61575f80fd5b50813567ffffffffffffffff811115610d78575f80fd5b602083019150836020828501011115610d8f575f80fd5b9250929050565b5f805f60408486031215610da8575f80fd5b83359250602084013567ffffffffffffffff811115610dc5575f80fd5b610dd186828701610d51565b9497909650939450505050565b5f5b83811015610df8578181015183820152602001610de0565b50505f910152565b602081525f8251806020840152610e1e816040850160208701610dde565b601f01601f19169190910160400192915050565b5f805f805f60608688031215610e46575f80fd5b85359450602086013567ffffffffffffffff80821115610e64575f80fd5b610e7089838a01610d51565b90965094506040880135915080821115610e88575f80fd5b50610e9588828901610d51565b969995985093965092949392505050565b8015158114610eb3575f80fd5b50565b5f805f8060608587031215610ec9575f80fd5b843567ffffffffffffffff811115610edf575f80fd5b610eeb87828801610d51565b9095509350506020850135610eff81610ea6565b91506040850135610f0f81610ea6565b939692955090935050565b5f60208284031215610f2a575f80fd5b81516001600160a01b0381168114610c4e575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b838152604060208201525f610c38604083018486610f40565b600181811c90821680610f9557607f821691505b602082108103610fb357634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6bffffffffffffffffffffffff19808860601b168352808760601b1660148401525084602883015282846048840137505f9101604801908152949350505050565b60018060a01b0385168152836020820152606060408201525f611022606083018486610f40565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b601f821115610b5b575f81815260208120601f850160051c810160208610156110665750805b601f850160051c820191505b8181101561108557828155600101611072565b505050505050565b67ffffffffffffffff8311156110a5576110a561102c565b6110b9836110b38354610f81565b83611040565b5f601f8411600181146110ea575f85156110d35750838201355b5f19600387901b1c1916600186901b178355610377565b5f83815260209020601f19861690835b8281101561111a57868501358255602094850194600190920191016110fa565b5086821015611136575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f61115b602083018486610f40565b949350505050565b6bffffffffffffffffffffffff198560601b168152836014820152818360348301375f91016034019081529392505050565b5f602082840312156111a5575f80fd5b815167ffffffffffffffff808211156111bc575f80fd5b818401915084601f8301126111cf575f80fd5b8151818111156111e1576111e161102c565b604051601f8201601f19908116603f011681019083821181831017156112095761120961102c565b81604052828152876020848701011115611221575f80fd5b611232836020830160208801610dde565b979650505050505050565b5f815161124e818560208601610dde565b9290920192915050565b683d913730b6b2911d1160b91b815284515f90602061127d8260098601838b01610dde565b61202360f01b600992850192830152865161129e81600b8501848b01610dde565b61088b60f21b600b93909101928301527f22637265617465645f6279223a22307847222c226465736372697074696f6e22600d830152611d1160f11b602d8301528554602f905f906112ef81610f81565b6001828116801561130757600181146113205761134d565b60ff19841688870152821515830288018601945061134d565b8b5f52865f205f5b848110156113435781548a8201890152908301908801611328565b5050858389010194505b5050505061139561138761138161136c8461088b60f21b815260020190565b681134b6b0b3b2911d1160b91b815260090190565b8961123d565b61227d60f01b815260020190565b9a9950505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f82516113da81601d850160208701610dde565b91909101601d0192915050565b5f602082840312156113f7575f80fd5b8151610c4e81610ea656fe646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423462577875637a30696148523063446f764c336433647935334d793576636d63764d6a41774d43397a646d636949484e306557786c50534a6959574e725a334a766457356b4f694e6d4e5759315a6a556949485a705a58644362336739496a41674d4341784d444177494445774d444169506a786b5a575a7a506a786d615778305a58496761575139496d4569506a786d5a565231636d4a316247567559325567596d467a5a555a795a5846315a57356a655430694d4334774d44417849444569494735316255396a644746325a584d39496a4d6949484e6c5a575139496a63774d534976506a786d5a553176636e426f623278765a336b676233426c636d463062334939496d5270624746305a534967636d466b6158567a505349304c6a55694c7a34385a6d564561584e776247466a5a57316c626e524e5958416761573439496c4e7664584a6a5a5564795958426f61574d6949484e6a5957786c505349784e5441774969423451326868626d356c62464e6c6247566a6447397950534a484969423551326868626d356c62464e6c6247566a6447397950534a434969382b5043396d615778305a58492b5043396b5a575a7a506a78795a574e30494864705a48526f505349784d4441774969426f5a576c6e61485139496a45774d44416949475a706247773949694e6d4e5759315a6a55694c7a3438636d566a6443423361575230614430694e5441774969426f5a576c6e61485139496a55774d434967654430694d6a557749694235505349794e54416949475a706247773949694e6c4d4755775a5441694c7a3438636d566a6443423361575230614430694e5441774969426f5a576c6e61485139496a55774d434967654430694d6a557749694235505349794e54416949475a706247773949694e6d4e5759315a6a556949484e30636d39725a543069497a59774e6a41324d434967633352796232746c4c5864705a48526f505349304d4349675a6d6c736447567950534a31636d776f493245704969382b50484a6c5933516764326c6b64476739496a49774d434967614756705a326830505349314d44416949486739496a55344d434967655430694d6a55774969426d6157787350534a756232356c4969427a64484a766132553949694e6d5a6d596949484e30636d39725a53316b59584e6f59584a7959586b39496a496949484e30636d39725a53313361575230614430694e44416949475a706248526c636a306964584a734b434e684b534976506a777663335a6e50673d3da2646970667358221220ce20a4b437f534691af2940889b9d3276ab283feb9f0dc052cb1bf2e4a0cec7c64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000faf29f632d24c018fbb043ea21f1d6c28657108a
-----Decoded View---------------
Arg [0] : ERC721BaselineImplementation (address): 0xfAf29F632D24c018fBB043EA21f1D6c28657108A
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000faf29f632d24c018fbb043ea21f1d6c28657108a
Deployed Bytecode Sourcemap
1343:6346:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2649:11:0;:9;:11::i;:::-;1343:6346:3;1518:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;178:32:7;;;160:51;;148:2;133:18;1518:45:3;;;;;;;;6760:211;;;;;;;;;;-1:-1:-1;6760:211:3;;;;;:::i;:::-;;:::i;3892:449::-;;;;;;;;;;-1:-1:-1;3892:449:3;;;;;:::i;:::-;;:::i;1801:93:4:-;;;;;;;;;;;;;:::i;2455:1035:3:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1891:25::-;;;;;;;;;;;;;:::i;6168:472::-;;;;;;;;;;-1:-1:-1;6168:472:3;;;;;:::i;:::-;;:::i;1779:57::-;;;;;;;;;;-1:-1:-1;1779:57:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2860:4:7;2848:17;;;2830:36;;2818:2;2803:18;1779:57:3;2688:184:7;7249:235:3;;;;;;;;;;-1:-1:-1;7249:235:3;;;;;:::i;:::-;;:::i;5474:417::-;;;;;;;;;;-1:-1:-1;5474:417:3;;;;;:::i;:::-;;:::i;4487:602::-;;;;;;;;;;-1:-1:-1;4487:602:3;;;;;:::i;:::-;;:::i;2323:83:0:-;2371:28;2381:17;1734:20:4;1772;-1:-1:-1;;;;;1772:20:4;;1573:224;2381:17:0;2371:9;:28::i;:::-;2323:83::o;6760:211:3:-;6831:29;;-1:-1:-1;;;6831:29:3;;;;;3825:25:7;;;2086:4:4;;6831:20:3;;3798:18:7;;6831:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6817:43:3;:10;-1:-1:-1;;;;;6817:43:3;;6806:98;;6874:30;;-1:-1:-1;;;6874:30:3;;;;;;;;;;;6806:98;6911:10;:19;;;;;;;;;;:23;;-1:-1:-1;;6911:23:3;6933:1;6911:23;;;6940:10;2086:4:4;;1989:108;6940:10:3;-1:-1:-1;;;;;6940:17:3;;6958:7;6940:26;;;;;;;;;;;;;3825:25:7;;3813:2;3798:18;;3679:177;6940:26:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6760:211;:::o;3892:449::-;3983:10;:19;;;;;;;;;;;;;;:24;;;:159;;-1:-1:-1;4074:40:3;;;2086:4:4;4333:2:7;4329:15;;;-1:-1:-1;;4325:53:7;4074:40:3;;;;4313:66:7;;;;4395:12;;;;4388:28;;;4074:40:3;;;;;;;;;;4432:12:7;;;4074:40:3;;;;4064:51;;;;;-1:-1:-1;;;4028:114:3;;;2086:4:4;4028:26:3;;:114;;4064:51;4125:9;;;;4028:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4017:125:3;:7;-1:-1:-1;;;;;4017:125:3;;;3983:159;:212;;;-1:-1:-1;4166:29:3;;-1:-1:-1;;;4166:29:3;;;;;3825:25:7;;;2086:4:4;;4166:20:3;;3798:18:7;;4166:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4152:43:3;:10;-1:-1:-1;;;;;4152:43:3;;;3983:212;3972:267;;;4209:30;;-1:-1:-1;;;4209:30:3;;;;;;;;;;;3972:267;4246:10;:19;;;;;;;;;;;;:23;;-1:-1:-1;;4246:23:3;4268:1;4246:23;;;4281:21;;;;;4257:7;3825:25:7;;3813:2;3798:18;;3679:177;4281:21:3;;;;;;;;4313:23;;3825:25:7;;;4313:23:3;;3813:2:7;3798:18;4313:23:3;;;;;;;3892:449;;;:::o;1801:93:4:-;1850:7;1872:17;1734:20;1772;-1:-1:-1;;;;;1772:20:4;;1573:224;1872:17;1865:24;;1801:93;:::o;2455:1035:3:-;2497:13;2518:967;;;;;;;;;;;;;;;;;;;2455:1035;:::o;1891:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6168:472::-;6294:1;6272:19;;;;;;;;;;;;;:23;;;:240;;;6314:198;6388:10;6420:4;6439:7;6460:3;;6358:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6337:148;;;;;;6495:9;;6314:13;:198::i;:::-;6305:207;6272:240;6261:295;;;6526:30;;-1:-1:-1;;;6526:30:3;;;;;;;;;;;6261:295;6563:10;:19;;;;;;;;;;:23;;-1:-1:-1;;6563:23:3;6585:1;6563:23;;;6592:10;2086:4:4;;1989:108;6592:10:3;-1:-1:-1;;;;;6592:17:3;;6610:10;6622:7;6631:3;;6592:43;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6168:472;;;;;:::o;7249:235::-;2086:4:4;7338:35:3;;-1:-1:-1;;;7338:35:3;;7362:10;7338:35;;;160:51:7;-1:-1:-1;;;;;7338:23:3;;;;;;;133:18:7;;7338:35:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7383:5;7379:44;;;7398:11;:18;7412:4;;7398:11;:18;:::i;:::-;;7379:44;7432:9;7428:52;;;7456:17;7468:4;;7456:17;;;;;;;:::i;:::-;;;;;;;;7428:52;7249:235;;;;:::o;5474:417::-;5595:10;:19;;;;;;;;;;;;;5618:1;5595:24;;;:149;;;5638:106;5696:4;5703:7;5712:3;;5671:45;;;;;;;;;;;:::i;5638:106::-;5629:115;5595:149;:202;;;-1:-1:-1;5768:29:3;;-1:-1:-1;;;5768:29:3;;;;;3825:25:7;;;2086:4:4;;5768:20:3;;3798:18:7;;5768:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5754:43:3;:10;-1:-1:-1;;;;;5754:43:3;;;5595:202;5584:257;;;5811:30;;-1:-1:-1;;;5811:30:3;;;;;;;;;;;5584:257;5848:38;;-1:-1:-1;;;5848:38:3;;2086:4:4;;5848:24:3;;:38;;5873:7;;5882:3;;;;5848:38;;;:::i;4487:602::-;4566:11;4580:19;;;;;;;;;;;4545:13;;4580:19;;4609:10;;;:24;;;4623:5;:10;;4632:1;4623:10;4609:24;4605:68;;;4642:31;;-1:-1:-1;;;4642:31:3;;;;;3825:25:7;;;3798:18;;4642:31:3;;;;;;;4605:68;4747:331;4811:5;:10;;4820:1;4811:10;:39;;;;;;;;;;;;;;;-1:-1:-1;;;4811:39:3;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4811:39:3;;;;4857:28;;-1:-1:-1;;;4857:28:3;;;;;3825:25:7;;;2086:4:4;;4857:19:3;;3798:18:7;;4857:28:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4857:28:3;;;;;;;;;;;;:::i;:::-;4939:11;4980:5;:10;;4989:1;4980:10;:60;;5026:4;-1:-1:-1;;;;;5026:12:3;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5026:14:3;;;;;;;;;;;;:::i;:::-;4980:60;;;4993:30;;-1:-1:-1;;;4993:30:3;;;;;3825:25:7;;;2086:4:4;;4993:21:3;;3798:18:7;;4993:30:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4993:30:3;;;;;;;;;;;;:::i;:::-;4770:286;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5066:4;4747:13;:331::i;:::-;4687:397;;;;;;;;:::i;:::-;;;;;;;;;;;;;4680:404;;;4487:602;;;:::o;949:895:0:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27;1608:220;;;949:895;:::o;7488:199:3:-;7642:39;;-1:-1:-1;;;7642:39:3;;7571:4;;2086::4;;;;7629:12:3;;2086:4:4;;7642:20:3;;:39;;7663:6;;7671:9;;;;7642:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7629:53;;-1:-1:-1;;;;;;7629:53:3;;;;;;;-1:-1:-1;;;;;178:32:7;;;7629:53:3;;;160:51:7;133:18;;7629:53:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7622:60;7488:199;-1:-1:-1;;;;;7488:199:3:o;3684:178:6:-;3781:20;3826:29;3833:4;3839:8;3849:5;3826:6;:29::i;:::-;3817:38;3684:178;-1:-1:-1;;;3684:178:6:o;722:2557::-;835:20;961:4;955:11;983:10;980:2283;;;1183:1;1179;1167:10;1163:18;1159:26;1156:1;1152:34;1294:4;1288:11;1278:21;;1664:34;1658:4;1651:48;1791:6;1780:8;1773:16;1769:29;1733:34;1729:70;1723:4;1716:84;1906:4;1898:6;1894:17;1948:13;1943:3;1939:23;2038:623;2090:1;2084:4;2080:12;2072:20;;2152:4;2146:11;2292:4;2284:5;2280:2;2276:14;2272:25;2266:32;2263:1;2255:44;2357:4;2349:5;2345:2;2341:14;2337:25;2331:32;2328:1;2320:44;2421:4;2413:5;2410:1;2406:13;2402:24;2396:31;2393:1;2385:43;2477:4;2470:5;2466:16;2460:23;2457:1;2449:35;;2523:4;2517:11;2512:3;2505:24;2567:1;2562:3;2558:11;2551:18;;2628:3;2623;2620:12;2038:623;2610:33;2700:4;2691:14;2685:4;2678:28;-1:-1:-1;;;2845:1:6;2829:18;;2826:1;2822:26;2956:11;;;2949:37;;;;3134:1;3075:17;;3068:25;3064:33;;;3121:11;;;;3114:22;3206:21;;3191:37;;980:2283;;722:2557;;;;;:::o;222:180:7:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:7;;222:180;-1:-1:-1;222:180:7:o;407:347::-;458:8;468:6;522:3;515:4;507:6;503:17;499:27;489:55;;540:1;537;530:12;489:55;-1:-1:-1;563:20:7;;606:18;595:30;;592:50;;;638:1;635;628:12;592:50;675:4;667:6;663:17;651:29;;727:3;720:4;711:6;703;699:19;695:30;692:39;689:59;;;744:1;741;734:12;689:59;407:347;;;;;:::o;759:477::-;838:6;846;854;907:2;895:9;886:7;882:23;878:32;875:52;;;923:1;920;913:12;875:52;959:9;946:23;936:33;;1020:2;1009:9;1005:18;992:32;1047:18;1039:6;1036:30;1033:50;;;1079:1;1076;1069:12;1033:50;1118:58;1168:7;1159:6;1148:9;1144:22;1118:58;:::i;:::-;759:477;;1195:8;;-1:-1:-1;1092:84:7;;-1:-1:-1;;;;759:477:7:o;1241:250::-;1326:1;1336:113;1350:6;1347:1;1344:13;1336:113;;;1426:11;;;1420:18;1407:11;;;1400:39;1372:2;1365:10;1336:113;;;-1:-1:-1;;1483:1:7;1465:16;;1458:27;1241:250::o;1496:396::-;1645:2;1634:9;1627:21;1608:4;1677:6;1671:13;1720:6;1715:2;1704:9;1700:18;1693:34;1736:79;1808:6;1803:2;1792:9;1788:18;1783:2;1775:6;1771:15;1736:79;:::i;:::-;1876:2;1855:15;-1:-1:-1;;1851:29:7;1836:45;;;;1883:2;1832:54;;1496:396;-1:-1:-1;;1496:396:7:o;1897:786::-;1997:6;2005;2013;2021;2029;2082:2;2070:9;2061:7;2057:23;2053:32;2050:52;;;2098:1;2095;2088:12;2050:52;2134:9;2121:23;2111:33;;2195:2;2184:9;2180:18;2167:32;2218:18;2259:2;2251:6;2248:14;2245:34;;;2275:1;2272;2265:12;2245:34;2314:58;2364:7;2355:6;2344:9;2340:22;2314:58;:::i;:::-;2391:8;;-1:-1:-1;2288:84:7;-1:-1:-1;2479:2:7;2464:18;;2451:32;;-1:-1:-1;2495:16:7;;;2492:36;;;2524:1;2521;2514:12;2492:36;;2563:60;2615:7;2604:8;2593:9;2589:24;2563:60;:::i;:::-;1897:786;;;;-1:-1:-1;1897:786:7;;-1:-1:-1;2642:8:7;;2537:86;1897:786;-1:-1:-1;;;1897:786:7:o;2877:118::-;2963:5;2956:13;2949:21;2942:5;2939:32;2929:60;;2985:1;2982;2975:12;2929:60;2877:118;:::o;3000:674::-;3083:6;3091;3099;3107;3160:2;3148:9;3139:7;3135:23;3131:32;3128:52;;;3176:1;3173;3166:12;3128:52;3216:9;3203:23;3249:18;3241:6;3238:30;3235:50;;;3281:1;3278;3271:12;3235:50;3320:58;3370:7;3361:6;3350:9;3346:22;3320:58;:::i;:::-;3397:8;;-1:-1:-1;3294:84:7;-1:-1:-1;;3482:2:7;3467:18;;3454:32;3495:28;3454:32;3495:28;:::i;:::-;3542:5;-1:-1:-1;3599:2:7;3584:18;;3571:32;3612:30;3571:32;3612:30;:::i;:::-;3000:674;;;;-1:-1:-1;3000:674:7;;-1:-1:-1;;3000:674:7:o;3861:290::-;3931:6;3984:2;3972:9;3963:7;3959:23;3955:32;3952:52;;;4000:1;3997;3990:12;3952:52;4026:16;;-1:-1:-1;;;;;4071:31:7;;4061:42;;4051:70;;4117:1;4114;4107:12;4455:266;4543:6;4538:3;4531:19;4595:6;4588:5;4581:4;4576:3;4572:14;4559:43;-1:-1:-1;4647:1:7;4622:16;;;4640:4;4618:27;;;4611:38;;;;4703:2;4682:15;;;-1:-1:-1;;4678:29:7;4669:39;;;4665:50;;4455:266::o;4726:315::-;4911:6;4900:9;4893:25;4954:2;4949;4938:9;4934:18;4927:30;4874:4;4974:61;5031:2;5020:9;5016:18;5008:6;5000;4974:61;:::i;5046:380::-;5125:1;5121:12;;;;5168;;;5189:61;;5243:4;5235:6;5231:17;5221:27;;5189:61;5296:2;5288:6;5285:14;5265:18;5262:38;5259:161;;5342:10;5337:3;5333:20;5330:1;5323:31;5377:4;5374:1;5367:15;5405:4;5402:1;5395:15;5259:161;;5046:380;;;:::o;5431:563::-;5656:3;5688:26;5684:31;5757:2;5748:6;5744:2;5740:15;5736:24;5731:3;5724:37;5812:2;5803:6;5799:2;5795:15;5791:24;5786:2;5781:3;5777:12;5770:46;;5846:6;5841:2;5836:3;5832:12;5825:28;5897:6;5889;5884:2;5879:3;5875:12;5862:42;-1:-1:-1;5968:1:7;5927:16;;5945:2;5923:25;5957:13;;;5923:25;5431:563;-1:-1:-1;;;;5431:563:7:o;5999:414::-;6243:1;6239;6234:3;6230:11;6226:19;6218:6;6214:32;6203:9;6196:51;6283:6;6278:2;6267:9;6263:18;6256:34;6326:2;6321;6310:9;6306:18;6299:30;6177:4;6346:61;6403:2;6392:9;6388:18;6380:6;6372;6346:61;:::i;:::-;6338:69;5999:414;-1:-1:-1;;;;;;5999:414:7:o;6418:127::-;6479:10;6474:3;6470:20;6467:1;6460:31;6510:4;6507:1;6500:15;6534:4;6531:1;6524:15;6676:545;6778:2;6773:3;6770:11;6767:448;;;6814:1;6839:5;6835:2;6828:17;6884:4;6880:2;6870:19;6954:2;6942:10;6938:19;6935:1;6931:27;6925:4;6921:38;6990:4;6978:10;6975:20;6972:47;;;-1:-1:-1;7013:4:7;6972:47;7068:2;7063:3;7059:12;7056:1;7052:20;7046:4;7042:31;7032:41;;7123:82;7141:2;7134:5;7131:13;7123:82;;;7186:17;;;7167:1;7156:13;7123:82;;;7127:3;;;6676:545;;;:::o;7397:1206::-;7521:18;7516:3;7513:27;7510:53;;;7543:18;;:::i;:::-;7572:94;7662:3;7622:38;7654:4;7648:11;7622:38;:::i;:::-;7616:4;7572:94;:::i;:::-;7692:1;7717:2;7712:3;7709:11;7734:1;7729:616;;;;8389:1;8406:3;8403:93;;;-1:-1:-1;8462:19:7;;;8449:33;8403:93;-1:-1:-1;;7354:1:7;7350:11;;;7346:24;7342:29;7332:40;7378:1;7374:11;;;7329:57;8509:78;;7702:895;;7729:616;6623:1;6616:14;;;6660:4;6647:18;;-1:-1:-1;;7765:17:7;;;7866:9;7888:229;7902:7;7899:1;7896:14;7888:229;;;7991:19;;;7978:33;7963:49;;8098:4;8083:20;;;;8051:1;8039:14;;;;7918:12;7888:229;;;7892:3;8145;8136:7;8133:16;8130:159;;;8269:1;8265:6;8259:3;8253;8250:1;8246:11;8242:21;8238:34;8234:39;8221:9;8216:3;8212:19;8199:33;8195:79;8187:6;8180:95;8130:159;;;8332:1;8326:3;8323:1;8319:11;8315:19;8309:4;8302:33;7702:895;;7397:1206;;;:::o;8608:246::-;8767:2;8756:9;8749:21;8730:4;8787:61;8844:2;8833:9;8829:18;8821:6;8813;8787:61;:::i;:::-;8779:69;8608:246;-1:-1:-1;;;;8608:246:7:o;8859:459::-;9111:26;9107:31;9098:6;9094:2;9090:15;9086:53;9081:3;9074:66;9170:6;9165:2;9160:3;9156:12;9149:28;9221:6;9213;9208:2;9203:3;9199:12;9186:42;9056:3;9251:16;;9269:2;9247:25;9281:13;;;9247:25;8859:459;-1:-1:-1;;;8859:459:7:o;9645:897::-;9725:6;9778:2;9766:9;9757:7;9753:23;9749:32;9746:52;;;9794:1;9791;9784:12;9746:52;9827:9;9821:16;9856:18;9897:2;9889:6;9886:14;9883:34;;;9913:1;9910;9903:12;9883:34;9951:6;9940:9;9936:22;9926:32;;9996:7;9989:4;9985:2;9981:13;9977:27;9967:55;;10018:1;10015;10008:12;9967:55;10047:2;10041:9;10069:2;10065;10062:10;10059:36;;;10075:18;;:::i;:::-;10150:2;10144:9;10118:2;10204:13;;-1:-1:-1;;10200:22:7;;;10224:2;10196:31;10192:40;10180:53;;;10248:18;;;10268:22;;;10245:46;10242:72;;;10294:18;;:::i;:::-;10334:10;10330:2;10323:22;10369:2;10361:6;10354:18;10409:7;10404:2;10399;10395;10391:11;10387:20;10384:33;10381:53;;;10430:1;10427;10420:12;10381:53;10443:68;10508:2;10503;10495:6;10491:15;10486:2;10482;10478:11;10443:68;:::i;:::-;10530:6;9645:897;-1:-1:-1;;;;;;;9645:897:7:o;10547:198::-;10589:3;10627:5;10621:12;10642:65;10700:6;10695:3;10688:4;10681:5;10677:16;10642:65;:::i;:::-;10723:16;;;;;10547:198;-1:-1:-1;;10547:198:7:o;11151:2445::-;-1:-1:-1;;;12148:43:7;;12214:13;;12130:3;;12246:4;12259:72;12214:13;12320:1;12311:11;;12294:15;;;12259:72;:::i;:::-;-1:-1:-1;;;12390:1:7;12350:16;;;12382:10;;;12375:24;12424:13;;12446:74;12424:13;12506:2;12498:11;;12481:15;;;12446:74;:::i;:::-;-1:-1:-1;;;12580:2:7;12539:17;;;;12572:11;;;12565:35;12629:66;12624:2;12616:11;;12609:87;-1:-1:-1;;;12720:2:7;12712:11;;12705:35;12808:13;;12759:2;;-1:-1:-1;;12846:36:7;12808:13;12846:36;:::i;:::-;12901:1;12918:18;;;12945:153;;;;13112:1;13107:349;;;;12911:545;;12945:153;-1:-1:-1;;12986:24:7;;12973:11;;;12966:45;13064:16;;13057:24;13043:39;;13035:48;;13031:57;;;-1:-1:-1;12945:153:7;;13107:349;13138:6;13135:1;13128:17;13186:2;13183:1;13173:16;13211:1;13225:175;13239:8;13236:1;13233:15;13225:175;;;13327:14;;13310:10;;;13306:19;;13299:43;13370:16;;;;13256:10;;13225:175;;;13229:3;;13443:2;13432:8;13428:2;13424:17;13420:26;13413:33;;12911:545;;;;;13472:118;13502:87;13528:60;13558:29;13583:3;-1:-1:-1;;;10810:27:7;;10862:1;10853:11;;10750:120;13558:29;-1:-1:-1;;;10940:43:7;;11008:1;10999:11;;10875:141;13528:60;13520:6;13502:87;:::i;:::-;-1:-1:-1;;;11086:27:7;;11138:1;11129:11;;11021:125;13472:118;13465:125;11151:2445;-1:-1:-1;;;;;;;;;;11151:2445:7:o;13601:451::-;13853:31;13848:3;13841:44;13823:3;13914:6;13908:13;13930:75;13998:6;13993:2;13988:3;13984:12;13977:4;13969:6;13965:17;13930:75;:::i;:::-;14025:16;;;;14043:2;14021:25;;13601:451;-1:-1:-1;;13601:451:7:o;14057:245::-;14124:6;14177:2;14165:9;14156:7;14152:23;14148:32;14145:52;;;14193:1;14190;14183:12;14145:52;14225:9;14219:16;14244:28;14266:5;14244:28;:::i
Swarm Source
ipfs://ce20a4b437f534691af2940889b9d3276ab283feb9f0dc052cb1bf2e4a0cec7c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.