ETH Price: $3,399.50 (-0.64%)

Contract

0x78FAEA8994EfE7FC448E743B7b342e1A96Ba3807
 

Overview

ETH Balance

0.0004 ETH

Eth Value

$1.36 (@ $3,399.50/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Change Visit Cos...41910222017-08-22 18:11:392653 days ago1503425499IN
0x78FAEA89...A96Ba3807
0 ETH0.000086181
Withdraw Foreign...41910192017-08-22 18:11:012653 days ago1503425461IN
0x78FAEA89...A96Ba3807
0 ETH0.000042061
Withdraw Foreign...41910192017-08-22 18:11:012653 days ago1503425461IN
0x78FAEA89...A96Ba3807
0 ETH0.000027061
Repossess Bookin...41910012017-08-22 18:05:542653 days ago1503425154IN
0x78FAEA89...A96Ba3807
0 ETH0.000134491
Complete Booking41865802017-08-21 16:39:302654 days ago1503333570IN
0x78FAEA89...A96Ba3807
0 ETH0.000148021
Complete Booking41444732017-08-11 13:05:482664 days ago1502456748IN
0x78FAEA89...A96Ba3807
0 ETH0.000144961
Book Day Visit41418852017-08-10 21:47:432665 days ago1502401663IN
0x78FAEA89...A96Ba3807
0.0004 ETH0.00037571
Book Spa Visit41418812017-08-10 21:45:122665 days ago1502401512IN
0x78FAEA89...A96Ba3807
0 ETH0.000391341
Change Cardboard...41366552017-08-09 15:10:592666 days ago1502291459IN
0x78FAEA89...A96Ba3807
0 ETH0.000044081
Change Grove Add...41366512017-08-09 15:09:282666 days ago1502291368IN
0x78FAEA89...A96Ba3807
0 ETH0.000043861
0x6060604041364692017-08-09 13:56:492666 days ago1502287009IN
 Create: UnicornRanch
0 ETH0.00217361

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UnicornRanch

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-08-09
*/

pragma solidity ^0.4.11;

contract ERC20Token {
  function balanceOf(address _who) constant returns (uint balance);
  function allowance(address _owner, address _spender) constant returns (uint remaining);
  function transferFrom(address _from, address _to, uint _value);
  function transfer(address _to, uint _value);
}
contract GroveAPI {
  function insert(bytes32 indexName, bytes32 id, int value) public;
}

/**
 * Math operations with safety checks
 */
library SafeMath {
  function mul(uint a, uint b) internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint a, uint b) internal returns (uint) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint a, uint b) internal returns (uint) {
    assert(b <= a);
    return a - b;
  }

  function add(uint a, uint b) internal returns (uint) {
    uint c = a + b;
    assert(c >= a);
    return c;
  }

  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }
}

