Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Svg Renderer | 18094311 | 367 days ago | IN | 0 ETH | 0.00040236 | ||||
Set Archival Met... | 18045717 | 374 days ago | IN | 0 ETH | 0.00758733 | ||||
Create Art Piece | 18045704 | 374 days ago | IN | 0 ETH | 0.03962789 | ||||
Create Art Piece | 18045703 | 374 days ago | IN | 0 ETH | 0.03268898 | ||||
Create Art Piece | 18045702 | 374 days ago | IN | 0 ETH | 0.02994135 | ||||
Create Art Piece | 18045701 | 374 days ago | IN | 0 ETH | 0.05089811 | ||||
Create Art Piece | 18045700 | 374 days ago | IN | 0 ETH | 0.05760827 | ||||
Set Svg Renderer | 18045685 | 374 days ago | IN | 0 ETH | 0.00045226 | ||||
0x60a06040 | 18045669 | 374 days ago | IN | 0 ETH | 0.03237101 |
Loading...
Loading
Contract Name:
PixelPioneerArtwork
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; // Local References import './PixelPioneerArtworkBase.sol'; /** * @title PixelPioneerArtwork . * .+. * -: .: :+. * -- :=. :+ -= . .. .:-: * .+. -- :+ =- .:. :++-. .++=: .. :==:-++==: * =- .=: := +. -=::.:. -. .==..+=-+= =+:+-.=====: -+: =+:.-+. * =-:=- :. ==----+ :+ =+:.-+- .. ++..++++: =++=-+: -+: .++=--=++=-++. * -=--==-. :. +-::.=- +- .=-+:=::+. -+= .:-. =+. .+= :+=.=+: -+: +=:::=+..-+: * -- .-- .+. .+: ==-=: -+: ===:.======-::+- =+. :+: =+:-+- :+= .+= .+--+-. * .- .+. :+. :. :+. .- . .-=-. =+. :==-=+=:. * +: .+ :- .. .. * * On-Chain Artwork */ contract PixelPioneerArtwork is PixelPioneerArtworkBase { uint256 private constant maxNumberOfArtPieces = 5; // Capped at 5 total pieces. constructor() ArtDatastoreManager(maxNumberOfArtPieces) { // Implementation version: v1.0.0 } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; /** * @title OwnableDeferral * @author @NiftyMike | @NFTCulture * @dev Implements checks for contract admin operations. Will be Backed by * OZ Ownable. * * This contract is helpful when a contract tree gets complicated, * and multiple contracts need to leverage Ownable. * * Sample Implementation: * * modifier isOwner() override(...) { * _isOwner(); * _; * } * * function _isOwner() internal view override(...) { * _checkOwner(); * } */ abstract contract OwnableDeferral { modifier isOwner() virtual; function _isOwner() internal view virtual; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; // OZ Libraries import '@openzeppelin/contracts/access/Ownable.sol'; // Local References import './OwnableDeferral.sol'; // Error Codes error CallerIsNotOwner(); /** * @title OwnableDeferralResolution * @author @NiftyMike | @NFTCulture * @dev Implements checks for contract admin (Owner) operations. Backed by OZ Ownable. * * Ownership is assigned to contract deployer wallet by default. * * NOTE: IMPORTANT - This resolution will work great in a simple inheritance situation, * however, if multiple inheritance is involved, it might not adequately satisfy * override (...) conditions. In those scenarios, this code should be used as a * starting point and then adjusted appropriately. */ contract OwnableDeferralResolution is Ownable, OwnableDeferral { modifier isOwner() override { _isOwner(); _; } function _isOwner() internal view override { // Same as _checkOwner() but using error code instead of a require statement. if (owner() != _msgSender()) revert CallerIsNotOwner(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; // Local References import '../../access/v2/OwnableDeferral.sol'; import './interfaces/IDynamicArt.sol'; // Error Codes error ArtPieceCountExceeded(); error ArtPieceDoesNotExist(); error ArtPieceAlreadyCreated(); error NullTokenType(); /** * @title ArtDatastoreManager * @author @NiftyMike | @NFTCulture * @dev A class for managing the datastore that holds Art pieces as either strings or bytes. */ abstract contract ArtDatastoreManager is IDynamicArtV1, OwnableDeferral { // Storage for Token Attribute Definitions mapping(uint256 => DynamicArtV1) private _artObjects; uint64[] private _artPieceTokenTypes; uint256 private immutable _maxNumberOfArtPieces; constructor(uint256 __maxNumberOfArtPieces) { _maxNumberOfArtPieces = __maxNumberOfArtPieces; } function createArtPieces( uint256[] calldata tokenTypes, string[] calldata stringAssets, string[] calldata backgrounds, bytes[] calldata bytesAssets ) external isOwner { require( tokenTypes.length == stringAssets.length && tokenTypes.length == backgrounds.length && tokenTypes.length == bytesAssets.length, 'Invalid number of assets' ); uint256 idx; for (idx = 0; idx < tokenTypes.length; idx++) { _createArtPiece(tokenTypes[idx], stringAssets[idx], backgrounds[idx], bytesAssets[idx]); } } function createArtPiece( uint256 tokenType, string calldata stringAsset, string calldata backgroundColor, bytes calldata bytesAsset ) external isOwner { _createArtPiece(tokenType, stringAsset, backgroundColor, bytesAsset); } function updateArtPiece( uint256 tokenType, string calldata stringAsset, string calldata backgroundColor, bytes calldata bytesAsset ) external isOwner { if (tokenType == 0) revert NullTokenType(); DynamicArtV1 memory current = _artObjects[tokenType]; if (current.tokenType == 0) revert ArtPieceDoesNotExist(); current.tokenType = tokenType; if (bytes(stringAsset).length > 0) { current.encodedArt = stringAsset; } if (bytes(backgroundColor).length > 0) { current.backgroundColor = backgroundColor; } if (bytesAsset.length > 0) { current.encodedArtBytes = bytesAsset; } _artObjects[tokenType] = current; } function _createArtPiece( uint256 tokenType, string calldata stringAsset, string calldata backgroundColor, bytes calldata bytesAsset ) internal { if (tokenType == 0) revert NullTokenType(); if (_maxNumberOfArtPieces > 0 && _artPieceTokenTypes.length + 1 > _maxNumberOfArtPieces) revert ArtPieceCountExceeded(); if (_artObjects[tokenType].tokenType > 0) revert ArtPieceAlreadyCreated(); DynamicArtV1 memory current; current.tokenType = tokenType; current.encodedArt = stringAsset; current.backgroundColor = backgroundColor; current.encodedArtBytes = bytesAsset; _artObjects[tokenType] = current; _artPieceTokenTypes.push(uint64(tokenType)); } function getArtObject(uint256 tokenType) external view returns (DynamicArtV1 memory) { return _getArtObject(tokenType); } function _getArtObject(uint256 tokenType) internal view returns (DynamicArtV1 memory) { return _artObjects[tokenType]; } function getArtPieceTokenTypes() external view returns (uint64[] memory) { return _getArtPieceTokenTypes(); } function _getArtPieceTokenTypes() internal view returns (uint64[] memory) { return _artPieceTokenTypes; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; /** * @title IChainNativeArtProducer * @author @NiftyMike | @NFTCulture * @dev Super thin interface definition for a contract that * produces art in a chain native way. */ interface IChainNativeArtProducer { /** * Given a token type, return a string that can be directly inserted into an * NFT metadata attribute such as image. * * @param tokenType type of the art piece */ function getArtAsString(uint256 tokenType) external view returns (string memory); /** * Given a token type, return a string that can be directly inserted into an * NFT metadata attribute such as animation_url. * * @param tokenType type of the art piece */ function getAnimationAsString(uint256 tokenType) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; /** * @title IDynamicArtV1 * @author @NFTMike | @NFTCulture * @dev Interface that defines the datastructure of on-chain artwork. */ interface IDynamicArtV1 { struct DynamicArtV1 { uint256 tokenType; string encodedArt; string backgroundColor; bytes encodedArtBytes; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /////////////////////////////////////////////////////////// // ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ // // ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ // // ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ // // ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ // // ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ // // ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ // /////////////////////////////////////////////////////////// /** * @title IScriptyStorageProvider * @author @NiftyMike | @NFTCulture * @dev An interface wrapper for a ScriptStorage contract, when we only need to read data from it. * @dev Special thanks to @0xthedude and @xtremetom for providing this library. * See: https://github.com/intartnft/scripty.sol */ interface IScriptyStorageProvider { /** * @notice Get the full script * @param name - Name given to the script. Eg: threejs.min.js_r148 * @param data - Arbitrary data. Not used by this contract. * @return script - Full script from merged chunks */ function getScript(string memory name, bytes memory data) external view returns (bytes memory script); /** * @notice Get script's chunk pointer list * @param name - Name given to the script. Eg: threejs.min.js_r148 * @return pointers - List of pointers */ function getScriptChunkPointers(string memory name) external view returns (address[] memory pointers); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @title ISVGConstructor * @author @NiftyMike | @NFTCulture * @dev A simple interface for rendering an SVG. */ interface ISVGConstructor { function constructFromPNG( bool hasBackground, string memory backgroundColor, string memory pngDataURI ) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.11; // OZ Libraries import '@openzeppelin/contracts/utils/Base64.sol'; // Local References import './ArtDatastoreManager.sol'; import './interfaces/ISVGConstructor.sol'; /** * @title PNGBackedSVGArt * @author @NiftyMike | @NFTCulture * @dev An on-chain contract that constructs a PNG backed SVG object. */ abstract contract PNGBackedSVGArt is ArtDatastoreManager { function _getSvgConstructor(uint256 tokenType) internal view virtual returns (ISVGConstructor svgConstructor); function _getSvgDataURI(uint256 tokenType) internal view returns (string memory) { DynamicArtV1 memory artObject = _getArtObject(tokenType); bool hasBackground = bytes(artObject.backgroundColor).length > 0; string memory onChainEncodedArt = _getArtObject(tokenType).encodedArt; string memory svg = _constructSvg( tokenType, hasBackground, artObject.backgroundColor, _convertBase64PngToDataURI(onChainEncodedArt) ); return _convertSvgToDataURI(svg); } function _getPngDataUri(uint256 tokenType) internal view returns (string memory) { string memory onChainEncodedArt = _getArtObject(tokenType).encodedArt; return _convertBase64PngToDataURI(onChainEncodedArt); } function _convertBase64PngToDataURI(string memory base64Png) internal pure returns (string memory) { return string.concat('data:image/png;base64,', base64Png); } function _convertSvgToDataURI(string memory svg) internal pure returns (string memory) { return string.concat('data:image/svg+xml;base64,', Base64.encode(bytes(svg))); } function _convertBytesToDataURI( bytes memory artBytes, string memory mimeType ) internal pure returns (string memory) { return string.concat('data:', mimeType, ';base64,', Base64.encode(artBytes)); } function _constructSvg( uint256 tokenType, bool hasBackground, string memory backgroundColor, string memory pngDataURI ) internal view virtual returns (string memory) { return _getSvgConstructor(tokenType).constructFromPNG(hasBackground, backgroundColor, pngDataURI); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol) pragma solidity ^0.8.0; /** * @dev Provides a set of functions to operate with Base64 strings. * * _Available since v4.5._ */ library Base64 { /** * @dev Base64 Encoding/Decoding Table */ string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /** * @dev Converts a `bytes` to its Bytes64 `string` representation. */ function encode(bytes memory data) internal pure returns (string memory) { /** * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol */ if (data.length == 0) return ""; // Loads the table into memory string memory table = _TABLE; // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter // and split into 4 numbers of 6 bits. // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up // - `data.length + 2` -> Round up // - `/ 3` -> Number of 3-bytes chunks // - `4 *` -> 4 characters for each chunk string memory result = new string(4 * ((data.length + 2) / 3)); /// @solidity memory-safe-assembly assembly { // Prepare the lookup table (skip the first "length" byte) let tablePtr := add(table, 1) // Prepare result pointer, jump over length let resultPtr := add(result, 32) // Run over the input, 3 bytes at a time for { let dataPtr := data let endPtr := add(data, mload(data)) } lt(dataPtr, endPtr) { } { // Advance 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // To write each character, shift the 3 bytes (18 bits) chunk // 4 times in blocks of 6 bits for each character (18, 12, 6, 0) // and apply logical AND with 0x3F which is the number of // the previous character in the ASCII table prior to the Base64 Table // The result is then added to the table to get the character to write, // and finally write it in the result pointer but with a left shift // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F)))) resultPtr := add(resultPtr, 1) // Advance } // When data `bytes` is not exactly 3 bytes long // it is padded with `=` characters at the end switch mod(mload(data), 3) case 1 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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.11; // NFTC Prerelease Contracts import '@nftculture/nftc-contracts-private/contracts/access/v2/OwnableDeferralResolution.sol'; import '@nftculture/nftc-contracts-private/contracts/metadata/v1/interfaces/IChainNativeArtProducer.sol'; import '@nftculture/nftc-contracts-private/contracts/metadata/v1/interfaces/IScriptyStorageProvider.sol'; import '@nftculture/nftc-contracts-private/contracts/metadata/v1/PNGBackedSVGArt.sol'; // Error Codes error UnrecognizedExtension(); /** * @title PixelPioneerArtworkBase * @author @NiftyMike | @NFTCulture * @dev This contract implements the NFTC IChainNativeArtProducer API, which means * it contains logic to return the contents of an NFT image / animation_url field * for a given NFT token type. * * In this particular implementation, the image approach is fully on-chain. The returned * value represents a SVG that is base64 encoded. The string representation can be copy * and pasted into a new browser tab to display the image. * * The SVGs constructed by this contract are backed by bitmaps stored as base64 encoded * PNG files. The PNG files are via transactions that are sent after the contract is * deployed. The maximum base64 string size is about 34KB, and is limited by the max block * size of the block chain, which is around 30M gas. * * In theory, this same exact approach could be used with larger backing PNGs (ignoring * cost implications), if the base64 string was chunked across multiple transactions, but * we have no need to do that with this project. */ abstract contract PixelPioneerArtworkBase is PNGBackedSVGArt, IChainNativeArtProducer, OwnableDeferralResolution { string private constant extension_iff = 'iff'; string private constant extension_pict = 'pct'; address private _svgRenderer; struct ArchivalMetadata { address scriptyStorageProvider; uint256 tokenType; string scriptName; string extension; } // File extension -> tokenType (but zero indexed) mapping(string => ArchivalMetadata[]) private _metadata; function getArtAsString(uint256 tokenType) external view returns (string memory) { // This project returns the SVG data as the art string. return _getSvgDataURI(tokenType); } function getAnimationAsString(uint256) external pure returns (string memory) { // This art is not animated. return ''; } /** * @notice Get the Art Asset for a TokenType as an SVG encoded into a data URI. * * @param tokenType the token type of the art piece. */ function getSvgArt(uint256 tokenType) external view returns (string memory) { return _getSvgDataURI(tokenType); } /** * @notice Get the Art Asset for a TokenType as a PNG encoded into a data URI. * * @param tokenType the token type of the art piece. */ function getPngArt(uint256 tokenType) external view returns (string memory) { return _getPngDataUri(tokenType); } /** * @notice Get the Art Asset for a TokenType as a PICT data URI. * * Important: This will only function if the PICT files have been recovered. * * @param tokenType the token type of the art piece. */ function getPICTArt(uint256 tokenType) external view returns (string memory) { return _getPICTDataUri(tokenType); } /** * @notice Get the Art Asset for a TokenType as an IFF data URI. * * Important: This will only function if the IFF files have been recovered. * * @param tokenType the token type of the art piece. */ function getIFFArt(uint256 tokenType) external view returns (string memory) { return _getIFFDataUri(tokenType); } /** * @notice Get the closest source archival asset for a token. * * @param extension the file extension of the archival asset. * @param tokenType the token type of the art piece. */ function getRawArchivalArt(string calldata extension, uint256 tokenType) external view returns (bytes memory) { if (keccak256(abi.encodePacked(extension)) == keccak256(abi.encodePacked(extension_iff))) { return _getIFFBytes(tokenType); } if (keccak256(abi.encodePacked(extension)) == keccak256(abi.encodePacked(extension_pict))) { return _getPICTBytes(tokenType); } revert UnrecognizedExtension(); } /** * @notice Get the metadata of the source archival asset for a token. * * @param extension the file extension of the archival asset. * @param tokenType the token type of the art piece. */ function getArchivalMetadata( string calldata extension, uint256 tokenType ) external view returns (ArchivalMetadata memory) { return _metadata[extension][tokenType - 1]; } /** * @notice Admin function to configure the archival metadata for all tokens for a particular file extension. * * @param provider address of the archival data store. * @param scriptNames the filenames that will be saved in the data store. * @param extension the native os extension of the files that will be saved. */ function setArchivalMetadata( address provider, string[] calldata scriptNames, string calldata extension ) external isOwner { uint256 idx; // note, zero indexed. for (idx; idx < scriptNames.length; idx++) { // this is implicitly assuming tokenTypes are 1-5. ArchivalMetadata memory metadata = ArchivalMetadata(provider, idx + 1, scriptNames[idx], extension); _metadata[extension].push(metadata); } } /** * @notice Admin function to update the archival metadata details for a single file. * * @param provider address of the archival data store. * @param tokenType the tokenType of the file. * @param scriptName the filename that will be saved in the data store. * @param extension the native os extension of the files that will be saved. */ function updateArchivalMetadata( address provider, uint256 tokenType, string calldata scriptName, string calldata extension ) external isOwner { uint256 idx = tokenType - 1; ArchivalMetadata memory metadata = _metadata[extension][idx]; require(metadata.tokenType == tokenType, 'invalid addressing'); _metadata[extension][idx].scriptyStorageProvider = provider; _metadata[extension][idx].scriptName = scriptName; _metadata[extension][idx].extension = extension; } /** * @notice Admin function to clear out the entire Metadata Archive for a file extension. * * Important: This has no impact on the underlying datastore. * * @param extension the native os extension of the files that will be saved. */ function clearArchivalMetadata(string calldata extension) external isOwner { ArchivalMetadata[] memory allMetadataForExtension = _metadata[extension]; require(allMetadataForExtension.length > 0, 'array is empty'); delete _metadata[extension]; } function setSvgRenderer(address svgRenderer) external isOwner { _svgRenderer = svgRenderer; } function getSvgRenderer() external view returns (address) { return _svgRenderer; } function _getSvgConstructor(uint256) internal view override returns (ISVGConstructor svgConstructor) { return ISVGConstructor(_svgRenderer); } function _getIFFDataUri(uint256 tokenType) internal view returns (string memory) { bytes memory artBytes = _getIFFBytes(tokenType); return _convertBytesToDataURI(artBytes, 'image/x-iff'); } function _getIFFBytes(uint256 tokenType) internal view returns (bytes memory) { uint256 idx = tokenType - 1; ArchivalMetadata memory metadata = _metadata[extension_iff][idx]; require(metadata.tokenType == tokenType, 'IFF not configured'); IScriptyStorageProvider provider = IScriptyStorageProvider(metadata.scriptyStorageProvider); return provider.getScript(metadata.scriptName, ''); } function _getPICTDataUri(uint256 tokenType) internal view returns (string memory) { bytes memory artBytes = _getPICTBytes(tokenType); return _convertBytesToDataURI(artBytes, 'image/x-pict'); } function _getPICTBytes(uint256 tokenType) internal view returns (bytes memory) { uint256 idx = tokenType - 1; ArchivalMetadata memory metadata = _metadata[extension_pict][idx]; require(metadata.tokenType == tokenType, 'PICT not configured'); IScriptyStorageProvider provider = IScriptyStorageProvider(metadata.scriptyStorageProvider); return provider.getScript(metadata.scriptName, ''); } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArtPieceAlreadyCreated","type":"error"},{"inputs":[],"name":"ArtPieceCountExceeded","type":"error"},{"inputs":[],"name":"ArtPieceDoesNotExist","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"NullTokenType","type":"error"},{"inputs":[],"name":"UnrecognizedExtension","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"string","name":"extension","type":"string"}],"name":"clearArchivalMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"string","name":"stringAsset","type":"string"},{"internalType":"string","name":"backgroundColor","type":"string"},{"internalType":"bytes","name":"bytesAsset","type":"bytes"}],"name":"createArtPiece","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenTypes","type":"uint256[]"},{"internalType":"string[]","name":"stringAssets","type":"string[]"},{"internalType":"string[]","name":"backgrounds","type":"string[]"},{"internalType":"bytes[]","name":"bytesAssets","type":"bytes[]"}],"name":"createArtPieces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getAnimationAsString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"extension","type":"string"},{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getArchivalMetadata","outputs":[{"components":[{"internalType":"address","name":"scriptyStorageProvider","type":"address"},{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"string","name":"scriptName","type":"string"},{"internalType":"string","name":"extension","type":"string"}],"internalType":"struct PixelPioneerArtworkBase.ArchivalMetadata","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getArtAsString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getArtObject","outputs":[{"components":[{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"string","name":"encodedArt","type":"string"},{"internalType":"string","name":"backgroundColor","type":"string"},{"internalType":"bytes","name":"encodedArtBytes","type":"bytes"}],"internalType":"struct IDynamicArtV1.DynamicArtV1","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getArtPieceTokenTypes","outputs":[{"internalType":"uint64[]","name":"","type":"uint64[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getIFFArt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getPICTArt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getPngArt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"extension","type":"string"},{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getRawArchivalArt","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"}],"name":"getSvgArt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSvgRenderer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"string[]","name":"scriptNames","type":"string[]"},{"internalType":"string","name":"extension","type":"string"}],"name":"setArchivalMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"svgRenderer","type":"address"}],"name":"setSvgRenderer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"string","name":"scriptName","type":"string"},{"internalType":"string","name":"extension","type":"string"}],"name":"updateArchivalMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"string","name":"stringAsset","type":"string"},{"internalType":"string","name":"backgroundColor","type":"string"},{"internalType":"bytes","name":"bytesAsset","type":"bytes"}],"name":"updateArtPiece","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50600561001c33610024565b608052610074565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b608051612d51620000976000396000818161144b01526114770152612d516000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80639363f314116100d8578063e440e1541161008c578063f3317c5111610066578063f3317c5114610306578063f68ce88c14610319578063fd4bec851461032c57600080fd5b8063e440e1541461022b578063e49a1076146102e2578063f2fde38b146102f357600080fd5b8063ab9f973c116100bd578063ab9f973c146102a9578063b01781da146102bc578063cc7b4fc7146102cf57600080fd5b80639363f31414610276578063a096299c1461028957600080fd5b80635f1e575a1161012f57806373f246c91161011457806373f246c91461022b578063801b848d1461023e5780638da5cb5b1461025157600080fd5b80635f1e575a14610210578063715018a61461022357600080fd5b80631cb73660116101605780631cb73660146101c85780632f156613146101dd5780633a4c3937146101fd57600080fd5b806316c3d2cb1461017c5780631b4bcfca1461019a575b600080fd5b61018461033f565b604051610191919061223e565b60405180910390f35b6101bb6101a836600461228c565b5060408051602081019091526000815290565b60405161019191906122f5565b6101db6101d6366004612354565b61034e565b005b6101f06101eb36600461228c565b610475565b6040516101919190612418565b6101db61020b3660046124bc565b6104af565b6101bb61021e36600461228c565b610819565b6101db610824565b6101bb61023936600461228c565b610838565b6101bb61024c36600461228c565b610843565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610191565b6101db6102843660046124bc565b61084e565b61029c610297366004612560565b61086e565b60405161019191906125ac565b6101db6102b736600461261e565b610a5e565b6101bb6102ca366004612560565b610a95565b6101bb6102dd36600461228c565b610bc2565b6003546001600160a01b031661025e565b6101db61030136600461261e565b610bcd565b6101db610314366004612639565b610c5d565b6101db61032736600461267b565b610ea5565b6101db61033a3660046126fc565b611037565b6060610349611356565b905090565b6103566113e2565b868514801561036457508683145b801561036f57508681145b6103c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f6620617373657473000000000000000060448201526064015b60405180910390fd5b60005b8781101561046a576104588989838181106103e0576103e0612786565b905060200201358888848181106103f9576103f9612786565b905060200281019061040b919061279c565b88888681811061041d5761041d612786565b905060200281019061042f919061279c565b88888881811061044157610441612786565b9050602002810190610453919061279c565b611426565b80610462816127f9565b9150506103c3565b505050505050505050565b6104a06040518060800160405280600081526020016060815260200160608152602001606081525090565b6104a9826116c0565b92915050565b6104b76113e2565b866000036104d85760405163cc4ccb6b60e01b815260040160405180910390fd5b600087815260016020818152604080842081516080810190925280548252928301805491939284019161050a90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612812565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b5050505050815260200160028201805461059c90612812565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890612812565b80156106155780601f106105ea57610100808354040283529160200191610615565b820191906000526020600020905b8154815290600101906020018083116105f857829003601f168201915b5050505050815260200160038201805461062e90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461065a90612812565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081525050905080600001516000036106f0576040517fac3891e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87815285156107355786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208201525b83156107775784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408201525b81156107b95782828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608201525b600088815260016020818152604090922083518155918301518392918201906107e290826128a8565b50604082015160028201906107f790826128a8565b506060820151600382019061080c90826128a8565b5050505050505050505050565b60606104a9826118c9565b61082c611917565b6108366000611971565b565b60606104a9826119ce565b60606104a982611a26565b6108566113e2565b61086587878787878787611426565b50505050505050565b6108a2604051806080016040528060006001600160a01b031681526020016000815260200160608152602001606081525090565b600484846040516108b4929190612968565b9081526040519081900360200190206108ce600184612978565b815481106108de576108de612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201805461094090612812565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612812565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b505050505081526020016003820180546109d290612812565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90612812565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b50505050508152505090505b9392505050565b610a666113e2565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606040518060400160405280600381526020016234b33360e91b815250604051602001610ac3919061298b565b604051602081830303815290604052805190602001208484604051602001610aec929190612968565b6040516020818303038152906040528051906020012003610b1757610b1082611a42565b9050610a57565b604051806040016040528060038152602001621c18dd60ea1b815250604051602001610b43919061298b565b604051602081830303815290604052805190602001208484604051602001610b6c929190612968565b6040516020818303038152906040528051906020012003610b9057610b1082611d03565b6040517f70ad5b7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606104a982611f2b565b610bd5611917565b6001600160a01b038116610c515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103b7565b610c5a81611971565b50565b610c656113e2565b600060048383604051610c79929190612968565b9081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610e1d576000848152602090819020604080516080810182526004860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610cfa90612812565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690612812565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b50505050508152602001600382018054610d8c90612812565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890612812565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b50505050508152505081526020019060010190610ca7565b5050505090506000815111610e745760405162461bcd60e51b815260206004820152600e60248201527f617272617920697320656d70747900000000000000000000000000000000000060448201526064016103b7565b60048383604051610e86929190612968565b90815260200160405180910390206000610ea09190612183565b505050565b610ead6113e2565b60005b8381101561102f5760006040518060800160405280886001600160a01b03168152602001836001610ee191906129a7565b8152602001878785818110610ef857610ef8612786565b9050602002810190610f0a919061279c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284376000920191909152505050915250604051909150600490610f919086908690612968565b90815260408051602092819003830190208054600180820183556000928352918490208551600490920201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911781559284015190830155820151829190600282019061100390826128a8565b506060820151600382019061101890826128a8565b505050508080611027906127f9565b915050610eb0565b505050505050565b61103f6113e2565b600061104c600187612978565b9050600060048484604051611062929190612968565b9081526020016040518091039020828154811061108157611081612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481526020016002820180546110e390612812565b80601f016020809104026020016040519081016040528092919081815260200182805461110f90612812565b801561115c5780601f106111315761010080835404028352916020019161115c565b820191906000526020600020905b81548152906001019060200180831161113f57829003601f168201915b5050505050815260200160038201805461117590612812565b80601f01602080910402602001604051908101604052809291908181526020018280546111a190612812565b80156111ee5780601f106111c3576101008083540402835291602001916111ee565b820191906000526020600020905b8154815290600101906020018083116111d157829003601f168201915b50505050508152505090508681602001511461124c5760405162461bcd60e51b815260206004820152601260248201527f696e76616c69642061646472657373696e67000000000000000000000000000060448201526064016103b7565b876004858560405161125f929190612968565b9081526020016040518091039020838154811061127e5761127e612786565b906000526020600020906004020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508585600486866040516112c7929190612968565b908152602001604051809103902084815481106112e6576112e6612786565b906000526020600020906004020160020191826113049291906129ba565b50838360048686604051611319929190612968565b9081526020016040518091039020848154811061133857611338612786565b9060005260206000209060040201600301918261046a9291906129ba565b606060028054806020026020016040519081016040528092919081815260200182805480156113d857602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116113935790505b5050505050905090565b6000546001600160a01b03163314610836576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866000036114475760405163cc4ccb6b60e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000001180156114a457506002547f0000000000000000000000000000000000000000000000000000000000000000906114a29060016129a7565b115b156114db576040517f444920b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008781526001602052604090205415611521576040517fb4a85a0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61154c6040518060800160405280600081526020016060815260200160608152602001606081525090565b878152604080516020601f890181900481028201810190925287815290889088908190840183828082843760009201919091525050505060208083019190915260408051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060408083019190915280516020601f850181900481028201810190925283815290849084908190840183828082843760009201829052506060860194909452505050888152600160208181526040909220835181559183015183929182019061162790826128a8565b506040820151600282019061163c90826128a8565b506060820151600382019061165190826128a8565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6004820401805460039092166008026101000a67ffffffffffffffff818102199093169b90921691909102999099179098555050505050505050565b6116eb6040518060800160405280600081526020016060815260200160608152602001606081525090565b6000828152600160208181526040928390208351608081019094528054845291820180549184019161171c90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461174890612812565b80156117955780601f1061176a57610100808354040283529160200191611795565b820191906000526020600020905b81548152906001019060200180831161177857829003601f168201915b505050505081526020016002820180546117ae90612812565b80601f01602080910402602001604051908101604052809291908181526020018280546117da90612812565b80156118275780601f106117fc57610100808354040283529160200191611827565b820191906000526020600020905b81548152906001019060200180831161180a57829003601f168201915b5050505050815260200160038201805461184090612812565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90612812565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050815250509050919050565b606060006118d683611a42565b9050610a57816040518060400160405280600b81526020017f696d6167652f782d696666000000000000000000000000000000000000000000815250611f75565b6000546001600160a01b031633146108365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006119db836116c0565b604081015151909150151560006119f1856116c0565b6020015190506000611a1186848660400151611a0c86611fa9565b611fd2565b9050611a1c81612015565b9695505050505050565b60606000611a33836116c0565b602001519050610a5781611fa9565b60606000611a51600184612978565b9050600060046040518060400160405280600381526020016234b33360e91b815250604051611a80919061298b565b90815260200160405180910390208281548110611a9f57611a9f612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160018201548152602001600282018054611b0190612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d90612812565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b50505050508152602001600382018054611b9390612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf90612812565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505081525050905083816020015114611c6a5760405162461bcd60e51b815260206004820152601260248201527f494646206e6f7420636f6e66696775726564000000000000000000000000000060448201526064016103b7565b805160408083015190517ff96355940000000000000000000000000000000000000000000000000000000081526001600160a01b0383169163f963559491611cb59190600401612a7b565b600060405180830381865afa158015611cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cfa9190810190612b19565b95945050505050565b60606000611d12600184612978565b905060006004604051806040016040528060038152602001621c18dd60ea1b815250604051611d41919061298b565b90815260200160405180910390208281548110611d6057611d60612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160018201548152602001600282018054611dc290612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611dee90612812565b8015611e3b5780601f10611e1057610100808354040283529160200191611e3b565b820191906000526020600020905b815481529060010190602001808311611e1e57829003601f168201915b50505050508152602001600382018054611e5490612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8090612812565b8015611ecd5780601f10611ea257610100808354040283529160200191611ecd565b820191906000526020600020905b815481529060010190602001808311611eb057829003601f168201915b505050505081525050905083816020015114611c6a5760405162461bcd60e51b815260206004820152601360248201527f50494354206e6f7420636f6e666967757265640000000000000000000000000060448201526064016103b7565b60606000611f3883611d03565b9050610a57816040518060400160405280600c81526020017f696d6167652f782d7069637400000000000000000000000000000000000000008152505b606081611f8184612030565b604051602001611f92929190612b6a565b604051602081830303815290604052905092915050565b606081604051602001611fbc9190612beb565b6040516020818303038152906040529050919050565b6060611fe66003546001600160a01b031690565b6001600160a01b031663645b305a8585856040518463ffffffff1660e01b8152600401611cb593929190612c30565b606061202082612030565b604051602001611fbc9190612c5d565b6060815160000361204f57505060408051602081019091526000815290565b6000604051806060016040528060408152602001612cdc604091399050600060038451600261207e91906129a7565b6120889190612ca2565b612093906004612cc4565b67ffffffffffffffff8111156120ab576120ab61284c565b6040519080825280601f01601f1916602001820160405280156120d5576020820181803683370190505b509050600182016020820185865187015b80821015612141576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506120e6565b505060038651066001811461215d576002811461217057612178565b603d6001830353603d6002830353612178565b603d60018303535b509195945050505050565b5080546000825560040290600052602060002090810190610c5a91905b808211156121f057805473ffffffffffffffffffffffffffffffffffffffff191681556000600182018190556121d960028301826121f4565b6121e76003830160006121f4565b506004016121a0565b5090565b50805461220090612812565b6000825580601f10612210575050565b601f016020900490600052602060002090810190610c5a91905b808211156121f0576000815560010161222a565b6020808252825182820181905260009190848201906040850190845b8181101561228057835167ffffffffffffffff168352928401929184019160010161225a565b50909695505050505050565b60006020828403121561229e57600080fd5b5035919050565b60005b838110156122c05781810151838201526020016122a8565b50506000910152565b600081518084526122e18160208601602086016122a5565b601f01601f19169290920160200192915050565b602081526000610a5760208301846122c9565b60008083601f84011261231a57600080fd5b50813567ffffffffffffffff81111561233257600080fd5b6020830191508360208260051b850101111561234d57600080fd5b9250929050565b6000806000806000806000806080898b03121561237057600080fd5b883567ffffffffffffffff8082111561238857600080fd5b6123948c838d01612308565b909a50985060208b01359150808211156123ad57600080fd5b6123b98c838d01612308565b909850965060408b01359150808211156123d257600080fd5b6123de8c838d01612308565b909650945060608b01359150808211156123f757600080fd5b506124048b828c01612308565b999c989b5096995094979396929594505050565b6020815281516020820152600060208301516080604084015261243e60a08401826122c9565b90506040840151601f198085840301606086015261245c83836122c9565b9250606086015191508085840301608086015250611cfa82826122c9565b60008083601f84011261248c57600080fd5b50813567ffffffffffffffff8111156124a457600080fd5b60208301915083602082850101111561234d57600080fd5b60008060008060008060006080888a0312156124d757600080fd5b87359650602088013567ffffffffffffffff808211156124f657600080fd5b6125028b838c0161247a565b909850965060408a013591508082111561251b57600080fd5b6125278b838c0161247a565b909650945060608a013591508082111561254057600080fd5b5061254d8a828b0161247a565b989b979a50959850939692959293505050565b60008060006040848603121561257557600080fd5b833567ffffffffffffffff81111561258c57600080fd5b6125988682870161247a565b909790965060209590950135949350505050565b602081526001600160a01b0382511660208201526020820151604082015260006040830151608060608401526125e560a08401826122c9565b90506060840151601f19848303016080850152611cfa82826122c9565b80356001600160a01b038116811461261957600080fd5b919050565b60006020828403121561263057600080fd5b610a5782612602565b6000806020838503121561264c57600080fd5b823567ffffffffffffffff81111561266357600080fd5b61266f8582860161247a565b90969095509350505050565b60008060008060006060868803121561269357600080fd5b61269c86612602565b9450602086013567ffffffffffffffff808211156126b957600080fd5b6126c589838a01612308565b909650945060408801359150808211156126de57600080fd5b506126eb8882890161247a565b969995985093965092949392505050565b6000806000806000806080878903121561271557600080fd5b61271e87612602565b955060208701359450604087013567ffffffffffffffff8082111561274257600080fd5b61274e8a838b0161247a565b9096509450606089013591508082111561276757600080fd5b5061277489828a0161247a565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126127b357600080fd5b83018035915067ffffffffffffffff8211156127ce57600080fd5b60200191503681900382131561234d57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161280b5761280b6127e3565b5060010190565b600181811c9082168061282657607f821691505b60208210810361284657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610ea057600081815260208120601f850160051c810160208610156128895750805b601f850160051c820191505b8181101561102f57828155600101612895565b815167ffffffffffffffff8111156128c2576128c261284c565b6128d6816128d08454612812565b84612862565b602080601f83116001811461290b57600084156128f35750858301515b600019600386901b1c1916600185901b17855561102f565b600085815260208120601f198616915b8281101561293a5788860151825594840194600190910190840161291b565b50858210156129585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b818103818111156104a9576104a96127e3565b6000825161299d8184602087016122a5565b9190910192915050565b808201808211156104a9576104a96127e3565b67ffffffffffffffff8311156129d2576129d261284c565b6129e6836129e08354612812565b83612862565b6000601f841160018114612a1a5760008515612a025750838201355b600019600387901b1c1916600186901b178355612a74565b600083815260209020601f19861690835b82811015612a4b5786850135825560209485019460019092019101612a2b565b5086821015612a685760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000612a8e60408301846122c9565b828103602093840152600081529190910192915050565b600067ffffffffffffffff80841115612ac057612ac061284c565b604051601f8501601f19908116603f01168101908282118183101715612ae857612ae861284c565b81604052809350858152868686011115612b0157600080fd5b612b0f8660208301876122a5565b5050509392505050565b600060208284031215612b2b57600080fd5b815167ffffffffffffffff811115612b4257600080fd5b8201601f81018413612b5357600080fd5b612b6284825160208401612aa5565b949350505050565b7f646174613a000000000000000000000000000000000000000000000000000000815260008351612ba28160058501602088016122a5565b7f3b6261736536342c0000000000000000000000000000000000000000000000006005918401918201528351612bdf81600d8401602088016122a5565b01600d01949350505050565b7f646174613a696d6167652f706e673b6261736536342c00000000000000000000815260008251612c238160168501602087016122a5565b9190910160160192915050565b8315158152606060208201526000612c4b60608301856122c9565b8281036040840152611a1c81856122c9565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000815260008251612c9581601a8501602087016122a5565b91909101601a0192915050565b600082612cbf57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176104a9576104a96127e356fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c7e3e74d18c8ebc83762189f63d73ca1ba1d30f3d72b2db4956283fe777016b364736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101775760003560e01c80639363f314116100d8578063e440e1541161008c578063f3317c5111610066578063f3317c5114610306578063f68ce88c14610319578063fd4bec851461032c57600080fd5b8063e440e1541461022b578063e49a1076146102e2578063f2fde38b146102f357600080fd5b8063ab9f973c116100bd578063ab9f973c146102a9578063b01781da146102bc578063cc7b4fc7146102cf57600080fd5b80639363f31414610276578063a096299c1461028957600080fd5b80635f1e575a1161012f57806373f246c91161011457806373f246c91461022b578063801b848d1461023e5780638da5cb5b1461025157600080fd5b80635f1e575a14610210578063715018a61461022357600080fd5b80631cb73660116101605780631cb73660146101c85780632f156613146101dd5780633a4c3937146101fd57600080fd5b806316c3d2cb1461017c5780631b4bcfca1461019a575b600080fd5b61018461033f565b604051610191919061223e565b60405180910390f35b6101bb6101a836600461228c565b5060408051602081019091526000815290565b60405161019191906122f5565b6101db6101d6366004612354565b61034e565b005b6101f06101eb36600461228c565b610475565b6040516101919190612418565b6101db61020b3660046124bc565b6104af565b6101bb61021e36600461228c565b610819565b6101db610824565b6101bb61023936600461228c565b610838565b6101bb61024c36600461228c565b610843565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610191565b6101db6102843660046124bc565b61084e565b61029c610297366004612560565b61086e565b60405161019191906125ac565b6101db6102b736600461261e565b610a5e565b6101bb6102ca366004612560565b610a95565b6101bb6102dd36600461228c565b610bc2565b6003546001600160a01b031661025e565b6101db61030136600461261e565b610bcd565b6101db610314366004612639565b610c5d565b6101db61032736600461267b565b610ea5565b6101db61033a3660046126fc565b611037565b6060610349611356565b905090565b6103566113e2565b868514801561036457508683145b801561036f57508681145b6103c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f6620617373657473000000000000000060448201526064015b60405180910390fd5b60005b8781101561046a576104588989838181106103e0576103e0612786565b905060200201358888848181106103f9576103f9612786565b905060200281019061040b919061279c565b88888681811061041d5761041d612786565b905060200281019061042f919061279c565b88888881811061044157610441612786565b9050602002810190610453919061279c565b611426565b80610462816127f9565b9150506103c3565b505050505050505050565b6104a06040518060800160405280600081526020016060815260200160608152602001606081525090565b6104a9826116c0565b92915050565b6104b76113e2565b866000036104d85760405163cc4ccb6b60e01b815260040160405180910390fd5b600087815260016020818152604080842081516080810190925280548252928301805491939284019161050a90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612812565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b5050505050815260200160028201805461059c90612812565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890612812565b80156106155780601f106105ea57610100808354040283529160200191610615565b820191906000526020600020905b8154815290600101906020018083116105f857829003601f168201915b5050505050815260200160038201805461062e90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461065a90612812565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081525050905080600001516000036106f0576040517fac3891e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87815285156107355786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208201525b83156107775784848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408201525b81156107b95782828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060608201525b600088815260016020818152604090922083518155918301518392918201906107e290826128a8565b50604082015160028201906107f790826128a8565b506060820151600382019061080c90826128a8565b5050505050505050505050565b60606104a9826118c9565b61082c611917565b6108366000611971565b565b60606104a9826119ce565b60606104a982611a26565b6108566113e2565b61086587878787878787611426565b50505050505050565b6108a2604051806080016040528060006001600160a01b031681526020016000815260200160608152602001606081525090565b600484846040516108b4929190612968565b9081526040519081900360200190206108ce600184612978565b815481106108de576108de612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201805461094090612812565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612812565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b505050505081526020016003820180546109d290612812565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90612812565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b50505050508152505090505b9392505050565b610a666113e2565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60606040518060400160405280600381526020016234b33360e91b815250604051602001610ac3919061298b565b604051602081830303815290604052805190602001208484604051602001610aec929190612968565b6040516020818303038152906040528051906020012003610b1757610b1082611a42565b9050610a57565b604051806040016040528060038152602001621c18dd60ea1b815250604051602001610b43919061298b565b604051602081830303815290604052805190602001208484604051602001610b6c929190612968565b6040516020818303038152906040528051906020012003610b9057610b1082611d03565b6040517f70ad5b7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606104a982611f2b565b610bd5611917565b6001600160a01b038116610c515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103b7565b610c5a81611971565b50565b610c656113e2565b600060048383604051610c79929190612968565b9081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610e1d576000848152602090819020604080516080810182526004860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191610cfa90612812565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690612812565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b50505050508152602001600382018054610d8c90612812565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890612812565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b50505050508152505081526020019060010190610ca7565b5050505090506000815111610e745760405162461bcd60e51b815260206004820152600e60248201527f617272617920697320656d70747900000000000000000000000000000000000060448201526064016103b7565b60048383604051610e86929190612968565b90815260200160405180910390206000610ea09190612183565b505050565b610ead6113e2565b60005b8381101561102f5760006040518060800160405280886001600160a01b03168152602001836001610ee191906129a7565b8152602001878785818110610ef857610ef8612786565b9050602002810190610f0a919061279c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284376000920191909152505050915250604051909150600490610f919086908690612968565b90815260408051602092819003830190208054600180820183556000928352918490208551600490920201805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911781559284015190830155820151829190600282019061100390826128a8565b506060820151600382019061101890826128a8565b505050508080611027906127f9565b915050610eb0565b505050505050565b61103f6113e2565b600061104c600187612978565b9050600060048484604051611062929190612968565b9081526020016040518091039020828154811061108157611081612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182015481526020016002820180546110e390612812565b80601f016020809104026020016040519081016040528092919081815260200182805461110f90612812565b801561115c5780601f106111315761010080835404028352916020019161115c565b820191906000526020600020905b81548152906001019060200180831161113f57829003601f168201915b5050505050815260200160038201805461117590612812565b80601f01602080910402602001604051908101604052809291908181526020018280546111a190612812565b80156111ee5780601f106111c3576101008083540402835291602001916111ee565b820191906000526020600020905b8154815290600101906020018083116111d157829003601f168201915b50505050508152505090508681602001511461124c5760405162461bcd60e51b815260206004820152601260248201527f696e76616c69642061646472657373696e67000000000000000000000000000060448201526064016103b7565b876004858560405161125f929190612968565b9081526020016040518091039020838154811061127e5761127e612786565b906000526020600020906004020160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508585600486866040516112c7929190612968565b908152602001604051809103902084815481106112e6576112e6612786565b906000526020600020906004020160020191826113049291906129ba565b50838360048686604051611319929190612968565b9081526020016040518091039020848154811061133857611338612786565b9060005260206000209060040201600301918261046a9291906129ba565b606060028054806020026020016040519081016040528092919081815260200182805480156113d857602002820191906000526020600020906000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116113935790505b5050505050905090565b6000546001600160a01b03163314610836576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866000036114475760405163cc4ccb6b60e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000051180156114a457506002547f0000000000000000000000000000000000000000000000000000000000000005906114a29060016129a7565b115b156114db576040517f444920b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008781526001602052604090205415611521576040517fb4a85a0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61154c6040518060800160405280600081526020016060815260200160608152602001606081525090565b878152604080516020601f890181900481028201810190925287815290889088908190840183828082843760009201919091525050505060208083019190915260408051601f870183900483028101830190915285815290869086908190840183828082843760009201919091525050505060408083019190915280516020601f850181900481028201810190925283815290849084908190840183828082843760009201829052506060860194909452505050888152600160208181526040909220835181559183015183929182019061162790826128a8565b506040820151600282019061163c90826128a8565b506060820151600382019061165190826128a8565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6004820401805460039092166008026101000a67ffffffffffffffff818102199093169b90921691909102999099179098555050505050505050565b6116eb6040518060800160405280600081526020016060815260200160608152602001606081525090565b6000828152600160208181526040928390208351608081019094528054845291820180549184019161171c90612812565b80601f016020809104026020016040519081016040528092919081815260200182805461174890612812565b80156117955780601f1061176a57610100808354040283529160200191611795565b820191906000526020600020905b81548152906001019060200180831161177857829003601f168201915b505050505081526020016002820180546117ae90612812565b80601f01602080910402602001604051908101604052809291908181526020018280546117da90612812565b80156118275780601f106117fc57610100808354040283529160200191611827565b820191906000526020600020905b81548152906001019060200180831161180a57829003601f168201915b5050505050815260200160038201805461184090612812565b80601f016020809104026020016040519081016040528092919081815260200182805461186c90612812565b80156118b95780601f1061188e576101008083540402835291602001916118b9565b820191906000526020600020905b81548152906001019060200180831161189c57829003601f168201915b5050505050815250509050919050565b606060006118d683611a42565b9050610a57816040518060400160405280600b81526020017f696d6167652f782d696666000000000000000000000000000000000000000000815250611f75565b6000546001600160a01b031633146108365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b7565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006119db836116c0565b604081015151909150151560006119f1856116c0565b6020015190506000611a1186848660400151611a0c86611fa9565b611fd2565b9050611a1c81612015565b9695505050505050565b60606000611a33836116c0565b602001519050610a5781611fa9565b60606000611a51600184612978565b9050600060046040518060400160405280600381526020016234b33360e91b815250604051611a80919061298b565b90815260200160405180910390208281548110611a9f57611a9f612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160018201548152602001600282018054611b0190612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d90612812565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b50505050508152602001600382018054611b9390612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf90612812565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b505050505081525050905083816020015114611c6a5760405162461bcd60e51b815260206004820152601260248201527f494646206e6f7420636f6e66696775726564000000000000000000000000000060448201526064016103b7565b805160408083015190517ff96355940000000000000000000000000000000000000000000000000000000081526001600160a01b0383169163f963559491611cb59190600401612a7b565b600060405180830381865afa158015611cd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cfa9190810190612b19565b95945050505050565b60606000611d12600184612978565b905060006004604051806040016040528060038152602001621c18dd60ea1b815250604051611d41919061298b565b90815260200160405180910390208281548110611d6057611d60612786565b90600052602060002090600402016040518060800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160018201548152602001600282018054611dc290612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611dee90612812565b8015611e3b5780601f10611e1057610100808354040283529160200191611e3b565b820191906000526020600020905b815481529060010190602001808311611e1e57829003601f168201915b50505050508152602001600382018054611e5490612812565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8090612812565b8015611ecd5780601f10611ea257610100808354040283529160200191611ecd565b820191906000526020600020905b815481529060010190602001808311611eb057829003601f168201915b505050505081525050905083816020015114611c6a5760405162461bcd60e51b815260206004820152601360248201527f50494354206e6f7420636f6e666967757265640000000000000000000000000060448201526064016103b7565b60606000611f3883611d03565b9050610a57816040518060400160405280600c81526020017f696d6167652f782d7069637400000000000000000000000000000000000000008152505b606081611f8184612030565b604051602001611f92929190612b6a565b604051602081830303815290604052905092915050565b606081604051602001611fbc9190612beb565b6040516020818303038152906040529050919050565b6060611fe66003546001600160a01b031690565b6001600160a01b031663645b305a8585856040518463ffffffff1660e01b8152600401611cb593929190612c30565b606061202082612030565b604051602001611fbc9190612c5d565b6060815160000361204f57505060408051602081019091526000815290565b6000604051806060016040528060408152602001612cdc604091399050600060038451600261207e91906129a7565b6120889190612ca2565b612093906004612cc4565b67ffffffffffffffff8111156120ab576120ab61284c565b6040519080825280601f01601f1916602001820160405280156120d5576020820181803683370190505b509050600182016020820185865187015b80821015612141576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506120e6565b505060038651066001811461215d576002811461217057612178565b603d6001830353603d6002830353612178565b603d60018303535b509195945050505050565b5080546000825560040290600052602060002090810190610c5a91905b808211156121f057805473ffffffffffffffffffffffffffffffffffffffff191681556000600182018190556121d960028301826121f4565b6121e76003830160006121f4565b506004016121a0565b5090565b50805461220090612812565b6000825580601f10612210575050565b601f016020900490600052602060002090810190610c5a91905b808211156121f0576000815560010161222a565b6020808252825182820181905260009190848201906040850190845b8181101561228057835167ffffffffffffffff168352928401929184019160010161225a565b50909695505050505050565b60006020828403121561229e57600080fd5b5035919050565b60005b838110156122c05781810151838201526020016122a8565b50506000910152565b600081518084526122e18160208601602086016122a5565b601f01601f19169290920160200192915050565b602081526000610a5760208301846122c9565b60008083601f84011261231a57600080fd5b50813567ffffffffffffffff81111561233257600080fd5b6020830191508360208260051b850101111561234d57600080fd5b9250929050565b6000806000806000806000806080898b03121561237057600080fd5b883567ffffffffffffffff8082111561238857600080fd5b6123948c838d01612308565b909a50985060208b01359150808211156123ad57600080fd5b6123b98c838d01612308565b909850965060408b01359150808211156123d257600080fd5b6123de8c838d01612308565b909650945060608b01359150808211156123f757600080fd5b506124048b828c01612308565b999c989b5096995094979396929594505050565b6020815281516020820152600060208301516080604084015261243e60a08401826122c9565b90506040840151601f198085840301606086015261245c83836122c9565b9250606086015191508085840301608086015250611cfa82826122c9565b60008083601f84011261248c57600080fd5b50813567ffffffffffffffff8111156124a457600080fd5b60208301915083602082850101111561234d57600080fd5b60008060008060008060006080888a0312156124d757600080fd5b87359650602088013567ffffffffffffffff808211156124f657600080fd5b6125028b838c0161247a565b909850965060408a013591508082111561251b57600080fd5b6125278b838c0161247a565b909650945060608a013591508082111561254057600080fd5b5061254d8a828b0161247a565b989b979a50959850939692959293505050565b60008060006040848603121561257557600080fd5b833567ffffffffffffffff81111561258c57600080fd5b6125988682870161247a565b909790965060209590950135949350505050565b602081526001600160a01b0382511660208201526020820151604082015260006040830151608060608401526125e560a08401826122c9565b90506060840151601f19848303016080850152611cfa82826122c9565b80356001600160a01b038116811461261957600080fd5b919050565b60006020828403121561263057600080fd5b610a5782612602565b6000806020838503121561264c57600080fd5b823567ffffffffffffffff81111561266357600080fd5b61266f8582860161247a565b90969095509350505050565b60008060008060006060868803121561269357600080fd5b61269c86612602565b9450602086013567ffffffffffffffff808211156126b957600080fd5b6126c589838a01612308565b909650945060408801359150808211156126de57600080fd5b506126eb8882890161247a565b969995985093965092949392505050565b6000806000806000806080878903121561271557600080fd5b61271e87612602565b955060208701359450604087013567ffffffffffffffff8082111561274257600080fd5b61274e8a838b0161247a565b9096509450606089013591508082111561276757600080fd5b5061277489828a0161247a565b979a9699509497509295939492505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126127b357600080fd5b83018035915067ffffffffffffffff8211156127ce57600080fd5b60200191503681900382131561234d57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161280b5761280b6127e3565b5060010190565b600181811c9082168061282657607f821691505b60208210810361284657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610ea057600081815260208120601f850160051c810160208610156128895750805b601f850160051c820191505b8181101561102f57828155600101612895565b815167ffffffffffffffff8111156128c2576128c261284c565b6128d6816128d08454612812565b84612862565b602080601f83116001811461290b57600084156128f35750858301515b600019600386901b1c1916600185901b17855561102f565b600085815260208120601f198616915b8281101561293a5788860151825594840194600190910190840161291b565b50858210156129585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b818103818111156104a9576104a96127e3565b6000825161299d8184602087016122a5565b9190910192915050565b808201808211156104a9576104a96127e3565b67ffffffffffffffff8311156129d2576129d261284c565b6129e6836129e08354612812565b83612862565b6000601f841160018114612a1a5760008515612a025750838201355b600019600387901b1c1916600186901b178355612a74565b600083815260209020601f19861690835b82811015612a4b5786850135825560209485019460019092019101612a2b565b5086821015612a685760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081526000612a8e60408301846122c9565b828103602093840152600081529190910192915050565b600067ffffffffffffffff80841115612ac057612ac061284c565b604051601f8501601f19908116603f01168101908282118183101715612ae857612ae861284c565b81604052809350858152868686011115612b0157600080fd5b612b0f8660208301876122a5565b5050509392505050565b600060208284031215612b2b57600080fd5b815167ffffffffffffffff811115612b4257600080fd5b8201601f81018413612b5357600080fd5b612b6284825160208401612aa5565b949350505050565b7f646174613a000000000000000000000000000000000000000000000000000000815260008351612ba28160058501602088016122a5565b7f3b6261736536342c0000000000000000000000000000000000000000000000006005918401918201528351612bdf81600d8401602088016122a5565b01600d01949350505050565b7f646174613a696d6167652f706e673b6261736536342c00000000000000000000815260008251612c238160168501602087016122a5565b9190910160160192915050565b8315158152606060208201526000612c4b60608301856122c9565b8281036040840152611a1c81856122c9565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000815260008251612c9581601a8501602087016122a5565b91909101601a0192915050565b600082612cbf57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176104a9576104a96127e356fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c7e3e74d18c8ebc83762189f63d73ca1ba1d30f3d72b2db4956283fe777016b364736f6c63430008130033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.