ETH Price: $3,350.81 (-1.98%)

Contract

0xF84C61bB982041c030B8580d1634f00Fffb89059
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Upgrade120120542021-03-10 17:09:131388 days ago1615396153IN
0xF84C61bB...Fffb89059
0 ETH0.00270676196
Do Quest70691882019-01-15 7:10:312174 days ago1547536231IN
0xF84C61bB...Fffb89059
0 ETH0.000323059
Do Quest70635422019-01-14 7:10:202175 days ago1547449820IN
0xF84C61bB...Fffb89059
0 ETH0.000251267
Do Quest70635422019-01-14 7:10:202175 days ago1547449820IN
0xF84C61bB...Fffb89059
0 ETH0.000251267
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000123593
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000168593
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000168593
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000123593
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579212019-01-13 7:10:222176 days ago1547363422IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000123593
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70579202019-01-13 7:10:152176 days ago1547363415IN
0xF84C61bB...Fffb89059
0 ETH0.000107683
Do Quest70523332019-01-12 7:10:172177 days ago1547277017IN
0xF84C61bB...Fffb89059
0 ETH0.000061811.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
120120542021-03-10 17:09:131388 days ago1615396153
0xF84C61bB...Fffb89059
0.44502342 ETH
70362962019-01-09 10:07:382179 days ago1547028458
0xF84C61bB...Fffb89059
0.011 ETH
70349962019-01-09 4:34:272180 days ago1547008467
0xF84C61bB...Fffb89059
0.0005 ETH
70336552019-01-08 22:52:132180 days ago1546987933
0xF84C61bB...Fffb89059
0.03779355 ETH
70334882019-01-08 22:12:012180 days ago1546985521
0xF84C61bB...Fffb89059
0.001 ETH
70327742019-01-08 19:07:462180 days ago1546974466
0xF84C61bB...Fffb89059
0.2118923 ETH
70324962019-01-08 17:53:242180 days ago1546970004
0xF84C61bB...Fffb89059
0.37392423 ETH
70324522019-01-08 17:41:422180 days ago1546969302
0xF84C61bB...Fffb89059
0.08179355 ETH
70323752019-01-08 17:22:202180 days ago1546968140
0xF84C61bB...Fffb89059
0.00825 ETH
70323512019-01-08 17:17:352180 days ago1546967855
0xF84C61bB...Fffb89059
0.03779355 ETH
70323082019-01-08 17:02:422180 days ago1546966962
0xF84C61bB...Fffb89059
0.14846969 ETH
70322702019-01-08 16:52:452180 days ago1546966365
0xF84C61bB...Fffb89059
0.0055 ETH
70322182019-01-08 16:39:012180 days ago1546965541
0xF84C61bB...Fffb89059
0.08658711 ETH
70321682019-01-08 16:24:172180 days ago1546964657
0xF84C61bB...Fffb89059
0.23776134 ETH
70321622019-01-08 16:22:172180 days ago1546964537
0xF84C61bB...Fffb89059
0.15466098 ETH
70321462019-01-08 16:18:032180 days ago1546964283
0xF84C61bB...Fffb89059
0.03779355 ETH
70304892019-01-08 9:18:012181 days ago1546939081
0xF84C61bB...Fffb89059
0.187 ETH
70270952019-01-07 18:29:212181 days ago1546885761
0xF84C61bB...Fffb89059
0.002 ETH
70263692019-01-07 15:22:532181 days ago1546874573
0xF84C61bB...Fffb89059
0.016 ETH
70258132019-01-07 13:03:162181 days ago1546866196
0xF84C61bB...Fffb89059
0.001 ETH
70256702019-01-07 12:24:052181 days ago1546863845
0xF84C61bB...Fffb89059
0.004 ETH
70235422019-01-07 3:29:182182 days ago1546831758
0xF84C61bB...Fffb89059
0.00825 ETH
70216262019-01-06 19:14:372182 days ago1546802077
0xF84C61bB...Fffb89059
0.0005 ETH
70180882019-01-06 3:57:282183 days ago1546747048
0xF84C61bB...Fffb89059
0.033 ETH
70168542019-01-05 22:39:362183 days ago1546727976
0xF84C61bB...Fffb89059
0.001 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0xed82175999a58813e5344760780638e5049d7337c3aa11bc2051e9c4a83cd8cd


Contract Source Code Verified (Exact Match)

Contract Name:
CryptoMiningWar

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-28
*/

pragma solidity ^0.4.24;

/*
* CryptoMiningWar - Mining Contest Game
* Author: InspiGames
* Website: https://cryptominingwar.github.io/
*/
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }

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

/**
 * @title PullPayment
 * @dev Base contract supporting async send for pull payments. Inherit from this
 * contract and use asyncSend instead of send or transfer.
 */
contract PullPayment {
  using SafeMath for uint256;

  mapping(address => uint256) public payments;
  uint256 public totalPayments;

  /**
  * @dev Withdraw accumulated balance, called by payee.
  */
  function withdrawPayments() public {
    address payee = msg.sender;
    uint256 payment = payments[payee];

    require(payment != 0);
    require(address(this).balance >= payment);

    totalPayments = totalPayments.sub(payment);
    payments[payee] = 0;

    payee.transfer(payment);
  }

  /**
  * @dev Called by the payer to store the sent amount as credit to be pulled.
  * @param dest The destination address of the funds.
  * @param amount The amount to transfer.
  */
  function asyncSend(address dest, uint256 amount) internal {
    payments[dest] = payments[dest].add(amount);
    totalPayments = totalPayments.add(amount);
  }
}

interface MiniGameInterface {
     function setupMiniGame(uint256 _miningWarRoundNumber, uint256 _miningWarDeadline) external;
     function isContractMiniGame() external pure returns( bool _isContractMiniGame );
}