contract UnicornRanch {
  using SafeMath for uint;

  enum VisitType { Spa, Afternoon, Day, Overnight, Week, Extended }
  enum VisitState { InProgress, Completed, Repossessed }
  
  struct Visit {
    uint unicornCount;
    VisitType t;
    uint startBlock;
    uint expiresBlock;
    VisitState state;
    uint completedBlock;
    uint completedCount;
  }
  struct VisitMeta {
    address owner;
    uint index;
  }
  
  address public cardboardUnicornTokenAddress;
  address public groveAddress;
  address public owner = msg.sender;
  mapping (address => Visit[]) bookings;
  mapping (bytes32 => VisitMeta) public bookingMetadataForKey;
  mapping (uint8 => uint) public visitLength;
  mapping (uint8 => uint) public visitCost;
  uint public visitingUnicorns = 0;
  uint public repossessionBlocks = 43200;
  uint8 public repossessionBountyPerTen = 2;
  uint8 public repossessionBountyPerHundred = 25;
  uint public birthBlockThreshold = 43860;
  uint8 public birthPerTen = 1;
  uint8 public birthPerHundred = 15;

  event NewBooking(address indexed _who, uint indexed _index, VisitType indexed _type, uint _unicornCount);
  event BookingUpdate(address indexed _who, uint indexed _index, VisitState indexed _newState, uint _unicornCount);
  event RepossessionBounty(address indexed _who, uint _unicornCount);
  event DonationReceived(address indexed _who, uint _unicornCount);

  modifier onlyOwner {
    require(msg.sender == owner);
    _;
  }
  
  function UnicornRanch() {
    visitLength[uint8(VisitType.Spa)] = 720;
    visitLength[uint8(VisitType.Afternoon)] = 1440;
    visitLength[uint8(VisitType.Day)] = 2880;
    visitLength[uint8(VisitType.Overnight)] = 8640;
    visitLength[uint8(VisitType.Week)] = 60480;
    visitLength[uint8(VisitType.Extended)] = 120960;
    
    visitCost[uint8(VisitType.Spa)] = 0;
    visitCost[uint8(VisitType.Afternoon)] = 0;
    visitCost[uint8(VisitType.Day)] = 10 szabo;
    visitCost[uint8(VisitType.Overnight)] = 30 szabo;
    visitCost[uint8(VisitType.Week)] = 50 szabo;
    visitCost[uint8(VisitType.Extended)] = 70 szabo;
  }


  function getBookingCount(address _who) constant returns (uint count) {
    return bookings[_who].length;
  }
  function getBooking(address _who, uint _index) constant returns (uint _unicornCount, VisitType _type, uint _startBlock, uint _expiresBlock, VisitState _state, uint _completedBlock, uint _completedCount) {
    Visit storage v = bookings[_who][_index];
    return (v.unicornCount, v.t, v.startBlock, v.expiresBlock, v.state, v.completedBlock, v.completedCount);
  }

  function bookSpaVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Spa, _unicornCount);
  }
  function bookAfternoonVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Afternoon, _unicornCount);
  }
  function bookDayVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Day, _unicornCount);
  }
  function bookOvernightVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Overnight, _unicornCount);
  }
  function bookWeekVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Week, _unicornCount);
  }
  function bookExtendedVisit(uint _unicornCount) payable {
    return addBooking(VisitType.Extended, _unicornCount);
  }
  
  function addBooking(VisitType _type, uint _unicornCount) payable {
    if (_type == VisitType.Afternoon) {
      return donateUnicorns(availableBalance(msg.sender));
    }
    require(msg.value >= visitCost[uint8(_type)].mul(_unicornCount)); // Must be paying proper amount

    ERC20Token cardboardUnicorns = ERC20Token(cardboardUnicornTokenAddress);
    cardboardUnicorns.transferFrom(msg.sender, address(this), _unicornCount); // Transfer the actual asset
    visitingUnicorns = visitingUnicorns.add(_unicornCount);
    uint expiresBlock = block.number.add(visitLength[uint8(_type)]); // Calculate when this booking will be done
    
    // Add the booking to the ledger
    bookings[msg.sender].push(Visit(
      _unicornCount,
      _type,
      block.number,
      expiresBlock,
      VisitState.InProgress,
      0,
      0
    ));
    uint newIndex = bookings[msg.sender].length - 1;
    bytes32 uniqueKey = keccak256(msg.sender, newIndex); // Create a unique key for this booking
    
    // Add a reference for that key, to find the metadata about it later
    bookingMetadataForKey[uniqueKey] = VisitMeta(
      msg.sender,
      newIndex
    );
    
    if (groveAddress > 0) {
      // Insert into Grove index for applications to query
      GroveAPI g = GroveAPI(groveAddress);
      g.insert("bookingExpiration", uniqueKey, int(expiresBlock));
    }
    
    // Send event about this new booking
    NewBooking(msg.sender, newIndex, _type, _unicornCount);
  }
  
  function completeBooking(uint _index) {
    require(bookings[msg.sender].length > _index); // Sender must have at least this many bookings
    Visit storage v = bookings[msg.sender][_index];
    require(block.number >= v.expiresBlock); // Expired time must be past
    require(v.state == VisitState.InProgress); // Visit must not be complete or repossessed
    
    uint unicornsToReturn = v.unicornCount;
    ERC20Token cardboardUnicorns = ERC20Token(cardboardUnicornTokenAddress);

    // Determine if any births occurred
    uint birthCount = 0;
    if (SafeMath.sub(block.number, v.startBlock) >= birthBlockThreshold) {
      if (v.unicornCount >= 100) {
        birthCount = uint(birthPerHundred).mul(v.unicornCount / 100);
      } else if (v.unicornCount >= 10) {
        birthCount = uint(birthPerTen).mul(v.unicornCount / 10);
      }
    }
    if (birthCount > 0) {
      uint availableUnicorns = cardboardUnicorns.balanceOf(address(this)) - visitingUnicorns;
      if (availableUnicorns < birthCount) {
        birthCount = availableUnicorns;
      }
      unicornsToReturn = unicornsToReturn.add(birthCount);
    }
        
    // Update the status of the Visit
    v.state = VisitState.Completed;
    v.completedBlock = block.number;
    v.completedCount = unicornsToReturn;
    bookings[msg.sender][_index] = v;
    
    // Transfer the asset back to the owner
    visitingUnicorns = visitingUnicorns.sub(unicornsToReturn);
    cardboardUnicorns.transfer(msg.sender, unicornsToReturn);
    
    // Send event about this update
    BookingUpdate(msg.sender, _index, VisitState.Completed, unicornsToReturn);
  }
  
  function repossessBooking(address _who, uint _index) {
    require(bookings[_who].length > _index); // Address in question must have at least this many bookings
    Visit storage v = bookings[_who][_index];
    require(block.number > v.expiresBlock.add(repossessionBlocks)); // Repossession time must be past
    require(v.state == VisitState.InProgress); // Visit must not be complete or repossessed
    
    visitingUnicorns = visitingUnicorns.sub(v.unicornCount);
    
    // Send event about this update
    BookingUpdate(_who, _index, VisitState.Repossessed, v.unicornCount);
    
    // Calculate Bounty amount
    uint bountyCount = 1;
    if (v.unicornCount >= 100) {
        bountyCount = uint(repossessionBountyPerHundred).mul(v.unicornCount / 100);
    } else if (v.unicornCount >= 10) {
      bountyCount = uint(repossessionBountyPerTen).mul(v.unicornCount / 10);
    }
    
    // Send bounty to bounty hunter
    ERC20Token cardboardUnicorns = ERC20Token(cardboardUnicornTokenAddress);
    cardboardUnicorns.transfer(msg.sender, bountyCount);
    
    // Send event about the bounty payout
    RepossessionBounty(msg.sender, bountyCount);

    // Update the status of the Visit
    v.state = VisitState.Repossessed;
    v.completedBlock = block.number;
    v.completedCount = v.unicornCount - bountyCount;
    bookings[_who][_index] = v;
  }
  
  function availableBalance(address _who) internal returns (uint) {
    ERC20Token cardboardUnicorns = ERC20Token(cardboardUnicornTokenAddress);
    uint count = cardboardUnicorns.allowance(_who, address(this));
    if (count == 0) {
      return 0;
    }
    uint balance = cardboardUnicorns.balanceOf(_who);
    if (balance < count) {
      return balance;
    }
    return count;
  }
  
  function() payable {
    if (cardboardUnicornTokenAddress == 0) {
      return;
    }
    return donateUnicorns(availableBalance(msg.sender));
  }
  
  function donateUnicorns(uint _unicornCount) payable {
    if (_unicornCount == 0) {
      return;
    }
    ERC20Token cardboardUnicorns = ERC20Token(cardboardUnicornTokenAddress);
    cardboardUnicorns.transferFrom(msg.sender, address(this), _unicornCount);
    DonationReceived(msg.sender, _unicornCount);
  }
  
  /**
   * Change ownership of the Ranch
   */
  function changeOwner(address _newOwner) onlyOwner {
    owner = _newOwner;
  }

  /**
   * Change the outside contracts used by this contract
   */
  function changeCardboardUnicornTokenAddress(address _newTokenAddress) onlyOwner {
    cardboardUnicornTokenAddress = _newTokenAddress;
  }
  function changeGroveAddress(address _newAddress) onlyOwner {
    groveAddress = _newAddress;
  }
  
  /**
   * Update block durations for various types of visits
   */
  function changeVisitLengths(uint _spa, uint _afternoon, uint _day, uint _overnight, uint _week, uint _extended) onlyOwner {
    visitLength[uint8(VisitType.Spa)] = _spa;
    visitLength[uint8(VisitType.Afternoon)] = _afternoon;
    visitLength[uint8(VisitType.Day)] = _day;
    visitLength[uint8(VisitType.Overnight)] = _overnight;
    visitLength[uint8(VisitType.Week)] = _week;
    visitLength[uint8(VisitType.Extended)] = _extended;
  }
  
  /**
   * Update ether costs for various types of visits
   */
  function changeVisitCosts(uint _spa, uint _afternoon, uint _day, uint _overnight, uint _week, uint _extended) onlyOwner {
    visitCost[uint8(VisitType.Spa)] = _spa;
    visitCost[uint8(VisitType.Afternoon)] = _afternoon;
    visitCost[uint8(VisitType.Day)] = _day;
    visitCost[uint8(VisitType.Overnight)] = _overnight;
    visitCost[uint8(VisitType.Week)] = _week;
    visitCost[uint8(VisitType.Extended)] = _extended;
  }
  
  /**
   * Update bounty reward settings
   */
  function changeRepoSettings(uint _repoBlocks, uint8 _repoPerTen, uint8 _repoPerHundred) onlyOwner {
    repossessionBlocks = _repoBlocks;
    repossessionBountyPerTen = _repoPerTen;
    repossessionBountyPerHundred = _repoPerHundred;
  }
  
  /**
   * Update birth event settings
   */
  function changeBirthSettings(uint _birthBlocks, uint8 _birthPerTen, uint8 _birthPerHundred) onlyOwner {
    birthBlockThreshold = _birthBlocks;
    birthPerTen = _birthPerTen;
    birthPerHundred = _birthPerHundred;
  }

  function withdraw() onlyOwner {
    owner.transfer(this.balance); // Send all ether in this contract to this contract's owner
  }
  function withdrawForeignTokens(address _tokenContract) onlyOwner {
    ERC20Token token = ERC20Token(_tokenContract);
    token.transfer(owner, token.balanceOf(address(this))); // Send all owned tokens to this contract's owner
  }
  
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"repossessionBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"birthPerTen","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"},{"name":"_index","type":"uint256"}],"name":"getBooking","outputs":[{"name":"_unicornCount","type":"uint256"},{"name":"_type","type":"uint8"},{"name":"_startBlock","type":"uint256"},{"name":"_expiresBlock","type":"uint256"},{"name":"_state","type":"uint8"},{"name":"_completedBlock","type":"uint256"},{"name":"_completedCount","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spa","type":"uint256"},{"name":"_afternoon","type":"uint256"},{"name":"_day","type":"uint256"},{"name":"_overnight","type":"uint256"},{"name":"_week","type":"uint256"},{"name":"_extended","type":"uint256"}],"name":"changeVisitLengths","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"visitingUnicorns","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"}],"name":"completeBooking","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"visitCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookExtendedVisit","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"}],"name":"getBookingCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"cardboardUnicornTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_repoBlocks","type":"uint256"},{"name":"_repoPerTen","type":"uint8"},{"name":"_repoPerHundred","type":"uint8"}],"name":"changeRepoSettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"repossessionBountyPerHundred","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"repossessionBountyPerTen","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newAddress","type":"address"}],"name":"changeGroveAddress","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookAfternoonVisit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_type","type":"uint8"},{"name":"_unicornCount","type":"uint256"}],"name":"addBooking","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"visitLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"birthBlockThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookDayVisit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookOvernightVisit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_who","type":"address"},{"name":"_index","type":"uint256"}],"name":"repossessBooking","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newTokenAddress","type":"address"}],"name":"changeCardboardUnicornTokenAddress","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"donateUnicorns","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"birthPerHundred","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookSpaVisit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_spa","type":"uint256"},{"name":"_afternoon","type":"uint256"},{"name":"_day","type":"uint256"},{"name":"_overnight","type":"uint256"},{"name":"_week","type":"uint256"},{"name":"_extended","type":"uint256"}],"name":"changeVisitCosts","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"withdrawForeignTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_birthBlocks","type":"uint256"},{"name":"_birthPerTen","type":"uint8"},{"name":"_birthPerHundred","type":"uint8"}],"name":"changeBirthSettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"bookingMetadataForKey","outputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"groveAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_unicornCount","type":"uint256"}],"name":"bookWeekVisit","outputs":[],"payable":true,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_who","type":"address"},{"indexed":true,"name":"_index","type":"uint256"},{"indexed":true,"name":"_type","type":"uint8"},{"indexed":false,"name":"_unicornCount","type":"uint256"}],"name":"NewBooking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_who","type":"address"},{"indexed":true,"name":"_index","type":"uint256"},{"indexed":true,"name":"_newState","type":"uint8"},{"indexed":false,"name":"_unicornCount","type":"uint256"}],"name":"BookingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_who","type":"address"},{"indexed":false,"name":"_unicornCount","type":"uint256"}],"name":"RepossessionBounty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_who","type":"address"},{"indexed":false,"name":"_unicornCount","type":"uint256"}],"name":"DonationReceived","type":"event"}]

