| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import {DN404} from "dn404/DN404.sol";
import {DN404Mirror} from "dn404/DN404Mirror.sol";
import {Ownable} from "solady/auth/Ownable.sol";
import {LibString} from "solady/utils/LibString.sol";
import {Base64} from "solady/utils/Base64.sol";
/// @title PolicyApes404
/// @notice Fixed-supply DN404: an ERC-20 base token paired with an ERC-721 mirror collection.
/// @dev The mirror is deployed in the constructor. The ERC-20 address is this contract; query
/// `mirrorERC721()` on the base DN404 contract for the ERC-721 collection address.
contract PolicyApes404 is DN404, Ownable {
/// @notice ERC-20 supply, expressed in the token's 18-decimal base units.
uint256 public constant TOTAL_SUPPLY = 1_000_000 ether;
/// @notice One ERC-721 entitlement per 1,000 whole PAPES tokens.
/// @dev TOTAL_SUPPLY / UNIT = 1,000 maximum simultaneously extant mirror NFTs.
uint256 public constant UNIT = 1_000 ether;
string private constant _NAME = "Policy Apes";
string private constant _SYMBOL = "PAPES";
string private _baseURI;
bool public uriLocked;
/// @dev UERC20-compatible display metadata, read by launchpad/auction UIs
/// (pools.trade / Uniswap explore) via `metadata()` and the no-arg `tokenURI()`.
/// Socials convention observed on live launches: paste X/Telegram links into
/// `description` free-text; `website` and `image` (logo URL) are dedicated fields.
string public description;
string public website;
string public image;
error URILocked();
event BaseURISet(string baseURI);
event URILockedPermanently();
event DisplayMetadataSet(string description, string website, string image);
constructor() {
_initializeOwner(msg.sender);
// DN404Mirror's deployer guard is intentionally the deployer of this base contract.
// _initializeDN404 links this mirror, credits the entire ERC-20 supply to msg.sender,
// and explicitly sets the initial holder's skipNFT flag to true.
address mirror = address(new DN404Mirror(msg.sender));
_initializeDN404(TOTAL_SUPPLY, msg.sender, mirror);
}
/// @notice ERC-20 name and ERC-721 mirror collection name.
function name() public pure override returns (string memory) {
return _NAME;
}
/// @notice ERC-20 symbol and ERC-721 mirror collection symbol.
function symbol() public pure override returns (string memory) {
return _SYMBOL;
}
/// @notice PAPES uses the conventional ERC-20 18 decimal places.
function decimals() public pure override returns (uint8) {
return 18;
}
/// @notice The base-unit balance required to represent one mirror NFT.
/// @dev Kept constant as required by DN404 after initialization.
function _unit() internal pure override returns (uint256) {
return UNIT;
}
/// @notice Updates the metadata base URI until permanently locked.
/// @param newBaseURI Prefix used by the mirror's tokenURI; e.g. "ipfs://CID/".
function setBaseURI(string calldata newBaseURI) external onlyOwner {
if (uriLocked) revert URILocked();
_baseURI = newBaseURI;
emit BaseURISet(newBaseURI);
}
/// @notice Permanently prevents future base-URI changes.
function lockURI() external onlyOwner {
if (uriLocked) revert URILocked();
uriLocked = true;
emit URILockedPermanently();
}
/// @notice Returns the base URI currently used for mirror metadata.
function baseURI() external view returns (string memory) {
return _baseURI;
}
/// @dev Called by DN404Mirror.tokenURI after it has checked that `id` exists.
function _tokenURI(uint256 id) internal view override returns (string memory) {
return string.concat(_baseURI, LibString.toString(id), ".json");
}
/// @notice Sets the token-level display metadata (auction/launchpad card content).
/// @dev Shares the one-way `lockURI()` freeze with the NFT base URI. Strings are
/// JSON-escaped at render time, so quotes/newlines in inputs are safe.
function setDisplayMetadata(string calldata newDescription, string calldata newWebsite, string calldata newImage)
external
onlyOwner
{
if (uriLocked) revert URILocked();
description = newDescription;
website = newWebsite;
image = newImage;
emit DisplayMetadataSet(newDescription, newWebsite, newImage);
}
/// @notice UERC20-compatible metadata accessor: (description, website, image, extraData).
function metadata() external view returns (string memory, string memory, string memory, bytes memory) {
return (description, website, image, "");
}
/// @notice UERC20-compatible no-arg tokenURI: base64 data-URI JSON of the display metadata.
/// @dev Distinct signature from the mirror's ERC-721 `tokenURI(uint256)`; no selector clash.
function tokenURI() external view returns (string memory) {
bytes memory json = "{";
bool hasField;
if (bytes(description).length != 0) {
json = abi.encodePacked(json, '"description":"', LibString.escapeJSON(description), '"');
hasField = true;
}
if (bytes(website).length != 0) {
if (hasField) json = abi.encodePacked(json, ", ");
json = abi.encodePacked(json, '"website":"', LibString.escapeJSON(website), '"');
hasField = true;
}
if (bytes(image).length != 0) {
if (hasField) json = abi.encodePacked(json, ", ");
json = abi.encodePacked(json, '"image":"', LibString.escapeJSON(image), '"');
}
json = abi.encodePacked(json, "}");
return string(abi.encodePacked("data:application/json;base64,", Base64.encode(json)));
}
}[
{
"type": "constructor",
"inputs": [],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "ApprovalCallerNotOwnerNorApproved",
"type": "error",
"inputs": []
},
{
"name": "DNAlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "DNNotInitialized",
"type": "error",
"inputs": []
},
{
"name": "FnSelectorNotRecognized",
"type": "error",
"inputs": []
},
{
"name": "InsufficientAllowance",
"type": "error",
"inputs": []
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": []
},
{
"name": "InvalidUnit",
"type": "error",
"inputs": []
},
{
"name": "LinkMirrorContractFailed",
"type": "error",
"inputs": []
},
{
"name": "MirrorAddressIsZero",
"type": "error",
"inputs": []
},
{
"name": "NewOwnerIsZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "NoHandoverRequest",
"type": "error",
"inputs": []
},
{
"name": "SenderNotMirror",
"type": "error",
"inputs": []
},
{
"name": "TokenDoesNotExist",
"type": "error",
"inputs": []
},
{
"name": "TotalSupplyOverflow",
"type": "error",
"inputs": []
},
{
"name": "TransferCallerNotOwnerNorApproved",
"type": "error",
"inputs": []
},
{
"name": "TransferFromIncorrectOwner",
"type": "error",
"inputs": []
},
{
"name": "TransferToZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "URILocked",
"type": "error",
"inputs": []
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BaseURISet",
"type": "event",
"inputs": [
{
"name": "baseURI",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "DisplayMetadataSet",
"type": "event",
"inputs": [
{
"name": "description",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "website",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "image",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverCanceled",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverRequested",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "oldOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "SkipNFTSet",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "status",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "URILockedPermanently",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"type": "fallback",
"stateMutability": "payable"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "UNIT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"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": "cancelOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "completeOwnershipHandover",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "pure"
},
{
"name": "description",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "getSkipNFT",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "image",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "lockURI",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "metadata",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
},
{
"name": "",
"type": "string",
"internalType": "string"
},
{
"name": "",
"type": "string",
"internalType": "string"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "view"
},
{
"name": "mirrorERC721",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "result",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownershipHandoverExpiresAt",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "requestOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "setBaseURI",
"type": "function",
"inputs": [
{
"name": "newBaseURI",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setDisplayMetadata",
"type": "function",
"inputs": [
{
"name": "newDescription",
"type": "string",
"internalType": "string"
},
{
"name": "newWebsite",
"type": "string",
"internalType": "string"
},
{
"name": "newImage",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSkipNFT",
"type": "function",
"inputs": [
{
"name": "skipNFT",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "uriLocked",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "website",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x608060405234801561000f575f80fd5b506100193361006e565b5f33604051610027906102fc565b6001600160a01b039091168152602001604051809103905ff080158015610050573d5f803e3d5ffd5b50905061006869d3c21bcecceda100000033836100a9565b50610309565b6001600160a01b0316638b78c6d819819055805f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b0316156100da576100da63ead4d2e4610253565b6001600160a01b0382166100f5576100f56339a84a7b610253565b630f4599e55f523360205260205f6024601c5f865af160015f5114166101225763d125259c5f526004601cfd5b678da5cb5b6cef16e65f5260208060046018305afa601f3d1160205160601b1510161561015b575f806004601c5f865af161015b575f80fd5b805463ffffffff60201b19166401000000001781556001810180546001600160a01b0319166001600160a01b038416179055831561024d576001600160a01b0383166101ae576101ae63ea553b34610253565b606084901c683635c9adc5dea00000850463fffffffe1017156101d8576101d863e5cfe957610253565b80546001600160601b038516600160a01b026001600160a01b03918216811783558482165f818152600b85016020908152604082208054909516909317845587815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9082a361024b84600161025c565b505b50505050565b805f526004601cfd5b5f68a20d6e21d0e52553086001600160a01b0384165f818152600b92909201602090815260408320805486158015865291955060ff6b0100000000000000000000009091049081166002918216159092180218600117927fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d64203939190a2815460ff9091166b0100000000000000000000000260ff60581b199091161790555050565b610c7c80612fa183390190565b612c8b806103165f395ff3fe6080604052600436106101db575f3560e01c80636c0360eb116101015780639d8e217711610094578063f04e283e11610063578063f04e283e146107ab578063f2fde38b146107be578063f3ccaac0146107d1578063fee81cf4146107e5576101ec565b80639d8e21771461073d578063a9059cbb14610759578063beb0a41614610778578063dd62ed3e1461078c576101ec565b80638da5cb5b116100d05780638da5cb5b146106c75780638e021c06146106df578063902d55a5146106f357806395d89b4114610710576101ec565b80636c0360eb1461064b57806370a082311461065f578063715018a6146106ab5780637284e416146106b3576101ec565b806328d0ee22116101795780633c130d90116101485780633c130d90146105d75780634ef41efc146105eb57806354d1f13d1461062457806355f804b31461062c576101ec565b806328d0ee221461055a5780632a6a935d14610579578063313ce56714610598578063392f37e9146105b3576101ec565b806320c5ab6a116101b557806320c5ab6a146104fb57806323b872dd146105145780632569296214610533578063274e430b1461053b576101ec565b806306fdde0314610451578063095ea7b31461049657806318160ddd146104c5576101ec565b366101ec5734156101ea575f80fd5b005b68a20d6e21d0e52553085f3560e01c63e5eb36c88190036102465760018201546001600160a01b031633146102285761022863ce5a776b610816565b61023c60043560243560443560643561081f565b6102466001610b77565b8063f6916ddd036102a55760018201546001600160a01b031633146102725761027263ce5a776b610816565b600435602890815260443560145268a20d6e21d0e525530b5f908152604881209152602435151590556102a56001610b77565b806362fb246d036102ce575f6102bf600435602435610b7f565b90506102cc811515610b77565b505b80632d8a746e036102f5576102f56102e7600435610ba7565b6001600160a01b0316610b77565b8063c016aa520361030e5761030e6102e7600435610bc7565b8063d10b6e0c036103625760018201546001600160a01b0316331461033a5761033a63ce5a776b610816565b5f61034c600435602435604435610c25565b9050610360816001600160a01b0316610b77565b505b806327ef54950361037b5761037b6102e7600435610cff565b8063f5b100ea036103be576001600160a01b03600435165f90815268a20d6e21d0e525531360205260409020546103be90600160801b900463ffffffff16610b77565b8063e2c79281036103ea5768a20d6e21d0e5255308546103ea90600160801b900463ffffffff16610b77565b8063cb30b4600361042f576020604051016040525f61041061040b60043590565b610d3d565b90506020810360408251015f818301526020825280601f01601f191682f35b8063b7a94eb803610444576104446001610b77565b6101ea633c10b94e610816565b34801561045c575f80fd5b5060408051808201909152600b81526a506f6c696379204170657360a81b60208201525b60405161048d919061266a565b60405180910390f35b3480156104a1575f80fd5b506104b56104b0366004612692565b610d70565b604051901515815260200161048d565b3480156104d0575f80fd5b5068a20d6e21d0e525530854600160a01b90046001600160601b03165b60405190815260200161048d565b348015610506575f80fd5b506001546104b59060ff1681565b34801561051f575f80fd5b506104b561052e3660046126ba565b610d85565b6101ea610e39565b348015610546575f80fd5b506104b56105553660046126f4565b610e86565b348015610565575f80fd5b506101ea610574366004612752565b610ecd565b348015610584575f80fd5b506104b56105933660046127f1565b610f6c565b3480156105a3575f80fd5b506040516012815260200161048d565b3480156105be575f80fd5b506105c7610f7f565b60405161048d9493929190612810565b3480156105e2575f80fd5b50610480611146565b3480156105f6575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b03909116815260200161048d565b6101ea61136a565b348015610637575f80fd5b506101ea610646366004612867565b6113a3565b348015610656575f80fd5b50610480611419565b34801561066a575f80fd5b506104ed6106793660046126f4565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902054600160a01b90046001600160601b031690565b6101ea6114a8565b3480156106be575f80fd5b506104806114bb565b3480156106d2575f80fd5b50638b78c6d8195461060c565b3480156106ea575f80fd5b506101ea611547565b3480156106fe575f80fd5b506104ed69d3c21bcecceda100000081565b34801561071b575f80fd5b50604080518082019091526005815264504150455360d81b6020820152610480565b348015610748575f80fd5b506104ed683635c9adc5dea0000081565b348015610764575f80fd5b506104b5610773366004612692565b6115a9565b348015610783575f80fd5b506104806115b5565b348015610797575f80fd5b506104ed6107a63660046128a6565b6115c2565b6101ea6107b93660046126f4565b611645565b6101ea6107cc3660046126f4565b611682565b3480156107dc575f80fd5b506104806116a8565b3480156107f0575f80fd5b506104ed6107ff3660046126f4565b63389a75e1600c9081525f91909152602090205490565b805f526004601cfd5b6001600160a01b03831661083a5761083a63ea553b34610816565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b031661086a5761086a6340739bf0610816565b600a8101600282015f6108ab835f19640100000000891089020160011b5b5f8160031c8360601b0180546007841660051b1c63ffffffff1691505092915050565b63ffffffff16815260208101919091526040015f20546001600160a01b038781169116146108e0576108e063a1148100610816565b856001600160a01b0316836001600160a01b031614610935576109038684610b7f565b61093557826001600160a01b031661091a85610cff565b6001600160a01b031614610935576109356359c896be610816565b6001600160a01b038681165f908152600b84016020526040808220928816825290208154683635c9adc5dea00000906008860190600160a01b90046001600160601b03168083111561098e5761098e63f4d678b8610816565b84546001600160601b03918490038216600160a01b9081026001600160a01b039283161787558554818104841686019093160291161783556005860160601b600889901c015460ff89161c60011615610a19576005860160601b600889901c018054600160ff8b161b191690555f888152600487016020526040902080546001600160a01b03191690555b6001600160a01b038a165f90815260208290526040812085545f1963ffffffff600160801b80840482169290920180821690920263ffffffff60801b19909316929092178855600381901c631fffffff16606084901b015492939260059190911b60e0161c1690505f610a96886108888d5f1901600190811b0190565b9050610aa9838263ffffffff16846116b5565b610ac3885f1963ffffffff851601600190811b01836116b5565b5050835463ffffffff60801b198116600160801b9182900463ffffffff908116600181019091169092021785556001600160a01b038b165f908152602084905260409020909150610b1590828b6116b5565b610b2a868a610b24878e6116e0565b8461176b565b50815f528860601b60601c8a60601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa3610b6b565b505050565b50505050505050505050565b805f5260205ff35b6028818152601483905268a20d6e21d0e525530b5f9081526048812091525415155b92915050565b5f610bb1826117d0565b610bc257610bc263ceea21b6610816565b610ba1825b5f68a20d6e21d0e525530868a20d6e21d0e525530a82610bff68a20d6e21d0e52553125f19640100000000881088020160011b610888565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a82610c5d68a20d6e21d0e52553125f19640100000000891089020160011b610888565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116925083168214610ca357610c928284610b7f565b610ca357610ca363cfb3b942610816565b5f848152600482016020526040902080546001600160a01b0319166001600160a01b0387169081179091556005820160601b600886901c018054600160ff881690811b1991909116921515901b9190911790555b509392505050565b5f610d09826117d0565b610d1a57610d1a63ceea21b6610816565b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f610d49836117ec565b604051602001610d5a929190612920565b6040516020818303038152906040529050919050565b5f610d7c33848461182e565b50600192915050565b336028908152601484905268a20d6e21d0e525530f5f9081526048812091819052905f6e22d473030f116ddee9f6b43ac78ba333148015610ded57506001600160a01b0386165f90815268a20d6e21d0e52553136020526040902054600160581b9004600416155b610df8578154610dfb565b5f195b90505f198114610e205780841115610e1a57610e1a6313be252b610816565b83810382555b610e2b8686866118ec565b6001925050505b9392505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e52553136020526040902054600160581b90046002811615159060ff811690600116610ec757823b151591505b50919050565b610ed5612173565b60015460ff1615610ef9576040516331d1c0a360e01b815260040160405180910390fd5b6002610f06868883612a02565b506003610f14848683612a02565b506004610f22828483612a02565b507f45692e97a4dfc454700d6c0146375f2061b7d8d1d34b6d0b6e7dc21cc3f2b28b868686868686604051610f5c96959493929190612ae4565b60405180910390a1505050505050565b5f610f77338361218d565b506001919050565b606080606080600260036004828054610f97906128d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc3906128d7565b801561100e5780601f10610fe55761010080835404028352916020019161100e565b820191905f5260205f20905b815481529060010190602001808311610ff157829003601f168201915b50505050509250818054611021906128d7565b80601f016020809104026020016040519081016040528092919081815260200182805461104d906128d7565b80156110985780601f1061106f57610100808354040283529160200191611098565b820191905f5260205f20905b81548152906001019060200180831161107b57829003601f168201915b505050505091508080546110ab906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546110d7906128d7565b80156111225780601f106110f957610100808354040283529160200191611122565b820191905f5260205f20905b81548152906001019060200180831161110557829003601f168201915b5050505050905060405180602001604052805f815250935093509350935090919293565b60605f604051806040016040528060018152602001607b60f81b81525090505f60028054611173906128d7565b159050611233578161120c6002805461118b906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546111b7906128d7565b80156112025780601f106111d957610100808354040283529160200191611202565b820191905f5260205f20905b8154815290600101906020018083116111e557829003601f168201915b505050505061221d565b60405160200161121d929190612b2c565b6040516020818303038152906040529150600190505b60038054611240906128d7565b1590506112a8578015611270578160405160200161125e9190612b6c565b60405160208183030381529060405291505b816112816003805461118b906128d7565b604051602001611292929190612b89565b6040516020818303038152906040529150600190505b600480546112b5906128d7565b1590506113195780156112e557816040516020016112d39190612b6c565b60405160208183030381529060405291505b816112f66004805461118b906128d7565b604051602001611307929190612bb2565b60405160208183030381529060405291505b8160405160200161132a9190612bd9565b604051602081830303815290604052915061134482612229565b6040516020016113549190612bf5565b6040516020818303038152906040529250505090565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b6113ab612173565b60015460ff16156113cf576040516331d1c0a360e01b815260040160405180910390fd5b5f6113db828483612a02565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6828260405161140d929190612c26565b60405180910390a15050565b60605f8054611427906128d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611453906128d7565b801561149e5780601f106114755761010080835404028352916020019161149e565b820191905f5260205f20905b81548152906001019060200180831161148157829003601f168201915b5050505050905090565b6114b0612173565b6114b95f612236565b565b600280546114c8906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546114f4906128d7565b801561153f5780601f106115165761010080835404028352916020019161153f565b820191905f5260205f20905b81548152906001019060200180831161152257829003601f168201915b505050505081565b61154f612173565b60015460ff1615611573576040516331d1c0a360e01b815260040160405180910390fd5b6001805460ff1916811790556040517f63a07be20c0c377c2ddf3d62f7e55cc12f4115a0a1ecddd38108fb0b3ce8b68a905f90a1565b5f610d7c3384846118ec565b600380546114c8906128d7565b5f6e22d473030f116ddee9f6b43ac78ba36001600160a01b03831603611621576001600160a01b0383165f90815268a20d6e21d0e52553136020526040902054600160581b900460ff81169060041661161f575f19915050610ba1565b505b50602890815260149190915268a20d6e21d0e525530f5f9081526048812091525490565b61164d612173565b63389a75e1600c52805f526020600c20805442111561167357636f5e88185f526004601cfd5b5f905561167f81612236565b50565b61168a612173565b8060601b61169f57637448fbae5f526004601cfd5b61167f81612236565b600480546114c8906128d7565b8160031c8360601b016007831660051b815480821c841863ffffffff16821b81188355505050505050565b8154600160601b900463ffffffff1668a20d6e21d0e52553088161176457805463ffffffff198116600163ffffffff928316019182169081178355855463ffffffff60601b1916600160601b82021786555f818152600284016020526040902080546001600160a01b0319166001600160a01b038716179055909250611764575f80fd5b5092915050565b5f600190508084038060021c8660601b0180546003831660061b92508563ffffffff168560201b178082851c1867ffffffffffffffff16841b82188355505050505050505050565b8082146117c8578382526020820191506117b3565b505092915050565b5f806117db83610bc7565b6001600160a01b0316141592915050565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a900480611805575050819003601f19909101908152919050565b6e22d473030f116ddee9f6b43ac78ba36001600160a01b0383160361188c576001600160a01b0383165f90815268a20d6e21d0e525531360205260409020805460ff60581b1981166004600160581b9283900460ff16179091021790555b6028828152601484905268a20d6e21d0e525530f5f9081526048812091528190555f8181526001600160a01b0380841691908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a3505050565b6001600160a01b0382166119075761190763ea553b34610816565b6001600160a01b038381165f90815268a20d6e21d0e525531360205260408082208584168352912068a20d6e21d0e52553095468a20d6e21d0e52553089316611957576119576340739bf0610816565b6119c16040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f63ffffffff1681526020015f81526020015f63ffffffff1681526020015f80191681526020015f80191681525090565b825463ffffffff600160801b808304821660408501528454041660608301526001600160601b03600160a01b9091041680861115611a0657611a0663f4d678b8610816565b83546001600160601b0391879003828116600160a01b9081026001600160a01b03938416178755855481810485168a0194851690910292169190911784556040830151909190611a7890611a60683635c9adc5dea0000090565b8481611a6e57611a6e612c41565b0480821191030290565b8352611a8388610e86565b611ad157876001600160a01b0316896001600160a01b031603611aae57825160408401510360608401525b611acb683635c9adc5dea000008204846060015180821191030290565b60208401525b5050611adb600190565b15611cdb575f611b0b8260400151611b00845f01518560200151808218908211021890565b808218908211021890565b905080611b185750611cdb565b8151819003825260208201805182900390526001600160a01b0380881690891603611b4d576060820180519091019052611cdb565b6040805163144027d3818301526001600160a01b038a8116606080840191909152908a16608083015260a082015260c0810183815260e0600585901b83018101909352602082015290810181526101408301526001600160a01b038089165f908152600887016020526040808220928a1682529020611bcc858a6116e0565b63ffffffff1660e08501526060840151928301925b6040850180515f190190819052600381901c606085901b01545f9160051b60e0161c63ffffffff1663ffffffff169050611c1c8383836116b5565b611c2f89600a01828860e001518561176b565b61014086015180518281526020019052600881901c60058a0160601b015460ff82161c60011615611c92576005890160601b600882901c018054600160ff84161b191690555f81815260048a016020526040902080546001600160a01b03191690555b50838160010191508103611be15760608501819052855463ffffffff918216600160801b90810263ffffffff60801b199283161788556040870151895493160291161786555050505b805160208201518554600160801b80820463ffffffff90811684018590036080870181905263ffffffff60801b19909316921602178655604080519190920160a0820181815260059190911b820160c09081018452928201529081018152600a8501906101608301528454600160601b900463ffffffff16610120830152815115611ed757610160820151606089901b6001176020918201526001600160a01b0389165f908152600887019091526040808220908401518451810360a08601819052875463ffffffff909116600160801b0263ffffffff60801b199091161787556101208501515b5f1991909101600381901c606084901b0154909190600583901b60e0161c63ffffffff16611df386825f8061176b565b6101608701518051602080830151600885901b17825201905260068a0160601b600882901c018054600160ff84161b191690558415611e4657611e468a6009018380600101945063ffffffff16836116b5565b600881901c60058b0160601b015460ff82161c60011615611e995760058a0160601b600882901c018054600160ff84161b191690555f81815260048b016020526040902080546001600160a01b03191690555b508560a001518203611dc3578315611ed25763ffffffff81166101208701819052895463ffffffff60601b1916600160601b9091021789555b505050505b6020820151156120ff57610160820151606088901b6020909101526001600160a01b0387165f9081526008860160205260409020611f1584896116e0565b63ffffffff1660e08401525f683635c9adc5dea000008754600160a01b90046001600160601b031681611f4a57611f4a612c41565b88549190049150640100000000900463ffffffff1681811180159091021761010085015260608401516020850151810160c08601819052865463ffffffff60801b1916600160801b63ffffffff928316021787558854600160401b9004165b5f86610120015163ffffffff168263ffffffff1614611ff85760098a0160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff169050612056565b506101008601515b612010865f19830160011b610888565b63ffffffff16156120425761203b61202f8b6006018360010187612273565b85811180159091021790565b9050612000565b600181018481118015909102176101008801525b600881901c60068b0160601b018054600160ff84161b801990911617905561207f8584836116b5565b61209586828960e001518680600101975061176b565b6101608701518051602080830151600885901b178252019052508560c001518203611fa957885461010087015163ffffffff9081166401000000000267ffffffff000000001991909316600160401b02166bffffffffffffffff0000000019909116171788555050505b61014082015115612119576121198261014001518661236c565b6101608201511561213357612133826101600151866123ba565b50845f528560601b60601c8760601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa350505050505050565b638b78c6d8195433146114b9576382b429005f526004601cfd5b5f68a20d6e21d0e52553086001600160a01b0384165f818152600b92909201602090815260408320805486158015865291955060ff600160581b9091049081166002918216159092180218600117927fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d64203939190a2815460ff909116600160581b0260ff60581b199091161790555050565b6060610ba1825f61244b565b6060610ba1825f8061254b565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f801990508360601b8360081c81018054198560ff161c8560ff161b806122c7578460081c83015b600183019250825419915080831182171561229b57808311156122c55760ff86191691821b90911c905b505b80156123625782820360081b7e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405821960010183166101e07a1412563212c14164235266736f7425221143267a4524367526767760fc7b2aaaaaaaba69a69a6db6db6db2cb2cb2ce739ce73def7bdeffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1717858111878210175f031793505b5050509392505050565b5f816001015f9054906101000a90046001600160a01b031690506020830151805160051b60840160808203915060208282601c85015f875af16001835114166123b3575f82fd5b5050505050565b6001810154604083015163263c69d6603f1982019081526020601f19830181905282516001600160a01b039094169360051b6044019282908490602319015f875af16001825114166123b3575f81fd5b919050565b80821461242b57815160a01b60a81c825260208201915061240f565b5050919050565b80830151835260208301925081830315610cf757612432565b60405160208101821561246057602281536001015b7b5c75303030303031323334353637383961626364656662746e00667260155283516b1000000000000004000000009085015b8086146125235760018601955060ff865116602081106124dc57826001821b166124c65780845360018401935050612493565b605c845380600185015360028401935050612493565b6137006001821b16612509578060041c51601d53600f811651601e53601951845260068401935050612493565b605c84536008810151600185015350600283019250612493565b5050821561253357602281536001015b5f8152601f1982820301825260200160405292915050565b606083518015610cf7576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b60038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f811651600353505f5184526004840193508284106125c6579052602001604052613d3d60f01b60038406600204808303919091525f861515909102918290035290038252509392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e32602083018461263c565b80356001600160a01b038116811461240a575f80fd5b5f80604083850312156126a3575f80fd5b6126ac8361267c565b946020939093013593505050565b5f805f606084860312156126cc575f80fd5b6126d58461267c565b92506126e36020850161267c565b929592945050506040919091013590565b5f60208284031215612704575f80fd5b610e328261267c565b5f8083601f84011261271d575f80fd5b50813567ffffffffffffffff811115612734575f80fd5b60208301915083602082850101111561274b575f80fd5b9250929050565b5f805f805f8060608789031215612767575f80fd5b863567ffffffffffffffff81111561277d575f80fd5b61278989828a0161270d565b909750955050602087013567ffffffffffffffff8111156127a8575f80fd5b6127b489828a0161270d565b909550935050604087013567ffffffffffffffff8111156127d3575f80fd5b6127df89828a0161270d565b979a9699509497509295939492505050565b5f60208284031215612801575f80fd5b81358015158114610e32575f80fd5b608081525f612822608083018761263c565b8281036020840152612834818761263c565b90508281036040840152612848818661263c565b9050828103606084015261285c818561263c565b979650505050505050565b5f8060208385031215612878575f80fd5b823567ffffffffffffffff81111561288e575f80fd5b61289a8582860161270d565b90969095509350505050565b5f80604083850312156128b7575f80fd5b6128c08361267c565b91506128ce6020840161267c565b90509250929050565b600181811c908216806128eb57607f821691505b602082108103610ec757634e487b7160e01b5f52602260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f80845461292d816128d7565b600182168015612944576001811461295957612986565b60ff1983168652811515820286019350612986565b875f5260205f205f5b8381101561297e57815488820152600190910190602001612962565b505081860193505b5050506129938185612909565b64173539b7b760d91b815260050195945050505050565b634e487b7160e01b5f52604160045260245ffd5b601f821115610b6657805f5260205f20601f840160051c810160208510156129e35750805b601f840160051c820191505b818110156123b3575f81556001016129ef565b67ffffffffffffffff831115612a1a57612a1a6129aa565b612a2e83612a2883546128d7565b836129be565b5f601f841160018114612a5f575f8515612a485750838201355b5f19600387901b1c1916600186901b1783556123b3565b5f83815260208120601f198716915b82811015612a8e5786850135825560209485019460019092019101612a6e565b5086821015612aaa575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612af760608301888a612abc565b8281036020840152612b0a818789612abc565b90508281036040840152612b1f818587612abc565b9998505050505050505050565b5f612b378285612909565b6e113232b9b1b934b83a34b7b7111d1160891b8152612b59600f820185612909565b601160f91b815260010195945050505050565b5f612b778284612909565b61016160f51b81526002019392505050565b5f612b948285612909565b6a113bb2b139b4ba32911d1160a91b8152612b59600b820185612909565b5f612bbd8285612909565b681134b6b0b3b2911d1160b91b8152612b596009820185612909565b5f612be48284612909565b607d60f81b81526001019392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f610e32601d830184612909565b602081525f612c39602083018486612abc565b949350505050565b634e487b7160e01b5f52601260045260245ffdfea264697066735822122081864112e68cfda8f3303ad0fc9b348f425804322091f7fa409868e45410bda264736f6c634300081a00336080604052348015600e575f80fd5b50604051610c7c380380610c7c833981016040819052602b916057565b683602298b8c10b0123180546001600160a01b0319166001600160a01b03929092169190911790556082565b5f602082840312156066575f80fd5b81516001600160a01b0381168114607b575f80fd5b9392505050565b610bed8061008f5f395ff3fe60806040526004361061010c575f3560e01c80636cef16e61161009457806397e5311c1161006357806397e5311c14610487578063a22cb4651461049b578063b88d4fde146104ba578063c87b56dd146104cd578063e985e9c5146104ec5761011d565b80636cef16e61461041b57806370a082311461042f5780638da5cb5b1461044e57806395d89b41146104735761011d565b806318160ddd116100db57806318160ddd1461039557806323b872dd146103b757806324359879146103ca57806342842e0e146103e95780636352211e146103fc5761011d565b806301ffc9a7146102d957806306fdde031461032a578063081812fc1461034b578063095ea7b3146103825761011d565b3661011d57341561011b575f80fd5b005b683602298b8c10b012305f3560e01c63263c69d68190036101c35781546001600160a01b031633146101565761015663363cb31261050b565b600435602401602081033560051b81015b8082146101b85781358060601c816001168260a01b60a81c811583028284027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f38a4505050816020019150610167565b505060015f5260205ff35b8063144027d30361024a5781546001600160a01b031633146101ec576101ec63363cb31261050b565b600435602435604435602401602081033560051b81015b80821461023d57813583857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f38a4816020019150610203565b5050505060015f5260205ff35b80630f4599e5036102cc5760018201546001600160a01b0316156102945760018201546001600160a01b03166004356001600160a01b0316146102945761029463c59ec47a61050b565b81546001600160a01b0316156102b1576102b163bf656a4661050b565b81546001600160a01b0319163317825560015f908152602090f35b61011b633c10b94e61050b565b3480156102e4575f80fd5b506103156102f33660046109a8565b6301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b60405190151581526020015b60405180910390f35b348015610335575f80fd5b5061033e610514565b60405161032191906109d6565b348015610356575f80fd5b5061036a610365366004610a0b565b610529565b6040516001600160a01b039091168152602001610321565b61011b610390366004610a3d565b61053f565b3480156103a0575f80fd5b506103a96105bf565b604051908152602001610321565b61011b6103c5366004610a65565b6105cf565b3480156103d5575f80fd5b5061036a6103e4366004610a0b565b61065b565b61011b6103f7366004610a65565b61066b565b348015610407575f80fd5b5061036a610416366004610a0b565b610681565b348015610426575f80fd5b50610315610691565b34801561043a575f80fd5b506103a9610449366004610a9f565b610769565b348015610459575f80fd5b50683602298b8c10b01232546001600160a01b031661036a565b34801561047e575f80fd5b5061033e610782565b348015610492575f80fd5b5061036a610792565b3480156104a6575f80fd5b5061011b6104b5366004610ab8565b6107bb565b61011b6104c8366004610af1565b610838565b3480156104d8575f80fd5b5061033e6104e7366004610a0b565b6108c2565b3480156104f7575f80fd5b50610315610506366004610b86565b6108dc565b805f526004601cfd5b60606105246306fdde035f610907565b905090565b5f6105396327ef5495835f610965565b92915050565b5f610548610792565b90508260601b60601c925060405163d10b6e0c5f5283602052826040523360605260205f6064601c34865af1601f3d1116610585573d5f823e3d81fd5b80604052505f6060528183600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f38a4505050565b5f61052463e2c792815f80610965565b5f6105d8610792565b90508360601b60601c93508260601b60601c925060405163e5eb36c881528460208201528360408201528260608201523360808201526020816084601c840134865af160018251141661062d573d5f823e3d81fd5b508183857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f38a450505050565b5f61053963c016aa52835f610965565b365f61067a8585858585610838565b5050505050565b5f610539632d8a746e835f610965565b5f805f61069c610792565b683602298b8c10b0123254638da5cb5b5f81815292935091683602298b8c10b01230916001600160a01b0316906020906004601c875afa80601f3d1116600c5160601c029550806106f4578160601b156106f4575f80fd5b50846001600160a01b0316816001600160a01b03161461075d576002820180546001600160a01b0319166001600160a01b0387811691821790925560405190918316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35b60019550505050505090565b5f61053963f5b100ea836001600160a01b03165f610965565b60606105246395d89b415f610907565b683602298b8c10b01230546001600160a01b0316806107b8576107b8635b2a47ae61050b565b90565b5f6107c4610792565b90508260601b60601c925060405163f6916ddd5f52836020528215156040523360605260205f6064601c34865af160015f511416610804573d5f823e3d81fd5b83337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a360405250505f60605250565b6108438585856105cf565b833b1561067a5760405163150b7a028082523360208301528660601b60601c60408301528460608301526080808301528260a0830152828460c084013760208260a48501601c85015f8a5af16108a1573d156108a1573d5f833e3d82fd5b8060e01b8251146108b95763d1a57ed65f526004601cfd5b50505050505050565b60606108cd82610681565b5061053963cb30b46083610907565b5f6108fe6362fb246d846001600160a01b0316846001600160a01b0316610965565b15159392505050565b60605f610912610792565b90506040519150835f52826020525f806024601c845afa610935573d5f833e3d82fd5b60205f803e60205f51833e815160205f5101602084013e815160208301015f815260208101604052505092915050565b5f8061096f610792565b9050604051855f52846020528360405260205f6044601c855afa601f3d111661099a573d5f823e3d81fd5b60405250505f519392505050565b5f602082840312156109b8575f80fd5b81356001600160e01b0319811681146109cf575f80fd5b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610a1b575f80fd5b5035919050565b80356001600160a01b0381168114610a38575f80fd5b919050565b5f8060408385031215610a4e575f80fd5b610a5783610a22565b946020939093013593505050565b5f805f60608486031215610a77575f80fd5b610a8084610a22565b9250610a8e60208501610a22565b929592945050506040919091013590565b5f60208284031215610aaf575f80fd5b6109cf82610a22565b5f8060408385031215610ac9575f80fd5b610ad283610a22565b915060208301358015158114610ae6575f80fd5b809150509250929050565b5f805f805f60808688031215610b05575f80fd5b610b0e86610a22565b9450610b1c60208701610a22565b935060408601359250606086013567ffffffffffffffff811115610b3e575f80fd5b8601601f81018813610b4e575f80fd5b803567ffffffffffffffff811115610b64575f80fd5b886020828401011115610b75575f80fd5b959894975092955050506020019190565b5f8060408385031215610b97575f80fd5b610ba083610a22565b9150610bae60208401610a22565b9050925092905056fea2646970667358221220078ef79db923faa7459e67d7482a60d7cbe42e335c67254aab732c98b47332af64736f6c634300081a0033
0x6080604052600436106101db575f3560e01c80636c0360eb116101015780639d8e217711610094578063f04e283e11610063578063f04e283e146107ab578063f2fde38b146107be578063f3ccaac0146107d1578063fee81cf4146107e5576101ec565b80639d8e21771461073d578063a9059cbb14610759578063beb0a41614610778578063dd62ed3e1461078c576101ec565b80638da5cb5b116100d05780638da5cb5b146106c75780638e021c06146106df578063902d55a5146106f357806395d89b4114610710576101ec565b80636c0360eb1461064b57806370a082311461065f578063715018a6146106ab5780637284e416146106b3576101ec565b806328d0ee22116101795780633c130d90116101485780633c130d90146105d75780634ef41efc146105eb57806354d1f13d1461062457806355f804b31461062c576101ec565b806328d0ee221461055a5780632a6a935d14610579578063313ce56714610598578063392f37e9146105b3576101ec565b806320c5ab6a116101b557806320c5ab6a146104fb57806323b872dd146105145780632569296214610533578063274e430b1461053b576101ec565b806306fdde0314610451578063095ea7b31461049657806318160ddd146104c5576101ec565b366101ec5734156101ea575f80fd5b005b68a20d6e21d0e52553085f3560e01c63e5eb36c88190036102465760018201546001600160a01b031633146102285761022863ce5a776b610816565b61023c60043560243560443560643561081f565b6102466001610b77565b8063f6916ddd036102a55760018201546001600160a01b031633146102725761027263ce5a776b610816565b600435602890815260443560145268a20d6e21d0e525530b5f908152604881209152602435151590556102a56001610b77565b806362fb246d036102ce575f6102bf600435602435610b7f565b90506102cc811515610b77565b505b80632d8a746e036102f5576102f56102e7600435610ba7565b6001600160a01b0316610b77565b8063c016aa520361030e5761030e6102e7600435610bc7565b8063d10b6e0c036103625760018201546001600160a01b0316331461033a5761033a63ce5a776b610816565b5f61034c600435602435604435610c25565b9050610360816001600160a01b0316610b77565b505b806327ef54950361037b5761037b6102e7600435610cff565b8063f5b100ea036103be576001600160a01b03600435165f90815268a20d6e21d0e525531360205260409020546103be90600160801b900463ffffffff16610b77565b8063e2c79281036103ea5768a20d6e21d0e5255308546103ea90600160801b900463ffffffff16610b77565b8063cb30b4600361042f576020604051016040525f61041061040b60043590565b610d3d565b90506020810360408251015f818301526020825280601f01601f191682f35b8063b7a94eb803610444576104446001610b77565b6101ea633c10b94e610816565b34801561045c575f80fd5b5060408051808201909152600b81526a506f6c696379204170657360a81b60208201525b60405161048d919061266a565b60405180910390f35b3480156104a1575f80fd5b506104b56104b0366004612692565b610d70565b604051901515815260200161048d565b3480156104d0575f80fd5b5068a20d6e21d0e525530854600160a01b90046001600160601b03165b60405190815260200161048d565b348015610506575f80fd5b506001546104b59060ff1681565b34801561051f575f80fd5b506104b561052e3660046126ba565b610d85565b6101ea610e39565b348015610546575f80fd5b506104b56105553660046126f4565b610e86565b348015610565575f80fd5b506101ea610574366004612752565b610ecd565b348015610584575f80fd5b506104b56105933660046127f1565b610f6c565b3480156105a3575f80fd5b506040516012815260200161048d565b3480156105be575f80fd5b506105c7610f7f565b60405161048d9493929190612810565b3480156105e2575f80fd5b50610480611146565b3480156105f6575f80fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b03909116815260200161048d565b6101ea61136a565b348015610637575f80fd5b506101ea610646366004612867565b6113a3565b348015610656575f80fd5b50610480611419565b34801561066a575f80fd5b506104ed6106793660046126f4565b6001600160a01b03165f90815268a20d6e21d0e52553136020526040902054600160a01b90046001600160601b031690565b6101ea6114a8565b3480156106be575f80fd5b506104806114bb565b3480156106d2575f80fd5b50638b78c6d8195461060c565b3480156106ea575f80fd5b506101ea611547565b3480156106fe575f80fd5b506104ed69d3c21bcecceda100000081565b34801561071b575f80fd5b50604080518082019091526005815264504150455360d81b6020820152610480565b348015610748575f80fd5b506104ed683635c9adc5dea0000081565b348015610764575f80fd5b506104b5610773366004612692565b6115a9565b348015610783575f80fd5b506104806115b5565b348015610797575f80fd5b506104ed6107a63660046128a6565b6115c2565b6101ea6107b93660046126f4565b611645565b6101ea6107cc3660046126f4565b611682565b3480156107dc575f80fd5b506104806116a8565b3480156107f0575f80fd5b506104ed6107ff3660046126f4565b63389a75e1600c9081525f91909152602090205490565b805f526004601cfd5b6001600160a01b03831661083a5761083a63ea553b34610816565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b031661086a5761086a6340739bf0610816565b600a8101600282015f6108ab835f19640100000000891089020160011b5b5f8160031c8360601b0180546007841660051b1c63ffffffff1691505092915050565b63ffffffff16815260208101919091526040015f20546001600160a01b038781169116146108e0576108e063a1148100610816565b856001600160a01b0316836001600160a01b031614610935576109038684610b7f565b61093557826001600160a01b031661091a85610cff565b6001600160a01b031614610935576109356359c896be610816565b6001600160a01b038681165f908152600b84016020526040808220928816825290208154683635c9adc5dea00000906008860190600160a01b90046001600160601b03168083111561098e5761098e63f4d678b8610816565b84546001600160601b03918490038216600160a01b9081026001600160a01b039283161787558554818104841686019093160291161783556005860160601b600889901c015460ff89161c60011615610a19576005860160601b600889901c018054600160ff8b161b191690555f888152600487016020526040902080546001600160a01b03191690555b6001600160a01b038a165f90815260208290526040812085545f1963ffffffff600160801b80840482169290920180821690920263ffffffff60801b19909316929092178855600381901c631fffffff16606084901b015492939260059190911b60e0161c1690505f610a96886108888d5f1901600190811b0190565b9050610aa9838263ffffffff16846116b5565b610ac3885f1963ffffffff851601600190811b01836116b5565b5050835463ffffffff60801b198116600160801b9182900463ffffffff908116600181019091169092021785556001600160a01b038b165f908152602084905260409020909150610b1590828b6116b5565b610b2a868a610b24878e6116e0565b8461176b565b50815f528860601b60601c8a60601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa3610b6b565b505050565b50505050505050505050565b805f5260205ff35b6028818152601483905268a20d6e21d0e525530b5f9081526048812091525415155b92915050565b5f610bb1826117d0565b610bc257610bc263ceea21b6610816565b610ba1825b5f68a20d6e21d0e525530868a20d6e21d0e525530a82610bff68a20d6e21d0e52553125f19640100000000881088020160011b610888565b63ffffffff16815260208101919091526040015f20546001600160a01b03169392505050565b5f68a20d6e21d0e525530868a20d6e21d0e525530a82610c5d68a20d6e21d0e52553125f19640100000000891089020160011b610888565b63ffffffff16815260208101919091526040015f20546001600160a01b03908116925083168214610ca357610c928284610b7f565b610ca357610ca363cfb3b942610816565b5f848152600482016020526040902080546001600160a01b0319166001600160a01b0387169081179091556005820160601b600886901c018054600160ff881690811b1991909116921515901b9190911790555b509392505050565b5f610d09826117d0565b610d1a57610d1a63ceea21b6610816565b505f90815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b60605f610d49836117ec565b604051602001610d5a929190612920565b6040516020818303038152906040529050919050565b5f610d7c33848461182e565b50600192915050565b336028908152601484905268a20d6e21d0e525530f5f9081526048812091819052905f6e22d473030f116ddee9f6b43ac78ba333148015610ded57506001600160a01b0386165f90815268a20d6e21d0e52553136020526040902054600160581b9004600416155b610df8578154610dfb565b5f195b90505f198114610e205780841115610e1a57610e1a6313be252b610816565b83810382555b610e2b8686866118ec565b6001925050505b9392505050565b5f6202a30067ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a250565b6001600160a01b0381165f90815268a20d6e21d0e52553136020526040902054600160581b90046002811615159060ff811690600116610ec757823b151591505b50919050565b610ed5612173565b60015460ff1615610ef9576040516331d1c0a360e01b815260040160405180910390fd5b6002610f06868883612a02565b506003610f14848683612a02565b506004610f22828483612a02565b507f45692e97a4dfc454700d6c0146375f2061b7d8d1d34b6d0b6e7dc21cc3f2b28b868686868686604051610f5c96959493929190612ae4565b60405180910390a1505050505050565b5f610f77338361218d565b506001919050565b606080606080600260036004828054610f97906128d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc3906128d7565b801561100e5780601f10610fe55761010080835404028352916020019161100e565b820191905f5260205f20905b815481529060010190602001808311610ff157829003601f168201915b50505050509250818054611021906128d7565b80601f016020809104026020016040519081016040528092919081815260200182805461104d906128d7565b80156110985780601f1061106f57610100808354040283529160200191611098565b820191905f5260205f20905b81548152906001019060200180831161107b57829003601f168201915b505050505091508080546110ab906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546110d7906128d7565b80156111225780601f106110f957610100808354040283529160200191611122565b820191905f5260205f20905b81548152906001019060200180831161110557829003601f168201915b5050505050905060405180602001604052805f815250935093509350935090919293565b60605f604051806040016040528060018152602001607b60f81b81525090505f60028054611173906128d7565b159050611233578161120c6002805461118b906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546111b7906128d7565b80156112025780601f106111d957610100808354040283529160200191611202565b820191905f5260205f20905b8154815290600101906020018083116111e557829003601f168201915b505050505061221d565b60405160200161121d929190612b2c565b6040516020818303038152906040529150600190505b60038054611240906128d7565b1590506112a8578015611270578160405160200161125e9190612b6c565b60405160208183030381529060405291505b816112816003805461118b906128d7565b604051602001611292929190612b89565b6040516020818303038152906040529150600190505b600480546112b5906128d7565b1590506113195780156112e557816040516020016112d39190612b6c565b60405160208183030381529060405291505b816112f66004805461118b906128d7565b604051602001611307929190612bb2565b60405160208183030381529060405291505b8160405160200161132a9190612bd9565b604051602081830303815290604052915061134482612229565b6040516020016113549190612bf5565b6040516020818303038152906040529250505090565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2565b6113ab612173565b60015460ff16156113cf576040516331d1c0a360e01b815260040160405180910390fd5b5f6113db828483612a02565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6828260405161140d929190612c26565b60405180910390a15050565b60605f8054611427906128d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611453906128d7565b801561149e5780601f106114755761010080835404028352916020019161149e565b820191905f5260205f20905b81548152906001019060200180831161148157829003601f168201915b5050505050905090565b6114b0612173565b6114b95f612236565b565b600280546114c8906128d7565b80601f01602080910402602001604051908101604052809291908181526020018280546114f4906128d7565b801561153f5780601f106115165761010080835404028352916020019161153f565b820191905f5260205f20905b81548152906001019060200180831161152257829003601f168201915b505050505081565b61154f612173565b60015460ff1615611573576040516331d1c0a360e01b815260040160405180910390fd5b6001805460ff1916811790556040517f63a07be20c0c377c2ddf3d62f7e55cc12f4115a0a1ecddd38108fb0b3ce8b68a905f90a1565b5f610d7c3384846118ec565b600380546114c8906128d7565b5f6e22d473030f116ddee9f6b43ac78ba36001600160a01b03831603611621576001600160a01b0383165f90815268a20d6e21d0e52553136020526040902054600160581b900460ff81169060041661161f575f19915050610ba1565b505b50602890815260149190915268a20d6e21d0e525530f5f9081526048812091525490565b61164d612173565b63389a75e1600c52805f526020600c20805442111561167357636f5e88185f526004601cfd5b5f905561167f81612236565b50565b61168a612173565b8060601b61169f57637448fbae5f526004601cfd5b61167f81612236565b600480546114c8906128d7565b8160031c8360601b016007831660051b815480821c841863ffffffff16821b81188355505050505050565b8154600160601b900463ffffffff1668a20d6e21d0e52553088161176457805463ffffffff198116600163ffffffff928316019182169081178355855463ffffffff60601b1916600160601b82021786555f818152600284016020526040902080546001600160a01b0319166001600160a01b038716179055909250611764575f80fd5b5092915050565b5f600190508084038060021c8660601b0180546003831660061b92508563ffffffff168560201b178082851c1867ffffffffffffffff16841b82188355505050505050505050565b8082146117c8578382526020820191506117b3565b505092915050565b5f806117db83610bc7565b6001600160a01b0316141592915050565b60606080604051019050602081016040525f8152805f19835b928101926030600a8206018453600a900480611805575050819003601f19909101908152919050565b6e22d473030f116ddee9f6b43ac78ba36001600160a01b0383160361188c576001600160a01b0383165f90815268a20d6e21d0e525531360205260409020805460ff60581b1981166004600160581b9283900460ff16179091021790555b6028828152601484905268a20d6e21d0e525530f5f9081526048812091528190555f8181526001600160a01b0380841691908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a3505050565b6001600160a01b0382166119075761190763ea553b34610816565b6001600160a01b038381165f90815268a20d6e21d0e525531360205260408082208584168352912068a20d6e21d0e52553095468a20d6e21d0e52553089316611957576119576340739bf0610816565b6119c16040518061018001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f63ffffffff1681526020015f81526020015f63ffffffff1681526020015f80191681526020015f80191681525090565b825463ffffffff600160801b808304821660408501528454041660608301526001600160601b03600160a01b9091041680861115611a0657611a0663f4d678b8610816565b83546001600160601b0391879003828116600160a01b9081026001600160a01b03938416178755855481810485168a0194851690910292169190911784556040830151909190611a7890611a60683635c9adc5dea0000090565b8481611a6e57611a6e612c41565b0480821191030290565b8352611a8388610e86565b611ad157876001600160a01b0316896001600160a01b031603611aae57825160408401510360608401525b611acb683635c9adc5dea000008204846060015180821191030290565b60208401525b5050611adb600190565b15611cdb575f611b0b8260400151611b00845f01518560200151808218908211021890565b808218908211021890565b905080611b185750611cdb565b8151819003825260208201805182900390526001600160a01b0380881690891603611b4d576060820180519091019052611cdb565b6040805163144027d3818301526001600160a01b038a8116606080840191909152908a16608083015260a082015260c0810183815260e0600585901b83018101909352602082015290810181526101408301526001600160a01b038089165f908152600887016020526040808220928a1682529020611bcc858a6116e0565b63ffffffff1660e08501526060840151928301925b6040850180515f190190819052600381901c606085901b01545f9160051b60e0161c63ffffffff1663ffffffff169050611c1c8383836116b5565b611c2f89600a01828860e001518561176b565b61014086015180518281526020019052600881901c60058a0160601b015460ff82161c60011615611c92576005890160601b600882901c018054600160ff84161b191690555f81815260048a016020526040902080546001600160a01b03191690555b50838160010191508103611be15760608501819052855463ffffffff918216600160801b90810263ffffffff60801b199283161788556040870151895493160291161786555050505b805160208201518554600160801b80820463ffffffff90811684018590036080870181905263ffffffff60801b19909316921602178655604080519190920160a0820181815260059190911b820160c09081018452928201529081018152600a8501906101608301528454600160601b900463ffffffff16610120830152815115611ed757610160820151606089901b6001176020918201526001600160a01b0389165f908152600887019091526040808220908401518451810360a08601819052875463ffffffff909116600160801b0263ffffffff60801b199091161787556101208501515b5f1991909101600381901c606084901b0154909190600583901b60e0161c63ffffffff16611df386825f8061176b565b6101608701518051602080830151600885901b17825201905260068a0160601b600882901c018054600160ff84161b191690558415611e4657611e468a6009018380600101945063ffffffff16836116b5565b600881901c60058b0160601b015460ff82161c60011615611e995760058a0160601b600882901c018054600160ff84161b191690555f81815260048b016020526040902080546001600160a01b03191690555b508560a001518203611dc3578315611ed25763ffffffff81166101208701819052895463ffffffff60601b1916600160601b9091021789555b505050505b6020820151156120ff57610160820151606088901b6020909101526001600160a01b0387165f9081526008860160205260409020611f1584896116e0565b63ffffffff1660e08401525f683635c9adc5dea000008754600160a01b90046001600160601b031681611f4a57611f4a612c41565b88549190049150640100000000900463ffffffff1681811180159091021761010085015260608401516020850151810160c08601819052865463ffffffff60801b1916600160801b63ffffffff928316021787558854600160401b9004165b5f86610120015163ffffffff168263ffffffff1614611ff85760098a0160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff169050612056565b506101008601515b612010865f19830160011b610888565b63ffffffff16156120425761203b61202f8b6006018360010187612273565b85811180159091021790565b9050612000565b600181018481118015909102176101008801525b600881901c60068b0160601b018054600160ff84161b801990911617905561207f8584836116b5565b61209586828960e001518680600101975061176b565b6101608701518051602080830151600885901b178252019052508560c001518203611fa957885461010087015163ffffffff9081166401000000000267ffffffff000000001991909316600160401b02166bffffffffffffffff0000000019909116171788555050505b61014082015115612119576121198261014001518661236c565b6101608201511561213357612133826101600151866123ba565b50845f528560601b60601c8760601b60601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205fa350505050505050565b638b78c6d8195433146114b9576382b429005f526004601cfd5b5f68a20d6e21d0e52553086001600160a01b0384165f818152600b92909201602090815260408320805486158015865291955060ff600160581b9091049081166002918216159092180218600117927fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d64203939190a2815460ff909116600160581b0260ff60581b199091161790555050565b6060610ba1825f61244b565b6060610ba1825f8061254b565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b5f801990508360601b8360081c81018054198560ff161c8560ff161b806122c7578460081c83015b600183019250825419915080831182171561229b57808311156122c55760ff86191691821b90911c905b505b80156123625782820360081b7e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405821960010183166101e07a1412563212c14164235266736f7425221143267a4524367526767760fc7b2aaaaaaaba69a69a6db6db6db2cb2cb2ce739ce73def7bdeffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1717858111878210175f031793505b5050509392505050565b5f816001015f9054906101000a90046001600160a01b031690506020830151805160051b60840160808203915060208282601c85015f875af16001835114166123b3575f82fd5b5050505050565b6001810154604083015163263c69d6603f1982019081526020601f19830181905282516001600160a01b039094169360051b6044019282908490602319015f875af16001825114166123b3575f81fd5b919050565b80821461242b57815160a01b60a81c825260208201915061240f565b5050919050565b80830151835260208301925081830315610cf757612432565b60405160208101821561246057602281536001015b7b5c75303030303031323334353637383961626364656662746e00667260155283516b1000000000000004000000009085015b8086146125235760018601955060ff865116602081106124dc57826001821b166124c65780845360018401935050612493565b605c845380600185015360028401935050612493565b6137006001821b16612509578060041c51601d53600f811651601e53601951845260068401935050612493565b605c84536008810151600185015350600283019250612493565b5050821561253357602281536001015b5f8152601f1982820301825260200160405292915050565b606083518015610cf7576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f526020830181810183886020010180515f82525b60038a0199508951603f8160121c16515f53603f81600c1c1651600153603f8160061c1651600253603f811651600353505f5184526004840193508284106125c6579052602001604052613d3d60f01b60038406600204808303919091525f861515909102918290035290038252509392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e32602083018461263c565b80356001600160a01b038116811461240a575f80fd5b5f80604083850312156126a3575f80fd5b6126ac8361267c565b946020939093013593505050565b5f805f606084860312156126cc575f80fd5b6126d58461267c565b92506126e36020850161267c565b929592945050506040919091013590565b5f60208284031215612704575f80fd5b610e328261267c565b5f8083601f84011261271d575f80fd5b50813567ffffffffffffffff811115612734575f80fd5b60208301915083602082850101111561274b575f80fd5b9250929050565b5f805f805f8060608789031215612767575f80fd5b863567ffffffffffffffff81111561277d575f80fd5b61278989828a0161270d565b909750955050602087013567ffffffffffffffff8111156127a8575f80fd5b6127b489828a0161270d565b909550935050604087013567ffffffffffffffff8111156127d3575f80fd5b6127df89828a0161270d565b979a9699509497509295939492505050565b5f60208284031215612801575f80fd5b81358015158114610e32575f80fd5b608081525f612822608083018761263c565b8281036020840152612834818761263c565b90508281036040840152612848818661263c565b9050828103606084015261285c818561263c565b979650505050505050565b5f8060208385031215612878575f80fd5b823567ffffffffffffffff81111561288e575f80fd5b61289a8582860161270d565b90969095509350505050565b5f80604083850312156128b7575f80fd5b6128c08361267c565b91506128ce6020840161267c565b90509250929050565b600181811c908216806128eb57607f821691505b602082108103610ec757634e487b7160e01b5f52602260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f80845461292d816128d7565b600182168015612944576001811461295957612986565b60ff1983168652811515820286019350612986565b875f5260205f205f5b8381101561297e57815488820152600190910190602001612962565b505081860193505b5050506129938185612909565b64173539b7b760d91b815260050195945050505050565b634e487b7160e01b5f52604160045260245ffd5b601f821115610b6657805f5260205f20601f840160051c810160208510156129e35750805b601f840160051c820191505b818110156123b3575f81556001016129ef565b67ffffffffffffffff831115612a1a57612a1a6129aa565b612a2e83612a2883546128d7565b836129be565b5f601f841160018114612a5f575f8515612a485750838201355b5f19600387901b1c1916600186901b1783556123b3565b5f83815260208120601f198716915b82811015612a8e5786850135825560209485019460019092019101612a6e565b5086821015612aaa575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612af760608301888a612abc565b8281036020840152612b0a818789612abc565b90508281036040840152612b1f818587612abc565b9998505050505050505050565b5f612b378285612909565b6e113232b9b1b934b83a34b7b7111d1160891b8152612b59600f820185612909565b601160f91b815260010195945050505050565b5f612b778284612909565b61016160f51b81526002019392505050565b5f612b948285612909565b6a113bb2b139b4ba32911d1160a91b8152612b59600b820185612909565b5f612bbd8285612909565b681134b6b0b3b2911d1160b91b8152612b596009820185612909565b5f612be48284612909565b607d60f81b81526001019392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081525f610e32601d830184612909565b602081525f612c39602083018486612abc565b949350505050565b634e487b7160e01b5f52601260045260245ffdfea264697066735822122081864112e68cfda8f3303ad0fc9b348f425804322091f7fa409868e45410bda264736f6c634300081a0033
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xfe6e2b…c578a4 | 39 mins agoSun, 16 Aug 2026 20:25:34 UTC | Transfer | [0] 0x000000000000…19c7028d [1] 0x000000000000…84d623d5 data: 0x000000000000000000…cde1dc49 |
| 0xfe6e2b…c578a4 | 39 mins agoSun, 16 Aug 2026 20:25:34 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…19c7028d data: 0x000000000000000000…cde1dc49 |
| 0xfefe6b…fce766 | 3 hrs agoSun, 16 Aug 2026 17:50:50 UTC | Transfer | [0] 0x000000000000…2ed8c9d4 [1] 0x000000000000…43e40951 data: 0x000000000000000000…68ce809e |
| 0xcd15a2…832426 | 3 hrs agoSun, 16 Aug 2026 17:33:01 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…075fd0f2 data: 0x000000000000000000…ce9216fb |
| 0xfa20b7…82b39e | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Approval | [0] 0x000000000000…19c7028d [1] 0x000000000000…e5d8eb13 data: 0x000000000000000000…00000000 |
| 0xfa20b7…82b39e | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Transfer | [0] 0x000000000000…1c5d8efa [1] 0x000000000000…43e40951 data: 0x000000000000000000…1cc81ac3 |
| 0xfa20b7…82b39e | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Transfer | [0] 0x000000000000…19c7028d [1] 0x000000000000…1c5d8efa data: 0x000000000000000000…1cc81ac3 |
| 0xfa20b7…82b39e | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Approval | [0] 0x000000000000…19c7028d [1] 0x000000000000…e5d8eb13 data: 0x000000000000000000…1cc81ac3 |
| 0xfa20b7…82b39e | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Transfer | [0] 0x000000000000…1f51c7cf [1] 0x000000000000…19c7028d data: 0x000000000000000000…1cc81ac3 |
| 0xe0b125…279cd6 | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | Approval | [0] 0x000000000000…1f51c7cf [1] 0x000000000000…19c7028d data: 0xffffffffffffffffff…ffffffff |
| 0x41d8b4…fe8b0c | 4 hrs agoSun, 16 Aug 2026 16:45:30 UTC | Transfer | [0] 0x000000000000…d113f996 [1] 0x000000000000…43e40951 data: 0x000000000000000000…4b5f71b9 |
| 0x41d8b4…fe8b0c | 4 hrs agoSun, 16 Aug 2026 16:45:30 UTC | Transfer | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…d113f996 data: 0x000000000000000000…4b5f71b9 |
| 0x41d8b4…fe8b0c | 4 hrs agoSun, 16 Aug 2026 16:45:30 UTC | Approval | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…b66337b5 data: 0x000000000000000000…4b5f71b9 |
| 0x41d8b4…fe8b0c | 4 hrs agoSun, 16 Aug 2026 16:45:30 UTC | Transfer | [0] 0x000000000000…ee48bde7 [1] 0x000000000000…ec4fff4f data: 0x000000000000000000…4b5f71b9 |
| 0x46bd5b…9e7744 | 4 hrs agoSun, 16 Aug 2026 16:45:08 UTC | Approval | [0] 0x000000000000…ee48bde7 [1] 0x000000000000…f1c315be data: 0x000000000000000000…4b5f71b9 |
| 0xfa236e…6b6c36 | 4 hrs agoSun, 16 Aug 2026 16:44:38 UTC | Transfer | [0] 0x000000000000…d113f996 [1] 0x000000000000…43e40951 data: 0x000000000000000000…4b5f71b9 |
| 0xfa236e…6b6c36 | 4 hrs agoSun, 16 Aug 2026 16:44:38 UTC | Transfer | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…d113f996 data: 0x000000000000000000…4b5f71b9 |
| 0xfa236e…6b6c36 | 4 hrs agoSun, 16 Aug 2026 16:44:38 UTC | Approval | [0] 0x000000000000…ec4fff4f [1] 0x000000000000…b66337b5 data: 0x000000000000000000…4b5f71b9 |
| 0xfa236e…6b6c36 | 4 hrs agoSun, 16 Aug 2026 16:44:38 UTC | Transfer | [0] 0x000000000000…ee48bde7 [1] 0x000000000000…ec4fff4f data: 0x000000000000000000…4b5f71b9 |
| 0x7ebe02…0e3fcf | 4 hrs agoSun, 16 Aug 2026 16:41:43 UTC | Approval | [0] 0x000000000000…ee48bde7 [1] 0x000000000000…f1c315be data: 0x000000000000000000…4b5f71b9 |
| 0x6f6729…ef2d95 | 5 hrs agoSun, 16 Aug 2026 15:39:19 UTC | Transfer | [0] 0x000000000000…211389c7 [1] 0x000000000000…998bead9 data: 0x000000000000000000…cdae67b3 |
| 0x6f6729…ef2d95 | 5 hrs agoSun, 16 Aug 2026 15:39:19 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…211389c7 data: 0x000000000000000000…cdae67b3 |
| 0xb760df…9b0b5d | 19 hrs agoSun, 16 Aug 2026 01:32:52 UTC | Transfer | [0] 0x000000000000…e9b05d31 [1] 0x000000000000…43e40951 data: 0x000000000000000000…f9c9724a |
| 0xb760df…9b0b5d | 19 hrs agoSun, 16 Aug 2026 01:32:52 UTC | Transfer | [0] 0x000000000000…32084615 [1] 0x000000000000…e9b05d31 data: 0x000000000000000000…f9c9724a |
| 0x78cda2…70ff73 | 19 hrs agoSun, 16 Aug 2026 01:32:49 UTC | Approval | [0] 0x000000000000…32084615 [1] 0x000000000000…e1a4f53d data: 0xffffffffffffffffff…ffffffff |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe0b125…279cd6 | Approve | 38,141,493 | 3 hrs agoSun, 16 Aug 2026 17:05:44 UTC | 0xe626…c7cf | IN | Policy Apes | $0.000 ETH | 0.00000094 | |
| 0x46bd5b…9e7744 | Approve | 38,129,182 | 4 hrs agoSun, 16 Aug 2026 16:45:08 UTC | 0xa5a2…bde7 | IN | Policy Apes | $0.000 ETH | 0.00000093 | |
| 0x7ebe02…0e3fcf | Approve | 38,127,125 | 4 hrs agoSun, 16 Aug 2026 16:41:43 UTC | 0xa5a2…bde7 | IN | Policy Apes | $0.000 ETH | 0.00000095 | |
| 0x78cda2…70ff73 | Approve | 37,584,000 | 19 hrs agoSun, 16 Aug 2026 01:32:49 UTC | 0x0d78…4615 | IN | Policy Apes | $0.000 ETH | 0.00000124 | |
| 0x3b49ba…414c65 | Approve | 37,453,767 | 23 hrs agoSat, 15 Aug 2026 21:55:08 UTC | 0x3500…508c | IN | Policy Apes | $0.000 ETH | 0.00000132 | |
| 0x39d165…a4b60e | Approve | 36,824,749 | 1 day agoSat, 15 Aug 2026 04:23:33 UTC | 0x76c0…592e | IN | Policy Apes | $0.000 ETH | 0.00000090 | |
| 0x4c485f…c3c3f8 | Approve | 36,793,206 | 1 day agoSat, 15 Aug 2026 03:30:50 UTC | 0xd720…9843 | IN | Policy Apes | $0.000 ETH | 0.00000174 | |
| 0xc42dc3…f448db | Approve | 36,673,308 | 1 day agoSat, 15 Aug 2026 00:10:32 UTC | 0x069e…acfa | IN | Policy Apes | $0.000 ETH | 0.00000185 | |
| 0xe9b52c…6f2d95 | Approve | 36,586,759 | 1 day agoFri, 14 Aug 2026 21:46:09 UTC | 0x3b7b…de31 | IN | Policy Apes | $0.000 ETH | 0.00000185 | |
| 0xab921f…70140f | Approve | 36,564,158 | 1 day agoFri, 14 Aug 2026 21:08:28 UTC | 0xca5b…3638 | IN | Policy Apes | $0.000 ETH | 0.00000184 | |
| 0x67c971…0df19c | Approve | 36,519,617 | 2 days agoFri, 14 Aug 2026 19:54:06 UTC | 0x027d…eafb | IN | Policy Apes | $0.000 ETH | 0.00000181 | |
| 0xf15621…b1c0bf | Approve | 36,389,936 | 2 days agoFri, 14 Aug 2026 16:17:37 UTC | 0x4833…ea95 | IN | Policy Apes | $0.000 ETH | 0.00000182 | |
| 0x7f28f6…7fc470 | Approve | 36,307,797 | 2 days agoFri, 14 Aug 2026 14:00:25 UTC | 0x5ef8…aad7 | IN | Policy Apes | $0.000 ETH | 0.00000189 | |
| 0x7b7729…646a04 | Approve | 36,179,327 | 2 days agoFri, 14 Aug 2026 10:25:47 UTC | 0x6879…2fd4 | IN | Policy Apes | $0.000 ETH | 0.00000195 | |
| 0xb6297f…f2f499 | Approve | 36,167,845 | 2 days agoFri, 14 Aug 2026 10:06:35 UTC | 0x3bdc…180a | IN | Policy Apes | $0.000 ETH | 0.00000194 | |
| 0x735f50…8bd802 | Approve | 36,136,872 | 2 days agoFri, 14 Aug 2026 09:14:49 UTC | 0xc1b9…22b2 | IN | Policy Apes | $0.000 ETH | 0.00000196 | |
| 0x5e25b8…d6d21d | Approve | 36,034,975 | 2 days agoFri, 14 Aug 2026 06:24:40 UTC | 0x4b3d…b058 | IN | Policy Apes | $0.000 ETH | 0.00000105 | |
| 0xf1c93f…83118c | Approve | 36,034,870 | 2 days agoFri, 14 Aug 2026 06:24:30 UTC | 0x4b3d…b058 | IN | Policy Apes | $0.000 ETH | 0.00000201 | |
| 0xeef189…5382a1 | Approve | 36,014,842 | 2 days agoFri, 14 Aug 2026 05:51:07 UTC | 0x6981…2192 | IN | Policy Apes | $0.000 ETH | 0.00000203 | |
| 0x1be1a1…bbc57d | Approve | 36,010,824 | 2 days agoFri, 14 Aug 2026 05:44:25 UTC | 0x3a55…1a04 | IN | Policy Apes | $0.000 ETH | 0.00000197 | |
| 0xa7d64e…e5522d | Approve | 35,971,597 | 2 days agoFri, 14 Aug 2026 04:38:54 UTC | 0x29dc…dd8d | IN | Policy Apes | $0.000 ETH | 0.00000194 | |
| 0x9f7f84…0d2cf7 | Approve | 35,894,603 | 2 days agoFri, 14 Aug 2026 02:30:17 UTC | 0xf95a…21ba | IN | Policy Apes | $0.000 ETH | 0.00000198 | |
| 0xc9c0d9…93a5f3 | Approve | 35,892,634 | 2 days agoFri, 14 Aug 2026 02:26:59 UTC | 0x6a92…18c7 | IN | Policy Apes | $0.000 ETH | 0.00000198 | |
| 0x0b85d7…25e451 | Approve | 35,879,661 | 2 days agoFri, 14 Aug 2026 02:05:19 UTC | 0x1708…6d66 | IN | Policy Apes | $0.000 ETH | 0.00000197 | |
| 0x717b5e…786c6d | Approve | 35,815,505 | 2 days agoFri, 14 Aug 2026 00:18:17 UTC | 0xfee6…9715 | IN | Policy Apes | $0.000 ETH | 0.00000200 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 35,503,324 | 3 days agoThu, 13 Aug 2026 15:37:03 UTC | 0xce7b44…5e17d8 | CREATE | 0x60806040 | 0x8295…4f3b | OUT | 0x643f…8276 | 0 ETH |