contract CryptoMiningWar is PullPayment {
    bool public initialized = false;
    uint256 public roundNumber = 0;
    uint256 public deadline;
    uint256 public CRTSTAL_MINING_PERIOD = 86400; 
    uint256 public HALF_TIME = 8 hours;
    uint256 public ROUND_TIME = 86400 * 7;
	uint256 public prizePool = 0;
    uint256 BASE_PRICE = 0.005 ether;
    uint256 RANK_LIST_LIMIT = 10000;
    uint256 randNonce = 0;
    uint256 public totalContractMiniGame = 0;
    
    mapping(uint256 => address) public contractsMiniGameAddress;
    //miner info
    mapping(uint256 => MinerData) private minerData;
    uint256 private numberOfMiners;
    // plyer info
    mapping(address => PlayerData) public players;
    //booster info
    uint256 private numberOfBoosts;
    mapping(uint256 => BoostData) private boostData;
    //mini game contract info
    mapping(address => bool) public miniGames;   
    
    uint256 private numberOfRank;
    address[21] rankList;
    address public sponsor;
    uint256 public sponsorLevel;
    address public administrator;
    /*** DATATYPES ***/
    struct PlayerData {
        uint256 roundNumber;
        mapping(uint256 => uint256) minerCount;
        uint256 hashrate;
        uint256 crystals;
        uint256 lastUpdateTime;
        uint256 referral_count;
        uint256 noQuest;
    }
    struct MinerData {
        uint256 basePrice;
        uint256 baseProduct;
        uint256 limit;
    }
    struct BoostData {
        address owner;
        uint256 boostRate;
        uint256 startingLevel;
        uint256 startingTime;
        uint256 halfLife;
    }
    modifier isNotOver() 
    {
        require(now <= deadline);
        _;
    }
    modifier disableContract()
    {
        require(tx.origin == msg.sender);
        _;
    }
    modifier isCurrentRound() 
    {
        require(players[msg.sender].roundNumber == roundNumber);
        _;
    }
    modifier onlyContractsMiniGame() 
    {
        require(miniGames[msg.sender] == true);
        _;
    }
    event eventDoQuest(
        uint clientNumber,
        uint randomNumber
    );
    constructor() public {
        administrator = msg.sender;
        numberOfMiners = 8;
        numberOfBoosts = 5;
        numberOfRank = 21;
        //init miner data
        //                      price,          prod.     limit
        minerData[0] = MinerData(10,            10,         10);   //lv1
        minerData[1] = MinerData(100,           200,        2);    //lv2
        minerData[2] = MinerData(400,           800,        4);    //lv3
        minerData[3] = MinerData(1600,          3200,       8);    //lv4 
        minerData[4] = MinerData(6400,          9600,       16);   //lv5 
        minerData[5] = MinerData(25600,         38400,      32);   //lv6 
        minerData[6] = MinerData(204800,        204800,     64);   //lv7 
        minerData[7] = MinerData(1638400,       819200,     65536); //lv8
    }
    function () public payable
    {
		prizePool = SafeMath.add(prizePool, msg.value);
    }
    function startGame() public
    {
        require(msg.sender == administrator);
        require(!initialized);
        
        startNewRound();
        initialized = true;
    }
    /**
    * @dev add crystals to a player
    * msg.sender should be in the list of mini game
    */
    function addCrystal( address _addr, uint256 _value ) public onlyContractsMiniGame
    {
        require(players[_addr].roundNumber == roundNumber);

        uint256 crystals = SafeMath.mul(_value, CRTSTAL_MINING_PERIOD);
        PlayerData storage p = players[_addr];
        p.crystals =  SafeMath.add( p.crystals, crystals ); 
    }
    /**
    * @dev sub player's crystals
    * msg.sender should be in the list of mini game
    * @param _addr player address
    */
    function subCrystal( address _addr, uint256 _value ) public onlyContractsMiniGame
    {
        require(players[_addr].roundNumber == roundNumber);
        updateCrystal( _addr );
        uint256 crystals = SafeMath.mul(_value,CRTSTAL_MINING_PERIOD);
        require(crystals <= players[_addr].crystals);

        PlayerData storage p = players[_addr];
        p.crystals =  SafeMath.sub( p.crystals, crystals ); 
    }
    /**
    * @dev add hashrate to a player.
    * msg.sender should be in the list of mini game
    */
    function addHashrate( address _addr, uint256 _value ) public onlyContractsMiniGame
    {
        require(players[_addr].roundNumber == roundNumber);

        PlayerData storage p = players[_addr];
        p.hashrate =  SafeMath.add( p.hashrate, _value ); 
    }
    /**
    * @dev sub player's hashrate
    * msg.sender should be in the list of mini game
    */
    function subHashrate( address _addr, uint256 _value ) public onlyContractsMiniGame
    {
        require(players[_addr].roundNumber == roundNumber && players[_addr].hashrate >= _value);

        PlayerData storage p = players[_addr];
        
        p.hashrate = SafeMath.sub( p.hashrate, _value ); 
    }
    function setContractsMiniGame( address _contractMiniGameAddress ) public  
    {
        require(administrator == msg.sender);

        MiniGameInterface MiniGame = MiniGameInterface( _contractMiniGameAddress );
        bool isContractMiniGame = MiniGame.isContractMiniGame();
        require( isContractMiniGame == true );

        if ( miniGames[_contractMiniGameAddress] == false ) {
            miniGames[_contractMiniGameAddress] = true;
            contractsMiniGameAddress[totalContractMiniGame] = _contractMiniGameAddress;
            totalContractMiniGame = totalContractMiniGame + 1;
        }
    }
    /**
    * @dev remove mini game contract from main contract
    * @param _contractMiniGameAddress mini game contract address
    */
    function removeContractMiniGame(address _contractMiniGameAddress) public
    {
        require(administrator == msg.sender);        
        miniGames[_contractMiniGameAddress] = false;
    }

    function startNewRound() private 
    {
        deadline = SafeMath.add(now, ROUND_TIME);
        roundNumber = SafeMath.add(roundNumber, 1);
        initData();
        setupMiniGame();
    }
    function setupMiniGame() private 
    {
        for ( uint256 index = 0; index < totalContractMiniGame; index++ ) {
            if (miniGames[contractsMiniGameAddress[index]] == true) {
                MiniGameInterface MiniGame = MiniGameInterface( contractsMiniGameAddress[index] );
                MiniGame.setupMiniGame(roundNumber,deadline);
            }   
        }
    }
    function initData() private
    {
        sponsor = administrator;
        sponsorLevel = 6;
        //init booster data
        boostData[0] = BoostData(0, 150, 1, now, HALF_TIME);
        boostData[1] = BoostData(0, 175, 1, now, HALF_TIME);
        boostData[2] = BoostData(0, 200, 1, now, HALF_TIME);
        boostData[3] = BoostData(0, 225, 1, now, HALF_TIME);
        boostData[4] = BoostData(msg.sender, 250, 2, now, HALF_TIME);
        for (uint256 idx = 0; idx < numberOfRank; idx++) {
            rankList[idx] = 0;
        }
    }
    function lottery() public disableContract
    {
        require(now > deadline);
        uint256 balance = SafeMath.div(SafeMath.mul(prizePool, 90), 100);
		uint256 devFee = SafeMath.div(SafeMath.mul(prizePool, 5), 100);
		asyncSend(administrator, devFee);
        uint8[10] memory profit = [30,20,10,8,7,5,5,5,5,5];
		uint256 totalPayment = 0;
		uint256 rankPayment = 0;
        for(uint256 idx = 0; idx < 10; idx++){
            if(rankList[idx] != 0){
				rankPayment = SafeMath.div(SafeMath.mul(balance, profit[idx]),100);
				asyncSend(rankList[idx], rankPayment);
				totalPayment = SafeMath.add(totalPayment, rankPayment);
            }
        }
		prizePool = SafeMath.add(devFee, SafeMath.sub(balance, totalPayment));
        startNewRound();
    }
    function getRankList() public view returns(address[21])
    {
        return rankList;
    }
    //sponser
    function becomeSponsor() public isNotOver payable
    {
        require(msg.value >= getSponsorFee());
		require(msg.sender != sponsor);
		uint256 sponsorPrice = getCurrentPrice(sponsorLevel);
		asyncSend(sponsor, sponsorPrice);
		prizePool = SafeMath.add(prizePool, SafeMath.sub(msg.value, sponsorPrice));
        sponsor = msg.sender;
        sponsorLevel = SafeMath.add(sponsorLevel, 1);
    }
    function getSponsorFee() public view returns(uint256 sponsorFee)
    {
        sponsorFee = getCurrentPrice(SafeMath.add(sponsorLevel, 1));
    }
    //--------------------------------------------------------------------------
    // Miner 
    //--------------------------------------------------------------------------
    /**
    * @dev get a free miner
    */
    function getFreeMiner() public disableContract isNotOver
    {
        require(players[msg.sender].roundNumber != roundNumber);
        PlayerData storage p = players[msg.sender];
        //reset player data
        if(p.hashrate > 0){
            for (uint idx = 1; idx < numberOfMiners; idx++) {
                p.minerCount[idx] = 0;
            }
        }
        MinerData storage m0 = minerData[0];
        p.crystals = 0;
        p.roundNumber = roundNumber;
        //free miner
        p.lastUpdateTime = now;
        p.referral_count = 0;
        p.noQuest        = 0;
        p.minerCount[0] = 1;
        p.hashrate = m0.baseProduct;
    }
	function doQuest(uint256 clientNumber) disableContract isCurrentRound isNotOver public
	{
		PlayerData storage p = players[msg.sender];
        p.noQuest            = SafeMath.add(p.noQuest, 1);
		uint256 randomNumber = getRandomNumber(msg.sender);
		if(clientNumber == randomNumber) {
            p.referral_count = SafeMath.add(p.referral_count, 1);
		}
		emit eventDoQuest(clientNumber, randomNumber);
	}
    function buyMiner(uint256[] minerNumbers) public isNotOver isCurrentRound
    {   
        require(minerNumbers.length == numberOfMiners);
        uint256 minerIdx = 0;
        MinerData memory m;
        for (; minerIdx < numberOfMiners; minerIdx++) {
            m = minerData[minerIdx];
            if(minerNumbers[minerIdx] > m.limit || minerNumbers[minerIdx] < 0){
                revert();
            }
        }
        updateCrystal(msg.sender);
        PlayerData storage p = players[msg.sender];
        uint256 price = 0;
        uint256 minerNumber = 0;
        for (minerIdx = 0; minerIdx < numberOfMiners; minerIdx++) {
            minerNumber = minerNumbers[minerIdx];
            if (minerNumber > 0) {
                m = minerData[minerIdx];
                price = SafeMath.add(price, SafeMath.mul(m.basePrice, minerNumber));
            }
        }
        price = SafeMath.mul(price, CRTSTAL_MINING_PERIOD);
        if(p.crystals < price){
            revert();
        }
        p.crystals = SafeMath.sub(p.crystals, price);
        uint256 hashrate = 0;
        for (minerIdx = 0; minerIdx < numberOfMiners; minerIdx++) {
            minerNumber = minerNumbers[minerIdx];
            if (minerNumber > 0) {
                m = minerData[minerIdx];
                uint256 currentMinerCount = p.minerCount[minerIdx];
                p.minerCount[minerIdx] = SafeMath.min(m.limit, SafeMath.add(p.minerCount[minerIdx], minerNumber));
                // calculate no hashrate you want buy
                hashrate = SafeMath.add(hashrate, SafeMath.mul(SafeMath.sub(p.minerCount[minerIdx],currentMinerCount), minerData[minerIdx].baseProduct));
            }
        }

        updateHashrate(msg.sender, hashrate);
    }
    function getPlayerData(address addr) public view
    returns (uint256 crystals, uint256 lastupdate, uint256 hashratePerDay, uint256[8] miners, uint256 hasBoost, uint256 referral_count, uint256 playerBalance, uint256 noQuest )
    {
        PlayerData storage p = players[addr];
        if(p.roundNumber != roundNumber){
            p = players[0];
        }
        crystals   = SafeMath.div(p.crystals, CRTSTAL_MINING_PERIOD);
        lastupdate = p.lastUpdateTime;
        hashratePerDay = addReferralHashrate(addr, p.hashrate);
        uint256 i = 0;
        for(i = 0; i < numberOfMiners; i++)
        {
            miners[i] = p.minerCount[i];
        }
        hasBoost = hasBooster(addr);
        referral_count = p.referral_count;
        noQuest        = p.noQuest; 
		playerBalance = payments[addr];
    }
    function getHashratePerDay(address minerAddr) public view returns (uint256 personalProduction)
    {
        PlayerData storage p = players[minerAddr];   
        personalProduction = addReferralHashrate(minerAddr, p.hashrate);
        uint256 boosterIdx = hasBooster(minerAddr);
        if (boosterIdx != 999) {
            BoostData storage b = boostData[boosterIdx];
            personalProduction = SafeMath.div(SafeMath.mul(personalProduction, b.boostRate), 100);
        }
    }
    //--------------------------------------------------------------------------
    // BOOSTER 
    //--------------------------------------------------------------------------
    function buyBooster(uint256 idx) public isNotOver isCurrentRound payable 
    {
        require(idx < numberOfBoosts);
        BoostData storage b = boostData[idx];
        if(msg.value < getBoosterPrice(idx) || msg.sender == b.owner){
            revert();
        }
        address beneficiary = b.owner;
		uint256 devFeePrize = devFee(getBoosterPrice(idx));
		asyncSend(sponsor, devFeePrize);
		uint256 refundPrize = 0;
        if(beneficiary != 0){
			refundPrize = SafeMath.div(SafeMath.mul(getBoosterPrice(idx), 55), 100);
			asyncSend(beneficiary, refundPrize);
        }
		prizePool = SafeMath.add(prizePool, SafeMath.sub(msg.value, SafeMath.add(devFeePrize, refundPrize)));
        updateCrystal(msg.sender);
        updateCrystal(beneficiary);
        uint256 level = getCurrentLevel(b.startingLevel, b.startingTime, b.halfLife);
        b.startingLevel = SafeMath.add(level, 1);
        b.startingTime = now;
        // transfer ownership    
        b.owner = msg.sender;
    }
    function getBoosterData(uint256 idx) public view returns (address owner,uint256 boostRate, uint256 startingLevel, 
        uint256 startingTime, uint256 currentPrice, uint256 halfLife)
    {
        require(idx < numberOfBoosts);
        owner            = boostData[idx].owner;
        boostRate        = boostData[idx].boostRate; 
        startingLevel    = boostData[idx].startingLevel;
        startingTime     = boostData[idx].startingTime;
        currentPrice     = getBoosterPrice(idx);
        halfLife         = boostData[idx].halfLife;
    }
    function getBoosterPrice(uint256 index) public view returns (uint256)
    {
        BoostData storage booster = boostData[index];
        return getCurrentPrice(getCurrentLevel(booster.startingLevel, booster.startingTime, booster.halfLife));
    }
    function hasBooster(address addr) public view returns (uint256 boostIdx)
    {         
        boostIdx = 999;
        for(uint256 i = 0; i < numberOfBoosts; i++){
            uint256 revert_i = numberOfBoosts - i - 1;
            if(boostData[revert_i].owner == addr){
                boostIdx = revert_i;
                break;
            }
        }
    }
    //--------------------------------------------------------------------------
    // Other 
    //--------------------------------------------------------------------------
    function devFee(uint256 amount) public pure returns(uint256)
    {
        return SafeMath.div(SafeMath.mul(amount, 5), 100);
    }
    function getBalance() public view returns(uint256)
    {
        return address(this).balance;
    }
	//@dev use this function in case of bug
    function upgrade(address addr) public 
    {
        require(msg.sender == administrator);
        selfdestruct(addr);
    }

    //--------------------------------------------------------------------------
    // Private 
    //--------------------------------------------------------------------------
    /**
    * @param addr is player address you want add hash rate
    * @param _hashrate is no hashrate you want add for this player
    */
    function updateHashrate(address addr, uint256 _hashrate) private
    {
        PlayerData storage p = players[addr];
        p.hashrate = SafeMath.add(p.hashrate, _hashrate);
        if(p.hashrate > RANK_LIST_LIMIT){
            updateRankList(addr);
        }
    }
    function updateCrystal(address addr) private
    {
        require(now > players[addr].lastUpdateTime);
        if (players[addr].lastUpdateTime != 0) {
            PlayerData storage p = players[addr];
            uint256 secondsPassed = SafeMath.sub(now, p.lastUpdateTime);
            uint256 revenue = getHashratePerDay(addr);
            p.lastUpdateTime = now;
            if (revenue > 0) {
                revenue = SafeMath.mul(revenue, secondsPassed);
                p.crystals = SafeMath.add(p.crystals, revenue);
            }
        }
    }
    function addReferralHashrate(address addr, uint256 hashrate) private view returns(uint256 personalProduction) 
    {
        PlayerData storage p = players[addr];
        if(p.referral_count < 5){
            personalProduction = SafeMath.add(hashrate, SafeMath.mul(p.referral_count, 10));
        }else if(p.referral_count < 10){
            personalProduction = SafeMath.add(hashrate, SafeMath.add(50, SafeMath.mul(p.referral_count, 10)));
        }else{
            personalProduction = SafeMath.add(hashrate, 200);
        }
    }
    function getCurrentLevel(uint256 startingLevel, uint256 startingTime, uint256 halfLife) private view returns(uint256) 
    {
        uint256 timePassed=SafeMath.sub(now, startingTime);
        uint256 levelsPassed=SafeMath.div(timePassed, halfLife);
        if (startingLevel < levelsPassed) {
            return 0;
        }
        return SafeMath.sub(startingLevel, levelsPassed);
    }
    function getCurrentPrice(uint256 currentLevel) private view returns(uint256) 
    {
        return SafeMath.mul(BASE_PRICE, 2**currentLevel);
    }
    function updateRankList(address addr) private returns(bool)
    {
        uint256 idx = 0;
        PlayerData storage insert = players[addr];
        PlayerData storage lastOne = players[rankList[19]];
        if(insert.hashrate < lastOne.hashrate) {
            return false;
        }
        address[21] memory tempList = rankList;
        if(!inRankList(addr)){
            tempList[20] = addr;
            quickSort(tempList, 0, 20);
        }else{
            quickSort(tempList, 0, 19);
        }
        for(idx = 0;idx < 21; idx++){
            if(tempList[idx] != rankList[idx]){
                rankList[idx] = tempList[idx];
            }
        }
        
        return true;
    }
    function inRankList(address addr) internal view returns(bool)
    {
        for(uint256 idx = 0;idx < 20; idx++){
            if(addr == rankList[idx]){
                return true;
            }
        }
        return false;
    }
	function getRandomNumber(address playerAddress) internal returns(uint256 randomNumber) {
        randNonce++;
        randomNumber = uint256(keccak256(abi.encodePacked(now, playerAddress, randNonce))) % 3;
    }
    function quickSort(address[21] list, int left, int right) internal
    {
        int i = left;
        int j = right;
        if(i == j) return;
        address addr = list[uint(left + (right - left) / 2)];
        PlayerData storage p = players[addr];
        while (i <= j) {
            while (players[list[uint(i)]].hashrate > p.hashrate) i++;
            while (p.hashrate > players[list[uint(j)]].hashrate) j--;
            if (i <= j) {
                (list[uint(i)], list[uint(j)]) = (list[uint(j)], list[uint(i)]);
                i++;
                j--;
            }
        }
        if (left < j)
            quickSort(list, left, j);
        if (i < right)
            quickSort(list, i, right);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"totalPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"minerAddr","type":"address"}],"name":"getHashratePerDay","outputs":[{"name":"personalProduction","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getBoosterPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getPlayerData","outputs":[{"name":"crystals","type":"uint256"},{"name":"lastupdate","type":"uint256"},{"name":"hashratePerDay","type":"uint256"},{"name":"miners","type":"uint256[8]"},{"name":"hasBoost","type":"uint256"},{"name":"referral_count","type":"uint256"},{"name":"playerBalance","type":"uint256"},{"name":"noQuest","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getBoosterData","outputs":[{"name":"owner","type":"address"},{"name":"boostRate","type":"uint256"},{"name":"startingLevel","type":"uint256"},{"name":"startingTime","type":"uint256"},{"name":"currentPrice","type":"uint256"},{"name":"halfLife","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"subHashrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"roundNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minerNumbers","type":"uint256[]"}],"name":"buyMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"HALF_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalContractMiniGame","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"prizePool","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sponsor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROUND_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contractMiniGameAddress","type":"address"}],"name":"setContractsMiniGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSponsorFee","outputs":[{"name":"sponsorFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contractMiniGameAddress","type":"address"}],"name":"removeContractMiniGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRankList","outputs":[{"name":"","type":"address[21]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"hasBooster","outputs":[{"name":"boostIdx","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"subCrystal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"miniGames","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contractsMiniGameAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"lottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getFreeMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CRTSTAL_MINING_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idx","type":"uint256"}],"name":"buyBooster","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"startGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"players","outputs":[{"name":"roundNumber","type":"uint256"},{"name":"hashrate","type":"uint256"},{"name":"crystals","type":"uint256"},{"name":"lastUpdateTime","type":"uint256"},{"name":"referral_count","type":"uint256"},{"name":"noQuest","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"becomeSponsor","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"sponsorLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"addHashrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"clientNumber","type":"uint256"}],"name":"doQuest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"administrator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"addCrystal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"clientNumber","type":"uint256"},{"indexed":false,"name":"randomNumber","type":"uint256"}],"name":"eventDoQuest","type":"event"}]

