Feature Tip: Add private address tag to any address under My Name Tag !
There are reports that this address was used in a Phishing scam. Please exercise caution when interacting with it. Reported by GoPlusSecurity.
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 16 from a total of 16 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 21558127 | 93 days ago | IN | 0 ETH | 0.00044971 | ||||
Safe Transfer Fr... | 21440470 | 109 days ago | IN | 0 ETH | 0.00039812 | ||||
Safe Transfer Fr... | 21418484 | 112 days ago | IN | 0 ETH | 0.00047698 | ||||
Safe Transfer Fr... | 21418472 | 112 days ago | IN | 0 ETH | 0.00066087 | ||||
Transfer From | 21108908 | 156 days ago | IN | 0 ETH | 0.00017412 | ||||
Approve | 21048928 | 164 days ago | IN | 0 ETH | 0.00021783 | ||||
Transfer From | 19821269 | 335 days ago | IN | 0 ETH | 0.00015012 | ||||
Safe Transfer Fr... | 19733405 | 348 days ago | IN | 0 ETH | 0.00146648 | ||||
Transfer From | 19225975 | 419 days ago | IN | 0 ETH | 0.000946 | ||||
Transfer From | 19225972 | 419 days ago | IN | 0 ETH | 0.00111328 | ||||
Transfer From | 19225968 | 419 days ago | IN | 0 ETH | 0.00109283 | ||||
Transfer From | 19225962 | 419 days ago | IN | 0 ETH | 0.0010947 | ||||
Transfer From | 18998362 | 451 days ago | IN | 0 ETH | 0.00098665 | ||||
Transfer From | 18711838 | 491 days ago | IN | 0 ETH | 0.00238056 | ||||
Change Owner | 16032957 | 867 days ago | IN | 0 ETH | 0.00033471 | ||||
Change Manager | 15178514 | 993 days ago | IN | 0 ETH | 0.00074464 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AgentRegistry
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 750 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "./UnitRegistry.sol"; import "./interfaces/IRegistry.sol"; /// @title Agent Registry - Smart contract for registering agents /// @author Aleksandr Kuperman - <[email protected]> contract AgentRegistry is UnitRegistry { // Component registry address public immutable componentRegistry; // Agent registry version number string public constant VERSION = "1.0.0"; /// @dev Agent registry constructor. /// @param _name Agent registry contract name. /// @param _symbol Agent registry contract symbol. /// @param _baseURI Agent registry token base URI. /// @param _componentRegistry Component registry address. constructor(string memory _name, string memory _symbol, string memory _baseURI, address _componentRegistry) UnitRegistry(UnitType.Agent) ERC721(_name, _symbol) { baseURI = _baseURI; componentRegistry = _componentRegistry; owner = msg.sender; } /// @dev Checks provided component dependencies. /// @param dependencies Set of component dependencies. function _checkDependencies(uint32[] memory dependencies, uint32) internal virtual override { // Check that the agent has at least one component if (dependencies.length == 0) { revert ZeroValue(); } // Get the components total supply uint32 componentTotalSupply = uint32(IRegistry(componentRegistry).totalSupply()); uint32 lastId; for (uint256 iDep = 0; iDep < dependencies.length; ++iDep) { if (dependencies[iDep] < (lastId + 1) || dependencies[iDep] > componentTotalSupply) { revert ComponentNotFound(dependencies[iDep]); } lastId = dependencies[iDep]; } } /// @dev Gets linearized set of subcomponents of a provided unit Id and a type of a component. /// @notice (0) For components this means getting the linearized map of components from the componentRegistry contract. /// @notice (1) For agents this means getting the linearized map of components from the local map of subcomponents. /// @param subcomponentsFromType Type of the unit: component or agent. /// @param unitId Component Id. /// @return subComponentIds Set of subcomponents. function _getSubComponents(UnitType subcomponentsFromType, uint32 unitId) internal view virtual override returns (uint32[] memory subComponentIds) { // Self contract (agent registry) can only call subcomponents calculation from the component level (0) // Otherwise, the subcomponents are already written into the corresponding subcomponents map if (subcomponentsFromType == UnitType.Component) { (subComponentIds, ) = IRegistry(componentRegistry).getLocalSubComponents(uint256(unitId)); } else { subComponentIds = mapSubComponents[uint256(unitId)]; } } /// @dev Calculates the set of subcomponent Ids. /// @notice We assume that the external callers calculate subcomponents from the higher unit hierarchy level: agents. /// @param unitIds Unit Ids. /// @return subComponentIds Subcomponent Ids. function calculateSubComponents(uint32[] memory unitIds) external view returns (uint32[] memory subComponentIds) { subComponentIds = _calculateSubComponents(UnitType.Agent, unitIds); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "./GenericRegistry.sol"; /// @title Unit Registry - Smart contract for registering generalized units / units /// @author Aleksandr Kuperman - <[email protected]> abstract contract UnitRegistry is GenericRegistry { event CreateUnit(uint256 unitId, UnitType uType, bytes32 unitHash); event UpdateUnitHash(uint256 unitId, UnitType uType, bytes32 unitHash); enum UnitType { Component, Agent } // Unit parameters struct Unit { // Primary IPFS hash of the unit bytes32 unitHash; // Set of component dependencies (agents are also based on components) // We assume that the system is expected to support no more than 2^32-1 components uint32[] dependencies; } // Type of the unit: component or unit UnitType public immutable unitType; // Map of unit Id => set of updated IPFS hashes mapping(uint256 => bytes32[]) public mapUnitIdHashes; // Map of unit Id => set of subcomponents (possible to derive from any registry) mapping(uint256 => uint32[]) public mapSubComponents; // Map of unit Id => unit mapping(uint256 => Unit) public mapUnits; constructor(UnitType _unitType) { unitType = _unitType; } /// @dev Checks the provided component dependencies. /// @param dependencies Set of component dependencies. /// @param maxUnitId Maximum unit Id. function _checkDependencies(uint32[] memory dependencies, uint32 maxUnitId) internal virtual; /// @dev Creates unit. /// @param unitOwner Owner of the unit. /// @param unitHash IPFS CID hash of the unit. /// @param dependencies Set of unit dependencies in a sorted ascending order (unit Ids). /// @return unitId The id of a minted unit. function create(address unitOwner, bytes32 unitHash, uint32[] memory dependencies) external virtual returns (uint256 unitId) { // Reentrancy guard if (_locked > 1) { revert ReentrancyGuard(); } _locked = 2; // Check for the manager privilege for a unit creation if (manager != msg.sender) { revert ManagerOnly(msg.sender, manager); } // Checks for a non-zero owner address if(unitOwner == address(0)) { revert ZeroAddress(); } // Check for the non-zero hash value if (unitHash == 0) { revert ZeroValue(); } // Check for dependencies validity: must be already allocated, must not repeat unitId = totalSupply; _checkDependencies(dependencies, uint32(unitId)); // Unit with Id = 0 is left empty not to do additional checks for the index zero unitId++; // Initialize the unit and mint its token Unit storage unit = mapUnits[unitId]; unit.unitHash = unitHash; unit.dependencies = dependencies; // Update the map of subcomponents with calculated subcomponents for the new unit Id // In order to get the correct set of subcomponents, we need to differentiate between the callers of this function // Self contract (unit registry) can only call subcomponents calculation from the component level uint32[] memory subComponentIds = _calculateSubComponents(UnitType.Component, dependencies); // We need to add a current component Id to the set of subcomponents if the unit is a component // For example, if component 3 (c3) has dependencies of [c1, c2], then the subcomponents will return [c1, c2]. // The resulting set will be [c1, c2, c3]. So we write into the map of component subcomponents: c3=>[c1, c2, c3]. // This is done such that the subcomponents start getting explored, and when the agent calls its subcomponents, // it would have [c1, c2, c3] right away instead of adding c3 manually and then (for services) checking // if another agent also has c3 as a component dependency. The latter will consume additional computation. if (unitType == UnitType.Component) { uint256 numSubComponents = subComponentIds.length; uint32[] memory addSubComponentIds = new uint32[](numSubComponents + 1); for (uint256 i = 0; i < numSubComponents; ++i) { addSubComponentIds[i] = subComponentIds[i]; } // Adding self component Id addSubComponentIds[numSubComponents] = uint32(unitId); subComponentIds = addSubComponentIds; } mapSubComponents[unitId] = subComponentIds; // Set total supply to the unit Id number totalSupply = unitId; // Safe mint is needed since contracts can create units as well _safeMint(unitOwner, unitId); emit CreateUnit(unitId, unitType, unitHash); _locked = 1; } /// @dev Updates the unit hash. /// @param unitOwner Owner of the unit. /// @param unitId Unit Id. /// @param unitHash Updated IPFS hash of the unit. /// @return success True, if function executed successfully. function updateHash(address unitOwner, uint256 unitId, bytes32 unitHash) external virtual returns (bool success) { // Check the manager privilege for a unit modification if (manager != msg.sender) { revert ManagerOnly(msg.sender, manager); } // Checking the unit ownership if (ownerOf(unitId) != unitOwner) { if (unitType == UnitType.Component) { revert ComponentNotFound(unitId); } else { revert AgentNotFound(unitId); } } // Check for the hash value if (unitHash == 0) { revert ZeroValue(); } mapUnitIdHashes[unitId].push(unitHash); success = true; emit UpdateUnitHash(unitId, unitType, unitHash); } /// @dev Gets the unit instance. /// @param unitId Unit Id. /// @return unit Corresponding Unit struct. function getUnit(uint256 unitId) external view virtual returns (Unit memory unit) { unit = mapUnits[unitId]; } /// @dev Gets unit dependencies. /// @param unitId Unit Id. /// @return numDependencies The number of units in the dependency list. /// @return dependencies The list of unit dependencies. function getDependencies(uint256 unitId) external view virtual returns (uint256 numDependencies, uint32[] memory dependencies) { Unit memory unit = mapUnits[unitId]; return (unit.dependencies.length, unit.dependencies); } /// @dev Gets updated unit hashes. /// @param unitId Unit Id. /// @return numHashes Number of hashes. /// @return unitHashes The list of updated unit hashes (without the primary one). function getUpdatedHashes(uint256 unitId) external view virtual returns (uint256 numHashes, bytes32[] memory unitHashes) { unitHashes = mapUnitIdHashes[unitId]; return (unitHashes.length, unitHashes); } /// @dev Gets the set of subcomponent Ids from a local map of subcomponent. /// @param unitId Component Id. /// @return subComponentIds Set of subcomponent Ids. /// @return numSubComponents Number of subcomponents. function getLocalSubComponents(uint256 unitId) external view returns (uint32[] memory subComponentIds, uint256 numSubComponents) { subComponentIds = mapSubComponents[uint256(unitId)]; numSubComponents = subComponentIds.length; } /// @dev Gets subcomponents of a provided unit Id. /// @param subcomponentsFromType Type of the unit: component or agent. /// @param unitId Unit Id. /// @return subComponentIds Set of subcomponents. function _getSubComponents(UnitType subcomponentsFromType, uint32 unitId) internal view virtual returns (uint32[] memory subComponentIds); /// @dev Calculates the set of subcomponent Ids. /// @param subcomponentsFromType Type of the unit: component or agent. /// @param unitIds Unit Ids. /// @return subComponentIds Subcomponent Ids. function _calculateSubComponents(UnitType subcomponentsFromType, uint32[] memory unitIds) internal view virtual returns (uint32[] memory subComponentIds) { uint32 numUnits = uint32(unitIds.length); // Array of numbers of components per each unit Id uint32[] memory numComponents = new uint32[](numUnits); // 2D array of all the sets of components per each unit Id uint32[][] memory components = new uint32[][](numUnits); // Get total possible number of components and lists of components uint32 maxNumComponents; for (uint32 i = 0; i < numUnits; ++i) { // Get subcomponents for each unit Id based on the subcomponentsFromType components[i] = _getSubComponents(subcomponentsFromType, unitIds[i]); numComponents[i] = uint32(components[i].length); maxNumComponents += numComponents[i]; } // Lists of components are sorted, take unique values in ascending order uint32[] memory allComponents = new uint32[](maxNumComponents); // Processed component counter uint32[] memory processedComponents = new uint32[](numUnits); // Minimal component Id uint32 minComponent; // Overall component counter uint32 counter; // Iterate until we process all components, at the maximum of the sum of all the components in all units for (counter = 0; counter < maxNumComponents; ++counter) { // Index of a minimal component uint32 minIdxComponent; // Amount of components identified as the next minimal component number uint32 numComponentsCheck; uint32 tryMinComponent = type(uint32).max; // Assemble an array of all first components from each component array for (uint32 i = 0; i < numUnits; ++i) { // Either get a component that has a higher id than the last one ore reach the end of the processed Ids for (; processedComponents[i] < numComponents[i]; ++processedComponents[i]) { if (minComponent < components[i][processedComponents[i]]) { // Out of those component Ids that are higher than the last one, pick the minimal one if (components[i][processedComponents[i]] < tryMinComponent) { tryMinComponent = components[i][processedComponents[i]]; minIdxComponent = i; } // If we found a minimal component Id, we increase the counter and break to start the search again numComponentsCheck++; break; } } } minComponent = tryMinComponent; // If minimal component Id is greater than the last one, it should be added, otherwise we reached the end if (numComponentsCheck > 0) { allComponents[counter] = minComponent; processedComponents[minIdxComponent]++; } else { break; } } // Return the exact set of found subcomponents with the counter length subComponentIds = new uint32[](counter); for (uint32 i = 0; i < counter; ++i) { subComponentIds[i] = allComponents[i]; } } /// @dev Gets the hash of the unit. /// @param unitId Unit Id. /// @return Unit hash. function _getUnitHash(uint256 unitId) internal view override returns (bytes32) { return mapUnits[unitId].unitHash; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; /// @dev Required interface for the component / agent manipulation. interface IRegistry { enum UnitType { Component, Agent } /// @dev Creates component / agent. /// @param unitOwner Owner of the component / agent. /// @param unitHash IPFS hash of the component / agent. /// @param dependencies Set of component dependencies in a sorted ascending order. /// @return The id of a minted component / agent. function create( address unitOwner, bytes32 unitHash, uint32[] memory dependencies ) external returns (uint256); /// @dev Updates the component / agent hash. /// @param owner Owner of the component / agent. /// @param unitId Unit Id. /// @param unitHash Updated IPFS hash of the component / agent. /// @return success True, if function executed successfully. function updateHash(address owner, uint256 unitId, bytes32 unitHash) external returns (bool success); /// @dev Gets subcomponents of a provided unit Id from a local public map. /// @param unitId Unit Id. /// @return subComponentIds Set of subcomponents. /// @return numSubComponents Number of subcomponents. function getLocalSubComponents(uint256 unitId) external view returns (uint32[] memory subComponentIds, uint256 numSubComponents); /// @dev Calculates the set of subcomponent Ids. /// @param unitIds Set of unit Ids. /// @return subComponentIds Subcomponent Ids. function calculateSubComponents(uint32[] memory unitIds) external view returns (uint32[] memory subComponentIds); /// @dev Gets updated component / agent hashes. /// @param unitId Unit Id. /// @return numHashes Number of hashes. /// @return unitHashes The list of component / agent hashes. function getUpdatedHashes(uint256 unitId) external view returns (uint256 numHashes, bytes32[] memory unitHashes); /// @dev Gets the total supply of components / agents. /// @return Total supply. function totalSupply() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "../lib/solmate/src/tokens/ERC721.sol"; import "./interfaces/IErrorsRegistries.sol"; /// @title Generic Registry - Smart contract for generic registry template /// @author Aleksandr Kuperman - <[email protected]> abstract contract GenericRegistry is IErrorsRegistries, ERC721 { event OwnerUpdated(address indexed owner); event ManagerUpdated(address indexed manager); event BaseURIChanged(string baseURI); // Owner address address public owner; // Unit manager address public manager; // Base URI string public baseURI; // Unit counter uint256 public totalSupply; // Reentrancy lock uint256 internal _locked = 1; // To better understand the CID anatomy, please refer to: https://proto.school/anatomy-of-a-cid/05 // CID = <multibase_encoding>multibase_encoding(<cid-version><multicodec><multihash-algorithm><multihash-length><multihash-hash>) // CID prefix = <multibase_encoding>multibase_encoding(<cid-version><multicodec><multihash-algorithm><multihash-length>) // to complement the multibase_encoding(<multihash-hash>) // multibase_encoding = base16 = "f" // cid-version = version 1 = "0x01" // multicodec = dag-pb = "0x70" // multihash-algorithm = sha2-256 = "0x12" // multihash-length = 256 bits = "0x20" string public constant CID_PREFIX = "f01701220"; /// @dev Changes the owner address. /// @param newOwner Address of a new owner. function changeOwner(address newOwner) external virtual { // Check for the ownership if (msg.sender != owner) { revert OwnerOnly(msg.sender, owner); } // Check for the zero address if (newOwner == address(0)) { revert ZeroAddress(); } owner = newOwner; emit OwnerUpdated(newOwner); } /// @dev Changes the unit manager. /// @param newManager Address of a new unit manager. function changeManager(address newManager) external virtual { if (msg.sender != owner) { revert OwnerOnly(msg.sender, owner); } // Check for the zero address if (newManager == address(0)) { revert ZeroAddress(); } manager = newManager; emit ManagerUpdated(newManager); } /// @dev Checks for the unit existence. /// @notice Unit counter starts from 1. /// @param unitId Unit Id. /// @return true if the unit exists, false otherwise. function exists(uint256 unitId) external view virtual returns (bool) { return unitId > 0 && unitId < (totalSupply + 1); } /// @dev Sets unit base URI. /// @param bURI Base URI string. function setBaseURI(string memory bURI) external virtual { // Check for the ownership if (msg.sender != owner) { revert OwnerOnly(msg.sender, owner); } // Check for the zero value if (bytes(bURI).length == 0) { revert ZeroValue(); } baseURI = bURI; emit BaseURIChanged(bURI); } /// @dev Gets the valid unit Id from the provided index. /// @notice Unit counter starts from 1. /// @param id Unit counter. /// @return unitId Unit Id. function tokenByIndex(uint256 id) external view virtual returns (uint256 unitId) { unitId = id + 1; if (unitId > totalSupply) { revert Overflow(unitId, totalSupply); } } // Open sourced from: https://stackoverflow.com/questions/67893318/solidity-how-to-represent-bytes32-as-string /// @dev Converts bytes16 input data to hex16. /// @notice This method converts bytes into the same bytes-character hex16 representation. /// @param data bytes16 input data. /// @return result hex16 conversion from the input bytes16 data. function _toHex16(bytes16 data) internal pure returns (bytes32 result) { result = bytes32 (data) & 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 | (bytes32 (data) & 0x0000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000) >> 64; result = result & 0xFFFFFFFF000000000000000000000000FFFFFFFF000000000000000000000000 | (result & 0x00000000FFFFFFFF000000000000000000000000FFFFFFFF0000000000000000) >> 32; result = result & 0xFFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 | (result & 0x0000FFFF000000000000FFFF000000000000FFFF000000000000FFFF00000000) >> 16; result = result & 0xFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 | (result & 0x00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000) >> 8; result = (result & 0xF000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000) >> 4 | (result & 0x0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00) >> 8; result = bytes32 (0x3030303030303030303030303030303030303030303030303030303030303030 + uint256 (result) + (uint256 (result) + 0x0606060606060606060606060606060606060606060606060606060606060606 >> 4 & 0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F) * 39); } /// @dev Gets the hash of the unit. /// @param unitId Unit Id. /// @return Unit hash. function _getUnitHash(uint256 unitId) internal view virtual returns (bytes32); /// @dev Returns unit token URI. /// @notice Expected multicodec: dag-pb; hashing function: sha2-256, with base16 encoding and leading CID_PREFIX removed. /// @param unitId Unit Id. /// @return Unit token URI string. function tokenURI(uint256 unitId) public view virtual override returns (string memory) { bytes32 unitHash = _getUnitHash(unitId); // Parse 2 parts of bytes32 into left and right hex16 representation, and concatenate into string // adding the base URI and a cid prefix for the full base16 multibase prefix IPFS hash representation return string(abi.encodePacked(baseURI, CID_PREFIX, _toHex16(bytes16(unitHash)), _toHex16(bytes16(unitHash << 128)))); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*////////////////////////////////////////////////////////////// ERC721 BALANCE/OWNER STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) internal _ownerOf; mapping(address => uint256) internal _balanceOf; function ownerOf(uint256 id) public view virtual returns (address owner) { require((owner = _ownerOf[id]) != address(0), "NOT_MINTED"); } function balanceOf(address owner) public view virtual returns (uint256) { require(owner != address(0), "ZERO_ADDRESS"); return _balanceOf[owner]; } /*////////////////////////////////////////////////////////////// ERC721 APPROVAL STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = _ownerOf[id]; require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == _ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _balanceOf[from]--; _balanceOf[to]++; } _ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if (to.code.length != 0) require( ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if (to.code.length != 0) require( ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(_ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { _balanceOf[to]++; } _ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = _ownerOf[id]; require(owner != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { _balanceOf[owner]--; } delete _ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } /*////////////////////////////////////////////////////////////// INTERNAL SAFE MINT LOGIC //////////////////////////////////////////////////////////////*/ function _safeMint(address to, uint256 id) internal virtual { _mint(to, id); if (to.code.length != 0) require( ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function _safeMint( address to, uint256 id, bytes memory data ) internal virtual { _mint(to, id); if (to.code.length != 0) require( ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721TokenReceiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721TokenReceiver.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; /// @dev Errors. interface IErrorsRegistries { /// @dev Only `manager` has a privilege, but the `sender` was provided. /// @param sender Sender address. /// @param manager Required sender address as a manager. error ManagerOnly(address sender, address manager); /// @dev Only `owner` has a privilege, but the `sender` was provided. /// @param sender Sender address. /// @param owner Required sender address as an owner. error OwnerOnly(address sender, address owner); /// @dev Hash already exists in the records. error HashExists(); /// @dev Provided zero address. error ZeroAddress(); /// @dev Agent Id is not correctly provided for the current routine. /// @param agentId Component Id. error WrongAgentId(uint256 agentId); /// @dev Wrong length of two arrays. /// @param numValues1 Number of values in a first array. /// @param numValues2 Numberf of values in a second array. error WrongArrayLength(uint256 numValues1, uint256 numValues2); /// @dev Canonical agent Id is not found. /// @param agentId Canonical agent Id. error AgentNotFound(uint256 agentId); /// @dev Component Id is not found. /// @param componentId Component Id. error ComponentNotFound(uint256 componentId); /// @dev Multisig threshold is out of bounds. /// @param currentThreshold Current threshold value. /// @param minThreshold Minimum possible threshold value. /// @param maxThreshold Maximum possible threshold value. error WrongThreshold(uint256 currentThreshold, uint256 minThreshold, uint256 maxThreshold); /// @dev Agent instance is already registered with a specified `operator`. /// @param operator Operator that registered an instance. error AgentInstanceRegistered(address operator); /// @dev Wrong operator is specified when interacting with a specified `serviceId`. /// @param serviceId Service Id. error WrongOperator(uint256 serviceId); /// @dev Operator has no registered instances in the service. /// @param operator Operator address. /// @param serviceId Service Id. error OperatorHasNoInstances(address operator, uint256 serviceId); /// @dev Canonical `agentId` is not found as a part of `serviceId`. /// @param agentId Canonical agent Id. /// @param serviceId Service Id. error AgentNotInService(uint256 agentId, uint256 serviceId); /// @dev The contract is paused. error Paused(); /// @dev Zero value when it has to be different from zero. error ZeroValue(); /// @dev Value overflow. /// @param provided Overflow value. /// @param max Maximum possible value. error Overflow(uint256 provided, uint256 max); /// @dev Service must be inactive. /// @param serviceId Service Id. error ServiceMustBeInactive(uint256 serviceId); /// @dev All the agent instance slots for a specific `serviceId` are filled. /// @param serviceId Service Id. error AgentInstancesSlotsFilled(uint256 serviceId); /// @dev Wrong state of a service. /// @param state Service state. /// @param serviceId Service Id. error WrongServiceState(uint256 state, uint256 serviceId); /// @dev Only own service multisig is allowed. /// @param provided Provided address. /// @param expected Expected multisig address. /// @param serviceId Service Id. error OnlyOwnServiceMultisig(address provided, address expected, uint256 serviceId); /// @dev Multisig is not whitelisted. /// @param multisig Address of a multisig implementation. error UnauthorizedMultisig(address multisig); /// @dev Incorrect deposit provided for the registration activation. /// @param sent Sent amount. /// @param expected Expected amount. /// @param serviceId Service Id. error IncorrectRegistrationDepositValue(uint256 sent, uint256 expected, uint256 serviceId); /// @dev Insufficient value provided for the agent instance bonding. /// @param sent Sent amount. /// @param expected Expected amount. /// @param serviceId Service Id. error IncorrectAgentBondingValue(uint256 sent, uint256 expected, uint256 serviceId); /// @dev Failure of a transfer. /// @param token Address of a token. /// @param from Address `from`. /// @param to Address `to`. /// @param value Value. error TransferFailed(address token, address from, address to, uint256 value); /// @dev Caught reentrancy violation. error ReentrancyGuard(); }
{ "optimizer": { "enabled": true, "runs": 750 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_componentRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"AgentInstanceRegistered","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"AgentInstancesSlotsFilled","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentNotFound","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"AgentNotInService","type":"error"},{"inputs":[{"internalType":"uint256","name":"componentId","type":"uint256"}],"name":"ComponentNotFound","type":"error"},{"inputs":[],"name":"HashExists","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"IncorrectAgentBondingValue","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"IncorrectRegistrationDepositValue","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"manager","type":"address"}],"name":"ManagerOnly","type":"error"},{"inputs":[{"internalType":"address","name":"provided","type":"address"},{"internalType":"address","name":"expected","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OnlyOwnServiceMultisig","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"OperatorHasNoInstances","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Overflow","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"OwnerOnly","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[],"name":"ReentrancyGuard","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"ServiceMustBeInactive","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferFailed","type":"error"},{"inputs":[{"internalType":"address","name":"multisig","type":"address"}],"name":"UnauthorizedMultisig","type":"error"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"WrongAgentId","type":"error"},{"inputs":[{"internalType":"uint256","name":"numValues1","type":"uint256"},{"internalType":"uint256","name":"numValues2","type":"uint256"}],"name":"WrongArrayLength","type":"error"},{"inputs":[{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"WrongOperator","type":"error"},{"inputs":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"uint256","name":"serviceId","type":"uint256"}],"name":"WrongServiceState","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentThreshold","type":"uint256"},{"internalType":"uint256","name":"minThreshold","type":"uint256"},{"internalType":"uint256","name":"maxThreshold","type":"uint256"}],"name":"WrongThreshold","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"unitId","type":"uint256"},{"indexed":false,"internalType":"enum UnitRegistry.UnitType","name":"uType","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"unitHash","type":"bytes32"}],"name":"CreateUnit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"unitId","type":"uint256"},{"indexed":false,"internalType":"enum UnitRegistry.UnitType","name":"uType","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"unitHash","type":"bytes32"}],"name":"UpdateUnitHash","type":"event"},{"inputs":[],"name":"CID_PREFIX","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"unitIds","type":"uint32[]"}],"name":"calculateSubComponents","outputs":[{"internalType":"uint32[]","name":"subComponentIds","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"componentRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"unitOwner","type":"address"},{"internalType":"bytes32","name":"unitHash","type":"bytes32"},{"internalType":"uint32[]","name":"dependencies","type":"uint32[]"}],"name":"create","outputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"getDependencies","outputs":[{"internalType":"uint256","name":"numDependencies","type":"uint256"},{"internalType":"uint32[]","name":"dependencies","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"getLocalSubComponents","outputs":[{"internalType":"uint32[]","name":"subComponentIds","type":"uint32[]"},{"internalType":"uint256","name":"numSubComponents","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"getUnit","outputs":[{"components":[{"internalType":"bytes32","name":"unitHash","type":"bytes32"},{"internalType":"uint32[]","name":"dependencies","type":"uint32[]"}],"internalType":"struct UnitRegistry.Unit","name":"unit","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"getUpdatedHashes","outputs":[{"internalType":"uint256","name":"numHashes","type":"uint256"},{"internalType":"bytes32[]","name":"unitHashes","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapSubComponents","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapUnitIdHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mapUnits","outputs":[{"internalType":"bytes32","name":"unitHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"bURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"unitId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitType","outputs":[{"internalType":"enum UnitRegistry.UnitType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"unitOwner","type":"address"},{"internalType":"uint256","name":"unitId","type":"uint256"},{"internalType":"bytes32","name":"unitHash","type":"bytes32"}],"name":"updateHash","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526001600a553480156200001657600080fd5b506040516200329e3803806200329e833981016040819052620000399162000191565b6001848460006200004b8382620002d3565b5060016200005a8282620002d3565b5050508060018111156200007257620000726200039f565b60808160018111156200008957620000896200039f565b905250600890506200009c8382620002d3565b506001600160a01b031660a0525050600680546001600160a01b0319163317905550620003b5565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000ec57600080fd5b81516001600160401b0380821115620001095762000109620000c4565b604051601f8301601f19908116603f01168101908282118183101715620001345762000134620000c4565b816040528381526020925086838588010111156200015157600080fd5b600091505b8382101562000175578582018301518183018401529082019062000156565b83821115620001875760008385830101525b9695505050505050565b60008060008060808587031215620001a857600080fd5b84516001600160401b0380821115620001c057600080fd5b620001ce88838901620000da565b95506020870151915080821115620001e557600080fd5b620001f388838901620000da565b945060408701519150808211156200020a57600080fd5b506200021987828801620000da565b606087015190935090506001600160a01b03811681146200023957600080fd5b939692955090935050565b600181811c908216806200025957607f821691505b6020821081036200027a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ce57600081815260208120601f850160051c81016020861015620002a95750805b601f850160051c820191505b81811015620002ca57828155600101620002b5565b5050505b505050565b81516001600160401b03811115620002ef57620002ef620000c4565b620003078162000300845462000244565b8462000280565b602080601f8311600181146200033f5760008415620003265750858301515b600019600386901b1c1916600185901b178555620002ca565b600085815260208120601f198616915b8281101562000370578886015182559484019460019091019084016200034f565b50858210156200038f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051612e9962000405600039600081816105d801528181611ebb015261214301526000818161049401528181610be501528181610cc70152818161156801526116cc0152612e996000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806370a0823111610145578063a6f9dae1116100bd578063c87b56dd1161008c578063fbfd24bf11610071578063fbfd24bf146105c0578063ff0039cb146105d3578063ffa1ad74146105fa57600080fd5b8063c87b56dd1461057f578063e985e9c51461059257600080fd5b8063a6f9dae114610525578063b88d4fde14610538578063bf733f6b1461054b578063c152bdfe1461056c57600080fd5b80638da5cb5b11610114578063a22cb465116100f9578063a22cb465146104de578063a25e29d3146104f1578063a3fbbaae1461051257600080fd5b80638da5cb5b146104c357806395d89b41146104d657600080fd5b806370a082311461042c578063716be0e01461043f5780637c5e63e01461046757806385ad4f901461048f57600080fd5b8063481c6a75116101d85780634fa706d7116101a75780636352211e1161018c5780636352211e146103f0578063661a0d0b146104035780636c0360eb1461042457600080fd5b80634fa706d7146103bd57806355f804b3146103dd57600080fd5b8063481c6a7514610371578063482c5c3c146103845780634f558e79146103975780634f6ccce7146103aa57600080fd5b806309b3b87e1161022f57806318160ddd1161021457806318160ddd1461033457806323b872dd1461034b57806342842e0e1461035e57600080fd5b806309b3b87e146102f45780631655bfbe1461031457600080fd5b806301ffc9a71461026157806306fdde0314610289578063081812fc1461029e578063095ea7b3146102df575b600080fd5b61027461026f36600461244d565b61061e565b60405190151581526020015b60405180910390f35b610291610670565b60405161028091906124a1565b6102c76102ac3660046124d4565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102f26102ed366004612504565b6106fe565b005b61030761030236600461261f565b6107e5565b604051610280919061269d565b6103276103223660046124d4565b6107f2565b60405161028091906126b0565b61033d60095481565b604051908152602001610280565b6102f2610359366004612703565b6108ae565b6102f261036c366004612703565b610a88565b6007546102c7906001600160a01b031681565b61027461039236600461273f565b610b7d565b6102746103a53660046124d4565b610cfd565b61033d6103b83660046124d4565b610d1f565b61033d6103cb3660046124d4565b600d6020526000908152604090205481565b6102f26103eb366004612772565b610d64565b6102c76103fe3660046124d4565b610e0d565b6104166104113660046124d4565b610e72565b604051610280929190612807565b610291610f35565b61033d61043a366004612820565b610f42565b61045261044d36600461283b565b610fb6565b60405163ffffffff9091168152602001610280565b6102916040518060400160405280600981526020016806630313730313232360bc1b81525081565b6104b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516102809190612895565b6006546102c7906001600160a01b031681565b610291610fff565b6102f26104ec3660046128a3565b61100c565b6105046104ff3660046124d4565b611078565b6040516102809291906128df565b6102f2610520366004612820565b611109565b6102f2610533366004612820565b6111ba565b6102f2610546366004612901565b61126b565b61055e6105593660046124d4565b611350565b60405161028092919061299c565b61033d61057a36600461283b565b6113b4565b61029161058d3660046124d4565b6113e5565b6102746105a03660046129ea565b600560209081526000928352604080842090915290825290205460ff1681565b61033d6105ce366004612a1d565b61145c565b6102c77f000000000000000000000000000000000000000000000000000000000000000081565b610291604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b03198316148061064f57506380ac58cd60e01b6001600160e01b03198316145b8061066a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461067d90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546106a990612a74565b80156106f65780601f106106cb576101008083540402835291602001916106f6565b820191906000526020600020905b8154815290600101906020018083116106d957829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061074757506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107895760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b606061066a600183611711565b6040805180820190915260008152606060208201526000828152600d602090815260409182902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561089e57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116108615790505b5050505050815250509050919050565b6000818152600260205260409020546001600160a01b038481169116146109175760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610780565b6001600160a01b0382166109615760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610780565b336001600160a01b038416148061099b57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806109bc57506000818152600460205260409020546001600160a01b031633145b6109f95760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610780565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610a938383836108ae565b6001600160a01b0382163b15610b7857604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612aae565b6001600160e01b03191614610b785760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b505050565b6007546000906001600160a01b03163314610bc05760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610780565b836001600160a01b0316610bd384610e0d565b6001600160a01b031614610c525760007f00000000000000000000000000000000000000000000000000000000000000006001811115610c1557610c1561285d565b03610c3657604051634915061960e11b815260048101849052602401610780565b604051630ede975960e01b815260048101849052602401610780565b6000829003610c7457604051637c946ed760e01b815260040160405180910390fd5b506000828152600b6020908152604080832080546001818101835591855292909320909101839055517fdef878acc6b6cc4320a973cf2022bf4ccad90375867c044d23b4e22e9c3b1bda90610cee9085907f0000000000000000000000000000000000000000000000000000000000000000908690612acb565b60405180910390a19392505050565b6000808211801561066a5750600954610d17906001612b03565b821092915050565b6000610d2c826001612b03565b9050600954811115610d5f57600954604051637ae5968560e01b8152610780918391600401918252602082015260400190565b919050565b6006546001600160a01b03163314610da45760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b8051600003610dc657604051637c946ed760e01b815260040160405180910390fd5b6008610dd28282612b69565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610e0291906124a1565b60405180910390a150565b6000818152600260205260409020546001600160a01b031680610d5f5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610780565b600060606000600d60008581526020019081526020016000206040518060400160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f1b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610ede5790505b505050919092525050506020015180519590945092505050565b6008805461067d90612a74565b60006001600160a01b038216610f9a5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610780565b506001600160a01b031660009081526003602052604090205490565b600c6020528160005260406000208181548110610fd257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6001805461067d90612a74565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600c602090815260408083208054825181850281018501909352808352606094938301828280156110f957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110bc5790505b5050505050915081519050915091565b6006546001600160a01b031633146111495760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0381166111705760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6006546001600160a01b031633146111fa5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0381166112215760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6112768585856108ae565b6001600160a01b0384163b1561134957604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906112bc9033908a90899089908990600401612c29565b6020604051808303816000875af11580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190612aae565b6001600160e01b031916146113495760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b5050505050565b6000818152600b6020908152604080832080548251818502810185019093528083526060938301828280156113a457602002820191906000526020600020905b815481526020019060010190808311611390575b5050505050905080519150915091565b600b60205281600052604060002081815481106113d057600080fd5b90600052602060002001600091509150505481565b6000818152600d60205260408120546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061142583611cc5565b611432608085901b611cc5565b6040516020016114459493929190612c7d565b604051602081830303815290604052915050919050565b60006001600a541115611482576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146114c75760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0384166114ee5760405163d92e233d60e01b815260040160405180910390fd5b600083900361151057604051637c946ed760e01b815260040160405180910390fd5b5060095461151e8282611e95565b8061152881612d0f565b6000818152600d6020908152604090912086815585519294509250611554916001840191860190612370565b506000611562600085611711565b905060007f000000000000000000000000000000000000000000000000000000000000000060018111156115985761159861285d565b0361167957805160006115ac826001612b03565b67ffffffffffffffff8111156115c4576115c461252e565b6040519080825280602002602001820160405280156115ed578160200160208202803683370190505b50905060005b8281101561164c5783818151811061160d5761160d612d28565b602002602001015182828151811061162757611627612d28565b63ffffffff9092166020928302919091019091015261164581612d0f565b90506115f3565b508481838151811061166057611660612d28565b63ffffffff909216602092830291909101909101529150505b6000838152600c60209081526040909120825161169892840190612370565b5060098390556116a8868461201d565b7f97587a61bb0b1b9b24e5325039519ae27f44ca15ef278df10f4ab0195205c29c837f0000000000000000000000000000000000000000000000000000000000000000876040516116fb93929190612acb565b60405180910390a150506001600a559392505050565b8051606090600063ffffffff821667ffffffffffffffff8111156117375761173761252e565b604051908082528060200260200182016040528015611760578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff8111156117845761178461252e565b6040519080825280602002602001820160405280156117b757816020015b60608152602001906001900390816117a25790505b5090506000805b8463ffffffff168163ffffffff1610156118a4576117fb88888363ffffffff16815181106117ee576117ee612d28565b602002602001015161210d565b838263ffffffff168151811061181357611813612d28565b6020026020010181905250828163ffffffff168151811061183657611836612d28565b602002602001015151848263ffffffff168151811061185757611857612d28565b63ffffffff928316602091820292909201015284518591831690811061187f5761187f612d28565b6020026020010151826118929190612d3e565b915061189d81612d66565b90506117be565b5060008163ffffffff1667ffffffffffffffff8111156118c6576118c661252e565b6040519080825280602002602001820160405280156118ef578160200160208202803683370190505b50905060008563ffffffff1667ffffffffffffffff8111156119135761191361252e565b60405190808252806020026020018201604052801561193c578160200160208202803683370190505b5090506000805b8463ffffffff168163ffffffff161015611bf75760008063ffffffff815b8b63ffffffff168163ffffffff161015611b67575b8a8163ffffffff168151811061198e5761198e612d28565b602002602001015163ffffffff16878263ffffffff16815181106119b4576119b4612d28565b602002602001015163ffffffff161015611b5757898163ffffffff16815181106119e0576119e0612d28565b6020026020010151878263ffffffff1681518110611a0057611a00612d28565b602002602001015163ffffffff1681518110611a1e57611a1e612d28565b602002602001015163ffffffff168663ffffffff161015611b20578163ffffffff168a8263ffffffff1681518110611a5857611a58612d28565b6020026020010151888363ffffffff1681518110611a7857611a78612d28565b602002602001015163ffffffff1681518110611a9657611a96612d28565b602002602001015163ffffffff161015611b0e57898163ffffffff1681518110611ac257611ac2612d28565b6020026020010151878263ffffffff1681518110611ae257611ae2612d28565b602002602001015163ffffffff1681518110611b0057611b00612d28565b602002602001015191508093505b82611b1881612d66565b935050611b57565b868163ffffffff1681518110611b3857611b38612d28565b602002602001018051611b4a90612d66565b63ffffffff169052611976565b611b6081612d66565b9050611961565b5093508363ffffffff821615611bdb5784878563ffffffff1681518110611b9057611b90612d28565b63ffffffff9283166020918202929092010152865187918516908110611bb857611bb8612d28565b602002602001018051809190611bcd90612d66565b63ffffffff16905250611be3565b505050611bf7565b50505080611bf090612d66565b9050611943565b8063ffffffff1667ffffffffffffffff811115611c1657611c1661252e565b604051908082528060200260200182016040528015611c3f578160200160208202803683370190505b50985060005b8163ffffffff168163ffffffff161015611cb657848163ffffffff1681518110611c7157611c71612d28565b60200260200101518a8263ffffffff1681518110611c9157611c91612d28565b63ffffffff90921660209283029190910190910152611caf81612d66565b9050611c45565b50505050505050505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790611e31827f0606060606060606060606060606060606060606060606060606060606060606612b03565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f166027611e619190612d89565b611e8b827f3030303030303030303030303030303030303030303030303030303030303030612b03565b61066a9190612b03565b8151600003611eb757604051637c946ed760e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3b9190612da8565b90506000805b845181101561134957611f55826001612d3e565b63ffffffff16858281518110611f6d57611f6d612d28565b602002602001015163ffffffff161080611fab57508263ffffffff16858281518110611f9b57611f9b612d28565b602002602001015163ffffffff16115b15611ff057848181518110611fc257611fc2612d28565b6020026020010151604051634915061960e11b8152600401610780919063ffffffff91909116815260200190565b84818151811061200257612002612d28565b602002602001015191508061201690612d0f565b9050611f41565b6120278282612256565b6001600160a01b0382163b1561210957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af115801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf9190612aae565b6001600160e01b031916146121095760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b5050565b606060008360018111156121235761212361285d565b036121c25760405163a25e29d360e01b815263ffffffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a25e29d390602401600060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ba9190810190612dc1565b50905061066a565b63ffffffff82166000908152600c60209081526040918290208054835181840281018401909452808452909183018282801561224957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161220c5790505b5050505050905092915050565b6001600160a01b0382166122a05760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610780565b6000818152600260205260409020546001600160a01b0316156123055760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610780565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280548282559060005260206000209060070160089004810192821561240f5791602002820160005b838211156123dd57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612399565b801561240d5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026123dd565b505b5061241b92915061241f565b5090565b5b8082111561241b5760008155600101612420565b6001600160e01b03198116811461244a57600080fd5b50565b60006020828403121561245f57600080fd5b813561246a81612434565b9392505050565b60005b8381101561248c578181015183820152602001612474565b8381111561249b576000848401525b50505050565b60208152600082518060208401526124c0816040850160208701612471565b601f01601f19169190910160400192915050565b6000602082840312156124e657600080fd5b5035919050565b80356001600160a01b0381168114610d5f57600080fd5b6000806040838503121561251757600080fd5b612520836124ed565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561256d5761256d61252e565b604052919050565b600067ffffffffffffffff82111561258f5761258f61252e565b5060051b60200190565b63ffffffff8116811461244a57600080fd5b600082601f8301126125bc57600080fd5b813560206125d16125cc83612575565b612544565b82815260059290921b840181019181810190868411156125f057600080fd5b8286015b8481101561261457803561260781612599565b83529183019183016125f4565b509695505050505050565b60006020828403121561263157600080fd5b813567ffffffffffffffff81111561264857600080fd5b612654848285016125ab565b949350505050565b600081518084526020808501945080840160005b8381101561269257815163ffffffff1687529582019590820190600101612670565b509495945050505050565b60208152600061246a602083018461265c565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561261457835163ffffffff1682529284019260019290920191908401906126dd565b60008060006060848603121561271857600080fd5b612721846124ed565b925061272f602085016124ed565b9150604084013590509250925092565b60008060006060848603121561275457600080fd5b61275d846124ed565b95602085013595506040909401359392505050565b6000602080838503121561278557600080fd5b823567ffffffffffffffff8082111561279d57600080fd5b818501915085601f8301126127b157600080fd5b8135818111156127c3576127c361252e565b6127d5601f8201601f19168501612544565b915080825286848285010111156127eb57600080fd5b8084840185840137600090820190930192909252509392505050565b828152604060208201526000612654604083018461265c565b60006020828403121561283257600080fd5b61246a826124ed565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6002811061289157634e487b7160e01b600052602160045260246000fd5b9052565b6020810161066a8284612873565b600080604083850312156128b657600080fd5b6128bf836124ed565b9150602083013580151581146128d457600080fd5b809150509250929050565b6040815260006128f2604083018561265c565b90508260208301529392505050565b60008060008060006080868803121561291957600080fd5b612922866124ed565b9450612930602087016124ed565b935060408601359250606086013567ffffffffffffffff8082111561295457600080fd5b818801915088601f83011261296857600080fd5b81358181111561297757600080fd5b89602082850101111561298957600080fd5b9699959850939650602001949392505050565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156129dd578451835293830193918301916001016129c1565b5090979650505050505050565b600080604083850312156129fd57600080fd5b612a06836124ed565b9150612a14602084016124ed565b90509250929050565b600080600060608486031215612a3257600080fd5b612a3b846124ed565b925060208401359150604084013567ffffffffffffffff811115612a5e57600080fd5b612a6a868287016125ab565b9150509250925092565b600181811c90821680612a8857607f821691505b602082108103612aa857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612ac057600080fd5b815161246a81612434565b83815260608101612adf6020830185612873565b826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612b1657612b16612aed565b500190565b601f821115610b7857600081815260208120601f850160051c81016020861015612b425750805b601f850160051c820191505b81811015612b6157828155600101612b4e565b505050505050565b815167ffffffffffffffff811115612b8357612b8361252e565b612b9781612b918454612a74565b84612b1b565b602080601f831160018114612bcc5760008415612bb45750858301515b600019600386901b1c1916600185901b178555612b61565b600085815260208120601f198616915b82811015612bfb57888601518255948401946001909101908401612bdc565b5085821015612c195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654612c8b81612a74565b60018281168015612ca35760018114612cb857612ce7565b60ff1984168752821515830287019450612ce7565b8a60005260208060002060005b85811015612cde5781548a820152908401908201612cc5565b50505082870194505b505050508551612cfb818360208a01612471565b019384525050602082015260400192915050565b600060018201612d2157612d21612aed565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818516808303821115612d5d57612d5d612aed565b01949350505050565b600063ffffffff808316818103612d7f57612d7f612aed565b6001019392505050565b6000816000190483118215151615612da357612da3612aed565b500290565b600060208284031215612dba57600080fd5b5051919050565b60008060408385031215612dd457600080fd5b825167ffffffffffffffff811115612deb57600080fd5b8301601f81018513612dfc57600080fd5b80516020612e0c6125cc83612575565b82815260059290921b83018101918181019088841115612e2b57600080fd5b938201935b83851015612e52578451612e4381612599565b82529382019390820190612e30565b96909101519597959650505050505056fea26469706673582212203d4721d5efb262bc9a6994f3d100ac4e1775214bcc86fb4f8261bcde7a5a106864736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000015bd56669f57192a97df41a2aa8f4403e9491776000000000000000000000000000000000000000000000000000000000000000e4167656e7420526567697374727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124155544f4e4f4c41532d4147454e542d56310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f676174657761792e6175746f6e6f6c61732e746563682f697066732f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025c5760003560e01c806370a0823111610145578063a6f9dae1116100bd578063c87b56dd1161008c578063fbfd24bf11610071578063fbfd24bf146105c0578063ff0039cb146105d3578063ffa1ad74146105fa57600080fd5b8063c87b56dd1461057f578063e985e9c51461059257600080fd5b8063a6f9dae114610525578063b88d4fde14610538578063bf733f6b1461054b578063c152bdfe1461056c57600080fd5b80638da5cb5b11610114578063a22cb465116100f9578063a22cb465146104de578063a25e29d3146104f1578063a3fbbaae1461051257600080fd5b80638da5cb5b146104c357806395d89b41146104d657600080fd5b806370a082311461042c578063716be0e01461043f5780637c5e63e01461046757806385ad4f901461048f57600080fd5b8063481c6a75116101d85780634fa706d7116101a75780636352211e1161018c5780636352211e146103f0578063661a0d0b146104035780636c0360eb1461042457600080fd5b80634fa706d7146103bd57806355f804b3146103dd57600080fd5b8063481c6a7514610371578063482c5c3c146103845780634f558e79146103975780634f6ccce7146103aa57600080fd5b806309b3b87e1161022f57806318160ddd1161021457806318160ddd1461033457806323b872dd1461034b57806342842e0e1461035e57600080fd5b806309b3b87e146102f45780631655bfbe1461031457600080fd5b806301ffc9a71461026157806306fdde0314610289578063081812fc1461029e578063095ea7b3146102df575b600080fd5b61027461026f36600461244d565b61061e565b60405190151581526020015b60405180910390f35b610291610670565b60405161028091906124a1565b6102c76102ac3660046124d4565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610280565b6102f26102ed366004612504565b6106fe565b005b61030761030236600461261f565b6107e5565b604051610280919061269d565b6103276103223660046124d4565b6107f2565b60405161028091906126b0565b61033d60095481565b604051908152602001610280565b6102f2610359366004612703565b6108ae565b6102f261036c366004612703565b610a88565b6007546102c7906001600160a01b031681565b61027461039236600461273f565b610b7d565b6102746103a53660046124d4565b610cfd565b61033d6103b83660046124d4565b610d1f565b61033d6103cb3660046124d4565b600d6020526000908152604090205481565b6102f26103eb366004612772565b610d64565b6102c76103fe3660046124d4565b610e0d565b6104166104113660046124d4565b610e72565b604051610280929190612807565b610291610f35565b61033d61043a366004612820565b610f42565b61045261044d36600461283b565b610fb6565b60405163ffffffff9091168152602001610280565b6102916040518060400160405280600981526020016806630313730313232360bc1b81525081565b6104b67f000000000000000000000000000000000000000000000000000000000000000181565b6040516102809190612895565b6006546102c7906001600160a01b031681565b610291610fff565b6102f26104ec3660046128a3565b61100c565b6105046104ff3660046124d4565b611078565b6040516102809291906128df565b6102f2610520366004612820565b611109565b6102f2610533366004612820565b6111ba565b6102f2610546366004612901565b61126b565b61055e6105593660046124d4565b611350565b60405161028092919061299c565b61033d61057a36600461283b565b6113b4565b61029161058d3660046124d4565b6113e5565b6102746105a03660046129ea565b600560209081526000928352604080842090915290825290205460ff1681565b61033d6105ce366004612a1d565b61145c565b6102c77f00000000000000000000000015bd56669f57192a97df41a2aa8f4403e949177681565b610291604051806040016040528060058152602001640312e302e360dc1b81525081565b60006301ffc9a760e01b6001600160e01b03198316148061064f57506380ac58cd60e01b6001600160e01b03198316145b8061066a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461067d90612a74565b80601f01602080910402602001604051908101604052809291908181526020018280546106a990612a74565b80156106f65780601f106106cb576101008083540402835291602001916106f6565b820191906000526020600020905b8154815290600101906020018083116106d957829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061074757506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107895760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b606061066a600183611711565b6040805180820190915260008152606060208201526000828152600d602090815260409182902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561089e57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116108615790505b5050505050815250509050919050565b6000818152600260205260409020546001600160a01b038481169116146109175760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610780565b6001600160a01b0382166109615760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610780565b336001600160a01b038416148061099b57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806109bc57506000818152600460205260409020546001600160a01b031633145b6109f95760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610780565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610a938383836108ae565b6001600160a01b0382163b15610b7857604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612aae565b6001600160e01b03191614610b785760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b505050565b6007546000906001600160a01b03163314610bc05760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610780565b836001600160a01b0316610bd384610e0d565b6001600160a01b031614610c525760007f00000000000000000000000000000000000000000000000000000000000000016001811115610c1557610c1561285d565b03610c3657604051634915061960e11b815260048101849052602401610780565b604051630ede975960e01b815260048101849052602401610780565b6000829003610c7457604051637c946ed760e01b815260040160405180910390fd5b506000828152600b6020908152604080832080546001818101835591855292909320909101839055517fdef878acc6b6cc4320a973cf2022bf4ccad90375867c044d23b4e22e9c3b1bda90610cee9085907f0000000000000000000000000000000000000000000000000000000000000001908690612acb565b60405180910390a19392505050565b6000808211801561066a5750600954610d17906001612b03565b821092915050565b6000610d2c826001612b03565b9050600954811115610d5f57600954604051637ae5968560e01b8152610780918391600401918252602082015260400190565b919050565b6006546001600160a01b03163314610da45760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b8051600003610dc657604051637c946ed760e01b815260040160405180910390fd5b6008610dd28282612b69565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610e0291906124a1565b60405180910390a150565b6000818152600260205260409020546001600160a01b031680610d5f5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e544544000000000000000000000000000000000000000000006044820152606401610780565b600060606000600d60008581526020019081526020016000206040518060400160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f1b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610ede5790505b505050919092525050506020015180519590945092505050565b6008805461067d90612a74565b60006001600160a01b038216610f9a5760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610780565b506001600160a01b031660009081526003602052604090205490565b600c6020528160005260406000208181548110610fd257600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6001805461067d90612a74565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600c602090815260408083208054825181850281018501909352808352606094938301828280156110f957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110bc5790505b5050505050915081519050915091565b6006546001600160a01b031633146111495760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0381166111705760405163d92e233d60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2c1c11af44aa5608f1dca38c00275c30ea091e02417d36e70e9a1538689c433d90600090a250565b6006546001600160a01b031633146111fa5760065460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0381166112215760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90600090a250565b6112768585856108ae565b6001600160a01b0384163b1561134957604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906112bc9033908a90899089908990600401612c29565b6020604051808303816000875af11580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190612aae565b6001600160e01b031916146113495760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b5050505050565b6000818152600b6020908152604080832080548251818502810185019093528083526060938301828280156113a457602002820191906000526020600020905b815481526020019060010190808311611390575b5050505050905080519150915091565b600b60205281600052604060002081815481106113d057600080fd5b90600052602060002001600091509150505481565b6000818152600d60205260408120546060915060086040518060400160405280600981526020016806630313730313232360bc1b81525061142583611cc5565b611432608085901b611cc5565b6040516020016114459493929190612c7d565b604051602081830303815290604052915050919050565b60006001600a541115611482576040516345f5ce8b60e11b815260040160405180910390fd5b6002600a556007546001600160a01b031633146114c75760075460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610780565b6001600160a01b0384166114ee5760405163d92e233d60e01b815260040160405180910390fd5b600083900361151057604051637c946ed760e01b815260040160405180910390fd5b5060095461151e8282611e95565b8061152881612d0f565b6000818152600d6020908152604090912086815585519294509250611554916001840191860190612370565b506000611562600085611711565b905060007f000000000000000000000000000000000000000000000000000000000000000160018111156115985761159861285d565b0361167957805160006115ac826001612b03565b67ffffffffffffffff8111156115c4576115c461252e565b6040519080825280602002602001820160405280156115ed578160200160208202803683370190505b50905060005b8281101561164c5783818151811061160d5761160d612d28565b602002602001015182828151811061162757611627612d28565b63ffffffff9092166020928302919091019091015261164581612d0f565b90506115f3565b508481838151811061166057611660612d28565b63ffffffff909216602092830291909101909101529150505b6000838152600c60209081526040909120825161169892840190612370565b5060098390556116a8868461201d565b7f97587a61bb0b1b9b24e5325039519ae27f44ca15ef278df10f4ab0195205c29c837f0000000000000000000000000000000000000000000000000000000000000001876040516116fb93929190612acb565b60405180910390a150506001600a559392505050565b8051606090600063ffffffff821667ffffffffffffffff8111156117375761173761252e565b604051908082528060200260200182016040528015611760578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff8111156117845761178461252e565b6040519080825280602002602001820160405280156117b757816020015b60608152602001906001900390816117a25790505b5090506000805b8463ffffffff168163ffffffff1610156118a4576117fb88888363ffffffff16815181106117ee576117ee612d28565b602002602001015161210d565b838263ffffffff168151811061181357611813612d28565b6020026020010181905250828163ffffffff168151811061183657611836612d28565b602002602001015151848263ffffffff168151811061185757611857612d28565b63ffffffff928316602091820292909201015284518591831690811061187f5761187f612d28565b6020026020010151826118929190612d3e565b915061189d81612d66565b90506117be565b5060008163ffffffff1667ffffffffffffffff8111156118c6576118c661252e565b6040519080825280602002602001820160405280156118ef578160200160208202803683370190505b50905060008563ffffffff1667ffffffffffffffff8111156119135761191361252e565b60405190808252806020026020018201604052801561193c578160200160208202803683370190505b5090506000805b8463ffffffff168163ffffffff161015611bf75760008063ffffffff815b8b63ffffffff168163ffffffff161015611b67575b8a8163ffffffff168151811061198e5761198e612d28565b602002602001015163ffffffff16878263ffffffff16815181106119b4576119b4612d28565b602002602001015163ffffffff161015611b5757898163ffffffff16815181106119e0576119e0612d28565b6020026020010151878263ffffffff1681518110611a0057611a00612d28565b602002602001015163ffffffff1681518110611a1e57611a1e612d28565b602002602001015163ffffffff168663ffffffff161015611b20578163ffffffff168a8263ffffffff1681518110611a5857611a58612d28565b6020026020010151888363ffffffff1681518110611a7857611a78612d28565b602002602001015163ffffffff1681518110611a9657611a96612d28565b602002602001015163ffffffff161015611b0e57898163ffffffff1681518110611ac257611ac2612d28565b6020026020010151878263ffffffff1681518110611ae257611ae2612d28565b602002602001015163ffffffff1681518110611b0057611b00612d28565b602002602001015191508093505b82611b1881612d66565b935050611b57565b868163ffffffff1681518110611b3857611b38612d28565b602002602001018051611b4a90612d66565b63ffffffff169052611976565b611b6081612d66565b9050611961565b5093508363ffffffff821615611bdb5784878563ffffffff1681518110611b9057611b90612d28565b63ffffffff9283166020918202929092010152865187918516908110611bb857611bb8612d28565b602002602001018051809190611bcd90612d66565b63ffffffff16905250611be3565b505050611bf7565b50505080611bf090612d66565b9050611943565b8063ffffffff1667ffffffffffffffff811115611c1657611c1661252e565b604051908082528060200260200182016040528015611c3f578160200160208202803683370190505b50985060005b8163ffffffff168163ffffffff161015611cb657848163ffffffff1681518110611c7157611c71612d28565b60200260200101518a8263ffffffff1681518110611c9157611c91612d28565b63ffffffff90921660209283029190910190910152611caf81612d66565b9050611c45565b50505050505050505092915050565b7aff00000000000000ff00000000000000ff00000000000000ff00006bffffffff0000000000000000604083901c9081167bffffffff00000000000000000000000000000000000000000000000084161760201c6fffffffff000000000000000000000000919091166001600160e01b031984161717601081901c9182167eff00000000000000ff00000000000000ff00000000000000ff000000000000821617600890811c7bff00000000000000ff00000000000000ff00000000000000ff000000939093167fff00000000000000ff00000000000000ff00000000000000ff000000000000009290921691909117919091179081901c7e0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f167f0f000f000f000f000f000f000f000f000f000f000f000f000f000f000f000f00600492831c161790611e31827f0606060606060606060606060606060606060606060606060606060606060606612b03565b901c7f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f166027611e619190612d89565b611e8b827f3030303030303030303030303030303030303030303030303030303030303030612b03565b61066a9190612b03565b8151600003611eb757604051637c946ed760e01b815260040160405180910390fd5b60007f00000000000000000000000015bd56669f57192a97df41a2aa8f4403e94917766001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3b9190612da8565b90506000805b845181101561134957611f55826001612d3e565b63ffffffff16858281518110611f6d57611f6d612d28565b602002602001015163ffffffff161080611fab57508263ffffffff16858281518110611f9b57611f9b612d28565b602002602001015163ffffffff16115b15611ff057848181518110611fc257611fc2612d28565b6020026020010151604051634915061960e11b8152600401610780919063ffffffff91909116815260200190565b84818151811061200257612002612d28565b602002602001015191508061201690612d0f565b9050611f41565b6120278282612256565b6001600160a01b0382163b1561210957604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af115801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf9190612aae565b6001600160e01b031916146121095760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610780565b5050565b606060008360018111156121235761212361285d565b036121c25760405163a25e29d360e01b815263ffffffff831660048201527f00000000000000000000000015bd56669f57192a97df41a2aa8f4403e94917766001600160a01b03169063a25e29d390602401600060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ba9190810190612dc1565b50905061066a565b63ffffffff82166000908152600c60209081526040918290208054835181840281018401909452808452909183018282801561224957602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161220c5790505b5050505050905092915050565b6001600160a01b0382166122a05760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610780565b6000818152600260205260409020546001600160a01b0316156123055760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610780565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280548282559060005260206000209060070160089004810192821561240f5791602002820160005b838211156123dd57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612399565b801561240d5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026123dd565b505b5061241b92915061241f565b5090565b5b8082111561241b5760008155600101612420565b6001600160e01b03198116811461244a57600080fd5b50565b60006020828403121561245f57600080fd5b813561246a81612434565b9392505050565b60005b8381101561248c578181015183820152602001612474565b8381111561249b576000848401525b50505050565b60208152600082518060208401526124c0816040850160208701612471565b601f01601f19169190910160400192915050565b6000602082840312156124e657600080fd5b5035919050565b80356001600160a01b0381168114610d5f57600080fd5b6000806040838503121561251757600080fd5b612520836124ed565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561256d5761256d61252e565b604052919050565b600067ffffffffffffffff82111561258f5761258f61252e565b5060051b60200190565b63ffffffff8116811461244a57600080fd5b600082601f8301126125bc57600080fd5b813560206125d16125cc83612575565b612544565b82815260059290921b840181019181810190868411156125f057600080fd5b8286015b8481101561261457803561260781612599565b83529183019183016125f4565b509695505050505050565b60006020828403121561263157600080fd5b813567ffffffffffffffff81111561264857600080fd5b612654848285016125ab565b949350505050565b600081518084526020808501945080840160005b8381101561269257815163ffffffff1687529582019590820190600101612670565b509495945050505050565b60208152600061246a602083018461265c565b60208082528251828201528281015160408084015280516060840181905260009291820190839060808601905b8083101561261457835163ffffffff1682529284019260019290920191908401906126dd565b60008060006060848603121561271857600080fd5b612721846124ed565b925061272f602085016124ed565b9150604084013590509250925092565b60008060006060848603121561275457600080fd5b61275d846124ed565b95602085013595506040909401359392505050565b6000602080838503121561278557600080fd5b823567ffffffffffffffff8082111561279d57600080fd5b818501915085601f8301126127b157600080fd5b8135818111156127c3576127c361252e565b6127d5601f8201601f19168501612544565b915080825286848285010111156127eb57600080fd5b8084840185840137600090820190930192909252509392505050565b828152604060208201526000612654604083018461265c565b60006020828403121561283257600080fd5b61246a826124ed565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6002811061289157634e487b7160e01b600052602160045260246000fd5b9052565b6020810161066a8284612873565b600080604083850312156128b657600080fd5b6128bf836124ed565b9150602083013580151581146128d457600080fd5b809150509250929050565b6040815260006128f2604083018561265c565b90508260208301529392505050565b60008060008060006080868803121561291957600080fd5b612922866124ed565b9450612930602087016124ed565b935060408601359250606086013567ffffffffffffffff8082111561295457600080fd5b818801915088601f83011261296857600080fd5b81358181111561297757600080fd5b89602082850101111561298957600080fd5b9699959850939650602001949392505050565b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156129dd578451835293830193918301916001016129c1565b5090979650505050505050565b600080604083850312156129fd57600080fd5b612a06836124ed565b9150612a14602084016124ed565b90509250929050565b600080600060608486031215612a3257600080fd5b612a3b846124ed565b925060208401359150604084013567ffffffffffffffff811115612a5e57600080fd5b612a6a868287016125ab565b9150509250925092565b600181811c90821680612a8857607f821691505b602082108103612aa857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612ac057600080fd5b815161246a81612434565b83815260608101612adf6020830185612873565b826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612b1657612b16612aed565b500190565b601f821115610b7857600081815260208120601f850160051c81016020861015612b425750805b601f850160051c820191505b81811015612b6157828155600101612b4e565b505050505050565b815167ffffffffffffffff811115612b8357612b8361252e565b612b9781612b918454612a74565b84612b1b565b602080601f831160018114612bcc5760008415612bb45750858301515b600019600386901b1c1916600185901b178555612b61565b600085815260208120601f198616915b82811015612bfb57888601518255948401946001909101908401612bdc565b5085821015612c195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808654612c8b81612a74565b60018281168015612ca35760018114612cb857612ce7565b60ff1984168752821515830287019450612ce7565b8a60005260208060002060005b85811015612cde5781548a820152908401908201612cc5565b50505082870194505b505050508551612cfb818360208a01612471565b019384525050602082015260400192915050565b600060018201612d2157612d21612aed565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818516808303821115612d5d57612d5d612aed565b01949350505050565b600063ffffffff808316818103612d7f57612d7f612aed565b6001019392505050565b6000816000190483118215151615612da357612da3612aed565b500290565b600060208284031215612dba57600080fd5b5051919050565b60008060408385031215612dd457600080fd5b825167ffffffffffffffff811115612deb57600080fd5b8301601f81018513612dfc57600080fd5b80516020612e0c6125cc83612575565b82815260059290921b83018101918181019088841115612e2b57600080fd5b938201935b83851015612e52578451612e4381612599565b82529382019390820190612e30565b96909101519597959650505050505056fea26469706673582212203d4721d5efb262bc9a6994f3d100ac4e1775214bcc86fb4f8261bcde7a5a106864736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000015bd56669f57192a97df41a2aa8f4403e9491776000000000000000000000000000000000000000000000000000000000000000e4167656e7420526567697374727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000124155544f4e4f4c41532d4147454e542d56310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f676174657761792e6175746f6e6f6c61732e746563682f697066732f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Agent Registry
Arg [1] : _symbol (string): AUTONOLAS-AGENT-V1
Arg [2] : _baseURI (string): https://gateway.autonolas.tech/ipfs/
Arg [3] : _componentRegistry (address): 0x15bd56669F57192a97dF41A2aa8f4403e9491776
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000015bd56669f57192a97df41a2aa8f4403e9491776
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4167656e74205265676973747279000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [7] : 4155544f4e4f4c41532d4147454e542d56310000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [9] : 68747470733a2f2f676174657761792e6175746f6e6f6c61732e746563682f69
Arg [10] : 7066732f00000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.