Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
EscrowRegistry
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: GPL-3.0-or-later // Smart Contract for Trustless Escrow at https://trustlessescrow.com pragma solidity ^0.6.0; import "./SafeMath.sol"; contract EscrowRegistry { using SafeMath for uint; ////////////////////////////////////////////////////////// // Modifiers modifier onlyOwner() { require( msg.sender == owner, "Only owner can call this." ); _; } ////////////////////////////////////////////////////////// // Custom data types /* * 0. Init * 1. BuyerLocked or SellerLocked * 2. Locked * 3. Inactive */ enum State { Init, BuyerLocked, SellerLocked, Locked, Inactive } struct Escrow { State state; uint value; uint buyerDeposit; uint sellerDeposit; uint expireAt; address payable buyer; address payable seller; } ////////////////////////////////////////////////////////// // Constants uint constant one_hour = 60 * 60; uint constant one_day = 24 * one_hour; uint constant one_year = 365 * one_day; uint constant min_expiration_time = 3 * one_day; uint constant max_expiration_time = 3 * one_year; ////////////////////////////////////////////////////////// // Data address payable owner; mapping(bytes24 => Escrow) escrows; uint feePct; // in 0.01% i.e fee = value * fee_pct / 10000 uint feeStore; ////////////////////////////////////////////////////////// // Events event EscrowCreated(bytes24 indexed escrowId, bool buyerCreated, address indexed buyer, address indexed seller); event BuyerAborted(bytes24 indexed escrowId); event SellerAborted(bytes24 indexed escrowId); event BuyerConfirmed(bytes24 indexed escrowId); event SellerConfirmed(bytes24 indexed escrowId); event Completed(bytes24 indexed escrowId); event Expired(bytes24 indexed escrowId); ////////////////////////////////////////////////////////// // Functions function getUniqueKey() internal view returns (bytes24) { bytes24 uniqId = bytes24(keccak256(abi.encodePacked(msg.sender, blockhash(block.number - 1)))); while (escrows[uniqId].value != 0) { uniqId = bytes24(keccak256(abi.encodePacked(uniqId))); } return uniqId; } constructor() public { owner = msg.sender; feePct = 10; feeStore = 0; } function changeOwner(address payable newOwner) public onlyOwner { owner = newOwner; } function setFee(uint newFeePct) public onlyOwner { feePct = newFeePct; } function emptyFeeStore() public onlyOwner { require(feeStore > 0, "Fee store is empty"); owner.transfer(feeStore); feeStore = 0; } function buyerCreate(uint value, address payable seller, uint sellerDeposit, uint expireIn) public payable { require(value > 0 && value <= msg.value, "Invalid value"); require(expireIn >= min_expiration_time && expireIn <= max_expiration_time, "Invalid expiration time"); bytes24 escrowId = getUniqueKey(); emit EscrowCreated(escrowId, true, msg.sender, seller); escrows[escrowId] = Escrow({ expireAt: now + expireIn, value: value, buyerDeposit: msg.value - value, sellerDeposit: sellerDeposit, buyer: msg.sender, seller: seller, state: State.BuyerLocked }); } function sellerCreate(uint value, address payable buyer, uint buyerDeposit, uint expireIn) public payable { require(value > 0, "Invalid value"); require(expireIn >= min_expiration_time && expireIn <= max_expiration_time, "Invalid expiration time"); bytes24 escrowId = getUniqueKey(); emit EscrowCreated(escrowId, false, buyer, msg.sender); escrows[escrowId] = Escrow({ expireAt: now + expireIn, value: value, buyerDeposit: buyerDeposit, sellerDeposit: msg.value, buyer: buyer, seller: msg.sender, state: State.SellerLocked }); } function buyerConfirm(bytes24 escrowId) public payable { emit BuyerConfirmed(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.SellerLocked, "Invalid state"); require(msg.sender == e.buyer, "Not allowed"); require(msg.value == e.value + e.buyerDeposit, "Invalid amount sent"); e.state = State.Locked; } function sellerConfirm(bytes24 escrowId) public payable { emit SellerConfirmed(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.BuyerLocked, "Invalid state"); require(msg.sender == e.seller, "Not allowed"); require(msg.value == e.sellerDeposit, "Invalid amount sent"); e.state = State.Locked; } function buyerAbort(bytes24 escrowId) public { emit BuyerAborted(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.BuyerLocked, "Invalid state"); require(msg.sender == e.buyer, "Not allowed"); e.state = State.Inactive; e.buyer.transfer(e.value + e.buyerDeposit); } function sellerAbort(bytes24 escrowId) public { emit SellerAborted(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.SellerLocked, "Invalid state"); require(msg.sender == e.seller, "Not allowed"); e.state = State.Inactive; e.seller.transfer(e.sellerDeposit); } function complete(bytes24 escrowId) public { emit Completed(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.Locked, "Invalid state"); require(msg.sender == e.buyer, "Not allowed"); uint fee = e.value * feePct / 10000; e.state = State.Inactive; feeStore += fee; e.buyer.transfer(e.buyerDeposit); e.seller.transfer(e.value - fee + e.sellerDeposit); } function expire(bytes24 escrowId) public onlyOwner { emit Expired(escrowId); Escrow storage e = escrows[escrowId]; require(e.state == State.Locked, "Invalid state"); require(now > e.expireAt, "Not expired"); e.state = State.Inactive; owner.transfer(e.value + e.buyerDeposit + e.sellerDeposit); } function getEscrow(bytes24 escrowId) public view returns (State state, uint value, uint buyerDeposit, uint sellerDeposit, uint expireAt, address buyer, address seller) { Escrow storage e = escrows[escrowId]; require(e.state != State.Init, "Not found"); return (e.state, e.value, e.buyerDeposit, e.sellerDeposit, e.expireAt, e.buyer, e.seller); } function isEscrowExpired(bytes24 escrowId) public view returns (bool) { Escrow storage e = escrows[escrowId]; require(e.state != State.Init, "Not found"); return now > e.expireAt; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot 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-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"BuyerAborted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"BuyerConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"Completed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"},{"indexed":false,"internalType":"bool","name":"buyerCreated","type":"bool"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"}],"name":"EscrowCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"SellerAborted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"SellerConfirmed","type":"event"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"buyerAbort","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"buyerConfirm","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"sellerDeposit","type":"uint256"},{"internalType":"uint256","name":"expireIn","type":"uint256"}],"name":"buyerCreate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"complete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyFeeStore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"expire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"getEscrow","outputs":[{"internalType":"enum EscrowRegistry.State","name":"state","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"buyerDeposit","type":"uint256"},{"internalType":"uint256","name":"sellerDeposit","type":"uint256"},{"internalType":"uint256","name":"expireAt","type":"uint256"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"seller","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"isEscrowExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"sellerAbort","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes24","name":"escrowId","type":"bytes24"}],"name":"sellerConfirm","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"uint256","name":"buyerDeposit","type":"uint256"},{"internalType":"uint256","name":"expireIn","type":"uint256"}],"name":"sellerCreate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeePct","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6002819055506000600381905550612183806100706000396000f3fe6080604052600436106100c25760003560e01c80634a387f2c1161007f578063bbef06a111610059578063bbef06a114610357578063bd7a73aa1461039d578063cf650083146103b4578063d3d4b3d514610416576100c2565b80634a387f2c1461029257806369fe0e2d146102cb578063a6f9dae114610306576100c2565b80631ebd485e146100c757806320fed9d4146101005780632930ee841461014657806335b539b31461018c5780633afc811f146101ee5780633d0eef1814610234575b600080fd5b6100fe600480360360208110156100dd57600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610500565b005b34801561010c57600080fd5b506101446004803603602081101561012357600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610770565b005b34801561015257600080fd5b5061018a6004803603602081101561016957600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610a4f565b005b6101ec600480360360808110156101a257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610caf565b005b3480156101fa57600080fd5b506102326004803603602081101561021157600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610fbc565b005b34801561024057600080fd5b506102786004803603602081101561025757600080fd5b81019080803567ffffffffffffffff191690602001909291905050506112bc565b604051808215151515815260200191505060405180910390f35b6102c9600480360360208110156102a857600080fd5b81019080803567ffffffffffffffff19169060200190929190505050611397565b005b3480156102d757600080fd5b50610304600480360360208110156102ee57600080fd5b8101908080359060200190929190505050611601565b005b34801561031257600080fd5b506103556004803603602081101561032957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cd565b005b34801561036357600080fd5b5061039b6004803603602081101561037a57600080fd5b81019080803567ffffffffffffffff191690602001909291905050506117d2565b005b3480156103a957600080fd5b506103b2611a38565b005b610414600480360360808110156103ca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611be6565b005b34801561042257600080fd5b5061045a6004803603602081101561043957600080fd5b81019080803567ffffffffffffffff19169060200190929190505050611f01565b6040518088600481111561046a57fe5b60ff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390f35b8067ffffffffffffffff19167f2616be2bf1c97e8b34088bb48c9d65d892a11ba7e07042b07eca6a69dd38e4de60405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506002600481111561057257fe5b8160000160009054906101000a900460ff16600481111561058f57fe5b14610602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600201548160010154013414610746576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e742073656e740000000000000000000000000081525060200191505060405180910390fd5b60038160000160006101000a81548160ff0219169083600481111561076757fe5b02179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff19167fe8cf04b0276c590ba668486c9da7897393cbbdbf3289dff19d8ce314ca011a8660405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff191681526020019081526020016000209050600360048111156108a457fe5b8160000160009054906101000a900460ff1660048111156108c157fe5b14610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b806004015442116109ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f74206578706972656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff021916908360048111156109ce57fe5b02179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600301548360020154846001015401019081150290604051600060405180830381858888f19350505050158015610a4a573d6000803e3d6000fd5b505050565b8067ffffffffffffffff19167feb6a0c601c982465f3468b0fc1546c9924a972ee71bdc6c87d517cca3d1d2fe360405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff19168152602001908152602001600020905060026004811115610ac157fe5b8160000160009054906101000a900460ff166004811115610ade57fe5b14610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff02191690836004811115610c3757fe5b02179055508060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600301549081150290604051600060405180830381858888f19350505050158015610caa573d6000803e3d6000fd5b505050565b60008411610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642076616c75650000000000000000000000000000000000000081525060200191505060405180910390fd5b610e106018026003028110158015610d495750610e1060180261016d026003028111155b610dbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e76616c69642065787069726174696f6e2074696d6500000000000000000081525060200191505060405180910390fd5b6000610dc5612066565b90503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff19167f3a31c010508251ab6cc2d5384e0d829d22e6aa361399569d8f880db6625a8b256000604051808215151515815260200191505060405180910390a46040518060e0016040528060026004811115610e5557fe5b815260200186815260200184815260200134815260200183420181526020018573ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815250600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115610ef757fe5b02179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b8067ffffffffffffffff19167ff55f790ce9867f37f49bc66b1258c418930747888b956b8013599c311316199d60405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506003600481111561102e57fe5b8160000160009054906101000a900460ff16600481111561104b57fe5b146110be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006127106002548360010154028161119857fe5b04905060048260000160006101000a81548160ff021916908360048111156111bc57fe5b0217905550806003600082825401925050819055508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561123f573d6000803e3d6000fd5b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc836003015483856001015403019081150290604051600060405180830381858888f193505050501580156112b6573d6000803e3d6000fd5b50505050565b600080600160008467ffffffffffffffff191667ffffffffffffffff191681526020019081526020016000209050600060048111156112f757fe5b8160000160009054906101000a900460ff16600481111561131457fe5b1415611388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f7420666f756e64000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600401544211915050919050565b8067ffffffffffffffff19167f8680e38cfbd8d843471a7ab0631ceff7573ab1f967751eda6ccdaad5d55bddf860405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506001600481111561140957fe5b8160000160009054906101000a900460ff16600481111561142657fe5b14611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b806003015434146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e742073656e740000000000000000000000000081525060200191505060405180910390fd5b60038160000160006101000a81548160ff021916908360048111156115f857fe5b02179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b8060028190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8067ffffffffffffffff19167f4552526c9db16d39d2d28394c85e213bc76d3332e82165591bc1e9e5aae2506460405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506001600481111561184457fe5b8160000160009054906101000a900460ff16600481111561186157fe5b146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff021916908360048111156119ba57fe5b02179055508060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201548360010154019081150290604051600060405180830381858888f19350505050158015611a33573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b600060035411611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4665652073746f726520697320656d707479000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003549081150290604051600060405180830381858888f19350505050158015611bdb573d6000803e3d6000fd5b506000600381905550565b600084118015611bf65750348411155b611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642076616c75650000000000000000000000000000000000000081525060200191505060405180910390fd5b610e106018026003028110158015611c8c5750610e1060180261016d026003028111155b611cfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e76616c69642065787069726174696f6e2074696d6500000000000000000081525060200191505060405180910390fd5b6000611d08612066565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff19167f3a31c010508251ab6cc2d5384e0d829d22e6aa361399569d8f880db6625a8b256001604051808215151515815260200191505060405180910390a46040518060e0016040528060016004811115611d9857fe5b8152602001868152602001863403815260200184815260200183420181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815250600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115611e3c57fe5b02179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b600080600080600080600080600160008a67ffffffffffffffff191667ffffffffffffffff19168152602001908152602001600020905060006004811115611f4557fe5b8160000160009054906101000a900460ff166004811115611f6257fe5b1415611fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f7420666f756e64000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff1681600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16819150809050975097509750975097509750975050919395979092949650565b600080336001430340604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090505b6000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060010154146121465780604051602001808267ffffffffffffffff191667ffffffffffffffff191681526018019150506040516020818303038152906040528051906020012090506120ce565b809150509056fea2646970667358221220cd0c2b2a7943b8fd938fd20c8b4cf221657ff54aca98ca73f396ba0d63d27be464736f6c63430006070033
Deployed Bytecode
0x6080604052600436106100c25760003560e01c80634a387f2c1161007f578063bbef06a111610059578063bbef06a114610357578063bd7a73aa1461039d578063cf650083146103b4578063d3d4b3d514610416576100c2565b80634a387f2c1461029257806369fe0e2d146102cb578063a6f9dae114610306576100c2565b80631ebd485e146100c757806320fed9d4146101005780632930ee841461014657806335b539b31461018c5780633afc811f146101ee5780633d0eef1814610234575b600080fd5b6100fe600480360360208110156100dd57600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610500565b005b34801561010c57600080fd5b506101446004803603602081101561012357600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610770565b005b34801561015257600080fd5b5061018a6004803603602081101561016957600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610a4f565b005b6101ec600480360360808110156101a257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610caf565b005b3480156101fa57600080fd5b506102326004803603602081101561021157600080fd5b81019080803567ffffffffffffffff19169060200190929190505050610fbc565b005b34801561024057600080fd5b506102786004803603602081101561025757600080fd5b81019080803567ffffffffffffffff191690602001909291905050506112bc565b604051808215151515815260200191505060405180910390f35b6102c9600480360360208110156102a857600080fd5b81019080803567ffffffffffffffff19169060200190929190505050611397565b005b3480156102d757600080fd5b50610304600480360360208110156102ee57600080fd5b8101908080359060200190929190505050611601565b005b34801561031257600080fd5b506103556004803603602081101561032957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cd565b005b34801561036357600080fd5b5061039b6004803603602081101561037a57600080fd5b81019080803567ffffffffffffffff191690602001909291905050506117d2565b005b3480156103a957600080fd5b506103b2611a38565b005b610414600480360360808110156103ca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611be6565b005b34801561042257600080fd5b5061045a6004803603602081101561043957600080fd5b81019080803567ffffffffffffffff19169060200190929190505050611f01565b6040518088600481111561046a57fe5b60ff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390f35b8067ffffffffffffffff19167f2616be2bf1c97e8b34088bb48c9d65d892a11ba7e07042b07eca6a69dd38e4de60405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506002600481111561057257fe5b8160000160009054906101000a900460ff16600481111561058f57fe5b14610602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600201548160010154013414610746576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e742073656e740000000000000000000000000081525060200191505060405180910390fd5b60038160000160006101000a81548160ff0219169083600481111561076757fe5b02179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff19167fe8cf04b0276c590ba668486c9da7897393cbbdbf3289dff19d8ce314ca011a8660405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff191681526020019081526020016000209050600360048111156108a457fe5b8160000160009054906101000a900460ff1660048111156108c157fe5b14610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b806004015442116109ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f74206578706972656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff021916908360048111156109ce57fe5b02179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600301548360020154846001015401019081150290604051600060405180830381858888f19350505050158015610a4a573d6000803e3d6000fd5b505050565b8067ffffffffffffffff19167feb6a0c601c982465f3468b0fc1546c9924a972ee71bdc6c87d517cca3d1d2fe360405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff19168152602001908152602001600020905060026004811115610ac157fe5b8160000160009054906101000a900460ff166004811115610ade57fe5b14610b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff02191690836004811115610c3757fe5b02179055508060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600301549081150290604051600060405180830381858888f19350505050158015610caa573d6000803e3d6000fd5b505050565b60008411610d25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642076616c75650000000000000000000000000000000000000081525060200191505060405180910390fd5b610e106018026003028110158015610d495750610e1060180261016d026003028111155b610dbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e76616c69642065787069726174696f6e2074696d6500000000000000000081525060200191505060405180910390fd5b6000610dc5612066565b90503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff19167f3a31c010508251ab6cc2d5384e0d829d22e6aa361399569d8f880db6625a8b256000604051808215151515815260200191505060405180910390a46040518060e0016040528060026004811115610e5557fe5b815260200186815260200184815260200134815260200183420181526020018573ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815250600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115610ef757fe5b02179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b8067ffffffffffffffff19167ff55f790ce9867f37f49bc66b1258c418930747888b956b8013599c311316199d60405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506003600481111561102e57fe5b8160000160009054906101000a900460ff16600481111561104b57fe5b146110be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006127106002548360010154028161119857fe5b04905060048260000160006101000a81548160ff021916908360048111156111bc57fe5b0217905550806003600082825401925050819055508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561123f573d6000803e3d6000fd5b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc836003015483856001015403019081150290604051600060405180830381858888f193505050501580156112b6573d6000803e3d6000fd5b50505050565b600080600160008467ffffffffffffffff191667ffffffffffffffff191681526020019081526020016000209050600060048111156112f757fe5b8160000160009054906101000a900460ff16600481111561131457fe5b1415611388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f7420666f756e64000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600401544211915050919050565b8067ffffffffffffffff19167f8680e38cfbd8d843471a7ab0631ceff7573ab1f967751eda6ccdaad5d55bddf860405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506001600481111561140957fe5b8160000160009054906101000a900460ff16600481111561142657fe5b14611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b806003015434146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e742073656e740000000000000000000000000081525060200191505060405180910390fd5b60038160000160006101000a81548160ff021916908360048111156115f857fe5b02179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b8060028190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8067ffffffffffffffff19167f4552526c9db16d39d2d28394c85e213bc76d3332e82165591bc1e9e5aae2506460405160405180910390a26000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002090506001600481111561184457fe5b8160000160009054906101000a900460ff16600481111561186157fe5b146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642073746174650000000000000000000000000000000000000081525060200191505060405180910390fd5b8060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60048160000160006101000a81548160ff021916908360048111156119ba57fe5b02179055508060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc82600201548360010154019081150290604051600060405180830381858888f19350505050158015611a33573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611afa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4f6e6c79206f776e65722063616e2063616c6c20746869732e0000000000000081525060200191505060405180910390fd5b600060035411611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4665652073746f726520697320656d707479000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003549081150290604051600060405180830381858888f19350505050158015611bdb573d6000803e3d6000fd5b506000600381905550565b600084118015611bf65750348411155b611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642076616c75650000000000000000000000000000000000000081525060200191505060405180910390fd5b610e106018026003028110158015611c8c5750610e1060180261016d026003028111155b611cfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e76616c69642065787069726174696f6e2074696d6500000000000000000081525060200191505060405180910390fd5b6000611d08612066565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff19167f3a31c010508251ab6cc2d5384e0d829d22e6aa361399569d8f880db6625a8b256001604051808215151515815260200191505060405180910390a46040518060e0016040528060016004811115611d9857fe5b8152602001868152602001863403815260200184815260200183420181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815250600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548160ff02191690836004811115611e3c57fe5b02179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b600080600080600080600080600160008a67ffffffffffffffff191667ffffffffffffffff19168152602001908152602001600020905060006004811115611f4557fe5b8160000160009054906101000a900460ff166004811115611f6257fe5b1415611fd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e6f7420666f756e64000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060000160009054906101000a900460ff1681600101548260020154836003015484600401548560050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16819150809050975097509750975097509750975050919395979092949650565b600080336001430340604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090505b6000600160008367ffffffffffffffff191667ffffffffffffffff1916815260200190815260200160002060010154146121465780604051602001808267ffffffffffffffff191667ffffffffffffffff191681526018019150506040516020818303038152906040528051906020012090506120ce565b809150509056fea2646970667358221220cd0c2b2a7943b8fd938fd20c8b4cf221657ff54aca98ca73f396ba0d63d27be464736f6c63430006070033
Deployed Bytecode Sourcemap
169:6977:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;4235:378:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4235:378:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6140:347;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6140:347:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;6140:347:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5342:336;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5342:336:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5342:336:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3565:664;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;3565:664:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5684:450;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5684:450:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;5684:450:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6935:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6935:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;6935:209:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4619:371;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4619:371:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2609:84;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2609:84:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2609:84:0;;;;;;;;;;;;;;;;;:::i;:::-;;2506:97;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2506:97:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2506:97:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;4996:340;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4996:340:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;4996:340:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2699:158;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2699:158:0;;;:::i;:::-;;2863:696;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;2863:696:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6493:436;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6493:436:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;6493:436:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4235:378;4320:8;4305:24;;;;;;;;;;;;;4339:16;4358:7;:17;4366:8;4358:17;;;;;;;;;;;;;;;;;4339:36;;4404:18;4393:29;;;;;;;;:1;:7;;;;;;;;;;;;:29;;;;;;;;;4385:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4472:1;:7;;;;;;;;;;;;4458:21;;:10;:21;;;4450:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4536:1;:14;;;4526:1;:7;;;:24;4513:9;:37;4505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4594:12;4584:1;:7;;;:22;;;;;;;;;;;;;;;;;;;;;;;;4235:378;;:::o;6140:347::-;375:5;;;;;;;;;;;361:19;;:10;:19;;;340:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6214:8:::1;6206:17;;;;;;;;;;;;;6233:16;6252:7;:17;6260:8;6252:17;;;;;;;;;;;;;;;;;6233:36;;6298:12;6287:23;;;;;;;;:1;:7;;;;;;;;;;;;:23;;;;;;;;;6279:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6352:1;:10;;;6346:3;:16;6338:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6398:14;6388:1;:7;;;:24;;;;;;;;;;;;;;;;;;;;;;;;6422:5;::::0;::::1;;;;;;;;;:14;;:58;6464:1;:15;;;6447:1;:14;;;6437:1;:7;;;:24;:42;6422:58;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6422:58:0;441:1;6140:347:::0;:::o;5342:336::-;5417:8;5403:23;;;;;;;;;;;;;5436:16;5455:7;:17;5463:8;5455:17;;;;;;;;;;;;;;;;;5436:36;;5501:18;5490:29;;;;;;;;:1;:7;;;;;;;;;;;;:29;;;;;;;;;5482:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5569:1;:8;;;;;;;;;;;;5555:22;;:10;:22;;;5547:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5613:14;5603:1;:7;;;:24;;;;;;;;;;;;;;;;;;;;;;;;5637:1;:8;;;;;;;;;;;;:17;;:34;5655:1;:15;;;5637:34;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5637:34:0;5342:336;;:::o;3565:664::-;3697:1;3689:5;:9;3681:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1076:7;1113:2;:13;1212:1;:11;3734:8;:31;;:66;;;;;1076:7;1113:2;:13;1157:3;:13;1265:1;:12;3769:8;:31;;3734:66;3726:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3838:16;3857:14;:12;:14::i;:::-;3838:33;;3924:10;3886:49;;3917:5;3886:49;;3900:8;3886:49;;;;3910:5;3886:49;;;;;;;;;;;;;;;;;;;;;;3965:257;;;;;;;;4193:18;3965:257;;;;;;;;;;;;4031:5;3965:257;;;;4064:12;3965:257;;;;4105:9;3965:257;;;;4002:8;3996:3;:14;3965:257;;;;4135:5;3965:257;;;;;;4162:10;3965:257;;;;;3945:7;:17;3953:8;3945:17;;;;;;;;;;;;;;;;;:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3565:664;;;;;:::o;5684:450::-;5752:8;5742:19;;;;;;;;;;;;;5771:16;5790:7;:17;5798:8;5790:17;;;;;;;;;;;;;;;;;5771:36;;5836:12;5825:23;;;;;;;;:1;:7;;;;;;;;;;;;:23;;;;;;;;;5817:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5898:1;:7;;;;;;;;;;;;5884:21;;:10;:21;;;5876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5931:8;5961:5;5952:6;;5942:1;:7;;;:16;:24;;;;;;5931:35;;5986:14;5976:1;:7;;;:24;;;;;;;;;;;;;;;;;;;;;;;;6022:3;6010:8;;:15;;;;;;;;;;;6035:1;:7;;;;;;;;;;;;:16;;:32;6052:1;:14;;;6035:32;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6035:32:0;6077:1;:8;;;;;;;;;;;;:17;;:50;6111:1;:15;;;6105:3;6095:1;:7;;;:13;:31;6077:50;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6077:50:0;5684:450;;;:::o;6935:209::-;6999:4;7015:16;7034:7;:17;7042:8;7034:17;;;;;;;;;;;;;;;;;7015:36;;7080:10;7069:21;;;;;;;;:1;:7;;;;;;;;;;;;:21;;;;;;;;;;7061:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7127:1;:10;;;7121:3;:16;7114:23;;;6935:209;;;:::o;4619:371::-;4706:8;4690:25;;;;;;;;;;;;;4725:16;4744:7;:17;4752:8;4744:17;;;;;;;;;;;;;;;;;4725:36;;4790:17;4779:28;;;;;;;;:1;:7;;;;;;;;;;;;:28;;;;;;;;;4771:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4857:1;:8;;;;;;;;;;;;4843:22;;:10;:22;;;4835:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4912:1;:15;;;4899:9;:28;4891:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4971:12;4961:1;:7;;;:22;;;;;;;;;;;;;;;;;;;;;;;;4619:371;;:::o;2609:84::-;375:5;;;;;;;;;;;361:19;;:10;:19;;;340:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2677:9:::1;2668:6;:18;;;;2609:84:::0;:::o;2506:97::-;375:5;;;;;;;;;;;361:19;;:10;:19;;;340:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2588:8:::1;2580:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;2506:97:::0;:::o;4996:340::-;5069:8;5056:22;;;;;;;;;;;;;5088:16;5107:7;:17;5115:8;5107:17;;;;;;;;;;;;;;;;;5088:36;;5153:17;5142:28;;;;;;;;:1;:7;;;;;;;;;;;;:28;;;;;;;;;5134:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5220:1;:7;;;;;;;;;;;;5206:21;;:10;:21;;;5198:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5263:14;5253:1;:7;;;:24;;;;;;;;;;;;;;;;;;;;;;;;5287:1;:7;;;;;;;;;;;;:16;;:42;5314:1;:14;;;5304:1;:7;;;:24;5287:42;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5287:42:0;4996:340;;:::o;2699:158::-;375:5;;;;;;;;;;;361:19;;:10;:19;;;340:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2770:1:::1;2759:8;;:12;2751:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2804:5;::::0;::::1;;;;;;;;;:14;;:24;2819:8;;2804:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2804:24:0;2849:1;2838:8;:12;;;;2699:158::o:0;2863:696::-;2996:1;2988:5;:9;:31;;;;;3010:9;3001:5;:18;;2988:31;2980:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1076:7;1113:2;:13;1212:1;:11;3055:8;:31;;:66;;;;;1076:7;1113:2;:13;1157:3;:13;1265:1;:12;3090:8;:31;;3055:66;3047:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3159:16;3178:14;:12;:14::i;:::-;3159:33;;3249:6;3207:49;;3237:10;3207:49;;3221:8;3207:49;;;;3231:4;3207:49;;;;;;;;;;;;;;;;;;;;;;3286:266;;;;;;;;3524:17;3286:266;;;;;;;;;;;;3352:5;3286:266;;;;3397:5;3385:9;:17;3286:266;;;;3431:13;3286:266;;;;3323:8;3317:3;:14;3286:266;;;;3465:10;3286:266;;;;;;3497:6;3286:266;;;;;3266:7;:17;3274:8;3266:17;;;;;;;;;;;;;;;;;:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2863:696;;;;;:::o;6493:436::-;6551:11;6564:10;6576:17;6657:18;6677:13;6692;6707:14;6733:16;6752:7;:17;6760:8;6752:17;;;;;;;;;;;;;;;;;6733:36;;6798:10;6787:21;;;;;;;;:1;:7;;;;;;;;;;;;:21;;;;;;;;;;6779:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6841:1;:7;;;;;;;;;;;;6850:1;:7;;;6859:1;:14;;;6875:1;:15;;;6892:1;:10;;;6904:1;:7;;;;;;;;;;;;6913:1;:8;;;;;;;;;;;;6833:89;;;;;;;;;;;;;;;;;;;;;6493:436;;;;;;;;;:::o;2083:312::-;2130:7;2149:14;2201:10;2238:1;2223:12;:16;2213:27;2184:57;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2184:57:0;;;2174:68;;;;;;2149:94;;2253:113;2285:1;2260:7;:15;2268:6;2260:15;;;;;;;;;;;;;;;;;:21;;;:26;2253:113;;2346:6;2329:24;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2329:24:0;;;2319:35;;;;;;2302:53;;2253:113;;;2382:6;2375:13;;;2083:312;:::o
Swarm Source
ipfs://cd0c2b2a7943b8fd938fd20c8b4cf221657ff54aca98ca73f396ba0d63d27be4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.