606060405260028054600160a060020a03191633600160a060020a0316178155600060075561a8c06008556009805460ff1990811690921761ff00199081166119001790915561ab54600a55600b805490921660011716610f00179055341561006757600080fd5b5b6102d060056000805b60ff16815260208101919091526040016000908120919091556105a09060059060015b60ff1681526020810191909152604001600090812091909155610b409060059060025b60ff16815260208101919091526040016000908120919091556121c09060059060035b60ff168152602081019190915260400160009081209190915561ec409060059060045b60ff16815260208101919091526040016000908120919091556201d88090600590815b60ff1681526020810191909152604001600090812091909155600681805b60ff168152602081019190915260400160009081209190915560068160015b60ff16815260208101919091526040016000908120919091556509184e72a0009060069060025b60ff1681526020810191909152604001600090812091909155651b48eb57e0009060069060035b60ff1681526020810191909152604001600090812091909155652d79883d20009060069060045b60ff1681526020810191909152604001600090812091909155653faa252260009060069060055b60ff1681526020810191909152604001600020555b5b6119f78061021e6000396000f300606060405236156101905763ffffffff60e060020a60003504166307e0421f81146101bc5780630a4c374a146101e15780630b0edad31461020a5780630be80fa9146102885780631453bfb3146102af5780631a2b3431146102d457806324ffca71146102ec57806339eb54d2146103175780633ca19952146103245780633ccfd60b146103555780633e8c34e51461036a578063435afa54146103995780634c9f45eb146103bd5780634db1ba5a146103e65780635d956b3e1461040f578063671d331514610430578063701513c01461043d57806373df6b191461045057806389c735651461047b5780638da5cb5b146104a05780639379077f146104cf578063940900b8146104dc578063a6f9dae1146104e9578063b9b949971461050a578063c9c666aa1461052e578063d16517861461054f578063da658f221461055c578063dba3191114610585578063dde0523f14610592578063e58fc54c146105b9578063e5a23e7e146105da578063e6506873146105fe578063e760fb0614610636578063ed15863a14610665575b5b600054600160a060020a031615156101a8576101b9565b6101b96101b433610672565b610791565b5b005b34156101c757600080fd5b6101cf61085a565b60405190815260200160405180910390f35b34156101ec57600080fd5b6101f4610860565b60405160ff909116815260200160405180910390f35b341561021557600080fd5b61022c600160a060020a0360043516602435610869565b6040518088815260200187600581111561024257fe5b60ff16815260200186815260200185815260200184600281111561026257fe5b60ff16815260200183815260200182815260200197505050505050505060405180910390f35b341561029357600080fd5b6101b960043560243560443560643560843560a435610902565b005b34156102ba57600080fd5b6101cf6109e6565b60405190815260200160405180910390f35b34156102df57600080fd5b6101b96004356109ec565b005b34156102f757600080fd5b6101cf60ff60043516610d59565b60405190815260200160405180910390f35b6101b9600435610d6b565b005b341561032f57600080fd5b6101cf600160a060020a0360043516610d7a565b60405190815260200160405180910390f35b341561036057600080fd5b6101b9610d99565b005b341561037557600080fd5b61037d610df1565b604051600160a060020a03909116815260200160405180910390f35b34156103a457600080fd5b6101b960043560ff60243581169060443516610e00565b005b34156103c857600080fd5b6101f4610e49565b60405160ff909116815260200160405180910390f35b34156103f157600080fd5b6101f4610e57565b60405160ff909116815260200160405180910390f35b341561041a57600080fd5b6101b9600160a060020a0360043516610e60565b005b6101b9600435610ea8565b005b6101b960ff60043516602435610eb7565b005b341561045b57600080fd5b6101cf60ff60043516611290565b60405190815260200160405180910390f35b341561048657600080fd5b6101cf6112a2565b60405190815260200160405180910390f35b34156104ab57600080fd5b61037d6112a8565b604051600160a060020a03909116815260200160405180910390f35b6101b96004356112b7565b005b6101b96004356112c6565b005b34156104f457600080fd5b6101b9600160a060020a03600435166112d5565b005b341561051557600080fd5b6101b9600160a060020a036004351660243561131d565b005b341561053957600080fd5b6101b9600160a060020a036004351661160c565b005b6101b9600435610791565b005b341561056757600080fd5b6101f4611654565b60405160ff909116815260200160405180910390f35b6101b9600435611662565b005b341561059d57600080fd5b6101b960043560243560443560643560843560a435611671565b005b34156105c457600080fd5b6101b9600160a060020a036004351661175a565b005b34156105e557600080fd5b6101b960043560ff60243581169060443516611857565b005b341561060957600080fd5b6106146004356118a0565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561064157600080fd5b61037d6118c5565b604051600160a060020a03909116815260200160405180910390f35b6101b96004356118d4565b005b60008054600160a060020a031681808263dd62ed3e8630846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156106d657600080fd5b6102c65a03f115156106e757600080fd5b50505060405180519250508115156107025760009350610789565b82600160a060020a03166370a082318660006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561075957600080fd5b6102c65a03f1151561076a57600080fd5b50505060405180519150508181101561078557809350610789565b8193505b505050919050565b600081151561079f57610856565b50600054600160a060020a0316806323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561080457600080fd5b6102c65a03f1151561081557600080fd5b50505033600160a060020a03167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c528360405190815260200160405180910390a25b5050565b60085481565b600b5460ff1681565b600080600080600080600080600360008b600160a060020a0316600160a060020a03168152602001908152602001600020898154811015156108a757fe5b906000526020600020906007020160005b508054600182015460028301546003840154600485015460058601546006870154959e5060ff9485169d50929b5090995090911696509450925090505b5092959891949750929550565b60025433600160a060020a0390811691161461091d57600080fd5b8560056000805b60ff1681526020810191909152604001600090812091909155859060059060015b60ff1681526020810191909152604001600090812091909155849060059060025b60ff1681526020810191909152604001600090812091909155839060059060035b60ff1681526020810191909152604001600090812091909155829060059060045b60ff16815260208101919091526040016000908120919091558190600590815b60ff1681526020810191909152604001600020555b5b505050505050565b60075481565b600160a060020a0333166000908152600360205260408120548190819081908190869011610a1957600080fd5b600160a060020a0333166000908152600360205260409020805487908110610a3d57fe5b906000526020600020906007020160005b506003810154909550431015610a6357600080fd5b60005b600486015460ff166002811115610a7957fe5b14610a8357600080fd5b845460008054600a546002890154939750600160a060020a03909116955090935090610ab09043906118e3565b10610b0e57845460649010610ae3578454610adc906064905b600b54610100900460ff169190046118fa565b9150610b0e565b8454600a9010610b0e578454610b0b90600a905b600b5460ff1691900463ffffffff6118fa16565b91505b5b5b6000821115610bb05760075483600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b7357600080fd5b6102c65a03f11515610b8457600080fd5b5050506040518051905003905081811015610b9d578091505b610bad848363ffffffff61192916565b93505b6004850180546001919060ff191682805b021790555043600586015560068501849055600160a060020a0333166000908152600360205260409020805486919088908110610bfa57fe5b906000526020600020906007020160005b5081548155600180830154818301805460ff90921692909160ff191690836005811115610c3457fe5b02179055506002828101548282015560038084015490830155600480840154908301805460ff90921692909160ff1916906001908490811115610c7357fe5b021790555060058281015490820155600691820154910155600754610c9e908563ffffffff6118e316565b600755600160a060020a03831663a9059cbb338660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610cf557600080fd5b6102c65a03f11515610d0657600080fd5b5060019150610d129050565b8633600160a060020a03167f3b19c86806543f3eff13d440630e1c2e2929cedd2abc91deef4811b1ffa000398760405190815260200160405180910390a45b505050505050565b60066020526000908152604090205481565b610d76600582610eb7565b5b50565b600160a060020a0381166000908152600360205260409020545b919050565b60025433600160a060020a03908116911614610db457600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610ded57600080fd5b5b5b565b600054600160a060020a031681565b60025433600160a060020a03908116911614610e1b57600080fd5b60088390556009805460ff8381166101000261ff001991861660ff1990931692909217161790555b5b505050565b600954610100900460ff1681565b60095460ff1681565b60025433600160a060020a03908116911614610e7b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b610d76600182610eb7565b5b50565b60008080808060015b876005811115610ecc57fe5b1415610ee857610ee36101b433610672565b610791565b611287565b610f1c86600660008a6005811115610efc57fe5b60ff1681526020810191909152604001600020549063ffffffff6118fa16565b341015610f2857600080fd5b600054600160a060020a03169450846323b872dd33308960405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610f8e57600080fd5b6102c65a03f11515610f9f57600080fd5b5050600754610fb591508763ffffffff61192916565b600755610feb600560008982811115610fca57fe5b60ff168152602081019190915260400160002054439063ffffffff61192916565b600160a060020a0333166000908152600360205260409020805491955090600181016110178382611943565b916000526020600020906007020160005b60e0604051908101604052808a81526020018b600581111561104657fe5b81524360208201526040810189905260600160005b815260006020820181905260409091015291905081518155602082015160018083018054909160ff199091169083600581111561109457fe5b02179055506040820151816002015560608201518160030155608082015160048201805460ff191660018360028111156110ca57fe5b021790555060a0820151816005015560c08201516006909101555050600160a060020a03339081166000908152600360205260409081902054600019019450849051600160a060020a03929092166c01000000000000000000000000028252601482015260340160405180910390209150604080519081016040908152600160a060020a0333168252602080830186905260008581526004909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03919091161781556020820151600191820155546000600160a060020a039091161115905061123c5750600154600160a060020a03168063870e5405838660405160e060020a63ffffffff85160281527f626f6f6b696e6745787069726174696f6e000000000000000000000000000000600482015260248101929092526044820152606401600060405180830381600087803b151561122757600080fd5b6102c65a03f1151561123857600080fd5b5050505b86600581111561124857fe5b8333600160a060020a03167fe1dcf3ded2916fdf0b0696536e13adeed2f8665a3004440397b776f14aa5befd8960405190815260200160405180910390a45b50505050505050565b60056020526000908152604090205481565b600a5481565b600254600160a060020a031681565b610d76600282610eb7565b5b50565b610d76600382610eb7565b5b50565b60025433600160a060020a039081169116146112f057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600360205260408120548190819084901161134657600080fd5b600160a060020a038516600090815260036020526040902080548590811061136a57fe5b906000526020600020906007020160005b509250611397600854846003015461192990919063ffffffff16565b43116113a257600080fd5b60005b600484015460ff1660028111156113b857fe5b146113c257600080fd5b82546007546113d69163ffffffff6118e316565b60075560025b8486600160a060020a03167f3b19c86806543f3eff13d440630e1c2e2929cedd2abc91deef4811b1ffa00039866000015460405190815260200160405180910390a482546001925060649010611450578254611449906064905b600954610100900460ff169190046118fa565b915061147b565b8254600a901061147b57825461147890600a905b60095460ff1691900463ffffffff6118fa16565b91505b5b50600054600160a060020a03168063a9059cbb338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156114d457600080fd5b6102c65a03f115156114e557600080fd5b50505033600160a060020a03167ff19cfeff04aee8eb4233e04f52861d77065ae3c502e2767d82a5836d0090eb4c8360405190815260200160405180910390a26004830180546002919060ff19166001835b021790555043600584015582548290036006840155600160a060020a038516600090815260036020526040902080548491908690811061157357fe5b906000526020600020906007020160005b5081548155600180830154818301805460ff90921692909160ff1916908360058111156115ad57fe5b02179055506002828101548282015560038084015490830155600480840154908301805460ff90921692909160ff19169060019084908111156115ec57fe5b0217905550600582810154908201556006918201549101555b5050505050565b60025433600160a060020a0390811691161461162757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600b54610100900460ff1681565b610d76600082610eb7565b5b50565b60025433600160a060020a0390811691161461168c57600080fd5b8560066000805b60ff1681526020810191909152604001600090812091909155859060069060015b60ff1681526020810191909152604001600090812091909155849060069060025b60ff1681526020810191909152604001600090812091909155839060069060035b60ff1681526020810191909152604001600090812091909155829060069060045b60ff1681526020810191909152604001600090812091909155819060069060056109c8565b60ff1681526020810191909152604001600020555b5b505050505050565b60025460009033600160a060020a0390811691161461177857600080fd5b506002548190600160a060020a038083169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117df57600080fd5b6102c65a03f115156117f057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561183d57600080fd5b6102c65a03f1151561160557600080fd5b5050505b5b5050565b60025433600160a060020a0390811691161461187257600080fd5b600a839055600b805460ff8381166101000261ff001991861660ff1990931692909217161790555b5b505050565b60046020526000908152604090208054600190910154600160a060020a039091169082565b600154600160a060020a031681565b610d76600482610eb7565b5b50565b6000828211156118ef57fe5b508082035b92915050565b6000828202831580611916575082848281151561191357fe5b04145b151561191e57fe5b8091505b5092915050565b60008282018381101561191e57fe5b8091505b5092915050565b815481835581811511610e4357600702816007028360005260206000209182019101610e439190611975565b5b505050565b6119c891905b808211156119c457600080825560018201805460ff199081169091556002830182905560038301829055600483018054909116905560058201819055600682015560070161197b565b5090565b905600a165627a7a72305820164174a0d70dde5d0fcf9b7f4b9db57453c2f675353f456783fc997bb371c64a0029

