// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
/**
* @title CopperPotNFT
* @notice Copper Pot of Wealth — a fixed 200-piece collection on Robinhood Chain.
* Public, token-gated mint: any wallet holding at least `minHolding`
* of the Copper Pot ERC-20 coin can mint. 5% secondary-sale royalties
* are enforced via EIP-2981.
*
* "Before Robinhood, there was the Copper Pot."
*/
contract CopperPotNFT is ERC721, ERC2981, Ownable, ReentrancyGuard {
using Strings for uint256;
/// @notice Hard cap on the collection.
uint256 public constant MAX_SUPPLY = 200;
/// @notice The Copper Pot ERC-20 coin used to gate minting.
IERC20 public gateToken;
/// @notice Minimum gateToken balance (in raw token units) required to mint.
uint256 public minHolding;
/// @notice Maximum NFTs a single wallet may mint.
uint256 public maxPerWallet;
/// @notice Whether public minting is currently open.
bool public mintActive;
string private _baseTokenURI;
uint256 private _nextTokenId = 1;
/// @notice How many tokens each wallet has minted.
mapping(address => uint256) public mintedBy;
event Minted(address indexed minter, uint256 indexed tokenId);
event MintActiveSet(bool active);
event GateTokenSet(address token);
event MinHoldingSet(uint256 minHolding);
event MaxPerWalletSet(uint256 maxPerWallet);
event BaseURISet(string baseURI);
/**
* @param name_ Collection name (e.g. "Copper Pot of Wealth").
* @param symbol_ Collection symbol (e.g. "COPPOT").
* @param baseURI_ Metadata base URI (must end with a trailing slash).
* @param gateToken_ Address of the Copper Pot ERC-20 coin.
* @param minHolding_ Required raw balance to mint (e.g. 1_000_000 * 10**decimals).
* @param royaltyReceiver Address that receives secondary-sale royalties.
* @param royaltyBps Royalty in basis points (500 = 5%).
* @param initialOwner Contract owner / admin.
*/
constructor(
string memory name_,
string memory symbol_,
string memory baseURI_,
address gateToken_,
uint256 minHolding_,
address royaltyReceiver,
uint96 royaltyBps,
address initialOwner
) ERC721(name_, symbol_) Ownable(initialOwner) {
require(gateToken_ != address(0), "gateToken=0");
require(royaltyReceiver != address(0), "royaltyReceiver=0");
_baseTokenURI = baseURI_;
gateToken = IERC20(gateToken_);
minHolding = minHolding_;
maxPerWallet = 1;
_setDefaultRoyalty(royaltyReceiver, royaltyBps);
}
// ─────────────────────────────────────────────────────────────
// Public mint
// ─────────────────────────────────────────────────────────────
/// @notice Mint one Copper Pot NFT. Caller must hold >= minHolding of gateToken.
function mint() external nonReentrant {
_mintTo(msg.sender);
}
function _mintTo(address to) internal {
require(mintActive, "mint not active");
require(_nextTokenId <= MAX_SUPPLY, "sold out");
require(mintedBy[to] < maxPerWallet, "wallet limit reached");
require(
gateToken.balanceOf(to) >= minHolding,
"hold >= minHolding to mint"
);
mintedBy[to] += 1;
uint256 tokenId = _nextTokenId;
_nextTokenId += 1;
_safeMint(to, tokenId);
emit Minted(to, tokenId);
}
/// @notice Total number of tokens minted so far.
function totalMinted() public view returns (uint256) {
return _nextTokenId - 1;
}
/// @notice How many NFTs remain to be minted.
function remaining() external view returns (uint256) {
return MAX_SUPPLY - totalMinted();
}
/// @notice Convenience check: is `account` currently eligible to mint?
function isEligible(address account) external view returns (bool) {
return
mintActive &&
_nextTokenId <= MAX_SUPPLY &&
mintedBy[account] < maxPerWallet &&
gateToken.balanceOf(account) >= minHolding;
}
// ─────────────────────────────────────────────────────────────
// Admin
// ─────────────────────────────────────────────────────────────
function setMintActive(bool active) external onlyOwner {
mintActive = active;
emit MintActiveSet(active);
}
function setGateToken(address token) external onlyOwner {
require(token != address(0), "gateToken=0");
gateToken = IERC20(token);
emit GateTokenSet(token);
}
function setMinHolding(uint256 newMinHolding) external onlyOwner {
minHolding = newMinHolding;
emit MinHoldingSet(newMinHolding);
}
function setMaxPerWallet(uint256 newMax) external onlyOwner {
require(newMax > 0, "maxPerWallet=0");
maxPerWallet = newMax;
emit MaxPerWalletSet(newMax);
}
function setBaseURI(string calldata newBaseURI) external onlyOwner {
_baseTokenURI = newBaseURI;
emit BaseURISet(newBaseURI);
}
/// @notice Update royalty receiver / rate (bps). 500 = 5%.
function setDefaultRoyalty(address receiver, uint96 bps) external onlyOwner {
_setDefaultRoyalty(receiver, bps);
}
/// @notice Owner reserve mint (e.g. for the team/treasury), bypasses the token gate
/// but still respects MAX_SUPPLY.
function ownerMint(address to, uint256 quantity) external onlyOwner {
require(to != address(0), "to=0");
require(quantity > 0, "quantity=0");
require(totalMinted() + quantity <= MAX_SUPPLY, "exceeds MAX_SUPPLY");
for (uint256 i = 0; i < quantity; i++) {
uint256 tokenId = _nextTokenId;
_nextTokenId += 1;
_safeMint(to, tokenId);
emit Minted(to, tokenId);
}
}
// ─────────────────────────────────────────────────────────────
// Views / overrides
// ─────────────────────────────────────────────────────────────
function baseURI() external view returns (string memory) {
return _baseTokenURI;
}
function _baseURI() internal view override returns (string memory) {
return _baseTokenURI;
}
/// @notice Metadata URI for `tokenId`, e.g. "<baseURI>/1.json".
function tokenURI(uint256 tokenId)
public
view
override
returns (string memory)
{
_requireOwned(tokenId);
string memory base = _baseTokenURI;
return
bytes(base).length > 0
? string.concat(base, tokenId.toString(), ".json")
: "";
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC2981)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "baseURI_",
"type": "string",
"internalType": "string"
},
{
"name": "gateToken_",
"type": "address",
"internalType": "address"
},
{
"name": "minHolding_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "royaltyReceiver",
"type": "address",
"internalType": "address"
},
{
"name": "royaltyBps",
"type": "uint96",
"internalType": "uint96"
},
{
"name": "initialOwner",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC2981InvalidDefaultRoyalty",
"type": "error",
"inputs": [
{
"name": "numerator",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "denominator",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC2981InvalidDefaultRoyaltyReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC2981InvalidTokenRoyalty",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "numerator",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "denominator",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC2981InvalidTokenRoyaltyReceiver",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721IncorrectOwner",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InsufficientApproval",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC721InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOperator",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721NonexistentToken",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "BaseURISet",
"type": "event",
"inputs": [
{
"name": "baseURI",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "GateTokenSet",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "MaxPerWalletSet",
"type": "event",
"inputs": [
{
"name": "maxPerWallet",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MinHoldingSet",
"type": "event",
"inputs": [
{
"name": "minHolding",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MintActiveSet",
"type": "event",
"inputs": [
{
"name": "active",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "Minted",
"type": "event",
"inputs": [
{
"name": "minter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "baseURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "gateToken",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "isEligible",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "maxPerWallet",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minHolding",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "mintActive",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "mintedBy",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerMint",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "quantity",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "remaining",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "royaltyInfo",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "salePrice",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "newBaseURI",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setDefaultRoyalty",
"type": "function",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
},
{
"name": "bps",
"type": "uint96",
"internalType": "uint96"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setGateToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMaxPerWallet",
"type": "function",
"inputs": [
{
"name": "newMax",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMinHolding",
"type": "function",
"inputs": [
{
"name": "newMinHolding",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMintActive",
"type": "function",
"inputs": [
{
"name": "active",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalMinted",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60806040526001600e5534801562000015575f80fd5b506040516200240a3803806200240a833981016040819052620000389162000384565b8088885f620000488382620004ec565b506001620000578282620004ec565b5050506001600160a01b0381166200008957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000948162000199565b5060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b038516620000ff5760405162461bcd60e51b815260206004820152600b60248201526a067617465546f6b656e3d360ac1b604482015260640162000080565b6001600160a01b0383166200014b5760405162461bcd60e51b81526020600482015260116024820152700726f79616c747952656365697665723d3607c1b604482015260640162000080565b600d620001598782620004ec565b50600980546001600160a01b0319166001600160a01b038716179055600a8490556001600b556200018b8383620001ea565b5050505050505050620005b8565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6127106001600160601b0382168110156200022b57604051636f483d0960e01b81526001600160601b03831660048201526024810182905260440162000080565b6001600160a01b0383166200025657604051635b6cc80560e11b81525f600482015260240162000080565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620002b4575f80fd5b81516001600160401b0380821115620002d157620002d162000290565b604051601f8301601f19908116603f01168101908282118183101715620002fc57620002fc62000290565b816040528381526020925086602085880101111562000319575f80fd5b5f91505b838210156200033c57858201830151818301840152908201906200031d565b5f602085830101528094505050505092915050565b80516001600160a01b038116811462000368575f80fd5b919050565b80516001600160601b038116811462000368575f80fd5b5f805f805f805f80610100898b0312156200039d575f80fd5b88516001600160401b0380821115620003b4575f80fd5b620003c28c838d01620002a4565b995060208b0151915080821115620003d8575f80fd5b620003e68c838d01620002a4565b985060408b0151915080821115620003fc575f80fd5b506200040b8b828c01620002a4565b9650506200041c60608a0162000351565b9450608089015193506200043360a08a0162000351565b92506200044360c08a016200036d565b91506200045360e08a0162000351565b90509295985092959890939650565b600181811c908216806200047757607f821691505b6020821081036200049657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004e757805f5260205f20601f840160051c81016020851015620004c35750805b601f840160051c820191505b81811015620004e4575f8155600101620004cf565b50505b505050565b81516001600160401b0381111562000508576200050862000290565b620005208162000519845462000462565b846200049c565b602080601f83116001811462000556575f84156200053e5750858301515b5f19600386901b1c1916600185901b178555620005b0565b5f85815260208120601f198616915b82811015620005865788860151825594840194600190910190840162000565565b5085821015620005a457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611e4480620005c65f395ff3fe608060405234801561000f575f80fd5b5060043610610208575f3560e01c806355f804b31161011f578063a2309ff8116100a9578063e268e4d311610079578063e268e4d314610447578063e985e9c51461045a578063ee1cc9441461046d578063ef730cb314610480578063f2fde38b14610493575f80fd5b8063a2309ff814610410578063b88d4fde14610418578063bbed0e841461042b578063c87b56dd14610434575f80fd5b806370a08231116100ef57806370a08231146103c9578063715018a6146103dc5780638da5cb5b146103e457806395d89b41146103f5578063a22cb465146103fd575f80fd5b806355f804b3146103885780636352211e1461039b57806366e305fd146103ae5780636c0360eb146103c1575f80fd5b80632a55205a116101a0578063453c231011610170578063453c23101461033e578063484b973c146103475780634e45feb21461035a5780634ee2e2d81461036d57806355234ec014610380575f80fd5b80632a55205a146102c457806332cb6b0c146102f65780633cef28d21461030c57806342842e0e1461032b575f80fd5b8063095ea7b3116101db578063095ea7b3146102895780631249c58b1461029c57806323b872dd146102a457806325fd90f3146102b7575f80fd5b806301ffc9a71461020c57806304634d8d1461023457806306fdde0314610249578063081812fc1461025e575b5f80fd5b61021f61021a366004611832565b6104a6565b60405190151581526020015b60405180910390f35b610247610242366004611868565b6104b6565b005b6102516104cc565b60405161022b91906118f5565b61027161026c366004611907565b61055b565b6040516001600160a01b03909116815260200161022b565b61024761029736600461191e565b610582565b61024761058d565b6102476102b2366004611946565b6105c9565b600c5461021f9060ff1681565b6102d76102d236600461197f565b610657565b604080516001600160a01b03909316835260208301919091520161022b565b6102fe60c881565b60405190815260200161022b565b6102fe61031a36600461199f565b600f6020525f908152604090205481565b610247610339366004611946565b6106da565b6102fe600b5481565b61024761035536600461191e565b6106f9565b610247610368366004611907565b61083f565b600954610271906001600160a01b031681565b6102fe610883565b6102476103963660046119b8565b61089c565b6102716103a9366004611907565b6108ef565b61021f6103bc36600461199f565b6108f9565b6102516109b2565b6102fe6103d736600461199f565b6109c1565b610247610a06565b6008546001600160a01b0316610271565b610251610a17565b61024761040b366004611a33565b610a26565b6102fe610a31565b610247610426366004611a78565b610a41565b6102fe600a5481565b610251610442366004611907565b610a59565b610247610455366004611907565b610b3f565b61021f610468366004611b4d565b610bbc565b61024761047b366004611b75565b610be9565b61024761048e36600461199f565b610c32565b6102476104a136600461199f565b610ccc565b5f6104b082610d09565b92915050565b6104be610d2d565b6104c88282610d5a565b5050565b60605f80546104da90611b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461050690611b8e565b80156105515780601f1061052857610100808354040283529160200191610551565b820191905f5260205f20905b81548152906001019060200180831161053457829003601f168201915b5050505050905090565b5f61056582610dfc565b505f828152600460205260409020546001600160a01b03166104b0565b6104c8828233610e34565b610595610e41565b61059e33610e6f565b6105c760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b6001600160a01b0382166105f757604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610603838333611096565b9050836001600160a01b0316816001600160a01b031614610651576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105ee565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106aa5750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106c16001600160601b03841689611bda565b6106cb9190611bf1565b92989297509195505050505050565b6106f483838360405180602001604052805f815250610a41565b505050565b610701610d2d565b6001600160a01b0382166107405760405162461bcd60e51b81526004016105ee906020808252600490820152630746f3d360e41b604082015260600190565b5f811161077c5760405162461bcd60e51b815260206004820152600a60248201526907175616e746974793d360b41b60448201526064016105ee565b60c881610787610a31565b6107919190611c10565b11156107d45760405162461bcd60e51b815260206004820152601260248201527165786365656473204d41585f535550504c5960701b60448201526064016105ee565b5f5b818110156106f457600e8054906001905f6107f18385611c10565b9091555061080190508482611188565b60405181906001600160a01b038616907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe905f90a3506001016107d6565b610847610d2d565b600a8190556040518181527f78137a03336609769521e94abc06da20db79726747e54f581dc42b8a377bd303906020015b60405180910390a150565b5f61088c610a31565b6108979060c8611c23565b905090565b6108a4610d2d565b600d6108b1828483611c7a565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f682826040516108e3929190611d34565b60405180910390a15050565b5f6104b082610dfc565b600c545f9060ff168015610910575060c8600e5411155b80156109345750600b546001600160a01b0383165f908152600f6020526040902054105b80156104b05750600a546009546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610986573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109aa9190611d62565b101592915050565b6060600d80546104da90611b8e565b5f6001600160a01b0382166109eb576040516322718ad960e21b81525f60048201526024016105ee565b506001600160a01b03165f9081526003602052604090205490565b610a0e610d2d565b6105c75f6111a1565b6060600180546104da90611b8e565b6104c83383836111f2565b5f6001600e546108979190611c23565b610a4c8484846105c9565b61065133858585856112b9565b6060610a6482610dfc565b505f600d8054610a7390611b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f90611b8e565b8015610aea5780601f10610ac157610100808354040283529160200191610aea565b820191905f5260205f20905b815481529060010190602001808311610acd57829003601f168201915b505050505090505f815111610b0d5760405180602001604052805f815250610b38565b80610b17846113e1565b604051602001610b28929190611d79565b6040516020818303038152906040525b9392505050565b610b47610d2d565b5f8111610b875760405162461bcd60e51b815260206004820152600e60248201526d06d617850657257616c6c65743d360941b60448201526064016105ee565b600b8190556040518181527f792e4b1d9cb03dac94396717f290ac7220c178b75cf8a3d06614abcfd10a5ec190602001610878565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610bf1610d2d565b600c805460ff19168215159081179091556040519081527fa9afdd3f9132c025ecb73b17c57e8b4d97f48ea3de17a7d363fd79879f75247790602001610878565b610c3a610d2d565b6001600160a01b038116610c7e5760405162461bcd60e51b815260206004820152600b60248201526a067617465546f6b656e3d360ac1b60448201526064016105ee565b600980546001600160a01b0319166001600160a01b0383169081179091556040519081527f82624aaedc7287175e8b1adbe665dea00fc8411ff5f9c5cca720944f8e4cf60d90602001610878565b610cd4610d2d565b6001600160a01b038116610cfd57604051631e4fbdf760e01b81525f60048201526024016105ee565b610d06816111a1565b50565b5f6001600160e01b0319821663152a902d60e11b14806104b057506104b082611471565b6008546001600160a01b031633146105c75760405163118cdaa760e01b81523360048201526024016105ee565b6127106001600160601b038216811015610d9957604051636f483d0960e01b81526001600160601b0383166004820152602481018290526044016105ee565b6001600160a01b038316610dc257604051635b6cc80560e11b81525f60048201526024016105ee565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b0316806104b057604051637e27328960e01b8152600481018490526024016105ee565b6106f483838360016114c0565b610e496115c4565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600c5460ff16610eb35760405162461bcd60e51b815260206004820152600f60248201526e6d696e74206e6f742061637469766560881b60448201526064016105ee565b60c8600e541115610ef15760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b60448201526064016105ee565b600b546001600160a01b0382165f908152600f602052604090205410610f505760405162461bcd60e51b81526020600482015260146024820152731dd85b1b195d081b1a5b5a5d081c995858da195960621b60448201526064016105ee565b600a546009546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610f9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbf9190611d62565b101561100d5760405162461bcd60e51b815260206004820152601a60248201527f686f6c64203e3d206d696e486f6c64696e6720746f206d696e7400000000000060448201526064016105ee565b6001600160a01b0381165f908152600f60205260408120805460019290611035908490611c10565b9091555050600e8054906001905f61104d8385611c10565b9091555061105d90508282611188565b60405181906001600160a01b038416907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe905f90a35050565b5f828152600260205260408120546001600160a01b03908116908316156110c2576110c2818486611606565b6001600160a01b038116156110fc576110dd5f855f806114c0565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561112a576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6104c8828260405180602001604052805f81525061166a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661121b5760405163a9fbf51f60e01b81525f60048201526024016105ee565b6001600160a01b03821661124d57604051630b61174360e31b81526001600160a01b03831660048201526024016105ee565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156113da57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906112fb908890889087908790600401611db7565b6020604051808303815f875af1925050508015611335575060408051601f3d908101601f1916820190925261133291810190611df3565b60015b61139c573d808015611362576040519150601f19603f3d011682016040523d82523d5f602084013e611367565b606091505b5080515f0361139457604051633250574960e11b81526001600160a01b03851660048201526024016105ee565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b146113d857604051633250574960e11b81526001600160a01b03851660048201526024016105ee565b505b5050505050565b60605f6113ed83611681565b60010190505f8167ffffffffffffffff81111561140c5761140c611a64565b6040519080825280601f01601f191660200182016040528015611436576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461144057509392505050565b5f6001600160e01b031982166380ac58cd60e01b14806114a157506001600160e01b03198216635b5e139f60e01b145b806104b057506301ffc9a760e01b6001600160e01b03198316146104b0565b80806114d457506001600160a01b03821615155b15611595575f6114e384610dfc565b90506001600160a01b0383161580159061150f5750826001600160a01b0316816001600160a01b031614155b801561152257506115208184610bbc565b155b1561154b5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105ee565b81156115935783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036105c757604051633ee5aeb560e01b815260040160405180910390fd5b611611838383611758565b6106f4576001600160a01b03831661163f57604051637e27328960e01b8152600481018290526024016105ee565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105ee565b61167483836117bc565b6106f4335f8585856112b9565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116bf5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106116eb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061170957662386f26fc10000830492506010015b6305f5e1008310611721576305f5e100830492506008015b612710831061173557612710830492506004015b60648310611747576064830492506002015b600a83106104b05760010192915050565b5f6001600160a01b038316158015906117b45750826001600160a01b0316846001600160a01b0316148061179157506117918484610bbc565b806117b457505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166117e557604051633250574960e11b81525f60048201526024016105ee565b5f6117f183835f611096565b90506001600160a01b038116156106f4576040516339e3563760e11b81525f60048201526024016105ee565b6001600160e01b031981168114610d06575f80fd5b5f60208284031215611842575f80fd5b8135610b388161181d565b80356001600160a01b0381168114611863575f80fd5b919050565b5f8060408385031215611879575f80fd5b6118828361184d565b915060208301356001600160601b038116811461189d575f80fd5b809150509250929050565b5f5b838110156118c25781810151838201526020016118aa565b50505f910152565b5f81518084526118e18160208601602086016118a8565b601f01601f19169290920160200192915050565b602081525f610b3860208301846118ca565b5f60208284031215611917575f80fd5b5035919050565b5f806040838503121561192f575f80fd5b6119388361184d565b946020939093013593505050565b5f805f60608486031215611958575f80fd5b6119618461184d565b925061196f6020850161184d565b9150604084013590509250925092565b5f8060408385031215611990575f80fd5b50508035926020909101359150565b5f602082840312156119af575f80fd5b610b388261184d565b5f80602083850312156119c9575f80fd5b823567ffffffffffffffff808211156119e0575f80fd5b818501915085601f8301126119f3575f80fd5b813581811115611a01575f80fd5b866020828501011115611a12575f80fd5b60209290920196919550909350505050565b80358015158114611863575f80fd5b5f8060408385031215611a44575f80fd5b611a4d8361184d565b9150611a5b60208401611a24565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611a8b575f80fd5b611a948561184d565b9350611aa26020860161184d565b925060408501359150606085013567ffffffffffffffff80821115611ac5575f80fd5b818701915087601f830112611ad8575f80fd5b813581811115611aea57611aea611a64565b604051601f8201601f19908116603f01168101908382118183101715611b1257611b12611a64565b816040528281528a6020848701011115611b2a575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611b5e575f80fd5b611b678361184d565b9150611a5b6020840161184d565b5f60208284031215611b85575f80fd5b610b3882611a24565b600181811c90821680611ba257607f821691505b602082108103611bc057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104b0576104b0611bc6565b5f82611c0b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156104b0576104b0611bc6565b818103818111156104b0576104b0611bc6565b601f8211156106f457805f5260205f20601f840160051c81016020851015611c5b5750805b601f840160051c820191505b818110156113da575f8155600101611c67565b67ffffffffffffffff831115611c9257611c92611a64565b611ca683611ca08354611b8e565b83611c36565b5f601f841160018114611cd7575f8515611cc05750838201355b5f19600387901b1c1916600186901b1783556113da565b5f83815260208120601f198716915b82811015611d065786850135825560209485019460019092019101611ce6565b5086821015611d22575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215611d72575f80fd5b5051919050565b5f8351611d8a8184602088016118a8565b835190830190611d9e8183602088016118a8565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611de9908301846118ca565b9695505050505050565b5f60208284031215611e03575f80fd5b8151610b388161181d56fea2646970667358221220714b36c067e7f055d6ab553b62821886123a6050d9a52a71cff5dce1b477357064736f6c63430008180033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000dcc34bdd5d3c30237303b95d2f59cc29437b5c7400000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000f8664fc957de30114a3a7ef15b2143b7360cd1bd00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000f8664fc957de30114a3a7ef15b2143b7360cd1bd000000000000000000000000000000000000000000000000000000000000000854657374204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007544553544e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003068747470733a2f2f7777772e6772616e646164636f707065722e78797a2f6e66742f746573742d6d657461646174612f00000000000000000000000000000000
0x608060405234801561000f575f80fd5b5060043610610208575f3560e01c806355f804b31161011f578063a2309ff8116100a9578063e268e4d311610079578063e268e4d314610447578063e985e9c51461045a578063ee1cc9441461046d578063ef730cb314610480578063f2fde38b14610493575f80fd5b8063a2309ff814610410578063b88d4fde14610418578063bbed0e841461042b578063c87b56dd14610434575f80fd5b806370a08231116100ef57806370a08231146103c9578063715018a6146103dc5780638da5cb5b146103e457806395d89b41146103f5578063a22cb465146103fd575f80fd5b806355f804b3146103885780636352211e1461039b57806366e305fd146103ae5780636c0360eb146103c1575f80fd5b80632a55205a116101a0578063453c231011610170578063453c23101461033e578063484b973c146103475780634e45feb21461035a5780634ee2e2d81461036d57806355234ec014610380575f80fd5b80632a55205a146102c457806332cb6b0c146102f65780633cef28d21461030c57806342842e0e1461032b575f80fd5b8063095ea7b3116101db578063095ea7b3146102895780631249c58b1461029c57806323b872dd146102a457806325fd90f3146102b7575f80fd5b806301ffc9a71461020c57806304634d8d1461023457806306fdde0314610249578063081812fc1461025e575b5f80fd5b61021f61021a366004611832565b6104a6565b60405190151581526020015b60405180910390f35b610247610242366004611868565b6104b6565b005b6102516104cc565b60405161022b91906118f5565b61027161026c366004611907565b61055b565b6040516001600160a01b03909116815260200161022b565b61024761029736600461191e565b610582565b61024761058d565b6102476102b2366004611946565b6105c9565b600c5461021f9060ff1681565b6102d76102d236600461197f565b610657565b604080516001600160a01b03909316835260208301919091520161022b565b6102fe60c881565b60405190815260200161022b565b6102fe61031a36600461199f565b600f6020525f908152604090205481565b610247610339366004611946565b6106da565b6102fe600b5481565b61024761035536600461191e565b6106f9565b610247610368366004611907565b61083f565b600954610271906001600160a01b031681565b6102fe610883565b6102476103963660046119b8565b61089c565b6102716103a9366004611907565b6108ef565b61021f6103bc36600461199f565b6108f9565b6102516109b2565b6102fe6103d736600461199f565b6109c1565b610247610a06565b6008546001600160a01b0316610271565b610251610a17565b61024761040b366004611a33565b610a26565b6102fe610a31565b610247610426366004611a78565b610a41565b6102fe600a5481565b610251610442366004611907565b610a59565b610247610455366004611907565b610b3f565b61021f610468366004611b4d565b610bbc565b61024761047b366004611b75565b610be9565b61024761048e36600461199f565b610c32565b6102476104a136600461199f565b610ccc565b5f6104b082610d09565b92915050565b6104be610d2d565b6104c88282610d5a565b5050565b60605f80546104da90611b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461050690611b8e565b80156105515780601f1061052857610100808354040283529160200191610551565b820191905f5260205f20905b81548152906001019060200180831161053457829003601f168201915b5050505050905090565b5f61056582610dfc565b505f828152600460205260409020546001600160a01b03166104b0565b6104c8828233610e34565b610595610e41565b61059e33610e6f565b6105c760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b6001600160a01b0382166105f757604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610603838333611096565b9050836001600160a01b0316816001600160a01b031614610651576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105ee565b50505050565b5f82815260076020526040812080548291906001600160a01b03811690600160a01b90046001600160601b0316816106aa5750506006546001600160a01b03811690600160a01b90046001600160601b03165b5f6127106106c16001600160601b03841689611bda565b6106cb9190611bf1565b92989297509195505050505050565b6106f483838360405180602001604052805f815250610a41565b505050565b610701610d2d565b6001600160a01b0382166107405760405162461bcd60e51b81526004016105ee906020808252600490820152630746f3d360e41b604082015260600190565b5f811161077c5760405162461bcd60e51b815260206004820152600a60248201526907175616e746974793d360b41b60448201526064016105ee565b60c881610787610a31565b6107919190611c10565b11156107d45760405162461bcd60e51b815260206004820152601260248201527165786365656473204d41585f535550504c5960701b60448201526064016105ee565b5f5b818110156106f457600e8054906001905f6107f18385611c10565b9091555061080190508482611188565b60405181906001600160a01b038616907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe905f90a3506001016107d6565b610847610d2d565b600a8190556040518181527f78137a03336609769521e94abc06da20db79726747e54f581dc42b8a377bd303906020015b60405180910390a150565b5f61088c610a31565b6108979060c8611c23565b905090565b6108a4610d2d565b600d6108b1828483611c7a565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f682826040516108e3929190611d34565b60405180910390a15050565b5f6104b082610dfc565b600c545f9060ff168015610910575060c8600e5411155b80156109345750600b546001600160a01b0383165f908152600f6020526040902054105b80156104b05750600a546009546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa158015610986573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109aa9190611d62565b101592915050565b6060600d80546104da90611b8e565b5f6001600160a01b0382166109eb576040516322718ad960e21b81525f60048201526024016105ee565b506001600160a01b03165f9081526003602052604090205490565b610a0e610d2d565b6105c75f6111a1565b6060600180546104da90611b8e565b6104c83383836111f2565b5f6001600e546108979190611c23565b610a4c8484846105c9565b61065133858585856112b9565b6060610a6482610dfc565b505f600d8054610a7390611b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f90611b8e565b8015610aea5780601f10610ac157610100808354040283529160200191610aea565b820191905f5260205f20905b815481529060010190602001808311610acd57829003601f168201915b505050505090505f815111610b0d5760405180602001604052805f815250610b38565b80610b17846113e1565b604051602001610b28929190611d79565b6040516020818303038152906040525b9392505050565b610b47610d2d565b5f8111610b875760405162461bcd60e51b815260206004820152600e60248201526d06d617850657257616c6c65743d360941b60448201526064016105ee565b600b8190556040518181527f792e4b1d9cb03dac94396717f290ac7220c178b75cf8a3d06614abcfd10a5ec190602001610878565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610bf1610d2d565b600c805460ff19168215159081179091556040519081527fa9afdd3f9132c025ecb73b17c57e8b4d97f48ea3de17a7d363fd79879f75247790602001610878565b610c3a610d2d565b6001600160a01b038116610c7e5760405162461bcd60e51b815260206004820152600b60248201526a067617465546f6b656e3d360ac1b60448201526064016105ee565b600980546001600160a01b0319166001600160a01b0383169081179091556040519081527f82624aaedc7287175e8b1adbe665dea00fc8411ff5f9c5cca720944f8e4cf60d90602001610878565b610cd4610d2d565b6001600160a01b038116610cfd57604051631e4fbdf760e01b81525f60048201526024016105ee565b610d06816111a1565b50565b5f6001600160e01b0319821663152a902d60e11b14806104b057506104b082611471565b6008546001600160a01b031633146105c75760405163118cdaa760e01b81523360048201526024016105ee565b6127106001600160601b038216811015610d9957604051636f483d0960e01b81526001600160601b0383166004820152602481018290526044016105ee565b6001600160a01b038316610dc257604051635b6cc80560e11b81525f60048201526024016105ee565b50604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600655565b5f818152600260205260408120546001600160a01b0316806104b057604051637e27328960e01b8152600481018490526024016105ee565b6106f483838360016114c0565b610e496115c4565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600c5460ff16610eb35760405162461bcd60e51b815260206004820152600f60248201526e6d696e74206e6f742061637469766560881b60448201526064016105ee565b60c8600e541115610ef15760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b60448201526064016105ee565b600b546001600160a01b0382165f908152600f602052604090205410610f505760405162461bcd60e51b81526020600482015260146024820152731dd85b1b195d081b1a5b5a5d081c995858da195960621b60448201526064016105ee565b600a546009546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610f9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbf9190611d62565b101561100d5760405162461bcd60e51b815260206004820152601a60248201527f686f6c64203e3d206d696e486f6c64696e6720746f206d696e7400000000000060448201526064016105ee565b6001600160a01b0381165f908152600f60205260408120805460019290611035908490611c10565b9091555050600e8054906001905f61104d8385611c10565b9091555061105d90508282611188565b60405181906001600160a01b038416907f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe905f90a35050565b5f828152600260205260408120546001600160a01b03908116908316156110c2576110c2818486611606565b6001600160a01b038116156110fc576110dd5f855f806114c0565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561112a576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6104c8828260405180602001604052805f81525061166a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661121b5760405163a9fbf51f60e01b81525f60048201526024016105ee565b6001600160a01b03821661124d57604051630b61174360e31b81526001600160a01b03831660048201526024016105ee565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156113da57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906112fb908890889087908790600401611db7565b6020604051808303815f875af1925050508015611335575060408051601f3d908101601f1916820190925261133291810190611df3565b60015b61139c573d808015611362576040519150601f19603f3d011682016040523d82523d5f602084013e611367565b606091505b5080515f0361139457604051633250574960e11b81526001600160a01b03851660048201526024016105ee565b805160208201fd5b6001600160e01b03198116630a85bd0160e11b146113d857604051633250574960e11b81526001600160a01b03851660048201526024016105ee565b505b5050505050565b60605f6113ed83611681565b60010190505f8167ffffffffffffffff81111561140c5761140c611a64565b6040519080825280601f01601f191660200182016040528015611436576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461144057509392505050565b5f6001600160e01b031982166380ac58cd60e01b14806114a157506001600160e01b03198216635b5e139f60e01b145b806104b057506301ffc9a760e01b6001600160e01b03198316146104b0565b80806114d457506001600160a01b03821615155b15611595575f6114e384610dfc565b90506001600160a01b0383161580159061150f5750826001600160a01b0316816001600160a01b031614155b801561152257506115208184610bbc565b155b1561154b5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105ee565b81156115935783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00546002036105c757604051633ee5aeb560e01b815260040160405180910390fd5b611611838383611758565b6106f4576001600160a01b03831661163f57604051637e27328960e01b8152600481018290526024016105ee565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105ee565b61167483836117bc565b6106f4335f8585856112b9565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116bf5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106116eb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061170957662386f26fc10000830492506010015b6305f5e1008310611721576305f5e100830492506008015b612710831061173557612710830492506004015b60648310611747576064830492506002015b600a83106104b05760010192915050565b5f6001600160a01b038316158015906117b45750826001600160a01b0316846001600160a01b0316148061179157506117918484610bbc565b806117b457505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b0382166117e557604051633250574960e11b81525f60048201526024016105ee565b5f6117f183835f611096565b90506001600160a01b038116156106f4576040516339e3563760e11b81525f60048201526024016105ee565b6001600160e01b031981168114610d06575f80fd5b5f60208284031215611842575f80fd5b8135610b388161181d565b80356001600160a01b0381168114611863575f80fd5b919050565b5f8060408385031215611879575f80fd5b6118828361184d565b915060208301356001600160601b038116811461189d575f80fd5b809150509250929050565b5f5b838110156118c25781810151838201526020016118aa565b50505f910152565b5f81518084526118e18160208601602086016118a8565b601f01601f19169290920160200192915050565b602081525f610b3860208301846118ca565b5f60208284031215611917575f80fd5b5035919050565b5f806040838503121561192f575f80fd5b6119388361184d565b946020939093013593505050565b5f805f60608486031215611958575f80fd5b6119618461184d565b925061196f6020850161184d565b9150604084013590509250925092565b5f8060408385031215611990575f80fd5b50508035926020909101359150565b5f602082840312156119af575f80fd5b610b388261184d565b5f80602083850312156119c9575f80fd5b823567ffffffffffffffff808211156119e0575f80fd5b818501915085601f8301126119f3575f80fd5b813581811115611a01575f80fd5b866020828501011115611a12575f80fd5b60209290920196919550909350505050565b80358015158114611863575f80fd5b5f8060408385031215611a44575f80fd5b611a4d8361184d565b9150611a5b60208401611a24565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215611a8b575f80fd5b611a948561184d565b9350611aa26020860161184d565b925060408501359150606085013567ffffffffffffffff80821115611ac5575f80fd5b818701915087601f830112611ad8575f80fd5b813581811115611aea57611aea611a64565b604051601f8201601f19908116603f01168101908382118183101715611b1257611b12611a64565b816040528281528a6020848701011115611b2a575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f8060408385031215611b5e575f80fd5b611b678361184d565b9150611a5b6020840161184d565b5f60208284031215611b85575f80fd5b610b3882611a24565b600181811c90821680611ba257607f821691505b602082108103611bc057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104b0576104b0611bc6565b5f82611c0b57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156104b0576104b0611bc6565b818103818111156104b0576104b0611bc6565b601f8211156106f457805f5260205f20601f840160051c81016020851015611c5b5750805b601f840160051c820191505b818110156113da575f8155600101611c67565b67ffffffffffffffff831115611c9257611c92611a64565b611ca683611ca08354611b8e565b83611c36565b5f601f841160018114611cd7575f8515611cc05750838201355b5f19600387901b1c1916600186901b1783556113da565b5f83815260208120601f198716915b82811015611d065786850135825560209485019460019092019101611ce6565b5086821015611d22575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215611d72575f80fd5b5051919050565b5f8351611d8a8184602088016118a8565b835190830190611d9e8183602088016118a8565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611de9908301846118ca565b9695505050505050565b5f60208284031215611e03575f80fd5b8151610b388161181d56fea2646970667358221220714b36c067e7f055d6ab553b62821886123a6050d9a52a71cff5dce1b477357064736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000106 | $0 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x6afce1…6b11ad | 44 days agoThu, 02 Jul 2026 23:55:39 UTC | 0x30385c…adfe | [0] 0x000000000000…3d46ee32 [1] 0x000000000000…00000001 |
| 0x6afce1…6b11ad | 44 days agoThu, 02 Jul 2026 23:55:39 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…3d46ee32 [2] 0x000000000000…00000001 |
| 0x479028…021459 | 44 days agoThu, 02 Jul 2026 22:56:12 UTC | 0xa9afdd…2477 | data: 0x000000000000000000…00000001 |
| 0x2e4575…60a599 | 44 days agoThu, 02 Jul 2026 22:55:38 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…360cd1bd |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x1b066b4a…7ff304 | Transfer | 18,877,224 | 21 days agoSat, 25 Jul 2026 08:46:28 UTC | 0xcaf7…5d11 | IN | 0xe6c2…4ea2 | $0.001 DIH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x6afce1…6b11ad | Mint | 1,588,852 | 44 days agoThu, 02 Jul 2026 23:55:39 UTC | 0x83d8…ee32 | IN | Test NFT | $0.000 ETH | 0.00000228 | |
| 0x479028…021459 | setMintActive | 1,562,705 | 44 days agoThu, 02 Jul 2026 22:56:12 UTC | 0xf866…d1bd | IN | Test NFT | $0.000 ETH | 0.00000094 |