Source Code
Latest 25 from a total of 1,898 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00005436 | ||||
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00008794 | ||||
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00010017 | ||||
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00010019 | ||||
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00000784 | ||||
| Claim | 8328699 | 2386 days ago | IN | 0 ETH | 0.00000785 | ||||
| Claim | 8328482 | 2386 days ago | IN | 0 ETH | 0.00000788 | ||||
| Claim | 8328482 | 2386 days ago | IN | 0 ETH | 0.00008451 | ||||
| Claim | 8290324 | 2392 days ago | IN | 0 ETH | 0.0009305 | ||||
| Claim | 8290183 | 2392 days ago | IN | 0 ETH | 0.00051901 | ||||
| Claim | 8290177 | 2392 days ago | IN | 0 ETH | 0.00051725 | ||||
| Claim | 8290169 | 2392 days ago | IN | 0 ETH | 0.00051926 | ||||
| Claim | 8290123 | 2392 days ago | IN | 0 ETH | 0.00029873 | ||||
| Claim | 8290106 | 2392 days ago | IN | 0 ETH | 0.00045675 | ||||
| Claim | 8290069 | 2392 days ago | IN | 0 ETH | 0.00045552 | ||||
| Claim | 8290069 | 2392 days ago | IN | 0 ETH | 0.00027169 | ||||
| Claim | 8290068 | 2392 days ago | IN | 0 ETH | 0.00027158 | ||||
| Claim | 8290067 | 2392 days ago | IN | 0 ETH | 0.00027169 | ||||
| Claim | 8290067 | 2392 days ago | IN | 0 ETH | 0.00027175 | ||||
| Claim | 8290065 | 2392 days ago | IN | 0 ETH | 0.00027156 | ||||
| Claim | 8290062 | 2392 days ago | IN | 0 ETH | 0.00047069 | ||||
| Claim | 8290061 | 2392 days ago | IN | 0 ETH | 0.00027175 | ||||
| Claim | 8290061 | 2392 days ago | IN | 0 ETH | 0.00027289 | ||||
| Claim | 8290061 | 2392 days ago | IN | 0 ETH | 0.00027297 | ||||
| Claim | 8290049 | 2392 days ago | IN | 0 ETH | 0.00027175 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 8328699 | 2386 days ago | 1 wei | ||||
| - | 8328699 | 2386 days ago | 1 wei | ||||
| - | 8328699 | 2386 days ago | 1 wei | ||||
| - | 8328699 | 2386 days ago | 1 wei | ||||
| - | 8328482 | 2386 days ago | 1 wei | ||||
| - | 8290123 | 2392 days ago | 1 wei | ||||
| - | 8290106 | 2392 days ago | 1 wei | ||||
| - | 8290069 | 2392 days ago | 1 wei | ||||
| - | 8290069 | 2392 days ago | 1 wei | ||||
| - | 8290068 | 2392 days ago | 1 wei | ||||
| - | 8290067 | 2392 days ago | 1 wei | ||||
| - | 8290067 | 2392 days ago | 1 wei | ||||
| - | 8290065 | 2392 days ago | 1 wei | ||||
| - | 8290062 | 2392 days ago | 1 wei | ||||
| - | 8290061 | 2392 days ago | 1 wei | ||||
| - | 8290061 | 2392 days ago | 1 wei | ||||
| - | 8290061 | 2392 days ago | 1 wei | ||||
| - | 8290049 | 2392 days ago | 1 wei | ||||
| - | 8290045 | 2392 days ago | 1 wei | ||||
| - | 8290040 | 2392 days ago | 1 wei | ||||
| - | 8290038 | 2392 days ago | 1 wei | ||||
| - | 8290038 | 2392 days ago | 1 wei | ||||
| - | 8290036 | 2392 days ago | 1 wei | ||||
| - | 8290036 | 2392 days ago | 1 wei | ||||
| - | 8290034 | 2392 days ago | 1 wei |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Airdrop
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-07-21
*/
// File: contracts/commons/Ownable.sol
pragma solidity ^0.5.10;
contract Ownable {
address public owner;
event TransferOwnership(address _from, address _to);
constructor() public {
owner = msg.sender;
emit TransferOwnership(address(0), msg.sender);
}
modifier onlyOwner() {
require(msg.sender == owner, "only owner");
_;
}
function setOwner(address _owner) external onlyOwner {
emit TransferOwnership(owner, _owner);
owner = _owner;
}
}
// File: contracts/commons/AddressMinHeap.sol
pragma solidity ^0.5.10;
/*
@author Agustin Aguilar <agusxrun@gmail.com>
*/
library AddressMinHeap {
using AddressMinHeap for AddressMinHeap.Heap;
struct Heap {
uint256[] entries;
mapping(address => uint256) index;
}
function initialize(Heap storage _heap) internal {
require(_heap.entries.length == 0, "already initialized");
_heap.entries.push(0);
}
function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
/* solium-disable-next-line */
assembly {
_entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
}
}
function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
/* solium-disable-next-line */
assembly {
let entry := not(_entry)
_addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff)
_value := shr(160, entry)
}
}
function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
/* solium-disable-next-line */
assembly {
_addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
}
}
function top(Heap storage _heap) internal view returns(address, uint256) {
if (_heap.entries.length < 2) {
return (address(0), 0);
}
return decode(_heap.entries[1]);
}
function has(Heap storage _heap, address _addr) internal view returns (bool) {
return _heap.index[_addr] != 0;
}
function size(Heap storage _heap) internal view returns (uint256) {
return _heap.entries.length - 1;
}
function entry(Heap storage _heap, uint256 _i) internal view returns (address, uint256) {
return decode(_heap.entries[_i + 1]);
}
// RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap
function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) {
// Ensure the heap exists
uint256 heapLength = _heap.entries.length;
require(heapLength > 1, "The heap does not exists");
// take the root value of the heap
(_addr, _value) = decode(_heap.entries[1]);
_heap.index[_addr] = 0;
if (heapLength == 2) {
_heap.entries.length = 1;
} else {
// Takes the last element of the array and put it at the root
uint256 val = _heap.entries[heapLength - 1];
_heap.entries[1] = val;
// Delete the last element from the array
_heap.entries.length = heapLength - 1;
// Start at the top
uint256 ind = 1;
// Bubble down
ind = _heap.bubbleDown(ind, val);
// Update index
_heap.index[decodeAddress(val)] = ind;
}
}
// Inserts adds in a value to our heap.
function insert(Heap storage _heap, address _addr, uint256 _value) internal {
require(_heap.index[_addr] == 0, "The entry already exists");
// Add the value to the end of our array
uint256 encoded = encode(_addr, _value);
_heap.entries.push(encoded);
// Start at the end of the array
uint256 currentIndex = _heap.entries.length - 1;
// Bubble Up
currentIndex = _heap.bubbleUp(currentIndex, encoded);
// Update index
_heap.index[_addr] = currentIndex;
}
function update(Heap storage _heap, address _addr, uint256 _value) internal {
uint256 ind = _heap.index[_addr];
require(ind != 0, "The entry does not exists");
uint256 can = encode(_addr, _value);
uint256 val = _heap.entries[ind];
uint256 newInd;
if (can < val) {
// Bubble down
newInd = _heap.bubbleDown(ind, can);
} else if (can > val) {
// Bubble up
newInd = _heap.bubbleUp(ind, can);
} else {
// no changes needed
return;
}
// Update entry
_heap.entries[newInd] = can;
// Update index
if (newInd != ind) {
_heap.index[_addr] = newInd;
}
}
function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble up
ind = _ind;
if (ind != 1) {
uint256 parent = _heap.entries[ind / 2];
while (parent < _val) {
// If the parent value is lower than our current value, we swap them
(_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent);
// Update moved Index
_heap.index[decodeAddress(parent)] = ind;
// change our current Index to go up to the parent
ind = ind / 2;
if (ind == 1) {
break;
}
// Update parent
parent = _heap.entries[ind / 2];
}
}
}
function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble down
ind = _ind;
uint256 lenght = _heap.entries.length;
uint256 target = lenght - 1;
while (ind * 2 < lenght) {
// get the current index of the children
uint256 j = ind * 2;
// left child value
uint256 leftChild = _heap.entries[j];
// Store the value of the child
uint256 childValue;
if (target > j) {
// The parent has two childs 👨👧👦
// Load right child value
uint256 rightChild = _heap.entries[j + 1];
// Compare the left and right child.
// if the rightChild is greater, then point j to it's index
// and save the value
if (leftChild < rightChild) {
childValue = rightChild;
j = j + 1;
} else {
// The left child is greater
childValue = leftChild;
}
} else {
// The parent has a single child 👨👦
childValue = leftChild;
}
// Check if the child has a lower value
if (_val > childValue) {
break;
}
// else swap the value
(_heap.entries[ind], _heap.entries[j]) = (childValue, _val);
// Update moved Index
_heap.index[decodeAddress(childValue)] = ind;
// and let's keep going down the heap
ind = j;
}
}
}
// File: contracts/commons/StorageUnit.sol
pragma solidity ^0.5.10;
contract StorageUnit {
address private owner;
mapping(bytes32 => bytes32) private store;
constructor() public {
owner = msg.sender;
}
function write(bytes32 _key, bytes32 _value) external {
/* solium-disable-next-line */
require(msg.sender == owner);
store[_key] = _value;
}
function read(bytes32 _key) external view returns (bytes32) {
return store[_key];
}
}
// File: contracts/utils/IsContract.sol
pragma solidity ^0.5.10;
library IsContract {
function isContract(address _addr) internal view returns (bool) {
bytes32 codehash;
/* solium-disable-next-line */
assembly { codehash := extcodehash(_addr) }
return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
}
}
// File: contracts/utils/DistributedStorage.sol
pragma solidity ^0.5.10;
library DistributedStorage {
function contractSlot(bytes32 _key) private view returns (address) {
return address(
uint256(
keccak256(
abi.encodePacked(
byte(0xff),
address(this),
_key,
keccak256(type(StorageUnit).creationCode)
)
)
)
);
}
function deploy(bytes32 _key) private {
bytes memory slotcode = type(StorageUnit).creationCode;
/* solium-disable-next-line */
assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _key)) }
}
function write(
bytes32 _struct,
bytes32 _key,
bytes32 _value
) internal {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
deploy(_struct);
}
/* solium-disable-next-line */
(bool success, ) = address(store).call(
abi.encodeWithSelector(
store.write.selector,
_key,
_value
)
);
require(success, "error writing storage");
}
function read(
bytes32 _struct,
bytes32 _key
) internal view returns (bytes32) {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
return bytes32(0);
}
/* solium-disable-next-line */
(bool success, bytes memory data) = address(store).staticcall(
abi.encodeWithSelector(
store.read.selector,
_key
)
);
require(success, "error reading storage");
return abi.decode(data, (bytes32));
}
}
// File: contracts/utils/SafeMath.sol
pragma solidity ^0.5.10;
library SafeMath {
function add(uint256 x, uint256 y) internal pure returns (uint256) {
uint256 z = x + y;
require(z >= x, "Add overflow");
return z;
}
function sub(uint256 x, uint256 y) internal pure returns (uint256) {
require(x >= y, "Sub underflow");
return x - y;
}
function mult(uint256 x, uint256 y) internal pure returns (uint256) {
if (x == 0) {
return 0;
}
uint256 z = x * y;
require(z / x == y, "Mult overflow");
return z;
}
function div(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
return x / y;
}
function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
uint256 r = x / y;
if (x % y != 0) {
r = r + 1;
}
return r;
}
}
// File: contracts/utils/Math.sol
pragma solidity ^0.5.10;
library Math {
function orderOfMagnitude(uint256 input) internal pure returns (uint256){
uint256 counter = uint(-1);
uint256 temp = input;
do {
temp /= 10;
counter++;
} while (temp != 0);
return counter;
}
function min(uint256 _a, uint256 _b) internal pure returns (uint256) {
if (_a < _b) {
return _a;
} else {
return _b;
}
}
}
// File: contracts/utils/GasPump.sol
pragma solidity ^0.5.10;
contract GasPump {
bytes32 private stub;
modifier requestGas(uint256 _factor) {
if (tx.gasprice == 0) {
uint256 startgas = gasleft();
_;
uint256 delta = startgas - gasleft();
uint256 target = (delta * _factor) / 100;
startgas = gasleft();
while (startgas - gasleft() < target) {
// Burn gas
stub = keccak256(abi.encodePacked(stub));
}
} else {
_;
}
}
}
// File: contracts/interfaces/IERC20.sol
pragma solidity ^0.5.10;
interface IERC20 {
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function transfer(address _to, uint _value) external returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function allowance(address _owner, address _spender) external view returns (uint256 remaining);
function approve(address _spender, uint256 _value) external returns (bool success);
function balanceOf(address _owner) external view returns (uint256 balance);
}
// File: contracts/ShuffleToken.sol
pragma solidity ^0.5.10;
contract ShuffleToken is Ownable, GasPump, IERC20 {
using AddressMinHeap for AddressMinHeap.Heap;
using DistributedStorage for bytes32;
using SafeMath for uint256;
// Shuffle events
event Winner(address indexed _addr, uint256 _value);
// Heap events
event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
// Managment events
event SetName(string _prev, string _new);
event SetExtraGas(uint256 _prev, uint256 _new);
event WhitelistFrom(address _addr, bool _whitelisted);
event WhitelistTo(address _addr, bool _whitelisted);
uint256 public totalSupply;
bytes32 private constant BALANCE_KEY = keccak256("balance");
bytes32 private constant NONCE_KEY = keccak256("nonce");
// game
uint256 public constant FEE = 100;
uint256 public constant TOP_SIZE = 512;
// heap
AddressMinHeap.Heap private heap;
// metadata
string public name = "shuffle.monster token 🃏";
string public constant symbol = "Shuf";
uint8 public constant decimals = 18;
// fee whitelist
mapping(address => bool) public whitelistFrom;
mapping(address => bool) public whitelistTo;
// internal
uint256 public extraGas;
constructor(
address _to,
uint256 _amount
) public {
heap.initialize();
extraGas = 15;
emit SetExtraGas(0, extraGas);
emit Transfer(address(0), _to, _amount);
_setBalance(_to, _amount);
totalSupply = _amount;
}
///
// Storage access functions
///
function _toKey(address a) internal pure returns (bytes32) {
return bytes32(uint256(a));
}
function _balanceOf(address _addr) internal view returns (uint256) {
return uint256(_toKey(_addr).read(BALANCE_KEY));
}
function _allowance(address _addr, address _spender) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
}
function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
}
function _setAllowance(address _addr, address _spender, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
}
function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
}
function _setBalance(address _addr, uint256 _balance) internal {
_toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
_computeHeap(_addr, _balance);
}
function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
return _nonce(_addr, _cat);
}
///
// Internal methods
///
function _isWhitelisted(address _from, address _to) internal view returns (bool) {
return whitelistFrom[_from]||whitelistTo[_to];
}
function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
return rand % (_max + 1);
}
function _pickWinner(address _from, uint256 _value) internal returns (address winner) {
// Get order of magnitude of the tx
uint256 magnitude = Math.orderOfMagnitude(_value);
// Pull nonce for a given order of magnitude
uint256 nonce = _nonce(_from, magnitude);
_setNonce(_from, magnitude, nonce + 1);
// pick entry from heap
(winner,) = heap.entry(_random(_from, nonce, magnitude, heap.size() - 1));
}
function _transferFrom(address _operator, address _from, address _to, uint256 _value) internal {
if (_value == 0) {
emit Transfer(_from, _to, 0);
return;
}
uint256 balanceFrom = _balanceOf(_from);
require(balanceFrom >= _value, "balance not enough");
if (_from != _operator) {
uint256 allowanceFrom = _allowance(_from, _operator);
if (allowanceFrom != uint(-1)) {
require(allowanceFrom >= _value, "allowance not enough");
_setAllowance(_from, _operator, allowanceFrom.sub(_value));
}
}
uint256 receive = _value;
if (!_isWhitelisted(_from, _to)) {
uint256 burn = _value.divRound(FEE);
uint256 shuf = _value == 1 ? 0 : burn;
receive = receive.sub(burn.add(shuf));
_setBalance(_from, balanceFrom.sub(_value));
// Burn tokens
totalSupply = totalSupply.sub(burn);
emit Transfer(_from, address(0), burn);
// Shuffle tokens
// Pick winner pseudo-randomly
address winner = _pickWinner(_from, _value);
// Transfer balance to winner
_setBalance(winner, _balanceOf(winner).add(shuf));
emit Winner(winner, shuf);
emit Transfer(_from, winner, shuf);
}
// Transfer tokens
_setBalance(_to, _balanceOf(_to).add(receive));
emit Transfer(_from, _to, receive);
}
function _computeHeap(address _addr, uint256 _new) internal {
uint256 size = heap.size();
if (size == 0) {
emit JoinHeap(_addr, _new, 0);
heap.insert(_addr, _new);
return;
}
(, uint256 lastBal) = heap.top();
if (heap.has(_addr)) {
heap.update(_addr, _new);
if (_new == 0) {
heap.popTop();
emit LeaveHeap(_addr, 0, size);
}
} else {
// IF heap is full or new bal is better than pop heap
if (_new != 0 && (size < TOP_SIZE || lastBal < _new)) {
// If heap is full pop heap
if (size >= TOP_SIZE) {
(address _poped, uint256 _balance) = heap.popTop();
emit LeaveHeap(_poped, _balance, size);
}
// Insert new value
heap.insert(_addr, _new);
emit JoinHeap(_addr, _new, size);
}
}
}
///
// Managment
///
function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistTo(_addr, _whitelisted);
whitelistTo[_addr] = _whitelisted;
}
function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistFrom(_addr, _whitelisted);
whitelistFrom[_addr] = _whitelisted;
}
function setName(string calldata _name) external onlyOwner {
emit SetName(name, _name);
name = _name;
}
function setExtraGas(uint256 _gas) external onlyOwner {
emit SetExtraGas(extraGas, _gas);
extraGas = _gas;
}
/////
// Heap methods
/////
function heapSize() external view returns (uint256) {
return heap.size();
}
function heapEntry(uint256 _i) external view returns (address, uint256) {
return heap.entry(_i);
}
function heapTop() external view returns (address, uint256) {
return heap.top();
}
function heapIndex(address _addr) external view returns (uint256) {
return heap.index[_addr];
}
/////
// ERC20
/////
function balanceOf(address _addr) external view returns (uint256) {
return _balanceOf(_addr);
}
function allowance(address _addr, address _spender) external view returns (uint256) {
return _allowance(_addr, _spender);
}
function approve(address _spender, uint256 _value) external returns (bool) {
emit Approval(msg.sender, _spender, _value);
_setAllowance(msg.sender, _spender, _value);
return true;
}
function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, _from, _to, _value);
return true;
}
}
// File: contracts/utils/SigUtils.sol
pragma solidity ^0.5.10;
library SigUtils {
/**
@dev Recovers address who signed the message
@param _hash operation ethereum signed message hash
@param _signature message `hash` signature
*/
function ecrecover2(
bytes32 _hash,
bytes memory _signature
) internal pure returns (address) {
bytes32 r;
bytes32 s;
uint8 v;
/* solium-disable-next-line */
assembly {
r := mload(add(_signature, 32))
s := mload(add(_signature, 64))
v := and(mload(add(_signature, 65)), 255)
}
if (v < 27) {
v += 27;
}
return ecrecover(
_hash,
v,
r,
s
);
}
}
// File: contracts/Airdrop.sol
pragma solidity ^0.5.10;
contract Airdrop is Ownable {
using IsContract for address payable;
ShuffleToken public shuffleToken;
// Managment
uint64 public maxClaimedBy = 100;
event SetMaxClaimedBy(uint256 _max);
event SetSigner(address _signer, bool _active);
event Claimed(address _by, address _to, address _signer, uint256 _value, uint256 _claimed);
event ClaimedOwner(address _owner, uint256 _tokens);
uint256 public constant MINT_AMOUNT = 1010101010101010101010101;
uint256 public constant CREATOR_AMOUNT = (MINT_AMOUNT * 6) / 100;
uint256 public constant SHUFLE_BY_ETH = 150;
uint256 public constant MAX_CLAIM_ETH = 10 ether;
mapping(address => bool) public isSigner;
mapping(address => uint256) public claimed;
mapping(address => uint256) public numberClaimedBy;
bool public creatorClaimed;
constructor() public {
shuffleToken = new ShuffleToken(address(this), MINT_AMOUNT);
emit SetMaxClaimedBy(maxClaimedBy);
shuffleToken.setOwner(msg.sender);
}
// ///
// Managment
// ///
function setMaxClaimedBy(uint64 _max) external onlyOwner {
maxClaimedBy = _max;
emit SetMaxClaimedBy(_max);
}
function setSigner(address _signer, bool _active) external onlyOwner {
isSigner[_signer] = _active;
emit SetSigner(_signer, _active);
}
function setSigners(address[] calldata _signers, bool _active) external onlyOwner {
for (uint256 i = 0; i < _signers.length; i++) {
address signer = _signers[i];
isSigner[signer] = _active;
emit SetSigner(signer, _active);
}
}
// ///
// View
// ///
mapping(address => bool) private cvf;
event CallCVF(address _from, address _to);
function supportsFallback(address _to) external returns (bool) {
emit CallCVF(msg.sender, _to);
require(!cvf[msg.sender], "cfv");
cvf[msg.sender] = true;
return checkFallback(_to);
}
// ///
// Airdrop
// ///
function _selfBalance() internal view returns (uint256) {
return shuffleToken.balanceOf(address(this));
}
function checkFallback(address _to) private returns (bool success) {
/* solium-disable-next-line */
(success, ) = _to.call.value(1)("");
}
function pullOwnerTokens() external onlyOwner {
require(!creatorClaimed, "creator already pulled");
creatorClaimed = true;
uint256 tokens = Math.min(CREATOR_AMOUNT, _selfBalance());
shuffleToken.transfer(msg.sender, tokens);
emit ClaimedOwner(msg.sender, tokens);
}
function claim(
address _to,
uint256 _val,
bytes calldata _sig
) external {
bytes32 _hash = keccak256(abi.encodePacked(_to, uint96(_val)));
address signer = SigUtils.ecrecover2(_hash, _sig);
require(isSigner[signer], "signature not valid");
uint256 balance = _selfBalance();
uint256 claimVal = Math.min(
balance,
Math.min(
_val,
MAX_CLAIM_ETH
) * SHUFLE_BY_ETH
);
require(claimed[_to] == 0, "already claimed");
claimed[_to] = claimVal;
if (msg.sender != _to) {
uint256 _numberClaimedBy = numberClaimedBy[msg.sender];
require(_numberClaimedBy <= maxClaimedBy, "max claim reached");
numberClaimedBy[msg.sender] = _numberClaimedBy + 1;
require(checkFallback(_to), "_to address can't receive tokens");
}
shuffleToken.transfer(_to, claimVal);
emit Claimed(msg.sender, _to, signer, _val, claimVal);
if (balance == claimVal && _selfBalance() == 0) {
selfdestruct(address(uint256(owner)));
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"shuffleToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signers","type":"address[]"},{"name":"_active","type":"bool"}],"name":"setSigners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"supportsFallback","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_max","type":"uint64"}],"name":"setMaxClaimedBy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signer","type":"address"},{"name":"_active","type":"bool"}],"name":"setSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pullOwnerTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxClaimedBy","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINT_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_CLAIM_ETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CREATOR_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isSigner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"numberClaimedBy","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_val","type":"uint256"},{"name":"_sig","type":"bytes"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SHUFLE_BY_ETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"creatorClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_max","type":"uint256"}],"name":"SetMaxClaimedBy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_signer","type":"address"},{"indexed":false,"name":"_active","type":"bool"}],"name":"SetSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_by","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_signer","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_claimed","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"ClaimedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"CallCVF","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"}]Contract Creation Code
608060405260018054600160a01b600160e01b0319167464000000000000000000000000000000000000000017905534801561003a57600080fd5b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a13069d5e5af7b8e5a0ca57eb56040516100a2906101cc565b6001600160a01b0390921682526020820152604080519182900301906000f0801580156100d3573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179081905560408051740100000000000000000000000000000000000000009092046001600160401b03168252517fd12f2715f48fb2dfbfd40d7f86c93aaa37bbe4b1ea1087bb8d58d2c931f85e10916020908290030190a1600154604080517f13af403500000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b03909216916313af40359160248082019260009290919082900301818387803b1580156101af57600080fd5b505af11580156101c3573d6000803e3d6000fd5b505050506101d9565b613188806110e283390190565b610efa806101e86000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806361d51bb7116100a25780638da5cb5b116100715780638da5cb5b1461030b5780638f0bc15214610313578063c47f8f5414610398578063c884ef83146103a0578063cea5725a146103c657610116565b806361d51bb7146102af57806370f2be0b146102b75780637df73e27146102bf5780637ff94c3a146102e557610116565b806328222e6b116100e957806328222e6b1461021357806331cb61051461023a57806336406af91461026857806342d209c6146102705780635427789c1461029557610116565b80630b2a72f11461011b578063135aa6fd1461013f57806313af4035146101b357806320b88e82146101d9575b600080fd5b6101236103ce565b604080516001600160a01b039092168252519081900360200190f35b6101b16004803603604081101561015557600080fd5b81019060208101813564010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460208302840111640100000000831117156101a457600080fd5b91935091503515156103dd565b005b6101b1600480360360208110156101c957600080fd5b50356001600160a01b03166104b9565b6101ff600480360360208110156101ef57600080fd5b50356001600160a01b031661056f565b604080519115158252519081900360200190f35b6101b16004803603602081101561022957600080fd5b503567ffffffffffffffff16610626565b6101b16004803603604081101561025057600080fd5b506001600160a01b03813516906020013515156106d4565b6101b1610784565b610278610910565b6040805167ffffffffffffffff9092168252519081900360200190f35b61029d610927565b60408051918252519081900360200190f35b61029d610935565b61029d610941565b6101ff600480360360208110156102d557600080fd5b50356001600160a01b031661094f565b61029d600480360360208110156102fb57600080fd5b50356001600160a01b0316610964565b610123610976565b6101b16004803603606081101561032957600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561035957600080fd5b82018360208201111561036b57600080fd5b8035906020019184600183028401116401000000008311171561038d57600080fd5b509092509050610985565b61029d610d28565b61029d600480360360208110156103b657600080fd5b50356001600160a01b0316610d2d565b6101ff610d3f565b6001546001600160a01b031681565b6000546001600160a01b03163314610429576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60005b828110156104b357600084848381811061044257fe5b602090810292909201356001600160a01b0316600081815260028452604090819020805460ff191688151590811790915581518381529485015280519194507f5fcbb78b58c04f459e28fba113b7b7248255a48fc71eca69650310daea63045193829003019150a15060010161042c565b50505050565b6000546001600160a01b03163314610505576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080513381526001600160a01b038316602082015281516000927fe47a93fa55b87c3f6d83639d1e8830c9011fbf599d2e72c64579e67b4d306bca928290030190a13360009081526006602052604090205460ff16156105fd576040805162461bcd60e51b815260206004820152600360248201526231b33b60e91b604482015290519081900360640190fd5b336000908152600660205260409020805460ff1916600117905561062082610d48565b92915050565b6000546001600160a01b03163314610672576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001805467ffffffffffffffff8316600160a01b810267ffffffffffffffff60a01b199092169190911790915560408051918252517fd12f2715f48fb2dfbfd40d7f86c93aaa37bbe4b1ea1087bb8d58d2c931f85e109181900360200190a150565b6000546001600160a01b03163314610720576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915582519384529083015280517f5fcbb78b58c04f459e28fba113b7b7248255a48fc71eca69650310daea6304519281900390910190a15050565b6000546001600160a01b031633146107d0576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60055460ff1615610821576040805162461bcd60e51b815260206004820152601660248201527518dc99585d1bdc88185b1c9958591e481c1d5b1b195960521b604482015290519081900360640190fd5b6005805460ff19166001179055600061084f60646a0503621ce5561c4be0f83e0461084a610da2565b610e1e565b6001546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b505050506040513d60208110156108d057600080fd5b5050604080513381526020810183905281517f6123a94b22513170bcdc47366f3a1f7a927377a272462e97605d34c7e2e2d2c5929181900390910190a150565b600154600160a01b900467ffffffffffffffff1681565b69d5e5af7b8e5a0ca57eb581565b678ac7230489e8000081565b690cd5760c888a85e0f83e81565b60026020526000908152604090205460ff1681565b60046020526000908152604090205481565b6000546001600160a01b031681565b6000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826bffffffffffffffffffffffff166bffffffffffffffffffffffff1660a01b8152600c01925050506040516020818303038152906040528051906020012090506000610a2e8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3592505050565b6001600160a01b03811660009081526002602052604090205490915060ff16610a94576040805162461bcd60e51b81526020600482015260136024820152721cda59db985d1d5c99481b9bdd081d985b1a59606a1b604482015290519081900360640190fd5b6000610a9e610da2565b90506000610ac0826096610aba8a678ac7230489e80000610e1e565b02610e1e565b6001600160a01b03891660009081526003602052604090205490915015610b20576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b6001600160a01b03881660008181526003602052604090208290553314610c1e5733600090815260046020526040902054600154600160a01b900467ffffffffffffffff16811115610bad576040805162461bcd60e51b81526020600482015260116024820152701b585e0818db185a5b481c995858da1959607a1b604482015290519081900360640190fd5b336000908152600460205260409020600182019055610bcb89610d48565b610c1c576040805162461bcd60e51b815260206004820181905260248201527f5f746f20616464726573732063616e2774207265636569766520746f6b656e73604482015290519081900360640190fd5b505b6001546040805163a9059cbb60e01b81526001600160a01b038b81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b505050506040513d6020811015610c9e57600080fd5b5050604080513381526001600160a01b03808b166020830152851681830152606081018990526080810183905290517f2442e7ccfd30564dcfd95cc7cfdaefdfc6298925b0c609461d5c69ca18ab18129181900360a00190a18082148015610d0b5750610d09610da2565b155b15610d1e576000546001600160a01b0316ff5b5050505050505050565b609681565b60036020526000908152604090205481565b60055460ff1681565b6040516000906001600160a01b038316906001908381818185875af1925050503d8060008114610d94576040519150601f19603f3d011682016040523d82523d6000602084013e610d99565b606091505b50909392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d6020811015610e1757600080fd5b5051905090565b600081831015610e2f575081610620565b50919050565b602081015160408201516041830151600092919060ff16601b811015610e5957601b015b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610eb0573d6000803e3d6000fd5b5050604051601f19015197965050505050505056fea265627a7a72305820943fb16e1ca96a5be62590a53bc3f3bffdd08c9ec49c66290a03b5031a443e7664736f6c634300050a003260c0604052601a60808190527f73687566666c652e6d6f6e7374657220746f6b656e20f09f838f00000000000060a090815262000040916005919062000e12565b503480156200004e57600080fd5b506040516200318838038062003188833981810160405260408110156200007457600080fd5b508051602091820151600080546001600160a01b03191633908117825560408051928352948201528351929391927f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c929181900390910190a1620000e460036200018760201b62001f531760201c565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36200017d82826001600160e01b036200020b16565b6002555062000ee7565b805415620001f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080517f62616c616e636500000000000000000000000000000000000000000000000000815290519081900360070190206200026c908262000257856001600160e01b036200028516565b6200029160201b62001102179092919060201c565b6200028182826001600160e01b036200044c16565b5050565b6001600160a01b031690565b6000620002a7846001600160e01b036200065016565b9050620002bf81620006f560201b6200162a1760201c565b620002d857620002d8846001600160e01b036200073016565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b03167fe2e52ec100000000000000000000000000000000000000000000000000000000178152915181516000936001600160a01b0386169392918291908083835b602083106200036b5780518252601f1990920191602091820191016200034a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620003cf576040519150601f19603f3d011682016040523d82523d6000602084013e620003d4565b606091505b50509050806200044557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6572726f722077726974696e672073746f726167650000000000000000000000604482015290519081900360640190fd5b5050505050565b60006200046560036200076960201b620010d91760201c565b905080620004c357604080518381526000602082015281516001600160a01b0386169260008051602062003148833981519152928290030190a2620004bc838360036200077160201b62001939179092919060201c565b5062000281565b6000620004dc60036200087260201b62000fd11760201c565b915050620004fa846003620008c460201b62001a041790919060201c565b1562000576576200051d84846003620008e560201b62001a25179092919060201c565b8262000570576200053a600362000a5060201b62001b4c1760201c565b505060408051600081526020810184905281516001600160a01b0387169260008051602062003168833981519152928290030190a25b6200064a565b82158015906200059157506102008210806200059157508281105b156200064a576102008210620005fa57600080620005bb600362000a5060201b62001b4c1760201c565b91509150816001600160a01b0316600080516020620031688339815191528286604051808381526020018281526020019250505060405180910390a250505b62000617848460036200077160201b62001939179092919060201c565b604080518481526020810184905281516001600160a01b0387169260008051602062003148833981519152928290030190a25b50505050565b600060ff60f81b3083604051806020016200066b9062000e97565b818103601f199081018352601f90910116604081815282516020938401207fff00000000000000000000000000000000000000000000000000000000000000969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906200072957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b606060405180602001620007449062000e97565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b546000190190565b6001600160a01b038216600090815260018401602052604090205415620007f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006200081083836001600160e01b0362000bc816565b845460018101865560008681526020908190209091018290558554919250600019909101906200084f9086908390859062000bdc811b62001ca017901c565b6001600160a01b0390941660009081526001909501602052505060409092205550565b80546000908190600211156200088e57506000905080620008bf565b620008ba83600001600181548110620008a357fe5b906000526020600020015462000cc660201b60201c565b915091505b915091565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b0382166000908152600184016020526040902054806200096d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b60006200098484846001600160e01b0362000bc816565b905060008560000183815481106200099857fe5b90600052602060002001549050600081831015620009d457620009cc84848962000cdb60201b62001d6e179092919060201c565b905062000a03565b81831115620009f957620009cc84848962000bdc60201b62001ca0179092919060201c565b5050505062000a4b565b8287600001828154811062000a1457fe5b60009182526020909120015580841462000a46576001600160a01b038616600090815260018801602052604090208190555b505050505b505050565b805460009081906001811162000ac757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b62000adc84600001600181548110620008a357fe5b6001600160a01b03821660009081526001870160205260408120559093509150600281141562000b1b57600162000b14858262000ea5565b5062000bc2565b600084600001600183038154811062000b3057fe5b90600052602060002001549050808560000160018154811062000b4f57fe5b600091825260209091200155600019820162000b6c868262000ea5565b50600162000b8886828462000cdb602090811b62001d6e17901c565b90508060018701600062000ba5856001600160e01b0362000e0516565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146200072957600084600283048154811062000bf857fe5b906000526020600020015490505b8281101562000cbe57828186600285048154811062000c2157fe5b90600052602060002001600088600001868154811062000c3d57fe5b600091825260208220019390935550919091558290600187019062000c6b846001600160e01b0362000e0516565b6001600160a01b03168152602081019190915260400160002055600282049150816001141562000c9b5762000cbe565b84600283048154811062000cab57fe5b9060005260206000200154905062000c06565b509392505050565b196001600160a01b0381169160a09190911c90565b8254829060001981015b8183600202101562000dfc578554600284029060009088908390811062000d0857fe5b9060005260206000200154905060008284111562000d6557600089600001846001018154811062000d3557fe5b906000526020600020015490508083101562000d5a5780915083600101935062000d5e565b8291505b5062000d68565b50805b8087111562000d7a5750505062000dfc565b80878a600001888154811062000d8c57fe5b9060005260206000200160008c600001878154811062000da857fe5b60009182526020822001939093555091909155869060018b019062000dd6846001600160e01b0362000e0516565b6001600160a01b031681526020810191909152604001600020555090935062000ce59050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e5557805160ff191683800117855562000e85565b8280016001018555821562000e85579182015b8281111562000e8557825182559160200191906001019062000e68565b5062000e9392915062000ec7565b5090565b610125806200302383390190565b81548183558181111562000a4b5760008381526020902062000a4b9181019083015b62000ee491905b8082111562000e93576000815560010162000ece565b90565b61212c8062000ef76000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063a9059cbb11610097578063c57981b511610071578063c57981b5146104fa578063dd62ed3e14610502578063fa7e8dc714610530578063ff12bbf41461053857610173565b8063a9059cbb14610438578063b00cf04914610464578063c47f00271461048a57610173565b806370a082311461036f57806389535803146103955780638cec9993146103c15780638da5cb5b146103de57806395d89b4114610402578063a486309d1461040a57610173565b806323b872dd1161013057806323b872dd146102dd578063313ce5671461031357806331fb7127146103315780633767e3391461033957806343684b21146103415780634849f5c81461036757610173565b806306fdde031461017857806308eaae4d146101f5578063095ea7b31461023557806313af40351461027557806316b627d11461029d57806318160ddd146102c3575b600080fd5b610180610566565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ba5781810151838201526020016101a2565b50505050905090810190601f1680156101e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102126004803603602081101561020b57600080fd5b50356105f4565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102616004803603604081101561024b57600080fd5b506001600160a01b038135169060200135610612565b604080519115158252519081900360200190f35b61029b6004803603602081101561028b57600080fd5b50356001600160a01b031661066b565b005b610261600480360360208110156102b357600080fd5b50356001600160a01b0316610721565b6102cb610736565b60408051918252519081900360200190f35b610261600480360360608110156102f357600080fd5b506001600160a01b0381358116916020810135909116906040013561073c565b61031b6107c7565b6040805160ff9092168252519081900360200190f35b6102cb6107cc565b6102cb6107d2565b6102616004803603602081101561035757600080fd5b50356001600160a01b03166107d8565b6102126107ed565b6102cb6004803603602081101561038557600080fd5b50356001600160a01b0316610802565b6102cb600480360360408110156103ab57600080fd5b506001600160a01b03813516906020013561080d565b61029b600480360360208110156103d757600080fd5b5035610820565b6103e66108ae565b604080516001600160a01b039092168252519081900360200190f35b6101806108bd565b61029b6004803603604081101561042057600080fd5b506001600160a01b03813516906020013515156108dd565b6102616004803603604081101561044e57600080fd5b506001600160a01b038135169060200135610999565b6102cb6004803603602081101561047a57600080fd5b50356001600160a01b0316610a23565b61029b600480360360208110156104a057600080fd5b8101906020810181356401000000008111156104bb57600080fd5b8201836020820111156104cd57600080fd5b803590602001918460018302840111640100000000831117156104ef57600080fd5b509092509050610a3e565b6102cb610b79565b6102cb6004803603604081101561051857600080fd5b506001600160a01b0381358116916020013516610b7e565b6102cb610b8a565b61029b6004803603604081101561054e57600080fd5b506001600160a01b0381351690602001351515610b9c565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081565b60008061060860038463ffffffff610c5816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a3610661338484610c8b565b5060015b92915050565b6000546001600160a01b031633146106b7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156107ae5760005a905061075b33878787610ceb565b6001925060005a820390506064838202045a92505b805a840310156107a657600180546040805160208082019390935281518082038401815290820190915280519101209055610770565b5050506107bf565b6107ba33868686610ceb565b600191505b509392505050565b601281565b61020081565b60085481565b60066020526000908152604090205460ff1681565b6000806107fa6003610fd1565b915091509091565b600061066582610ffe565b60006108198383611036565b9392505050565b6000546001600160a01b0316331461086c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329b43ab360e11b81525081565b6000546001600160a01b03163314610929576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610a0b5760005a90506109b833338787610ceb565b6001925060005a820390506064838202045a92505b805a84031015610a03576001805460408051602080820193909352815180820384018152908201909152805191012090556109cd565b505050610a1c565b610a1733338686610ceb565b600191505b5092915050565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610a8a576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610b325780601f10610b0757610100808354040283529160200191610b32565b820191906000526020600020905b815481529060010190602001808311610b1557829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610b7460058383611e8e565b505050565b606481565b6000610819838361107b565b6000610b9660036110d9565b90505b90565b6000546001600160a01b03163314610be8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080610c80846000018460010181548110610c7057fe5b90600052602060002001546110e1565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610b749082610cde866110f6565b919063ffffffff61110216565b80610d2f57816001600160a01b0316836001600160a01b03166000805160206120d883398151915260006040518082815260200191505060405180910390a3610fcb565b6000610d3a84610ffe565b905081811015610d86576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b846001600160a01b0316846001600160a01b031614610e1e576000610dab858761107b565b90506000198114610e1c5782811015610e02576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610e1c8587610e17848763ffffffff61125916565b610c8b565b505b81610e2985856112a6565b610f7e576000610e4084606463ffffffff6112e916565b9050600084600114610e525781610e55565b60005b9050610e77610e6a838363ffffffff61135216565b849063ffffffff61125916565b9250610e9287610e8d868863ffffffff61125916565b61139b565b600254610ea5908363ffffffff61125916565b6002556040805183815290516000916001600160a01b038a16916000805160206120d88339815191529181900360200190a36000610ee388876113d3565b9050610f0281610e8d84610ef685610ffe565b9063ffffffff61135216565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316886001600160a01b03166000805160206120d8833981519152846040518082815260200191505060405180910390a35050505b610f8f84610e8d83610ef688610ffe565b836001600160a01b0316856001600160a01b03166000805160206120d8833981519152836040518082815260200191505060405180910390a350505b50505050565b8054600090819060021115610feb5750600090508061060d565b61060883600001600181548110610c7057fe5b604080516662616c616e636560c81b815290519081900360070190206000906106659061102a846110f6565b9063ffffffff61143016565b6000610819826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061102a856110f6565b600061081982604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061102a856110f6565b546000190190565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b600061110d8461159f565b90506111188161162a565b6111255761112584611661565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061119d5780518252601f19909201916020918201910161117e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b5050905080611252576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b5050505050565b6000818310156112a0576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806108195750506001600160a01b031660009081526007602052604090205460ff16919050565b60008161132b576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848161133657fe5b04905082848161134257fe5b0615610819576001019392505050565b600082820183811015610819576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b604080516662616c616e636560c81b815290519081900360070190206113c59082610cde856110f6565b6113cf8282611698565b5050565b6000806113df83611878565b905060006113ed8583611036565b90506113fd858383600101611896565b611426611418868385600161141260036110d9565b036118dd565b60039063ffffffff610c5816565b5095945050505050565b60008061143c8461159f565b90506114478161162a565b611455575060009050610665565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b602083106114ca5780518252601f1990920191602091820191016114ab565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461152a576040519150601f19603f3d011682016040523d82523d6000602084013e61152f565b606091505b50915091508161157e576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561159357600080fd5b50519695505050505050565b600060ff60f81b3083604051806020016115b890611f0c565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f801580159061081957507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b60606040518060200161167390611f0c565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b60006116a460036110d9565b90508061170657604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a26117006003848463ffffffff61193916565b506113cf565b60006117126003610fd1565b9150611727905060038563ffffffff611a0416565b156117995761173e6003858563ffffffff611a2516565b826117945761174d6003611b4c565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b610fcb565b82158015906117b257506102008210806117b257508281105b15610fcb57610200821061181d576000806117cd6003611b4c565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b61182f6003858563ffffffff61193916565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a250505050565b6000600019825b60019190910190600a90048061187f575092915050565b610b74826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b610cde866110f6565b604080516001600160601b0319606087901b16602080830191909152603482018690526054808301869052835180840390910181526074909201909252805191012060009060018301818161192e57fe5b069695505050505050565b6001600160a01b0382166000908152600184016020526040902054156119a6576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b60006119b28383611c8c565b8454600181018655600086815260209020018190558454909150600019016119e185828463ffffffff611ca016565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611a92576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611a9e8484611c8c565b90506000856000018381548110611ab157fe5b90600052602060002001549050600081831015611ae057611ad987858563ffffffff611d6e16565b9050611b02565b81831115611af957611ad987858563ffffffff611ca016565b50505050610b74565b82876000018281548110611b1257fe5b600091825260209091200155808414611b43576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611ba8576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611bbb84600001600181548110610c7057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611bf6576001611bf08582611f19565b50611c86565b6000846000016001830381548110611c0a57fe5b906000526020600020015490508085600001600181548110611c2857fe5b6000918252602090912001556000198201611c438682611f19565b506001611c5786828463ffffffff611d6e16565b905080866001016000611c6985611e81565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b8160018114610819576000846002830481548110611cba57fe5b906000526020600020015490505b828110156107bf578281866002850481548110611ce157fe5b906000526020600020016000886000018681548110611cfc57fe5b6000918252602082200193909355509190915582906001870190611d1f84611e81565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611d4d576107bf565b846002830481548110611d5c57fe5b90600052602060002001549050611cc8565b8254829060001981015b81836002021015611e785785546002840290600090889083908110611d9957fe5b90600052602060002001549050600082841115611df1576000896000018460010181548110611dc457fe5b9060005260206000200154905080831015611de757809150836001019350611deb565b8291505b50611df4565b50805b80871115611e0457505050611e78565b80878a6000018881548110611e1557fe5b9060005260206000200160008c6000018781548110611e3057fe5b60009182526020822001939093555091909155869060018b0190611e5384611e81565b6001600160a01b0316815260208101919091526040016000205550909350611d789050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ecf5782800160ff19823516178555611efc565b82800160010185558215611efc579182015b82811115611efc578235825591602001919060010190611ee1565b50611f08929150611f39565b5090565b61012580611fb383390190565b815481835581811115610b7457600083815260209020610b749181019083015b610b9991905b80821115611f085760008155600101611f3f565b805415611f9d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8054600181018255600091825260208220015556fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a723058200b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f264736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a7230582079b1fef37d08548c46965586994b4d21435797de3dfa540d157b39f4def9886164736f6c634300050a0032608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a723058200b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f264736f6c634300050a0032b7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff9361072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c806361d51bb7116100a25780638da5cb5b116100715780638da5cb5b1461030b5780638f0bc15214610313578063c47f8f5414610398578063c884ef83146103a0578063cea5725a146103c657610116565b806361d51bb7146102af57806370f2be0b146102b75780637df73e27146102bf5780637ff94c3a146102e557610116565b806328222e6b116100e957806328222e6b1461021357806331cb61051461023a57806336406af91461026857806342d209c6146102705780635427789c1461029557610116565b80630b2a72f11461011b578063135aa6fd1461013f57806313af4035146101b357806320b88e82146101d9575b600080fd5b6101236103ce565b604080516001600160a01b039092168252519081900360200190f35b6101b16004803603604081101561015557600080fd5b81019060208101813564010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460208302840111640100000000831117156101a457600080fd5b91935091503515156103dd565b005b6101b1600480360360208110156101c957600080fd5b50356001600160a01b03166104b9565b6101ff600480360360208110156101ef57600080fd5b50356001600160a01b031661056f565b604080519115158252519081900360200190f35b6101b16004803603602081101561022957600080fd5b503567ffffffffffffffff16610626565b6101b16004803603604081101561025057600080fd5b506001600160a01b03813516906020013515156106d4565b6101b1610784565b610278610910565b6040805167ffffffffffffffff9092168252519081900360200190f35b61029d610927565b60408051918252519081900360200190f35b61029d610935565b61029d610941565b6101ff600480360360208110156102d557600080fd5b50356001600160a01b031661094f565b61029d600480360360208110156102fb57600080fd5b50356001600160a01b0316610964565b610123610976565b6101b16004803603606081101561032957600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561035957600080fd5b82018360208201111561036b57600080fd5b8035906020019184600183028401116401000000008311171561038d57600080fd5b509092509050610985565b61029d610d28565b61029d600480360360208110156103b657600080fd5b50356001600160a01b0316610d2d565b6101ff610d3f565b6001546001600160a01b031681565b6000546001600160a01b03163314610429576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60005b828110156104b357600084848381811061044257fe5b602090810292909201356001600160a01b0316600081815260028452604090819020805460ff191688151590811790915581518381529485015280519194507f5fcbb78b58c04f459e28fba113b7b7248255a48fc71eca69650310daea63045193829003019150a15060010161042c565b50505050565b6000546001600160a01b03163314610505576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080513381526001600160a01b038316602082015281516000927fe47a93fa55b87c3f6d83639d1e8830c9011fbf599d2e72c64579e67b4d306bca928290030190a13360009081526006602052604090205460ff16156105fd576040805162461bcd60e51b815260206004820152600360248201526231b33b60e91b604482015290519081900360640190fd5b336000908152600660205260409020805460ff1916600117905561062082610d48565b92915050565b6000546001600160a01b03163314610672576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001805467ffffffffffffffff8316600160a01b810267ffffffffffffffff60a01b199092169190911790915560408051918252517fd12f2715f48fb2dfbfd40d7f86c93aaa37bbe4b1ea1087bb8d58d2c931f85e109181900360200190a150565b6000546001600160a01b03163314610720576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915582519384529083015280517f5fcbb78b58c04f459e28fba113b7b7248255a48fc71eca69650310daea6304519281900390910190a15050565b6000546001600160a01b031633146107d0576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60055460ff1615610821576040805162461bcd60e51b815260206004820152601660248201527518dc99585d1bdc88185b1c9958591e481c1d5b1b195960521b604482015290519081900360640190fd5b6005805460ff19166001179055600061084f60646a0503621ce5561c4be0f83e0461084a610da2565b610e1e565b6001546040805163a9059cbb60e01b81523360048201526024810184905290519293506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b505050506040513d60208110156108d057600080fd5b5050604080513381526020810183905281517f6123a94b22513170bcdc47366f3a1f7a927377a272462e97605d34c7e2e2d2c5929181900390910190a150565b600154600160a01b900467ffffffffffffffff1681565b69d5e5af7b8e5a0ca57eb581565b678ac7230489e8000081565b690cd5760c888a85e0f83e81565b60026020526000908152604090205460ff1681565b60046020526000908152604090205481565b6000546001600160a01b031681565b6000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826bffffffffffffffffffffffff166bffffffffffffffffffffffff1660a01b8152600c01925050506040516020818303038152906040528051906020012090506000610a2e8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3592505050565b6001600160a01b03811660009081526002602052604090205490915060ff16610a94576040805162461bcd60e51b81526020600482015260136024820152721cda59db985d1d5c99481b9bdd081d985b1a59606a1b604482015290519081900360640190fd5b6000610a9e610da2565b90506000610ac0826096610aba8a678ac7230489e80000610e1e565b02610e1e565b6001600160a01b03891660009081526003602052604090205490915015610b20576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b6001600160a01b03881660008181526003602052604090208290553314610c1e5733600090815260046020526040902054600154600160a01b900467ffffffffffffffff16811115610bad576040805162461bcd60e51b81526020600482015260116024820152701b585e0818db185a5b481c995858da1959607a1b604482015290519081900360640190fd5b336000908152600460205260409020600182019055610bcb89610d48565b610c1c576040805162461bcd60e51b815260206004820181905260248201527f5f746f20616464726573732063616e2774207265636569766520746f6b656e73604482015290519081900360640190fd5b505b6001546040805163a9059cbb60e01b81526001600160a01b038b81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b505050506040513d6020811015610c9e57600080fd5b5050604080513381526001600160a01b03808b166020830152851681830152606081018990526080810183905290517f2442e7ccfd30564dcfd95cc7cfdaefdfc6298925b0c609461d5c69ca18ab18129181900360a00190a18082148015610d0b5750610d09610da2565b155b15610d1e576000546001600160a01b0316ff5b5050505050505050565b609681565b60036020526000908152604090205481565b60055460ff1681565b6040516000906001600160a01b038316906001908381818185875af1925050503d8060008114610d94576040519150601f19603f3d011682016040523d82523d6000602084013e610d99565b606091505b50909392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d6020811015610e1757600080fd5b5051905090565b600081831015610e2f575081610620565b50919050565b602081015160408201516041830151600092919060ff16601b811015610e5957601b015b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610eb0573d6000803e3d6000fd5b5050604051601f19015197965050505050505056fea265627a7a72305820943fb16e1ca96a5be62590a53bc3f3bffdd08c9ec49c66290a03b5031a443e7664736f6c634300050a0032
Deployed Bytecode Sourcemap
23100:3941:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23100:3941:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23180:32;;;:::i;:::-;;;;-1:-1:-1;;;;;23180:32:0;;;;;;;;;;;;;;24516:288;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24516:288:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;24516:288:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24516:288:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24516:288:0;;-1:-1:-1;24516:288:0;-1:-1:-1;24516:288:0;;;;:::i;:::-;;410:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;410:134:0;-1:-1:-1;;;;;410:134:0;;:::i;24946:223::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24946:223:0;-1:-1:-1;;;;;24946:223:0;;:::i;:::-;;;;;;;;;;;;;;;;;;24210:132;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24210:132:0;;;;:::i;24350:158::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24350:158:0;;;;;;;;;;:::i;25515:315::-;;;:::i;23239:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23532:63;;;:::i;:::-;;;;;;;;;;;;;;;;23723:48;;;:::i;23602:64::-;;;:::i;23780:40::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23780:40:0;-1:-1:-1;;;;;23780:40:0;;:::i;23878:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23878:50:0;-1:-1:-1;;;;;23878:50:0;;:::i;96:20::-;;;:::i;25838:1200::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25838:1200:0;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;25838:1200:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25838:1200:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;25838:1200:0;;-1:-1:-1;25838:1200:0;-1:-1:-1;25838:1200:0;:::i;23673:43::-;;;:::i;23829:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23829:42:0;-1:-1:-1;;;;;23829:42:0;;:::i;23935:26::-;;;:::i;23180:32::-;;;-1:-1:-1;;;;;23180:32:0;;:::o;24516:288::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;24614:9;24609:188;24629:19;;;24609:188;;;24670:14;24687:8;;24696:1;24687:11;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24687:11:0;24713:16;;;;:8;:16;;;;;;;:26;;-1:-1:-1;;24713:26:0;;;;;;;;;;24759;;;;;;;;;;;24687:11;;-1:-1:-1;24759:26:0;;;;;;;-1:-1:-1;24759:26:0;-1:-1:-1;24650:3:0;;24609:188;;;;24516:288;;;:::o;410:134::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;497:5;;479:32;;;-1:-1:-1;;;;;497:5:0;;;479:32;;;;;;;;;;;;;;;;;;;;;522:5;:14;;-1:-1:-1;;;;;;522:14:0;-1:-1:-1;;;;;522:14:0;;;;;;;;;;410:134::o;24946:223::-;25025:24;;;25033:10;25025:24;;-1:-1:-1;;;;;25025:24:0;;;;;;;;25003:4;;25025:24;;;;;;;;25073:10;25069:15;;;;:3;:15;;;;;;;;25068:16;25060:32;;;;;-1:-1:-1;;;25060:32:0;;;;;;;;;;;;-1:-1:-1;;;25060:32:0;;;;;;;;;;;;;;;25107:10;25103:15;;;;:3;:15;;;;;:22;;-1:-1:-1;;25103:22:0;25121:4;25103:22;;;25143:18;25157:3;25143:13;:18::i;:::-;25136:25;24946:223;-1:-1:-1;;24946:223:0:o;24210:132::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;24278:12;:19;;;;;-1:-1:-1;;;24278:19:0;;-1:-1:-1;;;;24278:19:0;;;;;;;;;;24313:21;;;;;;;;;;;;;;;;24210:132;:::o;24350:158::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24430:17:0;;;;;;:8;:17;;;;;;;;;:27;;-1:-1:-1;;24430:27:0;;;;;;;;;;24473;;;;;;;;;;;;;;;;;;;;;24350:158;;:::o;25515:315::-;362:5;;-1:-1:-1;;;;;362:5:0;348:10;:19;340:42;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;-1:-1:-1;;;340:42:0;;;;;;;;;;;;;;;25581:14;;;;25580:15;25572:50;;;;;-1:-1:-1;;;25572:50:0;;;;;;;;;;;;-1:-1:-1;;;25572:50:0;;;;;;;;;;;;;;;25633:14;:21;;-1:-1:-1;;25633:21:0;25650:4;25633:21;;;:14;25682:40;23663:3;23644:15;23643:23;25707:14;:12;:14::i;:::-;25682:8;:40::i;:::-;25733:12;;:41;;;-1:-1:-1;;;25733:41:0;;25755:10;25733:41;;;;;;;;;;;;25665:57;;-1:-1:-1;;;;;;25733:12:0;;;;:21;;:41;;;;;;;;;;;;;;;:12;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;25733:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25733:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;25790:32:0;;;25803:10;25790:32;;25733:41;25790:32;;;;;;;;;;;;;;;;;;393:1;25515:315::o;23239:32::-;;;-1:-1:-1;;;23239:32:0;;;;;:::o;23532:63::-;23570:25;23532:63;:::o;23723:48::-;23763:8;23723:48;:::o;23602:64::-;23643:23;23602:64;:::o;23780:40::-;;;;;;;;;;;;;;;:::o;23878:50::-;;;;;;;;;;;;;:::o;96:20::-;;;-1:-1:-1;;;;;96:20:0;;:::o;25838:1200::-;25955:13;25998:3;26010:4;25981:35;;;;;;-1:-1:-1;;;;;25981:35:0;-1:-1:-1;;;;;25981:35:0;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25981:35:0;;;25971:46;;;;;;25955:62;;26028:14;26045:32;26065:5;26072:4;;26045:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;26045:19:0;;-1:-1:-1;;;26045:32:0:i;:::-;-1:-1:-1;;;;;26098:16:0;;;;;;:8;:16;;;;;;26028:49;;-1:-1:-1;26098:16:0;;26090:48;;;;;-1:-1:-1;;;26090:48:0;;;;;;;;;;;;-1:-1:-1;;;26090:48:0;;;;;;;;;;;;;;;26151:15;26169:14;:12;:14::i;:::-;26151:32;;26194:16;26213:150;26236:7;23713:3;26258:78;26285:4;23763:8;26258;:78::i;:::-;:94;26213:8;:150::i;:::-;-1:-1:-1;;;;;26384:12:0;;;;;;:7;:12;;;;;;26194:169;;-1:-1:-1;26384:17:0;26376:45;;;;;-1:-1:-1;;;26376:45:0;;;;;;;;;;;;-1:-1:-1;;;26376:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26432:12:0;;;;;;:7;:12;;;;;:23;;;26472:10;:17;26468:324;;26549:10;26506:24;26533:27;;;:15;:27;;;;;;26603:12;;-1:-1:-1;;;26603:12:0;;;;26583:32;;;26575:62;;;;;-1:-1:-1;;;26575:62:0;;;;;;;;;;;;-1:-1:-1;;;26575:62:0;;;;;;;;;;;;;;;26668:10;26652:27;;;;:15;:27;;;;;26701:1;26682:20;;26652:50;;26725:18;26739:3;26725:13;:18::i;:::-;26717:63;;;;;-1:-1:-1;;;26717:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26468:324;;26804:12;;:36;;;-1:-1:-1;;;26804:36:0;;-1:-1:-1;;;;;26804:36:0;;;;;;;;;;;;;;;:12;;;;;:21;;:36;;;;;;;;;;;;;;:12;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26804:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26804:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;26858:48:0;;;26866:10;26858:48;;-1:-1:-1;;;;;26858:48:0;;;26804:36;26858:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26934:8;26923:7;:19;:42;;;;;26946:14;:12;:14::i;:::-;:19;26923:42;26919:112;;;27011:5;;-1:-1:-1;;;;;27011:5:0;26982:37;26919:112;25838:1200;;;;;;;;:::o;23673:43::-;23713:3;23673:43;:::o;23829:42::-;;;;;;;;;;;;;:::o;23935:26::-;;;;;;:::o;25346:161::-;25478:21;;25399:12;;-1:-1:-1;;;;;25478:8:0;;;25493:1;;25399:12;25478:21;25399:12;25478:21;25493:1;25478:8;:21;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;25464:35:0;;25346:161;-1:-1:-1;;;25346:161:0:o;25219:119::-;25293:12;;:37;;;-1:-1:-1;;;25293:37:0;;25324:4;25293:37;;;;;;25266:7;;-1:-1:-1;;;;;25293:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;25293:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25293:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25293:37:0;;-1:-1:-1;25219:119:0;:::o;11937:178::-;11997:7;12026:2;12021;:7;12017:91;;;-1:-1:-1;12052:2:0;12045:9;;12017:91;-1:-1:-1;12094:2:0;11937:178;-1:-1:-1;11937:178:0:o;22454:567::-;22733:2;22717:19;;22711:26;22778:2;22762:19;;22756:26;22827:2;22811:19;;22805:26;22562:7;;22711:26;22756;22833:3;22801:36;22868:2;22864:6;;22860:46;;;22892:2;22887:7;22860:46;22925:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22925:88:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22925:88:0;;-1:-1:-1;;22925:88:0;;;22454:567;-1:-1:-1;;;;;;;22454:567:0:o
Swarm Source
bzzr://0b58fb1458dee2154be81bbf2943459260ea5899282500cd3a343c4ea70e47f2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,977.07 | 0.0000000000004983 | <$0.000001 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.