Deployed Bytecode

0x606060405236156101905763ffffffff60e060020a60003504166307e0421f81146101bc5780630a4c374a146101e15780630b0edad31461020a5780630be80fa9146102885780631453bfb3146102af5780631a2b3431146102d457806324ffca71146102ec57806339eb54d2146103175780633ca19952146103245780633ccfd60b146103555780633e8c34e51461036a578063435afa54146103995780634c9f45eb146103bd5780634db1ba5a146103e65780635d956b3e1461040f578063671d331514610430578063701513c01461043d57806373df6b191461045057806389c735651461047b5780638da5cb5b146104a05780639379077f146104cf578063940900b8146104dc578063a6f9dae1146104e9578063b9b949971461050a578063c9c666aa1461052e578063d16517861461054f578063da658f221461055c578063dba3191114610585578063dde0523f14610592578063e58fc54c146105b9578063e5a23e7e146105da578063e6506873146105fe578063e760fb0614610636578063ed15863a14610665575b5b600054600160a060020a031615156101a8576101b9565b6101b96101b433610672565b610791565b5b005b34156101c757600080fd5b6101cf61085a565b60405190815260200160405180910390f35b34156101ec57600080fd5b6101f4610860565b60405160ff909116815260200160405180910390f35b341561021557600080fd5b61022c600160a060020a0360043516602435610869565b6040518088815260200187600581111561024257fe5b60ff16815260200186815260200185815260200184600281111561026257fe5b60ff16815260200183815260200182815260200197505050505050505060405180910390f35b341561029357600080fd5b6101b960043560243560443560643560843560a435610902565b005b34156102ba57600080fd5b6101cf6109e6565b60405190815260200160405180910390f35b34156102df57600080fd5b6101b96004356109ec565b005b34156102f757600080fd5b6101cf60ff60043516610d59565b60405190815260200160405180910390f35b6101b9600435610d6b565b005b341561032f57600080fd5b6101cf600160a060020a0360043516610d7a565b60405190815260200160405180910390f35b341561036057600080fd5b6101b9610d99565b005b341561037557600080fd5b61037d610df1565b604051600160a060020a03909116815260200160405180910390f35b34156103a457600080fd5b6101b960043560ff60243581169060443516610e00565b005b34156103c857600080fd5b6101f4610e49565b60405160ff909116815260200160405180910390f35b34156103f157600080fd5b6101f4610e57565b60405160ff909116815260200160405180910390f35b341561041a57600080fd5b6101b9600160a060020a0360043516610e60565b005b6101b9600435610ea8565b005b6101b960ff60043516602435610eb7565b005b341561045b57600080fd5b6101cf60ff60043516611290565b60405190815260200160405180910390f35b341561048657600080fd5b6101cf6112a2565b60405190815260200160405180910390f35b34156104ab57600080fd5b61037d6112a8565b604051600160a060020a03909116815260200160405180910390f35b6101b96004356112b7565b005b6101b96004356112c6565b005b34156104f457600080fd5b6101b9600160a060020a03600435166112d5565b005b341561051557600080fd5b6101b9600160a060020a036004351660243561131d565b005b341561053957600080fd5b6101b9600160a060020a036004351661160c565b005b6101b9600435610791565b005b341561056757600080fd5b6101f4611654565b60405160ff909116815260200160405180910390f35b6101b9600435611662565b005b341561059d57600080fd5b6101b960043560243560443560643560843560a435611671565b005b34156105c457600080fd5b6101b9600160a060020a036004351661175a565b005b34156105e557600080fd5b6101b960043560ff60243581169060443516611857565b005b341561060957600080fd5b6106146004356118a0565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561064157600080fd5b61037d6118c5565b604051600160a060020a03909116815260200160405180910390f35b6101b96004356118d4565b005b60008054600160a060020a031681808263dd62ed3e8630846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156106d657600080fd5b6102c65a03f115156106e757600080fd5b50505060405180519250508115156107025760009350610789565b82600160a060020a03166370a082318660006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561075957600080fd5b6102c65a03f1151561076a57600080fd5b50505060405180519150508181101561078557809350610789565b8193505b505050919050565b600081151561079f57610856565b50600054600160a060020a0316806323b872dd33308560405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b151561080457600080fd5b6102c65a03f1151561081557600080fd5b50505033600160a060020a03167f264f630d9efa0d07053a31163641d9fcc0adafc9d9e76f1c37c2ce3a558d2c528360405190815260200160405180910390a25b5050565b60085481565b600b5460ff1681565b600080600080600080600080600360008b600160a060020a0316600160a060020a03168152602001908152602001600020898154811015156108a757fe5b906000526020600020906007020160005b508054600182015460028301546003840154600485015460058601546006870154959e5060ff9485169d50929b5090995090911696509450925090505b5092959891949750929550565b60025433600160a060020a0390811691161461091d57600080fd5b8560056000805b60ff1681526020810191909152604001600090812091909155859060059060015b60ff1681526020810191909152604001600090812091909155849060059060025b60ff1681526020810191909152604001600090812091909155839060059060035b60ff1681526020810191909152604001600090812091909155829060059060045b60ff16815260208101919091526040016000908120919091558190600590815b60ff1681526020810191909152604001600020555b5b505050505050565b60075481565b600160a060020a0333166000908152600360205260408120548190819081908190869011610a1957600080fd5b600160a060020a0333166000908152600360205260409020805487908110610a3d57fe5b906000526020600020906007020160005b506003810154909550431015610a6357600080fd5b60005b600486015460ff166002811115610a7957fe5b14610a8357600080fd5b845460008054600a546002890154939750600160a060020a03909116955090935090610ab09043906118e3565b10610b0e57845460649010610ae3578454610adc906064905b600b54610100900460ff169190046118fa565b9150610b0e565b8454600a9010610b0e578454610b0b90600a905b600b5460ff1691900463ffffffff6118fa16565b91505b5b5b6000821115610bb05760075483600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b7357600080fd5b6102c65a03f11515610b8457600080fd5b5050506040518051905003905081811015610b9d578091505b610bad848363ffffffff61192916565b93505b6004850180546001919060ff191682805b021790555043600586015560068501849055600160a060020a0333166000908152600360205260409020805486919088908110610bfa57fe5b906000526020600020906007020160005b5081548155600180830154818301805460ff90921692909160ff191690836005811115610c3457fe5b02179055506002828101548282015560038084015490830155600480840154908301805460ff90921692909160ff1916906001908490811115610c7357fe5b021790555060058281015490820155600691820154910155600754610c9e908563ffffffff6118e316565b600755600160a060020a03831663a9059cbb338660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610cf557600080fd5b6102c65a03f11515610d0657600080fd5b5060019150610d129050565b8633600160a060020a03167f3b19c86806543f3eff13d440630e1c2e2929cedd2abc91deef4811b1ffa000398760405190815260200160405180910390a45b505050505050565b60066020526000908152604090205481565b610d76600582610eb7565b5b50565b600160a060020a0381166000908152600360205260409020545b919050565b60025433600160a060020a03908116911614610db457600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610ded57600080fd5b5b5b565b600054600160a060020a031681565b60025433600160a060020a03908116911614610e1b57600080fd5b60088390556009805460ff8381166101000261ff001991861660ff1990931692909217161790555b5b505050565b600954610100900460ff1681565b60095460ff1681565b60025433600160a060020a03908116911614610e7b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b610d76600182610eb7565b5b50565b60008080808060015b876005811115610ecc57fe5b1415610ee857610ee36101b433610672565b610791565b611287565b610f1c86600660008a6005811115610efc57fe5b60ff1681526020810191909152604001600020549063ffffffff6118fa16565b341015610f2857600080fd5b600054600160a060020a03169450846323b872dd33308960405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610f8e57600080fd5b6102c65a03f11515610f9f57600080fd5b5050600754610fb591508763ffffffff61192916565b600755610feb600560008982811115610fca57fe5b60ff168152602081019190915260400160002054439063ffffffff61192916565b600160a060020a0333166000908152600360205260409020805491955090600181016110178382611943565b916000526020600020906007020160005b60e0604051908101604052808a81526020018b600581111561104657fe5b81524360208201526040810189905260600160005b815260006020820181905260409091015291905081518155602082015160018083018054909160ff199091169083600581111561109457fe5b02179055506040820151816002015560608201518160030155608082015160048201805460ff191660018360028111156110ca57fe5b021790555060a0820151816005015560c08201516006909101555050600160a060020a03339081166000908152600360205260409081902054600019019450849051600160a060020a03929092166c01000000000000000000000000028252601482015260340160405180910390209150604080519081016040908152600160a060020a0333168252602080830186905260008581526004909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03919091161781556020820151600191820155546000600160a060020a039091161115905061123c5750600154600160a060020a03168063870e5405838660405160e060020a63ffffffff85160281527f626f6f6b696e6745787069726174696f6e000000000000000000000000000000600482015260248101929092526044820152606401600060405180830381600087803b151561122757600080fd5b6102c65a03f1151561123857600080fd5b5050505b86600581111561124857fe5b8333600160a060020a03167fe1dcf3ded2916fdf0b0696536e13adeed2f8665a3004440397b776f14aa5befd8960405190815260200160405180910390a45b50505050505050565b60056020526000908152604090205481565b600a5481565b600254600160a060020a031681565b610d76600282610eb7565b5b50565b610d76600382610eb7565b5b50565b60025433600160a060020a039081169116146112f057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600360205260408120548190819084901161134657600080fd5b600160a060020a038516600090815260036020526040902080548590811061136a57fe5b906000526020600020906007020160005b509250611397600854846003015461192990919063ffffffff16565b43116113a257600080fd5b60005b600484015460ff1660028111156113b857fe5b146113c257600080fd5b82546007546113d69163ffffffff6118e316565b60075560025b8486600160a060020a03167f3b19c86806543f3eff13d440630e1c2e2929cedd2abc91deef4811b1ffa00039866000015460405190815260200160405180910390a482546001925060649010611450578254611449906064905b600954610100900460ff169190046118fa565b915061147b565b8254600a901061147b57825461147890600a905b60095460ff1691900463ffffffff6118fa16565b91505b5b50600054600160a060020a03168063a9059cbb338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156114d457600080fd5b6102c65a03f115156114e557600080fd5b50505033600160a060020a03167ff19cfeff04aee8eb4233e04f52861d77065ae3c502e2767d82a5836d0090eb4c8360405190815260200160405180910390a26004830180546002919060ff19166001835b021790555043600584015582548290036006840155600160a060020a038516600090815260036020526040902080548491908690811061157357fe5b906000526020600020906007020160005b5081548155600180830154818301805460ff90921692909160ff1916908360058111156115ad57fe5b02179055506002828101548282015560038084015490830155600480840154908301805460ff90921692909160ff19169060019084908111156115ec57fe5b0217905550600582810154908201556006918201549101555b5050505050565b60025433600160a060020a0390811691161461162757600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600b54610100900460ff1681565b610d76600082610eb7565b5b50565b60025433600160a060020a0390811691161461168c57600080fd5b8560066000805b60ff1681526020810191909152604001600090812091909155859060069060015b60ff1681526020810191909152604001600090812091909155849060069060025b60ff1681526020810191909152604001600090812091909155839060069060035b60ff1681526020810191909152604001600090812091909155829060069060045b60ff1681526020810191909152604001600090812091909155819060069060056109c8565b60ff1681526020810191909152604001600020555b5b505050505050565b60025460009033600160a060020a0390811691161461177857600080fd5b506002548190600160a060020a038083169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156117df57600080fd5b6102c65a03f115156117f057600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561183d57600080fd5b6102c65a03f1151561160557600080fd5b5050505b5b5050565b60025433600160a060020a0390811691161461187257600080fd5b600a839055600b805460ff8381166101000261ff001991861660ff1990931692909217161790555b5b505050565b60046020526000908152604090208054600190910154600160a060020a039091169082565b600154600160a060020a031681565b610d76600482610eb7565b5b50565b6000828211156118ef57fe5b508082035b92915050565b6000828202831580611916575082848281151561191357fe5b04145b151561191e57fe5b8091505b5092915050565b60008282018381101561191e57fe5b8091505b5092915050565b815481835581811511610e4357600702816007028360005260206000209182019101610e439190611975565b5b505050565b6119c891905b808211156119c457600080825560018201805460ff199081169091556002830182905560038301829055600483018054909116905560058201819055600682015560070161197b565b5090565b905600a165627a7a72305820164174a0d70dde5d0fcf9b7f4b9db57453c2f675353f456783fc997bb371c64a0029

Swarm Source

bzzr://164174a0d70dde5d0fcf9b7f4b9db57453c2f675353f456783fc997bb371c64a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.