Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 13 from a total of 13 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Push Report | 11513435 | 1898 days ago | IN | 0 ETH | 0.00490428 | ||||
| Push Report | 11506878 | 1899 days ago | IN | 0 ETH | 0.00319598 | ||||
| Push Report | 11500366 | 1900 days ago | IN | 0 ETH | 0.00141679 | ||||
| Push Report | 11493824 | 1901 days ago | IN | 0 ETH | 0.00341389 | ||||
| Push Report | 11487313 | 1902 days ago | IN | 0 ETH | 0.00116249 | ||||
| Push Report | 11480827 | 1903 days ago | IN | 0 ETH | 0.01056853 | ||||
| Push Report | 11474279 | 1904 days ago | IN | 0 ETH | 0.00283358 | ||||
| Push Report | 11467798 | 1905 days ago | IN | 0 ETH | 0.00395866 | ||||
| Push Report | 11461249 | 1906 days ago | IN | 0 ETH | 0.00261561 | ||||
| Push Report | 11454734 | 1907 days ago | IN | 0 ETH | 0.00192485 | ||||
| Push Report | 11448162 | 1908 days ago | IN | 0 ETH | 0.00200132 | ||||
| Push Report | 11438696 | 1909 days ago | IN | 0 ETH | 0.00192322 | ||||
| Add Provider | 11438637 | 1909 days ago | IN | 0 ETH | 0.00259674 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x1ed78579...F0dF0B654 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MedianOracle
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-12-12
*/
pragma solidity ^0.4.24;
/**
* @title SafeMath
* @dev Math operations with safety checks that revert on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0); // Solidity only automatically asserts when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Adds two numbers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Divides two numbers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
pragma solidity >=0.4.24 <0.6.0;
/**
* @title Initializable
*
* @dev Helper contract to support initializer functions. To use it, replace
* the constructor with a function that has the `initializer` modifier.
* WARNING: Unlike constructors, initializer functions must be manually
* invoked. This applies both to deploying an Initializable contract, as well
* as extending an Initializable contract via inheritance.
* WARNING: When used with inheritance, manual care must be taken to not invoke
* a parent initializer twice, or ensure that all initializers are idempotent,
* because this is not dealt with automatically as with constructors.
*/
contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
*/
bool private initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private initializing;
/**
* @dev Modifier to use in the initializer function of a contract.
*/
modifier initializer() {
require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");
bool wasInitializing = initializing;
initializing = true;
initialized = true;
_;
initializing = wasInitializing;
}
/// @dev Returns true if and only if the function is running in the constructor
function isConstructor() private view returns (bool) {
// extcodesize checks the size of the code stored in an address, and
// address returns the current address. Since the code is still not
// deployed when running a constructor, any checks on its code size will
// yield zero, making it an effective way to detect if a contract is
// under construction or not.
uint256 cs;
assembly { cs := extcodesize(address) }
return cs == 0;
}
// Reserved storage space to allow for layout changes in the future.
uint256[50] private ______gap;
}
pragma solidity ^0.4.24;
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable is Initializable {
address private _owner;
event OwnershipRenounced(address indexed previousOwner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function initialize(address sender) public initializer {
_owner = sender;
}
/**
* @return the address of the owner.
*/
function owner() public view returns(address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner());
_;
}
/**
* @return true if `msg.sender` is the owner of the contract.
*/
function isOwner() public view returns(bool) {
return msg.sender == _owner;
}
/**
* @dev Allows the current owner to relinquish control of the contract.
* @notice Renouncing to ownership will leave the contract without an owner.
* It will not be possible to call the functions with the `onlyOwner`
* modifier anymore.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipRenounced(_owner);
_owner = address(0);
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0));
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
uint256[50] private ______gap;
}
// File: contracts/lib/Select.sol
pragma solidity ^0.4.24;
/**
* @title Select
* @dev Median Selection Library
*/
library Select {
using SafeMath for uint256;
/**
* @dev Sorts the input array up to the denoted size, and returns the median.
* @param array Input array to compute its median.
* @param size Number of elements in array to compute the median for.
* @return Median of array.
*/
function computeMedian(uint256[] array, uint256 size)
internal
pure
returns (uint256)
{
require(size > 0 && array.length >= size);
for (uint256 i = 1; i < size; i++) {
for (uint256 j = i; j > 0 && array[j-1] > array[j]; j--) {
uint256 tmp = array[j];
array[j] = array[j-1];
array[j-1] = tmp;
}
}
if (size % 2 == 1) {
return array[size / 2];
} else {
return array[size / 2].add(array[size / 2 - 1]) / 2;
}
}
}
// File: contracts/MedianOracle.sol
pragma solidity ^0.4.24;
interface IOracle {
function getData() external returns (uint256, bool);
}
/**
* @title Median Oracle
*
* @notice Provides a value onchain that's aggregated from a whitelisted set of
* providers.
*/
contract MedianOracle is Ownable, IOracle {
using SafeMath for uint256;
struct Report {
uint256 timestamp;
uint256 payload;
}
// Addresses of providers authorized to push reports.
address[] public providers;
// Reports indexed by provider address. Report[0].timestamp > 0
// indicates provider existence.
mapping (address => Report[2]) public providerReports;
event ProviderAdded(address provider);
event ProviderRemoved(address provider);
event ReportTimestampOutOfRange(address provider);
event ProviderReportPushed(address indexed provider, uint256 payload, uint256 timestamp);
// The number of seconds after which the report is deemed expired.
// 24hours
uint256 public reportExpirationTimeSec;
// The number of seconds since reporting that has to pass before a report
// is usable.
// 3600/1hour
uint256 public reportDelaySec;
// The minimum number of providers with valid reports to consider the
// aggregate report valid.
uint256 public minimumProviders = 1;
// Timestamp of 1 is used to mark uninitialized and invalidated data.
// This is needed so that timestamp of 1 is always considered expired.
uint256 private constant MAX_REPORT_EXPIRATION_TIME = 520 weeks;
/**
* @param reportExpirationTimeSec_ The number of seconds after which the
* report is deemed expired.
* @param reportDelaySec_ The number of seconds since reporting that has to
* pass before a report is usable
* @param minimumProviders_ The minimum number of providers with valid
* reports to consider the aggregate report valid.
*/
constructor(uint256 reportExpirationTimeSec_,
uint256 reportDelaySec_,
uint256 minimumProviders_)
public
{
require(reportExpirationTimeSec_ <= MAX_REPORT_EXPIRATION_TIME);
require(minimumProviders_ > 0);
Ownable.initialize(msg.sender);
reportExpirationTimeSec = reportExpirationTimeSec_;
reportDelaySec = reportDelaySec_;
minimumProviders = minimumProviders_;
}
/**
* @notice Sets the report expiration period.
* @param reportExpirationTimeSec_ The number of seconds after which the
* report is deemed expired.
*/
function setReportExpirationTimeSec(uint256 reportExpirationTimeSec_)
external
onlyOwner
{
require(reportExpirationTimeSec_ <= MAX_REPORT_EXPIRATION_TIME);
reportExpirationTimeSec = reportExpirationTimeSec_;
}
/**
* @notice Sets the time period since reporting that has to pass before a
* report is usable.
* @param reportDelaySec_ The new delay period in seconds.
*/
function setReportDelaySec(uint256 reportDelaySec_)
external
onlyOwner
{
reportDelaySec = reportDelaySec_;
}
/**
* @notice Sets the minimum number of providers with valid reports to
* consider the aggregate report valid.
* @param minimumProviders_ The new minimum number of providers.
*/
function setMinimumProviders(uint256 minimumProviders_)
external
onlyOwner
{
require(minimumProviders_ > 0);
minimumProviders = minimumProviders_;
}
/**
* @notice Pushes a report for the calling provider.
* @param payload is expected to be 18 decimal fixed point number.
*/
function pushReport(uint256 payload) external
{
address providerAddress = msg.sender;
Report[2] storage reports = providerReports[providerAddress];
uint256[2] memory timestamps = [reports[0].timestamp, reports[1].timestamp];
require(timestamps[0] > 0);
uint8 index_recent = timestamps[0] >= timestamps[1] ? 0 : 1;
uint8 index_past = 1 - index_recent;
// Check that the push is not too soon after the last one.
require(timestamps[index_recent].add(reportDelaySec) <= now);
reports[index_past].timestamp = now;
reports[index_past].payload = payload;
emit ProviderReportPushed(providerAddress, payload, now);
}
/**
* @notice Invalidates the reports of the calling provider.
*/
function purgeReports() external
{
address providerAddress = msg.sender;
require (providerReports[providerAddress][0].timestamp > 0);
providerReports[providerAddress][0].timestamp=1;
providerReports[providerAddress][1].timestamp=1;
}
/**
* @notice Computes median of provider reports whose timestamps are in the
* valid timestamp range.
* @return AggregatedValue: Median of providers reported values.
* valid: Boolean indicating an aggregated value was computed successfully.
*/
function getData()
external
returns (uint256, bool)
{
uint256 reportsCount = providers.length;
uint256[] memory validReports = new uint256[](reportsCount);
uint256 size = 0;
uint256 minValidTimestamp = now.sub(reportExpirationTimeSec);
uint256 maxValidTimestamp = now.sub(reportDelaySec);
for (uint256 i = 0; i < reportsCount; i++) {
address providerAddress = providers[i];
Report[2] memory reports = providerReports[providerAddress];
uint8 index_recent = reports[0].timestamp >= reports[1].timestamp ? 0 : 1;
uint8 index_past = 1 - index_recent;
uint256 reportTimestampRecent = reports[index_recent].timestamp;
if (reportTimestampRecent > maxValidTimestamp) {
// Recent report is too recent.
uint256 reportTimestampPast = providerReports[providerAddress][index_past].timestamp;
if (reportTimestampPast < minValidTimestamp) {
// Past report is too old.
emit ReportTimestampOutOfRange(providerAddress);
} else if (reportTimestampPast > maxValidTimestamp) {
// Past report is too recent.
emit ReportTimestampOutOfRange(providerAddress);
} else {
// Using past report.
validReports[size++] = providerReports[providerAddress][index_past].payload;
}
} else {
// Recent report is not too recent.
if (reportTimestampRecent < minValidTimestamp) {
// Recent report is too old.
emit ReportTimestampOutOfRange(providerAddress);
} else {
// Using recent report.
validReports[size++] = providerReports[providerAddress][index_recent].payload;
}
}
}
if (size < minimumProviders) {
return (0, false);
}
return (Select.computeMedian(validReports, size), true);
}
/**
* @notice Authorizes a provider.
* @param provider Address of the provider.
*/
function addProvider(address provider)
external
onlyOwner
{
require(providerReports[provider][0].timestamp == 0);
providers.push(provider);
providerReports[provider][0].timestamp = 1;
emit ProviderAdded(provider);
}
/**
* @notice Revokes provider authorization.
* @param provider Address of the provider.
*/
function removeProvider(address provider)
external
onlyOwner
{
delete providerReports[provider];
for (uint256 i = 0; i < providers.length; i++) {
if (providers[i] == provider) {
if (i + 1 != providers.length) {
providers[i] = providers[providers.length-1];
}
providers.length--;
emit ProviderRemoved(provider);
break;
}
}
}
/**
* @return The number of authorized providers.
*/
function providersSize()
external
view
returns (uint256)
{
return providers.length;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"reportDelaySec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"payload","type":"uint256"}],"name":"pushReport","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"provider","type":"address"}],"name":"addProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"providers","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"provider","type":"address"}],"name":"removeProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumProviders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"purgeReports","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reportDelaySec_","type":"uint256"}],"name":"setReportDelaySec","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"providersSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reportExpirationTimeSec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minimumProviders_","type":"uint256"}],"name":"setMinimumProviders","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"providerReports","outputs":[{"name":"timestamp","type":"uint256"},{"name":"payload","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reportExpirationTimeSec_","type":"uint256"}],"name":"setReportExpirationTimeSec","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"reportExpirationTimeSec_","type":"uint256"},{"name":"reportDelaySec_","type":"uint256"},{"name":"minimumProviders_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ProviderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ProviderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"provider","type":"address"}],"name":"ReportTimestampOutOfRange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"provider","type":"address"},{"indexed":false,"name":"payload","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"ProviderReportPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
0x60806040526001606a5534801561001557600080fd5b5060405160608061118f8339810160409081528151602083015191909201516312bed40083111561004557600080fd5b6000811161005257600080fd5b61006833640100000000610ab161007982021704565b606892909255606955606a55610192565b60008054610100900460ff168061009c575061009c64010000000061018c810204565b806100aa575060005460ff16155b151561013d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015290519081900360840190fd5b506000805460338054600160a060020a031916600160a060020a03949094169390931790925561ff001980831661010090811760ff19166001179091169281900460ff16151502919091179055565b303b1590565b610fee806101a16000396000f3006080604052600436106101065763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166312e800f1811461010b5780631e20d14b146101325780633bc5de301461014c57806346e2577a1461017a57806350f3fc811461019b578063715018a6146101cf5780638a355a57146101e45780638da5cb5b146102055780638f32d59b1461021a578063b577c0c714610243578063c4d66de814610258578063d13d597114610279578063da6b0eea1461028e578063dcbb8253146102a6578063df982985146102bb578063ef35bcce146102d0578063f10864b6146102e8578063f2fde38b14610325578063f68be51314610346575b600080fd5b34801561011757600080fd5b5061012061035e565b60408051918252519081900360200190f35b34801561013e57600080fd5b5061014a600435610364565b005b34801561015857600080fd5b50610161610480565b6040805192835290151560208301528051918290030190f35b34801561018657600080fd5b5061014a600160a060020a03600435166107cc565b3480156101a757600080fd5b506101b36004356108ac565b60408051600160a060020a039092168252519081900360200190f35b3480156101db57600080fd5b5061014a6108d4565b3480156101f057600080fd5b5061014a600160a060020a036004351661093e565b34801561021157600080fd5b506101b3610a8a565b34801561022657600080fd5b5061022f610a9a565b604080519115158252519081900360200190f35b34801561024f57600080fd5b50610120610aab565b34801561026457600080fd5b5061014a600160a060020a0360043516610ab1565b34801561028557600080fd5b5061014a610bc8565b34801561029a57600080fd5b5061014a600435610c06565b3480156102b257600080fd5b50610120610c1e565b3480156102c757600080fd5b50610120610c24565b3480156102dc57600080fd5b5061014a600435610c2a565b3480156102f457600080fd5b5061030c600160a060020a0360043516602435610c4f565b6040805192835260208301919091528051918290030190f35b34801561033157600080fd5b5061014a600160a060020a0360043516610c7c565b34801561035257600080fd5b5061014a600435610c9b565b60695481565b60008061036f610f03565b5050336000818152606760209081526040808320815180830190925280548083526002820154938301939093529394509190819081106103ae57600080fd5b6020830151835110156103c25760016103c5565b60005b9150816001039050426103f6606954858560ff166002811015156103e557fe5b60200201519063ffffffff610cc416565b111561040157600080fd5b428460ff83166002811061041157fe5b600202016000018190555085848260ff1660028110151561042e57fe5b6002020160010155604080518781524260208201528151600160a060020a038816927f460fcc5a1888965d48c2cab000fe20da51b1297d995af79a1924e2312d0d82b3928290030190a2505050505050565b600080600060606000806000806000610497610f1e565b6000806000806066805490509b508b6040519080825280602002602001820160405280156104cf578160200160208202803883390190505b509a50600099506104eb60685442610cdd90919063ffffffff16565b985061050260695442610cdd90919063ffffffff16565b9750600096505b8b87101561079557606680548890811061051f57fe5b6000918252602080832090910154600160a060020a031680835260679091526040808320815180830190925291985091600290835b82821015610590578382600202016040805190810160405290816000820154815260200160018201548152505081526020019060010190610554565b50929750879250600191506105a29050565b60200201515185515110156105b85760016105bb565b60005b9350600184900392508460ff8516600281106105d357fe5b6020020151519150878211156106f457600160a060020a038616600090815260676020526040902060ff84166002811061060957fe5b60020201549050888110156106595760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a16106ef565b878111156106a25760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a16106ef565b600160a060020a038616600090815260676020526040902060ff8416600281106106c857fe5b60020201600101548b8b806001019c508151811015156106e457fe5b602090810290910101525b61078a565b8882101561073d5760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a161078a565b600160a060020a038616600090815260676020526040902060ff85166002811061076357fe5b60020201600101548b8b806001019c5081518110151561077f57fe5b602090810290910101525b600190960195610509565b606a548a10156107ab5760009d508d9c506107bc565b6107b58b8b610cf4565b60019d509d505b5050505050505050505050509091565b6107d4610a9a565b15156107df57600080fd5b600160a060020a0381166000908152606760205260409020541561080257600080fd5b6066805460018082019092557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435401805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038416908117909155600090815260676020526040812090600202015560408051600160a060020a038316815290517fae9c2c6481964847714ce58f65a7f6dcc41d0d8394449bacdf161b5920c4744a9181900360200190a150565b60668054829081106108ba57fe5b600091825260209091200154600160a060020a0316905081565b6108dc610a9a565b15156108e757600080fd5b603354604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26033805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000610948610a9a565b151561095357600080fd5b600160a060020a038216600090815260676020526040812061097491610f4c565b5060005b606654811015610a865781600160a060020a031660668281548110151561099b57fe5b600091825260209091200154600160a060020a03161415610a7e576066546001820114610a29576066805460001981019081106109d457fe5b60009182526020909120015460668054600160a060020a0390921691839081106109fa57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6066805490610a3c906000198301610f68565b5060408051600160a060020a038416815290517f1589f8555933761a3cff8aa925061be3b46e2dd43f621322ab611d300f62b1d99181900360200190a1610a86565b600101610978565b5050565b603354600160a060020a03165b90565b603354600160a060020a0316331490565b606a5481565b60008054610100900460ff1680610acb5750610acb610e7b565b80610ad9575060005460ff16155b1515610b6c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015290519081900360840190fd5b50600080546033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03949094169390931790925561ff001980831661010090811760ff19166001179091169281900460ff16151502919091179055565b3360008181526067602052604081205411610be257600080fd5b600160a060020a031660009081526067602052604090206001808255600290910155565b610c0e610a9a565b1515610c1957600080fd5b606955565b60665490565b60685481565b610c32610a9a565b1515610c3d57600080fd5b60008111610c4a57600080fd5b606a55565b60676020526000828152604090208160028110610c6857fe5b600202018054600190910154909250905082565b610c84610a9a565b1515610c8f57600080fd5b610c9881610e85565b50565b610ca3610a9a565b1515610cae57600080fd5b6312bed400811115610cbf57600080fd5b606855565b600082820183811015610cd657600080fd5b9392505050565b60008083831115610ced57600080fd5b5050900390565b600080600080600085118015610d0b575084865110155b1515610d1657600080fd5b600192505b84831015610dee578291505b600082118015610d6757508582815181101515610d4057fe5b906020019060200201518660018403815181101515610d5b57fe5b90602001906020020151115b15610de3578582815181101515610d7a57fe5b9060200190602002015190508560018303815181101515610d9757fe5b906020019060200201518683815181101515610daf57fe5b602090810290910101528551819087906000198501908110610dcd57fe5b6020908102909101015260001990910190610d27565b600190920191610d1b565b6002850660011415610e1c578560028604815181101515610e0b57fe5b906020019060200201519350610e72565b6002610e6587600183890403815181101515610e3457fe5b602090810290910101518860028904815181101515610e4f57fe5b602090810290910101519063ffffffff610cc416565b811515610e6e57fe5b0493505b50505092915050565b303b8015905b5090565b600160a060020a0381161515610e9a57600080fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806002905b610f36610f91565b815260200190600190039081610f2e5790505090565b5060008082556001820181905560028201819055600390910155565b815481835581811115610f8c57600083815260209020610f8c918101908301610fa8565b505050565b604080518082019091526000808252602082015290565b610a9791905b80821115610e815760008155600101610fae5600a165627a7a7230582063efb4002b236fb95a70c248839b8812c3f9cb68bb98c984aa3e90059492300400290000000000000000000000000000000000000000000000000000000000015888000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x6080604052600436106101065763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166312e800f1811461010b5780631e20d14b146101325780633bc5de301461014c57806346e2577a1461017a57806350f3fc811461019b578063715018a6146101cf5780638a355a57146101e45780638da5cb5b146102055780638f32d59b1461021a578063b577c0c714610243578063c4d66de814610258578063d13d597114610279578063da6b0eea1461028e578063dcbb8253146102a6578063df982985146102bb578063ef35bcce146102d0578063f10864b6146102e8578063f2fde38b14610325578063f68be51314610346575b600080fd5b34801561011757600080fd5b5061012061035e565b60408051918252519081900360200190f35b34801561013e57600080fd5b5061014a600435610364565b005b34801561015857600080fd5b50610161610480565b6040805192835290151560208301528051918290030190f35b34801561018657600080fd5b5061014a600160a060020a03600435166107cc565b3480156101a757600080fd5b506101b36004356108ac565b60408051600160a060020a039092168252519081900360200190f35b3480156101db57600080fd5b5061014a6108d4565b3480156101f057600080fd5b5061014a600160a060020a036004351661093e565b34801561021157600080fd5b506101b3610a8a565b34801561022657600080fd5b5061022f610a9a565b604080519115158252519081900360200190f35b34801561024f57600080fd5b50610120610aab565b34801561026457600080fd5b5061014a600160a060020a0360043516610ab1565b34801561028557600080fd5b5061014a610bc8565b34801561029a57600080fd5b5061014a600435610c06565b3480156102b257600080fd5b50610120610c1e565b3480156102c757600080fd5b50610120610c24565b3480156102dc57600080fd5b5061014a600435610c2a565b3480156102f457600080fd5b5061030c600160a060020a0360043516602435610c4f565b6040805192835260208301919091528051918290030190f35b34801561033157600080fd5b5061014a600160a060020a0360043516610c7c565b34801561035257600080fd5b5061014a600435610c9b565b60695481565b60008061036f610f03565b5050336000818152606760209081526040808320815180830190925280548083526002820154938301939093529394509190819081106103ae57600080fd5b6020830151835110156103c25760016103c5565b60005b9150816001039050426103f6606954858560ff166002811015156103e557fe5b60200201519063ffffffff610cc416565b111561040157600080fd5b428460ff83166002811061041157fe5b600202016000018190555085848260ff1660028110151561042e57fe5b6002020160010155604080518781524260208201528151600160a060020a038816927f460fcc5a1888965d48c2cab000fe20da51b1297d995af79a1924e2312d0d82b3928290030190a2505050505050565b600080600060606000806000806000610497610f1e565b6000806000806066805490509b508b6040519080825280602002602001820160405280156104cf578160200160208202803883390190505b509a50600099506104eb60685442610cdd90919063ffffffff16565b985061050260695442610cdd90919063ffffffff16565b9750600096505b8b87101561079557606680548890811061051f57fe5b6000918252602080832090910154600160a060020a031680835260679091526040808320815180830190925291985091600290835b82821015610590578382600202016040805190810160405290816000820154815260200160018201548152505081526020019060010190610554565b50929750879250600191506105a29050565b60200201515185515110156105b85760016105bb565b60005b9350600184900392508460ff8516600281106105d357fe5b6020020151519150878211156106f457600160a060020a038616600090815260676020526040902060ff84166002811061060957fe5b60020201549050888110156106595760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a16106ef565b878111156106a25760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a16106ef565b600160a060020a038616600090815260676020526040902060ff8416600281106106c857fe5b60020201600101548b8b806001019c508151811015156106e457fe5b602090810290910101525b61078a565b8882101561073d5760408051600160a060020a038816815290517f71f61642cb57ac11764a2f35fb4edc5361ced458af35bbed8f5ebf708c10e3419181900360200190a161078a565b600160a060020a038616600090815260676020526040902060ff85166002811061076357fe5b60020201600101548b8b806001019c5081518110151561077f57fe5b602090810290910101525b600190960195610509565b606a548a10156107ab5760009d508d9c506107bc565b6107b58b8b610cf4565b60019d509d505b5050505050505050505050509091565b6107d4610a9a565b15156107df57600080fd5b600160a060020a0381166000908152606760205260409020541561080257600080fd5b6066805460018082019092557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435401805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038416908117909155600090815260676020526040812090600202015560408051600160a060020a038316815290517fae9c2c6481964847714ce58f65a7f6dcc41d0d8394449bacdf161b5920c4744a9181900360200190a150565b60668054829081106108ba57fe5b600091825260209091200154600160a060020a0316905081565b6108dc610a9a565b15156108e757600080fd5b603354604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26033805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000610948610a9a565b151561095357600080fd5b600160a060020a038216600090815260676020526040812061097491610f4c565b5060005b606654811015610a865781600160a060020a031660668281548110151561099b57fe5b600091825260209091200154600160a060020a03161415610a7e576066546001820114610a29576066805460001981019081106109d457fe5b60009182526020909120015460668054600160a060020a0390921691839081106109fa57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6066805490610a3c906000198301610f68565b5060408051600160a060020a038416815290517f1589f8555933761a3cff8aa925061be3b46e2dd43f621322ab611d300f62b1d99181900360200190a1610a86565b600101610978565b5050565b603354600160a060020a03165b90565b603354600160a060020a0316331490565b606a5481565b60008054610100900460ff1680610acb5750610acb610e7b565b80610ad9575060005460ff16155b1515610b6c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015290519081900360840190fd5b50600080546033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03949094169390931790925561ff001980831661010090811760ff19166001179091169281900460ff16151502919091179055565b3360008181526067602052604081205411610be257600080fd5b600160a060020a031660009081526067602052604090206001808255600290910155565b610c0e610a9a565b1515610c1957600080fd5b606955565b60665490565b60685481565b610c32610a9a565b1515610c3d57600080fd5b60008111610c4a57600080fd5b606a55565b60676020526000828152604090208160028110610c6857fe5b600202018054600190910154909250905082565b610c84610a9a565b1515610c8f57600080fd5b610c9881610e85565b50565b610ca3610a9a565b1515610cae57600080fd5b6312bed400811115610cbf57600080fd5b606855565b600082820183811015610cd657600080fd5b9392505050565b60008083831115610ced57600080fd5b5050900390565b600080600080600085118015610d0b575084865110155b1515610d1657600080fd5b600192505b84831015610dee578291505b600082118015610d6757508582815181101515610d4057fe5b906020019060200201518660018403815181101515610d5b57fe5b90602001906020020151115b15610de3578582815181101515610d7a57fe5b9060200190602002015190508560018303815181101515610d9757fe5b906020019060200201518683815181101515610daf57fe5b602090810290910101528551819087906000198501908110610dcd57fe5b6020908102909101015260001990910190610d27565b600190920191610d1b565b6002850660011415610e1c578560028604815181101515610e0b57fe5b906020019060200201519350610e72565b6002610e6587600183890403815181101515610e3457fe5b602090810290910101518860028904815181101515610e4f57fe5b602090810290910101519063ffffffff610cc416565b811515610e6e57fe5b0493505b50505092915050565b303b8015905b5090565b600160a060020a0381161515610e9a57600080fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36033805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806002905b610f36610f91565b815260200190600190039081610f2e5790505090565b5060008082556001820181905560028201819055600390910155565b815481835581811115610f8c57600083815260209020610f8c918101908301610fa8565b505050565b604080518082019091526000808252602082015290565b610a9791905b80821115610e815760008155600101610fae5600a165627a7a7230582063efb4002b236fb95a70c248839b8812c3f9cb68bb98c984aa3e9005949230040029
Deployed Bytecode Sourcemap
7194:8429:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8120:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8120:29:0;;;;;;;;;;;;;;;;;;;;10821:726;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10821:726:0;;;;;;;12214:2170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12214:2170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14498:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14498:279:0;-1:-1:-1;;;;;14498:279:0;;;;;7421:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7421:26:0;;;;;;;;;-1:-1:-1;;;;;7421:26:0;;;;;;;;;;;;;;5089:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5089:116:0;;;;14900:511;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14900:511:0;-1:-1:-1;;;;;14900:511:0;;;;;4430:72;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4430:72:0;;;;4732:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4732:85:0;;;;;;;;;;;;;;;;;;;;;;8265:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8265:35:0;;;;4287:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4287:83:0;-1:-1:-1;;;;;4287:83:0;;;;;11636:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11636:279:0;;;;10106:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10106:145:0;;;;;15489:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15489:131:0;;;;7956:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7956:38:0;;;;10471:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10471:194:0;;;;;7563:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7563:53:0;-1:-1:-1;;;;;7563:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5372:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5372:103:0;-1:-1:-1;;;;;5372:103:0;;;;;9652:255;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9652:255:0;;;;;8120:29;;;;:::o;10821:726::-;10883:23;10930:25;11001:28;;:::i;:::-;-1:-1:-1;;10909:10:0;11128:18;10958:32;;;:15;:32;;;;;;;;11001:75;;;;;;;;11033:20;;11001:75;;;11033:10;11055;;:20;11001:75;;;;;;;10909:10;;-1:-1:-1;11001:75:0;11128:18;;;11097:17;-1:-1:-1;11089:26:0;;;;;;11166:13;;;;11149;;:30;;:38;;11186:1;11149:38;;;11182:1;11149:38;11128:59;;11221:12;11217:1;:16;11198:35;;11370:3;11322:44;11351:14;;11322:10;11333:12;11322:24;;;;;;;;;;;;;;;;:44;:28;:44;:::i;:::-;:51;;11314:60;;;;;;11419:3;11387:7;:19;;;;;;;;;;;;;:29;;:35;;;;11463:7;11433;11441:10;11433:19;;;;;;;;;;;;;;:27;;:37;11488:51;;;;;;11535:3;11488:51;;;;;;-1:-1:-1;;;;;11488:51:0;;;;;;;;;;;10821:726;;;;;;:::o;12214:2170::-;12269:7;12278:4;12300:20;12350:29;12420:12;12447:25;12519;12589:9;12642:23;12695:24;;:::i;:::-;12771:18;12859:16;12909:29;13102:27;12323:9;:16;;;;12300:39;;12396:12;12382:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;12382:27:0;;12350:59;;12435:1;12420:16;;12476:32;12484:23;;12476:3;:7;;:32;;;;:::i;:::-;12447:61;;12548:23;12556:14;;12548:3;:7;;:23;;;;:::i;:::-;12519:52;;12601:1;12589:13;;12584:1640;12608:12;12604:1;:16;12584:1640;;;12668:9;:12;;12678:1;;12668:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12668:12:0;12722:32;;;:15;:32;;;;;;;12695:59;;;;;;;;12668:12;;-1:-1:-1;12695:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12695:59:0;;-1:-1:-1;12695:59:0;;-1:-1:-1;12824:1:0;;-1:-1:-1;12816:10:0;;-1:-1:-1;12816:10:0;;;;;;:20;12792:10;;:20;:44;;:52;;12843:1;12792:52;;;12839:1;12792:52;12771:73;-1:-1:-1;12878:1:0;:16;;;;-1:-1:-1;12941:7:0;:21;;;;;;;;;;;;;;:31;;-1:-1:-1;12991:41:0;;;12987:1226;;;-1:-1:-1;;;;;13132:32:0;;;;;;:15;:32;;;;;:44;;;;;;;;;;;;;:54;;-1:-1:-1;13209:39:0;;;13205:542;;;13326:42;;;-1:-1:-1;;;;;13326:42:0;;;;;;;;;;;;;;;13205:542;;;13420:17;13398:19;:39;13394:353;;;13518:42;;;-1:-1:-1;;;;;13518:42:0;;;;;;;;;;;;;;;13394:353;;;-1:-1:-1;;;;;13675:32:0;;;;;;:15;:32;;;;;:44;;;;;;;;;;;;;:52;;;13652:12;13665:6;;;;;;13652:20;;;;;;;;;;;;;;;;;;:75;13394:353;12987:1226;;;13868:17;13844:21;:41;13840:358;;;13965:42;;;-1:-1:-1;;;;;13965:42:0;;;;;;;;;;;;;;;13840:358;;;-1:-1:-1;;;;;14124:32:0;;;;;;:15;:32;;;;;:46;;;;;;;;;;;;;:54;;;14101:12;14114:6;;;;;;14101:20;;;;;;;;;;;;;;;;;;:77;13840:358;12622:3;;;;;12584:1640;;;14247:16;;14240:4;:23;14236:73;;;14288:1;;-1:-1:-1;14288:1:0;;-1:-1:-1;14280:17:0;;14236:73;14329:40;14350:12;14364:4;14329:20;:40::i;:::-;14371:4;14321:55;;;;12214:2170;;;;;;;;;;;;;;;:::o;14498:279::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;-1:-1:-1;;;;;14598:25:0;;;;;;:15;:25;;;;;:38;:43;14590:52;;;;;;14653:9;27:10:-1;;39:1;23:18;;;45:23;;;14653:24:0;;;;-1:-1:-1;;14653:24:0;-1:-1:-1;;;;;14653:24:0;;;;;;;;-1:-1:-1;14688:25:0;;;:15;14653:24;14688:25;;;;;:28;;;:42;14746:23;;;-1:-1:-1;;;;;14746:23:0;;;;;;;;;;;;;;;14498:279;:::o;7421:26::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7421:26:0;;-1:-1:-1;7421:26:0;:::o;5089:116::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;5166:6;;5147:26;;-1:-1:-1;;;;;5166:6:0;;;;5147:26;;5166:6;;5147:26;5180:6;:19;;-1:-1:-1;;5180:19:0;;;5089:116::o;14900:511::-;15043:9;4623;:7;:9::i;:::-;4615:18;;;;;;;;-1:-1:-1;;;;;15002:25:0;;;;;;:15;:25;;;;;14995:32;;;:::i;:::-;-1:-1:-1;15055:1:0;15038:366;15062:9;:16;15058:20;;15038:366;;;15120:8;-1:-1:-1;;;;;15104:24:0;:9;15114:1;15104:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15104:12:0;:24;15100:293;;;15163:9;:16;15157:1;15153:5;;:26;15149:119;;15219:9;15229:16;;-1:-1:-1;;15229:18:0;;;15219:29;;;;;;;;;;;;;;;;15204:9;:12;;-1:-1:-1;;;;;15219:29:0;;;;15214:1;;15204:12;;;;;;;;;;;;;;:44;;;;;-1:-1:-1;;;;;15204:44:0;;;;;-1:-1:-1;;;;;15204:44:0;;;;;;15149:119;15286:9;:18;;;;;-1:-1:-1;;15286:18:0;;;:::i;:::-;-1:-1:-1;15328:25:0;;;-1:-1:-1;;;;;15328:25:0;;;;;;;;;;;;;;;15372:5;;15100:293;15080:3;;15038:366;;;14900:511;;:::o;4430:72::-;4490:6;;-1:-1:-1;;;;;4490:6:0;4430:72;;:::o;4732:85::-;4805:6;;-1:-1:-1;;;;;4805:6:0;4791:10;:20;;4732:85::o;8265:35::-;;;;:::o;4287:83::-;2882:20;2775:12;;;;;;;;:31;;;2791:15;:13;:15::i;:::-;2775:47;;;-1:-1:-1;2811:11:0;;;;2810:12;2775:47;2767:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2905:12:0;;;4349:6;:15;;-1:-1:-1;;4349:15:0;-1:-1:-1;;;;;4349:15:0;;;;;;;;;;;-1:-1:-1;;2924:19:0;;;2905:12;2924:19;;;-1:-1:-1;;2950:18:0;-1:-1:-1;2950:18:0;2987:30;;;2905:12;;;;;;2987:30;;;;;;;;;4287:83::o;11636:279::-;11711:10;11685:23;11741:32;;;:15;:32;;;;;:45;:49;11732:59;;;;;;-1:-1:-1;;;;;11802:32:0;;;;;:15;:32;;;;;11848:1;11802:47;;;:35;11860;;;:47;11636:279::o;10106:145::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;10211:14;:32;10106:145::o;15489:131::-;15596:9;:16;15489:131;:::o;7956:38::-;;;;:::o;10471:194::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;10608:1;10588:21;;10580:30;;;;;;10621:16;:36;10471:194::o;7563:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7563:53:0;-1:-1:-1;7563:53:0;:::o;5372:103::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;5441:28;5460:8;5441:18;:28::i;:::-;5372:103;:::o;9652:255::-;4623:9;:7;:9::i;:::-;4615:18;;;;;;;;8514:9;9783:54;;;9775:63;;;;;;9849:23;:50;9652:255::o;1323:136::-;1381:7;1409:5;;;1429:6;;;;1421:15;;;;;;1452:1;1323:136;-1:-1:-1;;;1323:136:0:o;1119:::-;1177:7;;1201:6;;;;1193:15;;;;;;-1:-1:-1;;1227:5:0;;;1119:136::o;6282:601::-;6386:7;6468:9;6518;6590:11;6426:1;6419:4;:8;:32;;;;;6447:4;6431:5;:12;:20;;6419:32;6411:41;;;;;;;;6480:1;6468:13;;6463:251;6487:4;6483:1;:8;6463:251;;;6530:1;6518:13;;6513:190;6537:1;6533;:5;:31;;;;;6556:5;6562:1;6556:8;;;;;;;;;;;;;;;;;;6542:5;6550:1;6548;:3;6542:10;;;;;;;;;;;;;;;;;;:22;6533:31;6513:190;;;6604:5;6610:1;6604:8;;;;;;;;;;;;;;;;;;6590:22;;6642:5;6650:1;6648;:3;6642:10;;;;;;;;;;;;;;;;;;6631:5;6637:1;6631:8;;;;;;;;;;;;;;;;;;:21;6671:10;;6684:3;;6671:5;;-1:-1:-1;;6677:3:0;;;6671:10;;;;;;;;;;;;;;:16;-1:-1:-1;;6566:3:0;;;;6513:190;;;6493:3;;;;;6463:251;;;6735:1;6728:4;:8;6740:1;6728:13;6724:152;;;6765:5;6778:1;6771:4;:8;6765:15;;;;;;;;;;;;;;;;;;6758:22;;;;6724:152;6863:1;6820:40;6840:5;6857:1;6863;6846:4;:8;:12;6840:19;;;;;;;;;;;;;;;;;;;6820:5;6833:1;6826:4;:8;6820:15;;;;;;;;;;;;;;;;;;;;:40;:19;:40;:::i;:::-;:44;;;;;;;;6813:51;;6724:152;6282:601;;;;;;;:::o;3112:476::-;3552:7;3540:20;3575:7;;;3112:476;;;:::o;5615:173::-;-1:-1:-1;;;;;5685:22:0;;;;5677:31;;;;;;5741:6;;5720:38;;-1:-1:-1;;;;;5720:38:0;;;;5741:6;;5720:38;;5741:6;;5720:38;5765:6;:17;;-1:-1:-1;;5765:17:0;-1:-1:-1;;;;;5765:17:0;;;;;;;;;;5615:173::o;7194:8429::-;;;;;;;;;;;;;;;105:10:-1;7194:8429:0;88:34:-1;-1:-1;7194:8429:0;;;-1:-1:-1;;7194:8429:0:o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;7194:8429:0;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;7194:8429:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://63efb4002b236fb95a70c248839b8812c3f9cb68bb98c984aa3e900594923004
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.