60806040526002805460ff19169055600060038190556201518060055561708060065562093a8060075560088190556611c37937e08000600955612710600a55600b819055600c5534801561005357600080fd5b50602c8054600160a060020a031916331790556008600f8190556005601181905560156014556040805160608181018352600a80835260208084018281528486019283526000808052600e80845295517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c5590517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d5591517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881e55845180840186526064815260c881830190815260028288018181526001865287855292517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582075590517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582085590517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820955855180850187526101908152610320818401908152600482890181815293865287855291517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f048155517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f04825590517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f048355855180850187526106408152610c80818401908152818801998a526003855286845290517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814455517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c9081455596517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814655845180840186526119008152612580818301908152601082880190815298845285835290517fa1d6913cd9e08c872be3e7525cca82e4fc0fc298a783f19022be725b19be685a55517fa1d6913cd9e08c872be3e7525cca82e4fc0fc298a783f19022be725b19be685b5595517fa1d6913cd9e08c872be3e7525cca82e4fc0fc298a783f19022be725b19be685c5583518083018552616400815261960081880190815281860188815296835284885290517fb9bec7e2561f624fe753ff070f1599b306cbf59fafd4e8d5a8184a1ea1841bce55517fb9bec7e2561f624fe753ff070f1599b306cbf59fafd4e8d5a8184a1ea1841bcf5593517fb9bec7e2561f624fe753ff070f1599b306cbf59fafd4e8d5a8184a1ea1841bd05582518082018452620320008082528187019081528185018581526006875284885291517f92b4482321f41ce3aa65f798bda23d0d12a60fc5f212868a548ddb00aa49de7255517f92b4482321f41ce3aa65f798bda23d0d12a60fc5f212868a548ddb00aa49de7355517f92b4482321f41ce3aa65f798bda23d0d12a60fc5f212868a548ddb00aa49de745582519081018352621900008152620c8000818601908152620100009382019384526007909452935291517f376529bb8a2d41b4a589a133407fc64f3212472dbd74744348be1098bf7ba08d55517f376529bb8a2d41b4a589a133407fc64f3212472dbd74744348be1098bf7ba08e55517f376529bb8a2d41b4a589a133407fc64f3212472dbd74744348be1098bf7ba08f5561241c806104fc6000396000f3006080604052600436106101ec5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416625b448781146101fd5780630900f0101461022457806312065fe014610247578063158ef93e1461025c5780632243fb1514610285578063294cf912146102a657806329dcb0cf146102be5780632aa531d9146102d357806339901be8146103605780633bc0461a146103b55780633e870d63146103cd5780634e2786fb146103f15780634ec2d0b6146104065780634f9d482a1461045b5780636103d70b146104705780636a76c52214610485578063719ce73e1461049a57806377c93662146104af5780637892fd29146104e057806384ffcb5d146104f55780639f8ff91d146105165780639ff12bba1461052b578063a1a200c51461054c578063ad5b71891461059a578063b04eb639146105bb578063b239dac6146105df578063b82af34314610600578063ba13a57214610618578063c572dcc31461062d578063cee0b4fe14610642578063d223926f14610657578063d65ab5f214610662578063e2982c2114610677578063e2eb41ff14610698578063e3e9bc3f146106ec578063ea6f1c4a146106f4578063ef7f2e1c14610709578063efce079e1461072d578063f53d0a8e14610745578063f6e212ea1461075a575b6101f86008543461077e565b600855005b34801561020957600080fd5b50610212610798565b60408051918252519081900360200190f35b34801561023057600080fd5b50610245600160a060020a036004351661079e565b005b34801561025357600080fd5b506102126107c1565b34801561026857600080fd5b506102716107c6565b604080519115158252519081900360200190f35b34801561029157600080fd5b50610212600160a060020a03600435166107cf565b3480156102b257600080fd5b50610212600435610846565b3480156102ca57600080fd5b50610212610880565b3480156102df57600080fd5b506102f4600160a060020a0360043516610886565b6040518089815260200188815260200187815260200186600860200280838360005b8381101561032e578181015183820152602001610316565b505050509050018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b34801561036c57600080fd5b50610378600435610999565b60408051600160a060020a0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156103c157600080fd5b50610212600435610a0f565b3480156103d957600080fd5b50610245600160a060020a0360043516602435610a25565b3480156103fd57600080fd5b50610212610ac7565b34801561041257600080fd5b506040805160206004803580820135838102808601850190965280855261024595369593946024949385019291829185019084908082843750949750610acd9650505050505050565b34801561046757600080fd5b50610212610d86565b34801561047c57600080fd5b50610245610d8c565b34801561049157600080fd5b50610212610e15565b3480156104a657600080fd5b50610212610e1b565b3480156104bb57600080fd5b506104c4610e21565b60408051600160a060020a039092168252519081900360200190f35b3480156104ec57600080fd5b50610212610e30565b34801561050157600080fd5b50610245600160a060020a0360043516610e36565b34801561052257600080fd5b50610212610f68565b34801561053757600080fd5b50610245600160a060020a0360043516610f7f565b34801561055857600080fd5b50610561610fb7565b60405180826102a080838360005b8381101561058757818101518382015260200161056f565b5050505090500191505060405180910390f35b3480156105a657600080fd5b50610212600160a060020a0360043516610ffc565b3480156105c757600080fd5b50610245600160a060020a0360043516602435611054565b3480156105eb57600080fd5b50610271600160a060020a0360043516611110565b34801561060c57600080fd5b506104c4600435611125565b34801561062457600080fd5b50610245611140565b34801561063957600080fd5b5061024561129e565b34801561064e57600080fd5b50610212611383565b610245600435611389565b34801561066e57600080fd5b506102456114f3565b34801561068357600080fd5b50610212600160a060020a0360043516611531565b3480156106a457600080fd5b506106b9600160a060020a0360043516611543565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610245611578565b34801561070057600080fd5b50610212611620565b34801561071557600080fd5b50610245600160a060020a0360043516602435611626565b34801561073957600080fd5b50610245600435611695565b34801561075157600080fd5b506104c461175f565b34801561076657600080fd5b50610245600160a060020a036004351660243561176e565b60008282018381101561078d57fe5b8091505b5092915050565b60015481565b602c54600160a060020a031633146107b557600080fd5b80600160a060020a0316ff5b303190565b60025460ff1681565b600160a060020a03811660009081526010602052604081206002810154829081906107fb9086906117ef565b935061080685610ffc565b91506103e7821461083e57506000818152601260205260409020600181015461083b90610834908690611865565b6064611890565b93505b505050919050565b6000818152601260205260408120600281015460038201546004830154610877926108729290916118a7565b6118eb565b91505b50919050565b60045481565b600080600061089361236e565b600160a060020a038516600090815260106020526040812060035481548392839283928391146108ea576000805260106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0191505b6108fa8260030154600554611890565b9950816004015498506109118b83600201546117ef565b9750600090505b600f5481101561094c57600081815260018301602052604090205487826008811061093f57fe5b6020020152600101610918565b6109558b610ffc565b955081600501549450816006015492506000808c600160a060020a0316600160a060020a031681526020019081526020016000205493505050919395975091939597565b600080600080600080601154871015156109b257600080fd5b6000878152601260205260409020805460018201546002830154600390930154600160a060020a039092169850965090945092506109ef87610846565b600097885260126020526040909720600401549597949693959294915050565b6000610a1f610834836005611865565b92915050565b3360009081526013602052604081205460ff161515600114610a4657600080fd5b600354600160a060020a038416600090815260106020526040902054148015610a8a5750600160a060020a0383166000908152601060205260409020600201548211155b1515610a9557600080fd5b50600160a060020a03821660009081526010602052604090206002810154610abd90836118fc565b6002909101555050565b60035481565b6000610ad761238e565b60008060008060006004544211151515610af057600080fd5b6003543360009081526010602052604090205414610b0d57600080fd5b600f54885114610b1c57600080fd5b600096505b600f54871015610bb2576000878152600e6020908152604091829020825160608101845281548152600182015492810192909252600201549181018290528951909750899089908110610b7057fe5b906020019060200201511180610b9d575060008888815181101515610b9157fe5b90602001906020020151105b15610ba757600080fd5b600190960195610b21565b610bbb3361190e565b33600090815260106020526040812090975094508693508392505b600f54871015610c67578787815181101515610bee57fe5b9060200190602002015192506000831115610c5c57600e60008881526020019081526020016000206060604051908101604052908160008201548152602001600182015481526020016002820154815250509550610c5984610c54886000015186611865565b61077e565b93505b600190960195610bd6565b610c7384600554611865565b93508385600301541015610c8657600080fd5b610c948560030154856118fc565b6003860155600096508691505b600f54871015610d72578787815181101515610cb957fe5b9060200190602002015192506000831115610d6757506000868152600e60209081526040808320815160608101835281548152600180830154828601526002909201548184019081528b86529189019093529220549151909650610d2690610d21838661077e565b6119c7565b60008881526001870160205260409020819055610d64908390610c5490610d4d90856118fc565b60008b8152600e6020526040902060010154611865565b91505b600190960195610ca1565b610d7c33836119df565b5050505050505050565b60065481565b33600081815260208190526040902054801515610da857600080fd5b3031811115610db657600080fd5b600154610dc9908263ffffffff6118fc16565b600155600160a060020a0382166000818152602081905260408082208290555183156108fc0291849190818181858888f19350505050158015610e10573d6000803e3d6000fd5b505050565b600c5481565b60085481565b602a54600160a060020a031681565b60075481565b602c546000908190600160a060020a03163314610e5257600080fd5b82915081600160a060020a0316633281d5766040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050506040513d6020811015610ed657600080fd5b50519050600181151514610ee957600080fd5b600160a060020a03831660009081526013602052604090205460ff161515610e10575050600160a060020a03166000818152601360209081526040808320805460ff19166001908117909155600c80548552600d9093529220805473ffffffffffffffffffffffffffffffffffffffff19169093179092558154019055565b6000610f7a610872602b54600161077e565b905090565b602c54600160a060020a03163314610f9657600080fd5b600160a060020a03166000908152601360205260409020805460ff19169055565b610fbf6123b0565b604080516102a081019182905290601590819081845b8154600160a060020a03168152600190910190602001808311610fd5575050505050905090565b6103e76000805b60115482101561104d575060115481900360001901600081815260126020526040902054600160a060020a03858116911614156110425780925061104d565b600190910190611003565b5050919050565b33600090815260136020526040812054819060ff16151560011461107757600080fd5b600354600160a060020a0385166000908152601060205260409020541461109d57600080fd5b6110a68461190e565b6110b283600554611865565b600160a060020a0385166000908152601060205260409020600301549092508211156110dd57600080fd5b50600160a060020a0383166000908152601060205260409020600381015461110590836118fc565b600390910155505050565b60136020526000908152604090205460ff1681565b600d60205260009081526040902054600160a060020a031681565b60008061114b6123d0565b6000808032331461115b57600080fd5b600454421161116957600080fd5b611179610834600854605a611865565b955061118b6108346008546005611865565b602c549095506111a490600160a060020a031686611a1f565b50506040805161014081018252601e815260146020820152600a918101919091526008606082015260076080820152600560a0820181905260c0820181905260e08201819052610100820181905261012082015291506000905080805b600a81101561127d5760158181811061121657fe5b0154600160a060020a03161561127557611246610834878684600a811061123957fe5b602002015160ff16611865565b915061126860158281811061125757fe5b0154600160a060020a031683611a1f565b611272838361077e565b92505b600101611201565b61128b85610c5488866118fc565b600855611296611a7b565b505050505050565b600080803233146112ae57600080fd5b6004544211156112bd57600080fd5b6003543360009081526010602052604090205414156112db57600080fd5b3360009081526010602052604081206002810154909450111561132557600191505b600f5482101561132557600082815260018481016020526040822091909155909101906112fd565b505060008080526003808301829055548255426004830155600582018190556006820181905560018083016020526040909120557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d54600290910155565b60055481565b600080600080600060045442111515156113a257600080fd5b60035433600090815260106020526040902054146113bf57600080fd5b60115486106113cd57600080fd5b600086815260126020526040902094506113e686610846565b3410806113fc57508454600160a060020a031633145b1561140657600080fd5b8454600160a060020a0316935061142461141f87610846565b610a0f565b602a5490935061143d90600160a060020a031684611a1f565b60009150600160a060020a038416156114725761146661083461145f88610846565b6037611865565b91506114728483611a1f565b61148b600854610c5434611486878761077e565b6118fc565b6008556114973361190e565b6114a08461190e565b6114b78560020154866003015487600401546118a7565b90506114c481600161077e565b600286015550504260038401555050805473ffffffffffffffffffffffffffffffffffffffff19163317905550565b602c54600160a060020a0316331461150a57600080fd5b60025460ff161561151a57600080fd5b611522611a7b565b6002805460ff19166001179055565b60006020819052908152604090205481565b601060205260009081526040902080546002820154600383015460048401546005850154600690950154939492939192909186565b60045460009042111561158a57600080fd5b611592610f68565b34101561159e57600080fd5b602a54600160a060020a03163314156115b657600080fd5b6115c1602b546118eb565b602a549091506115da90600160a060020a031682611a1f565b6115ea600854610c5434846118fc565b600855602a805473ffffffffffffffffffffffffffffffffffffffff191633179055602b5461161a90600161077e565b602b5550565b602b5481565b3360009081526013602052604081205460ff16151560011461164757600080fd5b600354600160a060020a0384166000908152601060205260409020541461166d57600080fd5b50600160a060020a03821660009081526010602052604090206002810154610abd908361077e565b6000803233146116a457600080fd5b60035433600090815260106020526040902054146116c157600080fd5b6004544211156116d057600080fd5b33600090815260106020526040902060068101549092506116f290600161077e565b600683015561170033611aad565b90508083141561171f576117198260050154600161077e565b60058301555b604080518481526020810183905281517f46046fe38b80ec19b608815b458b3e49c98da0ef13badaf9aa10d49c9bb2552b929181900390910190a1505050565b602c54600160a060020a031681565b33600090815260136020526040812054819060ff16151560011461179157600080fd5b600354600160a060020a038516600090815260106020526040902054146117b757600080fd5b6117c383600554611865565b600160a060020a038516600090815260106020526040902060038101549193509150611105908361077e565b600160a060020a0382166000908152601060205260408120600580820154101561182d5761182683610c548360050154600a611865565b9150610791565b600a816005015410156118525761182683610c546032610c548560050154600a611865565b61185d8360c861077e565b949350505050565b6000808315156118785760009150610791565b5082820282848281151561188857fe5b041461078d57fe5b600080828481151561189e57fe5b04949350505050565b60008060006118b642866118fc565b91506118c28285611890565b9050808610156118d557600092506118e2565b6118df86826118fc565b92505b50509392505050565b6000610a1f6009548360020a611865565b60008282111561190857fe5b50900390565b600160a060020a03811660009081526010602052604081206004015481908190421161193957600080fd5b600160a060020a038416600090815260106020526040902060040154156119c157600160a060020a038416600090815260106020526040902060048101549093506119859042906118fc565b9150611990846107cf565b426004850155905060008111156119c1576119ab8183611865565b90506119bb83600301548261077e565b60038401555b50505050565b60008183106119d657816119d8565b825b9392505050565b600160a060020a03821660009081526010602052604090206002810154611a06908361077e565b60028201819055600a541015610e10576119c183611b70565b600160a060020a038216600090815260208190526040902054611a48908263ffffffff61077e16565b600160a060020a038316600090815260208190526040902055600154611a74908263ffffffff61077e16565b6001555050565b611a874260075461077e565b600455600354611a9890600161077e565b600355611aa3611ce2565b611aab6120a4565b565b600b80546001019081905560408051426020808301919091526c01000000000000000000000000600160a060020a03861602828401526054808301949094528251808303909401845260749091019182905282516000936003939092909182918401908083835b60208310611b335780518252601f199092019160209182019101611b14565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515611b6957fe5b0692915050565b600080600080611b7e6123b0565b600160a060020a03868116600090815260106020526040808220602854909316825281206002808201549084015492975092955093501015611bc35760009450611cd9565b604080516102a081019182905290601590819081845b8154600160a060020a03168152600190910190602001808311611bd95750505050509050611c068661218a565b1515611c2e57600160a060020a038616610280820152611c2981600060146121d2565b611c3b565b611c3b81600060136121d2565b600093505b6015841015611cd457601584818110611c5557fe5b0154600160a060020a0316818560158110611c6c57fe5b6020020151600160a060020a031614611cc957808460158110611c8b57fe5b6020020151601585818110611c9c57fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555b600190930192611c40565b600194505b50505050919050565b6000602c60009054906101000a9004600160a060020a0316602a60006101000a815481600160a060020a030219169083600160a060020a031602179055506006602b8190555060a0604051908101604052806000600160a060020a0316815260200160968152602001600181526020014281526020016006548152506012600080815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160af815260200160018152602001428152602001600654815250601260006001815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160c8815260200160018152602001428152602001600654815250601260006002815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160e1815260200160018152602001428152602001600654815250601260006003815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a06040519081016040528033600160a060020a0316815260200160fa815260200160028152602001428152602001600654815250601260006004815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010155604082015181600201556060820151816003015560808201518160040155905050600090505b6014548110156120a157600060158281811061206d57fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600101612055565b50565b6000805b600c54821015612186576000828152600d6020908152604080832054600160a060020a03168352601390915290205460ff1615156001141561217b57506000818152600d6020526040808220546003546004805484517fbe7ccd7e0000000000000000000000000000000000000000000000000000000081529182019290925260248101919091529151600160a060020a0390911692839263be7ccd7e926044808301939282900301818387803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050505b6001909101906120a8565b5050565b6000805b60148110156121c9576015818181106121a357fe5b0154600160a060020a03848116911614156121c1576001915061087a565b60010161218e565b50600092915050565b8181600080828414156121e457612365565b866002878703058701601581106121f757fe5b602002015191506010600083600160a060020a0316600160a060020a0316815260200190815260200160002090505b82841361233f575b60028101546010600089876015811061224357fe5b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002060020154111561227d5760019093019261222e565b6010600088856015811061228d57fe5b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002060020154816002015411156122cd576000199092019161227d565b82841361233a578683601581106122e057fe5b60200201518785601581106122f157fe5b602002015188866015811061230257fe5b6020020189866015811061231257fe5b600160a060020a03938416602091909102919091015291169052600190930192600019909201915b612226565b82861215612352576123528787856121d2565b84841215612365576123658785876121d2565b50505050505050565b610100604051908101604052806008906020820280388339509192915050565b6060604051908101604052806000815260200160008152602001600081525090565b6102a0604051908101604052806015906020820280388339509192915050565b61014060405190810160405280600a9060208202803883395091929150505600a165627a7a72305820d459b519feba707b03572c7eaa7e567bc2d8d7d211bbe6d8770fec308cc49cf80029

