Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00Latest 17 from a total of 17 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Send Message | 38819512 | 49 days ago | IN | 0 ETH | 0.00000025 | ||||
| Send Message | 38819293 | 50 days ago | IN | 0 ETH | 0.00000013 | ||||
| Send Message | 38790961 | 50 days ago | IN | 0 ETH | 0.00000029 | ||||
| Send Message | 38790585 | 50 days ago | IN | 0 ETH | 0.00000026 | ||||
| Send Message | 38790000 | 50 days ago | IN | 0 ETH | 0.00000049 | ||||
| Send Message | 38789942 | 50 days ago | IN | 0 ETH | 0.00000027 | ||||
| Send Message | 38789890 | 50 days ago | IN | 0 ETH | 0.00000027 | ||||
| Send Message | 38789858 | 50 days ago | IN | 0 ETH | 0.00000049 | ||||
| Send Message | 38789843 | 50 days ago | IN | 0 ETH | 0.00000045 | ||||
| Send Message | 38788806 | 50 days ago | IN | 0 ETH | 0.00000021 | ||||
| Send Message | 38780719 | 50 days ago | IN | 0 ETH | 0.0000008 | ||||
| Send Message | 38779800 | 50 days ago | IN | 0 ETH | 0.00000052 | ||||
| Send Message | 38758402 | 51 days ago | IN | 0 ETH | 0.00000031 | ||||
| Send Message | 38756039 | 51 days ago | IN | 0 ETH | 0.00000039 | ||||
| Send Message | 38755282 | 51 days ago | IN | 0 ETH | 0.00000033 | ||||
| Send Message | 38755248 | 51 days ago | IN | 0 ETH | 0.00000052 | ||||
| Set Message Fee | 38753819 | 51 days ago | IN | 0 ETH | 0.00000001 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ChainMail
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
/// @title Voidly ChainMail
/// @author voidly.ai
/// @notice Minimal, audit‑friendly on‑chain registry for end‑to‑end encrypted messages.
/// @dev Stores only opaque encrypted payloads + metadata. No plaintext ever touches the chain.
/// All privacy comes from your crypto; this contract just timestamps and routes.
contract ChainMail {
/// -----------------------------------------------------------------------
/// Errors
/// -----------------------------------------------------------------------
error InvalidRecipient();
error MessageNotFound();
error Unauthorized();
error AlreadyDeleted();
error PayloadTooLarge();
error EmptyPayload();
error InsufficientFee();
error ContractPaused();
error SelfSendNotAllowed();
error InvalidPagination();
/// -----------------------------------------------------------------------
/// Types
/// -----------------------------------------------------------------------
/// @notice Opaque message metadata + encrypted payload.
/// @dev `encryptedPayload` is application‑defined bytes (e.g. encrypted JSON blob).
struct Message {
address sender; // wallet that sent the message
address recipient; // wallet that should be able to decrypt
bytes32 topic; // optional: thread / conversation / label id
bool oneTime; // hint for one‑time view semantics (enforced off‑chain)
bool deleted; // soft‑delete flag for sender/recipient UX
uint64 createdAt; // unix timestamp (seconds)
bytes encryptedPayload; // opaque ciphertext
}
/// -----------------------------------------------------------------------
/// Constants
/// -----------------------------------------------------------------------
/// @notice Max size for encrypted payload (256 KB)
/// @dev Prevents DOS via huge payloads. Adjust based on your use case.
uint256 public constant MAX_PAYLOAD_SIZE = 256 * 1024;
/// @notice Minimum fee to send a message (anti-spam)
/// @dev Set to 0.0001 ETH. Owner can adjust via setMessageFee().
uint256 public messageFee = 0.0001 ether;
/// @notice Maximum pagination limit to prevent gas issues
uint256 public constant MAX_PAGINATION_LIMIT = 100;
/// -----------------------------------------------------------------------
/// Storage
/// -----------------------------------------------------------------------
// Contract owner (can pause/unpause, adjust fees)
address public owner;
// Emergency pause flag
bool public paused;
// Reentrancy guard
uint256 private _locked;
// Auto‑incrementing message ID (starts at 1 so "0" is an obvious sentinel).
uint256 private _nextMessageId = 1;
// messageId => Message
mapping(uint256 => Message) private _messages;
// Simple inbox/outbox indexes for wallets.
mapping(address => uint256[]) private _inboxByAddress;
mapping(address => uint256[]) private _outboxByAddress;
/// -----------------------------------------------------------------------
/// Events
/// -----------------------------------------------------------------------
/// @notice Emitted whenever a new encrypted message is registered on‑chain.
/// @dev Indexer can follow this to build inbox/outbox views.
event MessageSent(
uint256 indexed messageId,
address indexed sender,
address indexed recipient,
bytes32 topic,
bool oneTime,
uint64 createdAt
);
/// @notice Emitted when a message is soft‑deleted by sender or recipient.
event MessageDeleted(
uint256 indexed messageId,
address indexed by,
uint64 timestamp
);
/// @notice Emitted when owner changes message fee.
event MessageFeeUpdated(uint256 oldFee, uint256 newFee);
/// @notice Emitted when contract is paused/unpaused.
event PauseStatusChanged(bool isPaused);
/// @notice Emitted when owner withdraws accumulated fees.
event FeesWithdrawn(address indexed to, uint256 amount);
/// @notice Emitted when ownership is transferred.
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/// -----------------------------------------------------------------------
/// Modifiers
/// -----------------------------------------------------------------------
modifier onlyOwner() {
if (msg.sender != owner) revert Unauthorized();
_;
}
modifier whenNotPaused() {
if (paused) revert ContractPaused();
_;
}
modifier nonReentrant() {
if (_locked == 1) revert Unauthorized();
_locked = 1;
_;
_locked = 0;
}
/// -----------------------------------------------------------------------
/// Constructor
/// -----------------------------------------------------------------------
constructor() {
owner = msg.sender;
paused = false;
_locked = 0;
}
/// -----------------------------------------------------------------------
/// View helpers
/// -----------------------------------------------------------------------
/// @notice Human‑readable name for wallets / UIs.
function name() external pure returns (string memory) {
return "Voidly ChainMail";
}
/// @notice Semantic version string.
function version() external pure returns (string memory) {
return "1.0.0";
}
/// @notice Total messages ever created (including deleted).
function totalMessages() external view returns (uint256) {
// _nextMessageId starts at 1, so subtract 1 for count
return _nextMessageId - 1;
}
/// -----------------------------------------------------------------------
/// Core API
/// -----------------------------------------------------------------------
/// @notice Register a new encrypted message on‑chain.
/// @dev
/// - `encryptedPayload` must already be encrypted client‑side.
/// - Anyone can send to anyone; do your own allow‑lists off‑chain.
///
/// @param recipient Wallet that should be able to decrypt.
/// @param topic Optional thread / label identifier (0x0 if unused).
/// @param oneTime Hint for one‑time view semantics (off‑chain).
/// @param encryptedPayload Opaque ciphertext bytes.
///
/// @return messageId Global message ID.
function sendMessage(
address recipient,
bytes32 topic,
bool oneTime,
bytes calldata encryptedPayload
) external payable whenNotPaused nonReentrant returns (uint256 messageId) {
// Validation checks
if (recipient == address(0)) revert InvalidRecipient();
if (recipient == msg.sender) revert SelfSendNotAllowed();
if (encryptedPayload.length == 0) revert EmptyPayload();
if (encryptedPayload.length > MAX_PAYLOAD_SIZE) revert PayloadTooLarge();
if (msg.value < messageFee) revert InsufficientFee();
// Generate message ID and timestamp
messageId = _nextMessageId++;
uint64 ts = uint64(block.timestamp);
// Store message (SSTORE after all checks)
Message storage m = _messages[messageId];
m.sender = msg.sender;
m.recipient = recipient;
m.topic = topic;
m.oneTime = oneTime;
m.deleted = false;
m.createdAt = ts;
m.encryptedPayload = encryptedPayload;
// Update indexes
_inboxByAddress[recipient].push(messageId);
_outboxByAddress[msg.sender].push(messageId);
emit MessageSent(messageId, msg.sender, recipient, topic, oneTime, ts);
// Refund excess payment
if (msg.value > messageFee) {
(bool success, ) = msg.sender.call{value: msg.value - messageFee}("");
require(success, "Refund failed");
}
}
/// @notice Read a message by its ID (encrypted payload + metadata).
/// @dev Anyone can call this, but only the intended recipient (or sender)
/// can actually decrypt the ciphertext. Privacy is cryptographic.
function getMessage(uint256 messageId)
external
view
returns (
address sender,
address recipient,
bytes32 topic,
bool oneTime,
bool deleted,
uint64 createdAt,
bytes memory encryptedPayload
)
{
Message storage m = _messages[messageId];
if (m.sender == address(0)) revert MessageNotFound();
return (
m.sender,
m.recipient,
m.topic,
m.oneTime,
m.deleted,
m.createdAt,
m.encryptedPayload
);
}
/// @notice Soft‑delete a message from the perspective of sender/recipient.
/// @dev
/// - Does NOT remove data from chain (impossible).
/// - Marks `deleted = true` for UI / off‑chain indexers.
/// - Only `sender` or `recipient` may call.
function deleteMessage(uint256 messageId) external {
Message storage m = _messages[messageId];
if (m.sender == address(0)) revert MessageNotFound();
if (msg.sender != m.sender && msg.sender != m.recipient) {
revert Unauthorized();
}
if (m.deleted) revert AlreadyDeleted();
m.deleted = true;
emit MessageDeleted(messageId, msg.sender, uint64(block.timestamp));
}
/// -----------------------------------------------------------------------
/// Inbox / Outbox helpers
/// -----------------------------------------------------------------------
/// @notice List of message IDs where `user` is the recipient.
/// @dev For big inboxes, indexers should paginate off‑chain.
/// WARNING: This can hit gas limits for large inboxes. Use inboxPaginated instead.
function inbox(address user) external view returns (uint256[] memory) {
return _inboxByAddress[user];
}
/// @notice List of message IDs where `user` is the sender.
/// WARNING: This can hit gas limits for large outboxes. Use outboxPaginated instead.
function outbox(address user) external view returns (uint256[] memory) {
return _outboxByAddress[user];
}
/// @notice Get paginated inbox for a user.
/// @param user The user's address
/// @param offset Starting index
/// @param limit Maximum number of items to return
function inboxPaginated(address user, uint256 offset, uint256 limit)
external
view
returns (uint256[] memory messageIds, uint256 total)
{
if (limit == 0 || limit > MAX_PAGINATION_LIMIT) revert InvalidPagination();
uint256[] storage allMessages = _inboxByAddress[user];
total = allMessages.length;
if (offset >= total) {
return (new uint256[](0), total);
}
// Safe math: check for overflow
uint256 end;
unchecked {
end = offset + limit;
if (end < offset) revert InvalidPagination(); // overflow
}
if (end > total) {
end = total;
}
uint256 resultLength = end - offset;
messageIds = new uint256[](resultLength);
for (uint256 i = 0; i < resultLength; i++) {
messageIds[i] = allMessages[offset + i];
}
}
/// @notice Get paginated outbox for a user.
/// @param user The user's address
/// @param offset Starting index
/// @param limit Maximum number of items to return
function outboxPaginated(address user, uint256 offset, uint256 limit)
external
view
returns (uint256[] memory messageIds, uint256 total)
{
if (limit == 0 || limit > MAX_PAGINATION_LIMIT) revert InvalidPagination();
uint256[] storage allMessages = _outboxByAddress[user];
total = allMessages.length;
if (offset >= total) {
return (new uint256[](0), total);
}
// Safe math: check for overflow
uint256 end;
unchecked {
end = offset + limit;
if (end < offset) revert InvalidPagination(); // overflow
}
if (end > total) {
end = total;
}
uint256 resultLength = end - offset;
messageIds = new uint256[](resultLength);
for (uint256 i = 0; i < resultLength; i++) {
messageIds[i] = allMessages[offset + i];
}
}
/// @notice Get inbox count for a user.
function inboxCount(address user) external view returns (uint256) {
return _inboxByAddress[user].length;
}
/// @notice Get outbox count for a user.
function outboxCount(address user) external view returns (uint256) {
return _outboxByAddress[user].length;
}
/// -----------------------------------------------------------------------
/// Admin Functions
/// -----------------------------------------------------------------------
/// @notice Update the message fee (anti-spam).
function setMessageFee(uint256 newFee) external onlyOwner {
uint256 oldFee = messageFee;
messageFee = newFee;
emit MessageFeeUpdated(oldFee, newFee);
}
/// @notice Pause/unpause the contract (emergency).
function setPaused(bool _paused) external onlyOwner {
paused = _paused;
emit PauseStatusChanged(_paused);
}
/// @notice Withdraw accumulated fees.
function withdrawFees(address payable to) external onlyOwner nonReentrant {
uint256 balance = address(this).balance;
(bool success, ) = to.call{value: balance}("");
require(success, "Withdrawal failed");
emit FeesWithdrawn(to, balance);
}
/// @notice Transfer ownership.
function transferOwnership(address newOwner) external onlyOwner {
if (newOwner == address(0)) revert InvalidRecipient();
address oldOwner = owner;
owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
/// @notice Get contract balance.
function getBalance() external view returns (uint256) {
return address(this).balance;
}
}{
"remappings": [
"forge-std/=lib/forge-std/src/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyDeleted","type":"error"},{"inputs":[],"name":"ContractPaused","type":"error"},{"inputs":[],"name":"EmptyPayload","type":"error"},{"inputs":[],"name":"InsufficientFee","type":"error"},{"inputs":[],"name":"InvalidPagination","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"MessageNotFound","type":"error"},{"inputs":[],"name":"PayloadTooLarge","type":"error"},{"inputs":[],"name":"SelfSendNotAllowed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageId","type":"uint256"},{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":false,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"MessageDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"MessageFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"bytes32","name":"topic","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"oneTime","type":"bool"},{"indexed":false,"internalType":"uint64","name":"createdAt","type":"uint64"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseStatusChanged","type":"event"},{"inputs":[],"name":"MAX_PAGINATION_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PAYLOAD_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"messageId","type":"uint256"}],"name":"deleteMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"messageId","type":"uint256"}],"name":"getMessage","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes32","name":"topic","type":"bytes32"},{"internalType":"bool","name":"oneTime","type":"bool"},{"internalType":"bool","name":"deleted","type":"bool"},{"internalType":"uint64","name":"createdAt","type":"uint64"},{"internalType":"bytes","name":"encryptedPayload","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"inbox","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"inboxCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"inboxPaginated","outputs":[{"internalType":"uint256[]","name":"messageIds","type":"uint256[]"},{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"outbox","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"outboxCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"outboxPaginated","outputs":[{"internalType":"uint256[]","name":"messageIds","type":"uint256[]"},{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes32","name":"topic","type":"bytes32"},{"internalType":"bool","name":"oneTime","type":"bool"},{"internalType":"bytes","name":"encryptedPayload","type":"bytes"}],"name":"sendMessage","outputs":[{"internalType":"uint256","name":"messageId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setMessageFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalMessages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052655af3107a4000600055600160035534801561001f57600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160146101000a81548160ff0219169083151502179055506000600281905550612746806100936000396000f3fe6080604052600436106101355760003560e01c806386f79edb116100ab578063b888690a1161006f578063b888690a14610438578063ed0e26b914610461578063ef0e233b1461049e578063f0549006146104dc578063f2fde38b14610519578063ff6acade1461054257610135565b806386f79edb146103445780638da5cb5b14610387578063951166c0146103b2578063a2ba1934146103dd578063b6d54d7c1461040857610135565b806323aa2a9d116100fd57806323aa2a9d1461020d57806330da5f9c1461023657806354fd4d50146102735780635c975abb1461029e5780636dfa7268146102c9578063719c04761461030657610135565b806306fdde031461013a57806312065fe014610165578063164e68de1461019057806316c38b3c146101b95780631a90a219146101e2575b600080fd5b34801561014657600080fd5b5061014f61056d565b60405161015c9190611b68565b60405180910390f35b34801561017157600080fd5b5061017a6105aa565b6040516101879190611ba3565b60405180910390f35b34801561019c57600080fd5b506101b760048036038101906101b29190611c26565b6105b2565b005b3480156101c557600080fd5b506101e060048036038101906101db9190611c8b565b610789565b005b3480156101ee57600080fd5b506101f7610864565b6040516102049190611ba3565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190611ce4565b61086a565b005b34801561024257600080fd5b5061025d60048036038101906102589190611d4f565b61093b565b60405161026a9190611ba3565b60405180910390f35b34801561027f57600080fd5b50610288610987565b6040516102959190611b68565b60405180910390f35b3480156102aa57600080fd5b506102b36109c4565b6040516102c09190611d8b565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190611d4f565b6109d7565b6040516102fd9190611e64565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190611e86565b610a6e565b60405161033b929190611ed9565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190611ce4565b610c75565b60405161037e9796959493929190611fa9565b60405180910390f35b34801561039357600080fd5b5061039c610e57565b6040516103a9919061201f565b60405180910390f35b3480156103be57600080fd5b506103c7610e7d565b6040516103d49190611ba3565b60405180910390f35b3480156103e957600080fd5b506103f2610e93565b6040516103ff9190611ba3565b60405180910390f35b610422600480360381019061041d91906120cb565b610e9a565b60405161042f9190611ba3565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190611ce4565b6113f5565b005b34801561046d57600080fd5b5061048860048036038101906104839190611d4f565b611636565b6040516104959190611e64565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190611e86565b6116cd565b6040516104d3929190611ed9565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190611d4f565b6118d4565b6040516105109190611ba3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190611d4f565b611920565b005b34801561054e57600080fd5b50610557611ad3565b6040516105649190611ba3565b60405180910390f35b60606040518060400160405280601081526020017f566f69646c7920436861696e4d61696c00000000000000000000000000000000815250905090565b600047905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610639576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160025403610675576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600281905550600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516106a890612184565b60006040518083038185875af1925050503d80600081146106e5576040519150601f19603f3d011682016040523d82523d6000602084013e6106ea565b606091505b505090508061072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610725906121e5565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a836040516107749190611ba3565b60405180910390a25050600060028190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610810576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160146101000a81548160ff0219169083151502179055507fef37df9624f797913e7585c7f7b5d004ba6704be3c64b0561c157728ccc86985816040516108599190611d8b565b60405180910390a150565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050816000819055507ff8de0c222317f1c7cca7a70a6499138fbf1811c0dada7926c5af1ae368a6b5e7818360405161092f929190612205565b60405180910390a15050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60606040518060400160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250905090565b600160149054906101000a900460ff1681565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a6257602002820191906000526020600020905b815481526020019060010190808311610a4e575b50505050509050919050565b6060600080831480610a805750606483115b15610ab7576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080805490509150818510610b5a57600067ffffffffffffffff811115610b2357610b2261222e565b5b604051908082528060200260200182016040528015610b515781602001602082028036833780820191505090505b50925050610c6d565b6000848601905085811015610b9b576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82811115610ba7578290505b60008682610bb5919061228c565b90508067ffffffffffffffff811115610bd157610bd061222e565b5b604051908082528060200260200182016040528015610bff5781602001602082028036833780820191505090505b50945060005b81811015610c6857838189610c1a91906122c0565b81548110610c2b57610c2a6122f4565b5b9060005260206000200154868281518110610c4957610c486122f4565b5b6020026020010181815250508080610c6090612323565b915050610c05565b505050505b935093915050565b60008060008060008060606000600460008a81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610d21576040517f28915ac700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201548360030160009054906101000a900460ff168460030160019054906101000a900460ff168560030160029054906101000a900467ffffffffffffffff1686600401808054610dbd9061239a565b80601f0160208091040260200160405190810160405280929190818152602001828054610de99061239a565b8015610e365780601f10610e0b57610100808354040283529160200191610e36565b820191906000526020600020905b815481529060010190602001808311610e1957829003601f168201915b50505050509050975097509750975097509750975050919395979092949650565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001600354610e8e919061228c565b905090565b6204000081565b6000600160149054906101000a900460ff1615610ee3576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160025403610f1f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600281905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610f8d576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610ff2576040517f06c54b3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838390500361102f576040517f2e3f1f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6204000083839050111561106f576040517f492f620d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000543410156110ab576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154809291906110be90612323565b91905055905060004290506000600460008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160020181905550858160030160006101000a81548160ff02191690831515021790555060008160030160016101000a81548160ff021916908315150217905550818160030160026101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555084848260040191826111e6929190612582565b50600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150558773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe76c023611c79201a2025a284fce4c02b0a696ffca371c1e11cd95f0e8f5eba48a8a8760405161131593929190612652565b60405180910390a46000543411156113e25760003373ffffffffffffffffffffffffffffffffffffffff166000543461134e919061228c565b60405161135a90612184565b60006040518083038185875af1925050503d8060008114611397576040519150601f19603f3d011682016040523d82523d6000602084013e61139c565b606091505b50509050806113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d7906126d5565b60405180910390fd5b505b5050600060028190555095945050505050565b6000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611496576040517f28915ac700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561154657508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561157d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060030160019054906101000a900460ff16156115c6576040517fba48b5de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16827f679d5802a0a7666ade18ca7241b1423df5ff9f988597e1391a5be8cbc492172a4260405161162a91906126f5565b60405180910390a35050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156116c157602002820191906000526020600020905b8154815260200190600101908083116116ad575b50505050509050919050565b60606000808314806116df5750606483115b15611716576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050808054905091508185106117b957600067ffffffffffffffff8111156117825761178161222e565b5b6040519080825280602002602001820160405280156117b05781602001602082028036833780820191505090505b509250506118cc565b60008486019050858110156117fa576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82811115611806578290505b60008682611814919061228c565b90508067ffffffffffffffff8111156118305761182f61222e565b5b60405190808252806020026020018201604052801561185e5781602001602082028036833780820191505090505b50945060005b818110156118c75783818961187991906122c0565b8154811061188a576118896122f4565b5b90600052602060002001548682815181106118a8576118a76122f4565b5b60200260200101818152505080806118bf90612323565b915050611864565b505050505b935093915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0d576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606481565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b12578082015181840152602081019050611af7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3a82611ad8565b611b448185611ae3565b9350611b54818560208601611af4565b611b5d81611b1e565b840191505092915050565b60006020820190508181036000830152611b828184611b2f565b905092915050565b6000819050919050565b611b9d81611b8a565b82525050565b6000602082019050611bb86000830184611b94565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bf382611bc8565b9050919050565b611c0381611be8565b8114611c0e57600080fd5b50565b600081359050611c2081611bfa565b92915050565b600060208284031215611c3c57611c3b611bbe565b5b6000611c4a84828501611c11565b91505092915050565b60008115159050919050565b611c6881611c53565b8114611c7357600080fd5b50565b600081359050611c8581611c5f565b92915050565b600060208284031215611ca157611ca0611bbe565b5b6000611caf84828501611c76565b91505092915050565b611cc181611b8a565b8114611ccc57600080fd5b50565b600081359050611cde81611cb8565b92915050565b600060208284031215611cfa57611cf9611bbe565b5b6000611d0884828501611ccf565b91505092915050565b6000611d1c82611bc8565b9050919050565b611d2c81611d11565b8114611d3757600080fd5b50565b600081359050611d4981611d23565b92915050565b600060208284031215611d6557611d64611bbe565b5b6000611d7384828501611d3a565b91505092915050565b611d8581611c53565b82525050565b6000602082019050611da06000830184611d7c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ddb81611b8a565b82525050565b6000611ded8383611dd2565b60208301905092915050565b6000602082019050919050565b6000611e1182611da6565b611e1b8185611db1565b9350611e2683611dc2565b8060005b83811015611e57578151611e3e8882611de1565b9750611e4983611df9565b925050600181019050611e2a565b5085935050505092915050565b60006020820190508181036000830152611e7e8184611e06565b905092915050565b600080600060608486031215611e9f57611e9e611bbe565b5b6000611ead86828701611d3a565b9350506020611ebe86828701611ccf565b9250506040611ecf86828701611ccf565b9150509250925092565b60006040820190508181036000830152611ef38185611e06565b9050611f026020830184611b94565b9392505050565b611f1281611d11565b82525050565b6000819050919050565b611f2b81611f18565b82525050565b600067ffffffffffffffff82169050919050565b611f4e81611f31565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611f7b82611f54565b611f858185611f5f565b9350611f95818560208601611af4565b611f9e81611b1e565b840191505092915050565b600060e082019050611fbe600083018a611f09565b611fcb6020830189611f09565b611fd86040830188611f22565b611fe56060830187611d7c565b611ff26080830186611d7c565b611fff60a0830185611f45565b81810360c08301526120118184611f70565b905098975050505050505050565b60006020820190506120346000830184611f09565b92915050565b61204381611f18565b811461204e57600080fd5b50565b6000813590506120608161203a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261208b5761208a612066565b5b8235905067ffffffffffffffff8111156120a8576120a761206b565b5b6020830191508360018202830111156120c4576120c3612070565b5b9250929050565b6000806000806000608086880312156120e7576120e6611bbe565b5b60006120f588828901611d3a565b955050602061210688828901612051565b945050604061211788828901611c76565b935050606086013567ffffffffffffffff81111561213857612137611bc3565b5b61214488828901612075565b92509250509295509295909350565b600081905092915050565b50565b600061216e600083612153565b91506121798261215e565b600082019050919050565b600061218f82612161565b9150819050919050565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b60006121cf601183611ae3565b91506121da82612199565b602082019050919050565b600060208201905081810360008301526121fe816121c2565b9050919050565b600060408201905061221a6000830185611b94565b6122276020830184611b94565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061229782611b8a565b91506122a283611b8a565b92508282039050818111156122ba576122b961225d565b5b92915050565b60006122cb82611b8a565b91506122d683611b8a565b92508282019050808211156122ee576122ed61225d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061232e82611b8a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123605761235f61225d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123b257607f821691505b6020821081036123c5576123c461236b565b5b50919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826123fb565b61244286836123fb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061247f61247a61247584611b8a565b61245a565b611b8a565b9050919050565b6000819050919050565b61249983612464565b6124ad6124a582612486565b848454612408565b825550505050565b600090565b6124c26124b5565b6124cd818484612490565b505050565b5b818110156124f1576124e66000826124ba565b6001810190506124d3565b5050565b601f82111561253657612507816123d6565b612510846123eb565b8101602085101561251f578190505b61253361252b856123eb565b8301826124d2565b50505b505050565b600082821c905092915050565b60006125596000198460080261253b565b1980831691505092915050565b60006125728383612548565b9150826002028217905092915050565b61258c83836123cb565b67ffffffffffffffff8111156125a5576125a461222e565b5b6125af825461239a565b6125ba8282856124f5565b6000601f8311600181146125e957600084156125d7578287013590505b6125e18582612566565b865550612649565b601f1984166125f7866123d6565b60005b8281101561261f578489013582556001820191506020850194506020810190506125fa565b8683101561263c5784890135612638601f891682612548565b8355505b6001600288020188555050505b50505050505050565b60006060820190506126676000830186611f22565b6126746020830185611d7c565b6126816040830184611f45565b949350505050565b7f526566756e64206661696c656400000000000000000000000000000000000000600082015250565b60006126bf600d83611ae3565b91506126ca82612689565b602082019050919050565b600060208201905081810360008301526126ee816126b2565b9050919050565b600060208201905061270a6000830184611f45565b9291505056fea2646970667358221220dee69763ddc823899ae8aefd34a32fe42c88c7b13b534ecd072b83788a56183b64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101355760003560e01c806386f79edb116100ab578063b888690a1161006f578063b888690a14610438578063ed0e26b914610461578063ef0e233b1461049e578063f0549006146104dc578063f2fde38b14610519578063ff6acade1461054257610135565b806386f79edb146103445780638da5cb5b14610387578063951166c0146103b2578063a2ba1934146103dd578063b6d54d7c1461040857610135565b806323aa2a9d116100fd57806323aa2a9d1461020d57806330da5f9c1461023657806354fd4d50146102735780635c975abb1461029e5780636dfa7268146102c9578063719c04761461030657610135565b806306fdde031461013a57806312065fe014610165578063164e68de1461019057806316c38b3c146101b95780631a90a219146101e2575b600080fd5b34801561014657600080fd5b5061014f61056d565b60405161015c9190611b68565b60405180910390f35b34801561017157600080fd5b5061017a6105aa565b6040516101879190611ba3565b60405180910390f35b34801561019c57600080fd5b506101b760048036038101906101b29190611c26565b6105b2565b005b3480156101c557600080fd5b506101e060048036038101906101db9190611c8b565b610789565b005b3480156101ee57600080fd5b506101f7610864565b6040516102049190611ba3565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190611ce4565b61086a565b005b34801561024257600080fd5b5061025d60048036038101906102589190611d4f565b61093b565b60405161026a9190611ba3565b60405180910390f35b34801561027f57600080fd5b50610288610987565b6040516102959190611b68565b60405180910390f35b3480156102aa57600080fd5b506102b36109c4565b6040516102c09190611d8b565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190611d4f565b6109d7565b6040516102fd9190611e64565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190611e86565b610a6e565b60405161033b929190611ed9565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190611ce4565b610c75565b60405161037e9796959493929190611fa9565b60405180910390f35b34801561039357600080fd5b5061039c610e57565b6040516103a9919061201f565b60405180910390f35b3480156103be57600080fd5b506103c7610e7d565b6040516103d49190611ba3565b60405180910390f35b3480156103e957600080fd5b506103f2610e93565b6040516103ff9190611ba3565b60405180910390f35b610422600480360381019061041d91906120cb565b610e9a565b60405161042f9190611ba3565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190611ce4565b6113f5565b005b34801561046d57600080fd5b5061048860048036038101906104839190611d4f565b611636565b6040516104959190611e64565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190611e86565b6116cd565b6040516104d3929190611ed9565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190611d4f565b6118d4565b6040516105109190611ba3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190611d4f565b611920565b005b34801561054e57600080fd5b50610557611ad3565b6040516105649190611ba3565b60405180910390f35b60606040518060400160405280601081526020017f566f69646c7920436861696e4d61696c00000000000000000000000000000000815250905090565b600047905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610639576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160025403610675576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600281905550600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516106a890612184565b60006040518083038185875af1925050503d80600081146106e5576040519150601f19603f3d011682016040523d82523d6000602084013e6106ea565b606091505b505090508061072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610725906121e5565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a836040516107749190611ba3565b60405180910390a25050600060028190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610810576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160146101000a81548160ff0219169083151502179055507fef37df9624f797913e7585c7f7b5d004ba6704be3c64b0561c157728ccc86985816040516108599190611d8b565b60405180910390a150565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f1576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050816000819055507ff8de0c222317f1c7cca7a70a6499138fbf1811c0dada7926c5af1ae368a6b5e7818360405161092f929190612205565b60405180910390a15050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60606040518060400160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250905090565b600160149054906101000a900460ff1681565b6060600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a6257602002820191906000526020600020905b815481526020019060010190808311610a4e575b50505050509050919050565b6060600080831480610a805750606483115b15610ab7576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080805490509150818510610b5a57600067ffffffffffffffff811115610b2357610b2261222e565b5b604051908082528060200260200182016040528015610b515781602001602082028036833780820191505090505b50925050610c6d565b6000848601905085811015610b9b576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82811115610ba7578290505b60008682610bb5919061228c565b90508067ffffffffffffffff811115610bd157610bd061222e565b5b604051908082528060200260200182016040528015610bff5781602001602082028036833780820191505090505b50945060005b81811015610c6857838189610c1a91906122c0565b81548110610c2b57610c2a6122f4565b5b9060005260206000200154868281518110610c4957610c486122f4565b5b6020026020010181815250508080610c6090612323565b915050610c05565b505050505b935093915050565b60008060008060008060606000600460008a81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610d21576040517f28915ac700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201548360030160009054906101000a900460ff168460030160019054906101000a900460ff168560030160029054906101000a900467ffffffffffffffff1686600401808054610dbd9061239a565b80601f0160208091040260200160405190810160405280929190818152602001828054610de99061239a565b8015610e365780601f10610e0b57610100808354040283529160200191610e36565b820191906000526020600020905b815481529060010190602001808311610e1957829003601f168201915b50505050509050975097509750975097509750975050919395979092949650565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001600354610e8e919061228c565b905090565b6204000081565b6000600160149054906101000a900460ff1615610ee3576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160025403610f1f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600281905550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610f8d576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603610ff2576040517f06c54b3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838390500361102f576040517f2e3f1f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6204000083839050111561106f576040517f492f620d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000543410156110ab576040517f025dbdd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008154809291906110be90612323565b91905055905060004290506000600460008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160020181905550858160030160006101000a81548160ff02191690831515021790555060008160030160016101000a81548160ff021916908315150217905550818160030160026101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555084848260040191826111e6929190612582565b50600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150558773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe76c023611c79201a2025a284fce4c02b0a696ffca371c1e11cd95f0e8f5eba48a8a8760405161131593929190612652565b60405180910390a46000543411156113e25760003373ffffffffffffffffffffffffffffffffffffffff166000543461134e919061228c565b60405161135a90612184565b60006040518083038185875af1925050503d8060008114611397576040519150601f19603f3d011682016040523d82523d6000602084013e61139c565b606091505b50509050806113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d7906126d5565b60405180910390fd5b505b5050600060028190555095945050505050565b6000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611496576040517f28915ac700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561154657508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561157d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060030160019054906101000a900460ff16156115c6576040517fba48b5de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16827f679d5802a0a7666ade18ca7241b1423df5ff9f988597e1391a5be8cbc492172a4260405161162a91906126f5565b60405180910390a35050565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156116c157602002820191906000526020600020905b8154815260200190600101908083116116ad575b50505050509050919050565b60606000808314806116df5750606483115b15611716576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050808054905091508185106117b957600067ffffffffffffffff8111156117825761178161222e565b5b6040519080825280602002602001820160405280156117b05781602001602082028036833780820191505090505b509250506118cc565b60008486019050858110156117fa576040517f3d47273b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82811115611806578290505b60008682611814919061228c565b90508067ffffffffffffffff8111156118305761182f61222e565b5b60405190808252806020026020018201604052801561185e5781602001602082028036833780820191505090505b50945060005b818110156118c75783818961187991906122c0565b8154811061188a576118896122f4565b5b90600052602060002001548682815181106118a8576118a76122f4565b5b60200260200101818152505080806118bf90612323565b915050611864565b505050505b935093915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0d576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606481565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b12578082015181840152602081019050611af7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3a82611ad8565b611b448185611ae3565b9350611b54818560208601611af4565b611b5d81611b1e565b840191505092915050565b60006020820190508181036000830152611b828184611b2f565b905092915050565b6000819050919050565b611b9d81611b8a565b82525050565b6000602082019050611bb86000830184611b94565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bf382611bc8565b9050919050565b611c0381611be8565b8114611c0e57600080fd5b50565b600081359050611c2081611bfa565b92915050565b600060208284031215611c3c57611c3b611bbe565b5b6000611c4a84828501611c11565b91505092915050565b60008115159050919050565b611c6881611c53565b8114611c7357600080fd5b50565b600081359050611c8581611c5f565b92915050565b600060208284031215611ca157611ca0611bbe565b5b6000611caf84828501611c76565b91505092915050565b611cc181611b8a565b8114611ccc57600080fd5b50565b600081359050611cde81611cb8565b92915050565b600060208284031215611cfa57611cf9611bbe565b5b6000611d0884828501611ccf565b91505092915050565b6000611d1c82611bc8565b9050919050565b611d2c81611d11565b8114611d3757600080fd5b50565b600081359050611d4981611d23565b92915050565b600060208284031215611d6557611d64611bbe565b5b6000611d7384828501611d3a565b91505092915050565b611d8581611c53565b82525050565b6000602082019050611da06000830184611d7c565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ddb81611b8a565b82525050565b6000611ded8383611dd2565b60208301905092915050565b6000602082019050919050565b6000611e1182611da6565b611e1b8185611db1565b9350611e2683611dc2565b8060005b83811015611e57578151611e3e8882611de1565b9750611e4983611df9565b925050600181019050611e2a565b5085935050505092915050565b60006020820190508181036000830152611e7e8184611e06565b905092915050565b600080600060608486031215611e9f57611e9e611bbe565b5b6000611ead86828701611d3a565b9350506020611ebe86828701611ccf565b9250506040611ecf86828701611ccf565b9150509250925092565b60006040820190508181036000830152611ef38185611e06565b9050611f026020830184611b94565b9392505050565b611f1281611d11565b82525050565b6000819050919050565b611f2b81611f18565b82525050565b600067ffffffffffffffff82169050919050565b611f4e81611f31565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611f7b82611f54565b611f858185611f5f565b9350611f95818560208601611af4565b611f9e81611b1e565b840191505092915050565b600060e082019050611fbe600083018a611f09565b611fcb6020830189611f09565b611fd86040830188611f22565b611fe56060830187611d7c565b611ff26080830186611d7c565b611fff60a0830185611f45565b81810360c08301526120118184611f70565b905098975050505050505050565b60006020820190506120346000830184611f09565b92915050565b61204381611f18565b811461204e57600080fd5b50565b6000813590506120608161203a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261208b5761208a612066565b5b8235905067ffffffffffffffff8111156120a8576120a761206b565b5b6020830191508360018202830111156120c4576120c3612070565b5b9250929050565b6000806000806000608086880312156120e7576120e6611bbe565b5b60006120f588828901611d3a565b955050602061210688828901612051565b945050604061211788828901611c76565b935050606086013567ffffffffffffffff81111561213857612137611bc3565b5b61214488828901612075565b92509250509295509295909350565b600081905092915050565b50565b600061216e600083612153565b91506121798261215e565b600082019050919050565b600061218f82612161565b9150819050919050565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b60006121cf601183611ae3565b91506121da82612199565b602082019050919050565b600060208201905081810360008301526121fe816121c2565b9050919050565b600060408201905061221a6000830185611b94565b6122276020830184611b94565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061229782611b8a565b91506122a283611b8a565b92508282039050818111156122ba576122b961225d565b5b92915050565b60006122cb82611b8a565b91506122d683611b8a565b92508282019050808211156122ee576122ed61225d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061232e82611b8a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123605761235f61225d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123b257607f821691505b6020821081036123c5576123c461236b565b5b50919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826123fb565b61244286836123fb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061247f61247a61247584611b8a565b61245a565b611b8a565b9050919050565b6000819050919050565b61249983612464565b6124ad6124a582612486565b848454612408565b825550505050565b600090565b6124c26124b5565b6124cd818484612490565b505050565b5b818110156124f1576124e66000826124ba565b6001810190506124d3565b5050565b601f82111561253657612507816123d6565b612510846123eb565b8101602085101561251f578190505b61253361252b856123eb565b8301826124d2565b50505b505050565b600082821c905092915050565b60006125596000198460080261253b565b1980831691505092915050565b60006125728383612548565b9150826002028217905092915050565b61258c83836123cb565b67ffffffffffffffff8111156125a5576125a461222e565b5b6125af825461239a565b6125ba8282856124f5565b6000601f8311600181146125e957600084156125d7578287013590505b6125e18582612566565b865550612649565b601f1984166125f7866123d6565b60005b8281101561261f578489013582556001820191506020850194506020810190506125fa565b8683101561263c5784890135612638601f891682612548565b8355505b6001600288020188555050505b50505050505050565b60006060820190506126676000830186611f22565b6126746020830185611d7c565b6126816040830184611f45565b949350505050565b7f526566756e64206661696c656400000000000000000000000000000000000000600082015250565b60006126bf600d83611ae3565b91506126ca82612689565b602082019050919050565b600060208201905081810360008301526126ee816126b2565b9050919050565b600060208201905061270a6000830184611f45565b9291505056fea2646970667358221220dee69763ddc823899ae8aefd34a32fe42c88c7b13b534ecd072b83788a56183b64736f6c63430008130033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.