Deployed Bytecode

0x6080604052600436106101ec5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416625b448781146101fd5780630900f0101461022457806312065fe014610247578063158ef93e1461025c5780632243fb1514610285578063294cf912146102a657806329dcb0cf146102be5780632aa531d9146102d357806339901be8146103605780633bc0461a146103b55780633e870d63146103cd5780634e2786fb146103f15780634ec2d0b6146104065780634f9d482a1461045b5780636103d70b146104705780636a76c52214610485578063719ce73e1461049a57806377c93662146104af5780637892fd29146104e057806384ffcb5d146104f55780639f8ff91d146105165780639ff12bba1461052b578063a1a200c51461054c578063ad5b71891461059a578063b04eb639146105bb578063b239dac6146105df578063b82af34314610600578063ba13a57214610618578063c572dcc31461062d578063cee0b4fe14610642578063d223926f14610657578063d65ab5f214610662578063e2982c2114610677578063e2eb41ff14610698578063e3e9bc3f146106ec578063ea6f1c4a146106f4578063ef7f2e1c14610709578063efce079e1461072d578063f53d0a8e14610745578063f6e212ea1461075a575b6101f86008543461077e565b600855005b34801561020957600080fd5b50610212610798565b60408051918252519081900360200190f35b34801561023057600080fd5b50610245600160a060020a036004351661079e565b005b34801561025357600080fd5b506102126107c1565b34801561026857600080fd5b506102716107c6565b604080519115158252519081900360200190f35b34801561029157600080fd5b50610212600160a060020a03600435166107cf565b3480156102b257600080fd5b50610212600435610846565b3480156102ca57600080fd5b50610212610880565b3480156102df57600080fd5b506102f4600160a060020a0360043516610886565b6040518089815260200188815260200187815260200186600860200280838360005b8381101561032e578181015183820152602001610316565b505050509050018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b34801561036c57600080fd5b50610378600435610999565b60408051600160a060020a0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156103c157600080fd5b50610212600435610a0f565b3480156103d957600080fd5b50610245600160a060020a0360043516602435610a25565b3480156103fd57600080fd5b50610212610ac7565b34801561041257600080fd5b506040805160206004803580820135838102808601850190965280855261024595369593946024949385019291829185019084908082843750949750610acd9650505050505050565b34801561046757600080fd5b50610212610d86565b34801561047c57600080fd5b50610245610d8c565b34801561049157600080fd5b50610212610e15565b3480156104a657600080fd5b50610212610e1b565b3480156104bb57600080fd5b506104c4610e21565b60408051600160a060020a039092168252519081900360200190f35b3480156104ec57600080fd5b50610212610e30565b34801561050157600080fd5b50610245600160a060020a0360043516610e36565b34801561052257600080fd5b50610212610f68565b34801561053757600080fd5b50610245600160a060020a0360043516610f7f565b34801561055857600080fd5b50610561610fb7565b60405180826102a080838360005b8381101561058757818101518382015260200161056f565b5050505090500191505060405180910390f35b3480156105a657600080fd5b50610212600160a060020a0360043516610ffc565b3480156105c757600080fd5b50610245600160a060020a0360043516602435611054565b3480156105eb57600080fd5b50610271600160a060020a0360043516611110565b34801561060c57600080fd5b506104c4600435611125565b34801561062457600080fd5b50610245611140565b34801561063957600080fd5b5061024561129e565b34801561064e57600080fd5b50610212611383565b610245600435611389565b34801561066e57600080fd5b506102456114f3565b34801561068357600080fd5b50610212600160a060020a0360043516611531565b3480156106a457600080fd5b506106b9600160a060020a0360043516611543565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b610245611578565b34801561070057600080fd5b50610212611620565b34801561071557600080fd5b50610245600160a060020a0360043516602435611626565b34801561073957600080fd5b50610245600435611695565b34801561075157600080fd5b506104c461175f565b34801561076657600080fd5b50610245600160a060020a036004351660243561176e565b60008282018381101561078d57fe5b8091505b5092915050565b60015481565b602c54600160a060020a031633146107b557600080fd5b80600160a060020a0316ff5b303190565b60025460ff1681565b600160a060020a03811660009081526010602052604081206002810154829081906107fb9086906117ef565b935061080685610ffc565b91506103e7821461083e57506000818152601260205260409020600181015461083b90610834908690611865565b6064611890565b93505b505050919050565b6000818152601260205260408120600281015460038201546004830154610877926108729290916118a7565b6118eb565b91505b50919050565b60045481565b600080600061089361236e565b600160a060020a038516600090815260106020526040812060035481548392839283928391146108ea576000805260106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0191505b6108fa8260030154600554611890565b9950816004015498506109118b83600201546117ef565b9750600090505b600f5481101561094c57600081815260018301602052604090205487826008811061093f57fe5b6020020152600101610918565b6109558b610ffc565b955081600501549450816006015492506000808c600160a060020a0316600160a060020a031681526020019081526020016000205493505050919395975091939597565b600080600080600080601154871015156109b257600080fd5b6000878152601260205260409020805460018201546002830154600390930154600160a060020a039092169850965090945092506109ef87610846565b600097885260126020526040909720600401549597949693959294915050565b6000610a1f610834836005611865565b92915050565b3360009081526013602052604081205460ff161515600114610a4657600080fd5b600354600160a060020a038416600090815260106020526040902054148015610a8a5750600160a060020a0383166000908152601060205260409020600201548211155b1515610a9557600080fd5b50600160a060020a03821660009081526010602052604090206002810154610abd90836118fc565b6002909101555050565b60035481565b6000610ad761238e565b60008060008060006004544211151515610af057600080fd5b6003543360009081526010602052604090205414610b0d57600080fd5b600f54885114610b1c57600080fd5b600096505b600f54871015610bb2576000878152600e6020908152604091829020825160608101845281548152600182015492810192909252600201549181018290528951909750899089908110610b7057fe5b906020019060200201511180610b9d575060008888815181101515610b9157fe5b90602001906020020151105b15610ba757600080fd5b600190960195610b21565b610bbb3361190e565b33600090815260106020526040812090975094508693508392505b600f54871015610c67578787815181101515610bee57fe5b9060200190602002015192506000831115610c5c57600e60008881526020019081526020016000206060604051908101604052908160008201548152602001600182015481526020016002820154815250509550610c5984610c54886000015186611865565b61077e565b93505b600190960195610bd6565b610c7384600554611865565b93508385600301541015610c8657600080fd5b610c948560030154856118fc565b6003860155600096508691505b600f54871015610d72578787815181101515610cb957fe5b9060200190602002015192506000831115610d6757506000868152600e60209081526040808320815160608101835281548152600180830154828601526002909201548184019081528b86529189019093529220549151909650610d2690610d21838661077e565b6119c7565b60008881526001870160205260409020819055610d64908390610c5490610d4d90856118fc565b60008b8152600e6020526040902060010154611865565b91505b600190960195610ca1565b610d7c33836119df565b5050505050505050565b60065481565b33600081815260208190526040902054801515610da857600080fd5b3031811115610db657600080fd5b600154610dc9908263ffffffff6118fc16565b600155600160a060020a0382166000818152602081905260408082208290555183156108fc0291849190818181858888f19350505050158015610e10573d6000803e3d6000fd5b505050565b600c5481565b60085481565b602a54600160a060020a031681565b60075481565b602c546000908190600160a060020a03163314610e5257600080fd5b82915081600160a060020a0316633281d5766040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b505050506040513d6020811015610ed657600080fd5b50519050600181151514610ee957600080fd5b600160a060020a03831660009081526013602052604090205460ff161515610e10575050600160a060020a03166000818152601360209081526040808320805460ff19166001908117909155600c80548552600d9093529220805473ffffffffffffffffffffffffffffffffffffffff19169093179092558154019055565b6000610f7a610872602b54600161077e565b905090565b602c54600160a060020a03163314610f9657600080fd5b600160a060020a03166000908152601360205260409020805460ff19169055565b610fbf6123b0565b604080516102a081019182905290601590819081845b8154600160a060020a03168152600190910190602001808311610fd5575050505050905090565b6103e76000805b60115482101561104d575060115481900360001901600081815260126020526040902054600160a060020a03858116911614156110425780925061104d565b600190910190611003565b5050919050565b33600090815260136020526040812054819060ff16151560011461107757600080fd5b600354600160a060020a0385166000908152601060205260409020541461109d57600080fd5b6110a68461190e565b6110b283600554611865565b600160a060020a0385166000908152601060205260409020600301549092508211156110dd57600080fd5b50600160a060020a0383166000908152601060205260409020600381015461110590836118fc565b600390910155505050565b60136020526000908152604090205460ff1681565b600d60205260009081526040902054600160a060020a031681565b60008061114b6123d0565b6000808032331461115b57600080fd5b600454421161116957600080fd5b611179610834600854605a611865565b955061118b6108346008546005611865565b602c549095506111a490600160a060020a031686611a1f565b50506040805161014081018252601e815260146020820152600a918101919091526008606082015260076080820152600560a0820181905260c0820181905260e08201819052610100820181905261012082015291506000905080805b600a81101561127d5760158181811061121657fe5b0154600160a060020a03161561127557611246610834878684600a811061123957fe5b602002015160ff16611865565b915061126860158281811061125757fe5b0154600160a060020a031683611a1f565b611272838361077e565b92505b600101611201565b61128b85610c5488866118fc565b600855611296611a7b565b505050505050565b600080803233146112ae57600080fd5b6004544211156112bd57600080fd5b6003543360009081526010602052604090205414156112db57600080fd5b3360009081526010602052604081206002810154909450111561132557600191505b600f5482101561132557600082815260018481016020526040822091909155909101906112fd565b505060008080526003808301829055548255426004830155600582018190556006820181905560018083016020526040909120557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d54600290910155565b60055481565b600080600080600060045442111515156113a257600080fd5b60035433600090815260106020526040902054146113bf57600080fd5b60115486106113cd57600080fd5b600086815260126020526040902094506113e686610846565b3410806113fc57508454600160a060020a031633145b1561140657600080fd5b8454600160a060020a0316935061142461141f87610846565b610a0f565b602a5490935061143d90600160a060020a031684611a1f565b60009150600160a060020a038416156114725761146661083461145f88610846565b6037611865565b91506114728483611a1f565b61148b600854610c5434611486878761077e565b6118fc565b6008556114973361190e565b6114a08461190e565b6114b78560020154866003015487600401546118a7565b90506114c481600161077e565b600286015550504260038401555050805473ffffffffffffffffffffffffffffffffffffffff19163317905550565b602c54600160a060020a0316331461150a57600080fd5b60025460ff161561151a57600080fd5b611522611a7b565b6002805460ff19166001179055565b60006020819052908152604090205481565b601060205260009081526040902080546002820154600383015460048401546005850154600690950154939492939192909186565b60045460009042111561158a57600080fd5b611592610f68565b34101561159e57600080fd5b602a54600160a060020a03163314156115b657600080fd5b6115c1602b546118eb565b602a549091506115da90600160a060020a031682611a1f565b6115ea600854610c5434846118fc565b600855602a805473ffffffffffffffffffffffffffffffffffffffff191633179055602b5461161a90600161077e565b602b5550565b602b5481565b3360009081526013602052604081205460ff16151560011461164757600080fd5b600354600160a060020a0384166000908152601060205260409020541461166d57600080fd5b50600160a060020a03821660009081526010602052604090206002810154610abd908361077e565b6000803233146116a457600080fd5b60035433600090815260106020526040902054146116c157600080fd5b6004544211156116d057600080fd5b33600090815260106020526040902060068101549092506116f290600161077e565b600683015561170033611aad565b90508083141561171f576117198260050154600161077e565b60058301555b604080518481526020810183905281517f46046fe38b80ec19b608815b458b3e49c98da0ef13badaf9aa10d49c9bb2552b929181900390910190a1505050565b602c54600160a060020a031681565b33600090815260136020526040812054819060ff16151560011461179157600080fd5b600354600160a060020a038516600090815260106020526040902054146117b757600080fd5b6117c383600554611865565b600160a060020a038516600090815260106020526040902060038101549193509150611105908361077e565b600160a060020a0382166000908152601060205260408120600580820154101561182d5761182683610c548360050154600a611865565b9150610791565b600a816005015410156118525761182683610c546032610c548560050154600a611865565b61185d8360c861077e565b949350505050565b6000808315156118785760009150610791565b5082820282848281151561188857fe5b041461078d57fe5b600080828481151561189e57fe5b04949350505050565b60008060006118b642866118fc565b91506118c28285611890565b9050808610156118d557600092506118e2565b6118df86826118fc565b92505b50509392505050565b6000610a1f6009548360020a611865565b60008282111561190857fe5b50900390565b600160a060020a03811660009081526010602052604081206004015481908190421161193957600080fd5b600160a060020a038416600090815260106020526040902060040154156119c157600160a060020a038416600090815260106020526040902060048101549093506119859042906118fc565b9150611990846107cf565b426004850155905060008111156119c1576119ab8183611865565b90506119bb83600301548261077e565b60038401555b50505050565b60008183106119d657816119d8565b825b9392505050565b600160a060020a03821660009081526010602052604090206002810154611a06908361077e565b60028201819055600a541015610e10576119c183611b70565b600160a060020a038216600090815260208190526040902054611a48908263ffffffff61077e16565b600160a060020a038316600090815260208190526040902055600154611a74908263ffffffff61077e16565b6001555050565b611a874260075461077e565b600455600354611a9890600161077e565b600355611aa3611ce2565b611aab6120a4565b565b600b80546001019081905560408051426020808301919091526c01000000000000000000000000600160a060020a03861602828401526054808301949094528251808303909401845260749091019182905282516000936003939092909182918401908083835b60208310611b335780518252601f199092019160209182019101611b14565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515611b6957fe5b0692915050565b600080600080611b7e6123b0565b600160a060020a03868116600090815260106020526040808220602854909316825281206002808201549084015492975092955093501015611bc35760009450611cd9565b604080516102a081019182905290601590819081845b8154600160a060020a03168152600190910190602001808311611bd95750505050509050611c068661218a565b1515611c2e57600160a060020a038616610280820152611c2981600060146121d2565b611c3b565b611c3b81600060136121d2565b600093505b6015841015611cd457601584818110611c5557fe5b0154600160a060020a0316818560158110611c6c57fe5b6020020151600160a060020a031614611cc957808460158110611c8b57fe5b6020020151601585818110611c9c57fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555b600190930192611c40565b600194505b50505050919050565b6000602c60009054906101000a9004600160a060020a0316602a60006101000a815481600160a060020a030219169083600160a060020a031602179055506006602b8190555060a0604051908101604052806000600160a060020a0316815260200160968152602001600181526020014281526020016006548152506012600080815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160af815260200160018152602001428152602001600654815250601260006001815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160c8815260200160018152602001428152602001600654815250601260006002815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052806000600160a060020a0316815260200160e1815260200160018152602001428152602001600654815250601260006003815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a06040519081016040528033600160a060020a0316815260200160fa815260200160028152602001428152602001600654815250601260006004815260200190815260200160002060008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010155604082015181600201556060820151816003015560808201518160040155905050600090505b6014548110156120a157600060158281811061206d57fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600101612055565b50565b6000805b600c54821015612186576000828152600d6020908152604080832054600160a060020a03168352601390915290205460ff1615156001141561217b57506000818152600d6020526040808220546003546004805484517fbe7ccd7e0000000000000000000000000000000000000000000000000000000081529182019290925260248101919091529151600160a060020a0390911692839263be7ccd7e926044808301939282900301818387803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050505b6001909101906120a8565b5050565b6000805b60148110156121c9576015818181106121a357fe5b0154600160a060020a03848116911614156121c1576001915061087a565b60010161218e565b50600092915050565b8181600080828414156121e457612365565b866002878703058701601581106121f757fe5b602002015191506010600083600160a060020a0316600160a060020a0316815260200190815260200160002090505b82841361233f575b60028101546010600089876015811061224357fe5b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002060020154111561227d5760019093019261222e565b6010600088856015811061228d57fe5b6020020151600160a060020a0316600160a060020a0316815260200190815260200160002060020154816002015411156122cd576000199092019161227d565b82841361233a578683601581106122e057fe5b60200201518785601581106122f157fe5b602002015188866015811061230257fe5b6020020189866015811061231257fe5b600160a060020a03938416602091909102919091015291169052600190930192600019909201915b612226565b82861215612352576123528787856121d2565b84841215612365576123658785876121d2565b50505050505050565b610100604051908101604052806008906020820280388339509192915050565b6060604051908101604052806000815260200160008152602001600081525090565b6102a0604051908101604052806015906020820280388339509192915050565b61014060405190810160405280600a9060208202803883395091929150505600a165627a7a72305820d459b519feba707b03572c7eaa7e567bc2d8d7d211bbe6d8770fec308cc49cf80029

Swarm Source

bzzr://d459b519feba707b03572c7eaa7e567bc2d8d7d211bbe6d8770fec308cc49cf8

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  ]
[ 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.