ETH Price: $3,575.37 (-1.01%)

Contract

0x35aC488B773DAc506EE857895eE9DC34B250F313
 

Overview

ETH Balance

0.0000000000000026 ETH

Eth Value

Less Than $0.01 (@ $3,575.37/ETH)

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Collect204532622024-08-04 6:01:35121 days ago1722751295IN
0x35aC488B...4B250F313
0 ETH0.000355121
Approve202466532024-07-06 9:44:35150 days ago1720259075IN
0x35aC488B...4B250F313
0 ETH0.00011362.46083007
Transfer202448822024-07-06 3:47:35150 days ago1720237655IN
0x35aC488B...4B250F313
0 ETH0.000120722.41390114
Transfer202254082024-07-03 10:32:35153 days ago1720002755IN
0x35aC488B...4B250F313
0 ETH0.0006574812
Approve201483522024-06-22 16:11:47164 days ago1719072707IN
0x35aC488B...4B250F313
0 ETH0.000195784.22117967
Transfer197311772024-04-25 8:25:47222 days ago1714033547IN
0x35aC488B...4B250F313
0 ETH0.0007163319
Approve193803962024-03-07 2:44:59271 days ago1709779499IN
0x35aC488B...4B250F313
0 ETH0.0028089160.56048274
Approve184347292023-10-26 13:36:47404 days ago1698327407IN
0x35aC488B...4B250F313
0 ETH0.0011575824.92537866
Approve183560382023-10-15 13:21:11415 days ago1697376071IN
0x35aC488B...4B250F313
0 ETH0.000319486.8845659
Approve178131322023-07-31 12:56:47491 days ago1690808207IN
0x35aC488B...4B250F313
0 ETH0.0011004723.72635427
Approve178131232023-07-31 12:54:59491 days ago1690808099IN
0x35aC488B...4B250F313
0 ETH0.0010654422.97104413
Approve178131162023-07-31 12:53:35491 days ago1690808015IN
0x35aC488B...4B250F313
0 ETH0.0010637822.93532375
Transfer174984482023-06-17 8:50:47535 days ago1686991847IN
0x35aC488B...4B250F313
0 ETH0.0005120916
Approve173702502023-05-30 7:24:23553 days ago1685431463IN
0x35aC488B...4B250F313
0 ETH0.0020101343.28279641
Approve169457522023-03-31 7:38:35613 days ago1680248315IN
0x35aC488B...4B250F313
0 ETH0.0011402824.5847262
Transfer167807612023-03-08 3:05:47636 days ago1678244747IN
0x35aC488B...4B250F313
0 ETH0.0009799426
Transfer167807552023-03-08 3:04:35636 days ago1678244675IN
0x35aC488B...4B250F313
0 ETH0.0014097325.72971852
Approve167290982023-02-28 20:42:23643 days ago1677616943IN
0x35aC488B...4B250F313
0 ETH0.0013500829.07033328
Transfer166412712023-02-16 12:24:35656 days ago1676550275IN
0x35aC488B...4B250F313
0 ETH0.001643730
Approve166166842023-02-13 1:54:47659 days ago1676253287IN
0x35aC488B...4B250F313
0 ETH0.0007263715.64048795
Transfer165187902023-01-30 9:37:23673 days ago1675071443IN
0x35aC488B...4B250F313
0 ETH0.0008740915.95
Transfer165058882023-01-28 14:23:35675 days ago1674915815IN
0x35aC488B...4B250F313
0 ETH0.0009862218
Approve162324972022-12-21 10:31:23713 days ago1671618683IN
0x35aC488B...4B250F313
0 ETH0.0003297513.65
Approve162324942022-12-21 10:30:47713 days ago1671618647IN
0x35aC488B...4B250F313
0 ETH0.0003297513.65
Transfer162323182022-12-21 9:55:23713 days ago1671616523IN
0x35aC488B...4B250F313
0 ETH0.0007670614
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
130735892021-08-22 6:46:461199 days ago1629614806
0x35aC488B...4B250F313
0.001 ETH
130468392021-08-18 3:29:281203 days ago1629257368
0x35aC488B...4B250F313
0.0005 ETH
130419682021-08-17 9:41:141204 days ago1629193274
0x35aC488B...4B250F313
0.003 ETH
130398002021-08-17 1:29:261204 days ago1629163766
0x35aC488B...4B250F313
0.036 ETH
130397502021-08-17 1:18:011204 days ago1629163081
0x35aC488B...4B250F313
0.018 ETH
130397362021-08-17 1:15:431204 days ago1629162943
0x35aC488B...4B250F313
0.012 ETH
130397242021-08-17 1:13:261204 days ago1629162806
0x35aC488B...4B250F313
0.0035 ETH
130344812021-08-16 5:54:081205 days ago1629093248
0x35aC488B...4B250F313
0.0005 ETH
130319952021-08-15 20:38:511205 days ago1629059931
0x35aC488B...4B250F313
0.009 ETH
129703352021-08-06 8:24:301215 days ago1628238270
0x35aC488B...4B250F313
0.0005 ETH
129358942021-07-31 22:23:101220 days ago1627770190
0x35aC488B...4B250F313
0.0005 ETH
129351462021-07-31 19:20:201221 days ago1627759220
0x35aC488B...4B250F313
0.003 ETH
128741412021-07-22 4:42:541230 days ago1626928974
0x35aC488B...4B250F313
0.0015 ETH
128043652021-07-11 6:17:151241 days ago1625984235
0x35aC488B...4B250F313
0.001 ETH
128005812021-07-10 15:55:421242 days ago1625932542
0x35aC488B...4B250F313
0.006 ETH
127981082021-07-10 6:41:581242 days ago1625899318
0x35aC488B...4B250F313
0.0015 ETH
127981072021-07-10 6:41:441242 days ago1625899304
0x35aC488B...4B250F313
0.0005 ETH
127966142021-07-10 1:13:431242 days ago1625879623
0x35aC488B...4B250F313
0.009 ETH
127852142021-07-08 6:52:371244 days ago1625727157
0x35aC488B...4B250F313
0.006 ETH
127143962021-06-27 6:01:481255 days ago1624773708
0x35aC488B...4B250F313
0.0005 ETH
126867532021-06-22 22:29:011259 days ago1624400941
0x35aC488B...4B250F313
0.0005 ETH
126682782021-06-20 1:23:001262 days ago1624152180
0x35aC488B...4B250F313
0.0005 ETH
126566252021-06-18 5:35:071264 days ago1623994507
0x35aC488B...4B250F313
0.012 ETH
123477052021-05-01 10:25:341312 days ago1619864734
0x35aC488B...4B250F313
0.003 ETH
123292552021-04-28 13:35:181315 days ago1619616918
0x35aC488B...4B250F313
0.0025 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB3E00c1A...21B79514C
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Mineral

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-10-16
*/

pragma solidity ^0.4.18;




/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  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;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    
    uint256 c = a / b;
    
    return c;
  }

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

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





/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}








/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}









/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}









/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}




/**
 * @title Math
 * @dev Assorted math operations
 */

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

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

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

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






/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is StandardToken {

    event Burn(address indexed burner, uint256 value);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     */
    function burn(uint256 _value) public {
        require(_value > 0);
        require(_value <= balances[msg.sender]);
        
        

        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(burner, _value);
    }
}





/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}









contract Jewel {
    function incise(address owner, uint256 value) external returns (uint);
}

contract DayQualitys {
    function getAreaQualityByDay(uint32 time, uint32 area) external returns (uint32);
}

contract Mineral is BurnableToken, Ownable {

    string public name = "Mineral";
    string public symbol = "ORE";
    uint8 public decimals = 18;

    uint256 public constant INITIAL_SUPPLY = 800 * 1000 * 1000 * (10 ** uint256(decimals));

    uint public constant MINER_4_HOURS = 0.0005 ether;
    uint public constant MINER_8_HOURS = 0.001 ether;
    uint public constant MINER_24_HOURS = 0.003 ether;

    mapping(address => uint[][72]) public deployRange;

    
    
    uint public timeScale = 1; 

    
    
    mapping(uint32 => uint32[3][72]) private areaHourDeployed;

    
    struct AreaHourDeployed {
        uint32[72] lastCollectHour;
        
        mapping(uint32 => uint32[3][72]) hour; 
    }
    
    
    mapping(address => AreaHourDeployed) private userAreaHourDeployed;

    
    uint8 public constant CHECK_POINT_HOUR = 4;

    
    
    mapping(uint32 => uint32[72]) private areaCheckPoints;

    
    mapping(uint32 => uint) private dayAverageOutput;

    
    struct AreaCheckPoint {
        
        mapping(uint32 => uint32[72]) hour;
    }

    
    
    mapping(address => AreaCheckPoint) private userAreaCheckPoints;

    uint256 amountEther;

    
    mapping (address => uint) public remainEther;

    uint32 public constractDeployTime = uint32(now) / 1 hours * 1 hours;

    mapping(address => uint) activeArea; 
    
    bool enableWhiteList = true;
    mapping(address => bool) whiteUserList;    
    address serverAddress;

    address coldWallet;

    bool enableCheckArea = true;

    Jewel public jewelContract;
    DayQualitys public dayQualitysContract;

    event Pause();
    event Unpause();

    bool public paused = false;

    function Mineral() public {
        totalSupply = INITIAL_SUPPLY;
        balances[this] = 300 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x22de6b7F8b6119bA8E62FB4165834eA00adb6f3E")] = 110 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0xA3eCD9F46CCfE4D27D747C9c7469990df7412d48")] = 30 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x686824DB069586aC0aD8060816F1D66A0EE8297b")] = 60 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x9E8eA5C674EBd85868215ceFab9c108Ab9ceA702")] = 150 * 1000 * 1000 * (10 ** uint256(decimals));
        balances[parseAddr("0x4706f5d2a0d4D4eE5A37dDE1438C7de774A2A184")] = 150 * 1000 * 1000 * (10 ** uint256(decimals));
        dayAverageOutput[0] = 241920 * 10 ** uint256(decimals);
    }

    function parseAddr(string _a) internal returns (address){
        bytes memory b = bytes(_a);
        uint result = 0;
        for (uint i = 0; i < b.length; i++) {
            uint c = uint(b[i]);
            if (c >= 48 && c <= 57) {
                result = result * 16 + (c - 48);
            }
            if(c >= 65 && c<= 90) {
                result = result * 16 + (c - 55);
            }
            if(c >= 97 && c<= 122) {
                result = result * 16 + (c - 87);
            }
        }
        return address(result);
    }

    /*
    function setTimeScale(uint scale) public onlyOwner {
        timeScale = scale;
    }

    
    function setConstractDeployTime(uint32 time) public onlyOwner {
        constractDeployTime = time;
    }*/

    function setColdWallet(address _coldWallet) public onlyOwner {
        coldWallet = _coldWallet;
    }

    function disableWhiteUserList() public onlyOwner {
        enableWhiteList = false;
    }

    function disableCheckArea() public onlyOwner {
        enableCheckArea = false;
    }

    modifier checkWhiteList() {
        if (enableWhiteList) {
            require(whiteUserList[msg.sender]);
        }
        _;
    }

    function setServerAddress(address addr) public onlyOwner {
        serverAddress = addr;
    }

    function authUser(string addr) public {
        require(msg.sender == serverAddress || msg.sender == owner);
        address s = bytesToAddress(bytes(addr));
        whiteUserList[s] = true;
    }

    function bytesToAddress (bytes b) internal view returns (address) {
        uint result = 0;
        for (uint i = 0; i < b.length; i++) {
            uint c = uint(b[i]);
            if (c >= 48 && c <= 57) {
                result = result * 16 + (c - 48);
            }
            if(c >= 65 && c <= 90) {
                result = result * 16 + (c - 55);
            }
            if(c >= 97 && c <= 122) {
                result = result * 16 + (c - 87);
            }
        }
        return address(result);
    }

    function setDayQualitys(address dayQualitys) public onlyOwner {
        dayQualitysContract = DayQualitys(dayQualitys);
    }

    function getMyDeployAt(uint32 area, uint32 hour) public view returns (uint32[3]) {
        return userAreaHourDeployed[msg.sender].hour[hour][area];
    }

    function getMyMinersAt(uint32 area, uint32 hour) public view returns (uint32) {
        return _getUserMinersAt(msg.sender, area, hour);
    }

    function _getUserMinersAt(address user, uint32 area, uint32 hour) internal view returns(uint32) {
        //now start from start's nearest check point
        uint32 nc = hour/CHECK_POINT_HOUR*CHECK_POINT_HOUR;
        if (userAreaCheckPoints[user].hour[nc][area] == 0 && userAreaCheckPoints[user].hour[nc + CHECK_POINT_HOUR][area] == 0) {
            return 0;
        }
        uint32 h = 0;
        int64 userInc = 0;
        uint32[3] storage ptUser;
        AreaHourDeployed storage _userAreaHourDeployed = userAreaHourDeployed[user];
        
        for (h = nc; h <= hour; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            userInc += ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - 
                _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
        }
        return userAreaCheckPoints[user].hour[nc][area] + uint32(userInc);
    }

    function getDeployAt(uint32 area, uint32 hour) public view returns (uint32[3]) {
        return areaHourDeployed[hour][area];
    }


    function getMinersAt(uint32 area, uint32 hour) public view returns (uint32) {
        return _getMinersAt(area, hour);
    }

    function _getMinersAt(uint32 area, uint32 hour) internal view returns (uint32) {
        //now start from start's nearest check point
        uint32 nc = hour/CHECK_POINT_HOUR*CHECK_POINT_HOUR;
        uint32 h = 0;
        int64 userInc = 0;
        int64 totalInc = 0;
        uint32[3] storage ptArea;
        
        for (h = nc; h <= hour; ++h) {
            
            
            
            ptArea = areaHourDeployed[h][area];
            totalInc += ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
        }

        return areaCheckPoints[nc][area] + uint32(totalInc);
    }

    function updateArea(uint areaId) internal pure returns (uint) {
        
        uint row = areaId / 8;
        uint colum = areaId % 8;

        uint result = uint(1) << areaId;
        if (row-1 >= 0) {
            result |= uint(1) << ((row-1)*8+colum);
        }
        if (row+1 < 9) {
            result |= uint(1) << ((row+1)*8+colum);
        }
        if (colum-1 >= 0) {
            result |= uint(1) << (row*8+colum-1);
        }
        if (colum+1 < 8) {
            result |= uint(1) << (row*8+colum+1);
        }
        
        return result;
    }

    function checkArea(uint32[] area, address user) internal {
        if (enableCheckArea) {
            uint[] memory distinctArea = new uint[](area.length);
            uint distinctAreaLength = 0;
        
            for (uint i = 0; i < area.length; i++) {
                bool find = false;
                for (uint j = 0; j < distinctAreaLength; j++) {
                    if (distinctArea[j] == area[i]) {
                        find = true;
                        break;
                    }
                }     
                if (!find) {
                    distinctArea[distinctAreaLength] = area[i];
                    distinctAreaLength += 1;
                }
            }

            if (activeArea[user] == 0) {
                require(distinctAreaLength == 1);
                activeArea[user] = updateArea(distinctArea[0]);
            } else {
                uint userActiveArea = activeArea[user];
                uint updateActiveArea = userActiveArea;
                for (i = 0; i < distinctAreaLength; i++) {
                    require(userActiveArea & uint(1) << distinctArea[i] > 0);
                    updateActiveArea = updateActiveArea | updateArea(distinctArea[i]);
                }

                activeArea[user] = updateActiveArea;
            }
        }
    }

    function deployMiners(address user, uint32[] area, uint32[] period, uint32[] count) public checkWhiteList whenNotPaused payable {
        require(area.length > 0);
        require(area.length == period.length);
        require(area.length == count.length);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        
        uint32 _hour = uint32((now - constractDeployTime) * timeScale / 1 hours);

        checkArea(area, user);
        
        uint payment = _deployMiners(_user, _hour, area, period, count);
        _updateCheckPoints(_user, _hour, area, period, count);

        require(payment <= msg.value);
        remainEther[msg.sender] += (msg.value - payment);
        if (coldWallet != address(0)) {
            coldWallet.transfer(payment);
        } else {
            amountEther += payment;
        }
        
    }

    /*function deployMinersTest(uint32 _hour, address user, uint32[] area, uint32[] period, uint32[] count) public checkWhiteList payable {
        require(area.length > 0);
        require(area.length == period.length);
        require(area.length == count.length);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        

        checkArea(area, user);
        
        uint payment = _deployMiners(_user, _hour, area, period, count);
        _updateCheckPoints(_user, _hour, area, period, count);

        require(payment <= msg.value);
        remainEther[msg.sender] += (msg.value - payment);
        amountEther += payment;
    }*/

    function _deployMiners(address _user, uint32 _hour, uint32[] memory area, uint32[] memory period, uint32[] memory count) internal returns(uint){
        uint payment = 0;
        uint32 minerCount = 0;
        uint32[3][72] storage _areaDeployed = areaHourDeployed[_hour];
        uint32[3][72] storage _userAreaDeployed = userAreaHourDeployed[_user].hour[_hour];
        
        
        for (uint index = 0; index < area.length; ++index) {
            require (period[index] == 4 || period[index] == 8 || period[index] == 24);
            if (period[index] == 4) {
                _areaDeployed[area[index]][0] += count[index];
                _userAreaDeployed[area[index]][0] += count[index];
                payment += count[index] * MINER_4_HOURS;
            } else if (period[index] == 8) {
                _areaDeployed[area[index]][1] += count[index];
                _userAreaDeployed[area[index]][1] += count[index];
                payment += count[index] * MINER_8_HOURS;
            } else if (period[index] == 24) {
                _areaDeployed[area[index]][2] += count[index];
                _userAreaDeployed[area[index]][2] += count[index];
                payment += count[index] * MINER_24_HOURS;
            }
            minerCount += count[index];
            DeployMiner(_user, area[index], _hour, _hour + period[index], count[index]);

            adjustDeployRange(area[index], _hour, _hour + period[index]);
        }
        return payment;
    }   

    function adjustDeployRange(uint area, uint start, uint end) internal {
        uint len = deployRange[msg.sender][area].length;
        if (len == 0) {
            deployRange[msg.sender][area].push(start | (end << 128));
        } else {
            uint s = uint128(deployRange[msg.sender][area][len - 1]);
            uint e = uint128(deployRange[msg.sender][area][len - 1] >> 128);
            
            if (start >= s && start < e) {
                end = e > end ? e : end;
                deployRange[msg.sender][area][len - 1] = s | (end << 128);
            } else {
                deployRange[msg.sender][area].push(start | (end << 128));
            }
        }
    }

    function getDeployArrayLength(uint area) public view returns (uint) {
        return deployRange[msg.sender][area].length;
    }
    
    function getDeploy(uint area, uint index) public view returns (uint,uint) {
        uint s = uint128(deployRange[msg.sender][area][index]);
        uint e = uint128(deployRange[msg.sender][area][index] >> 128);
        return (s, e);
    }

    function _updateCheckPoints(address _user, uint32 _hour, uint32[] memory area, uint32[] memory period, uint32[] memory count) internal {
        uint32 _area = 0;
        uint32 _count = 0;
        uint32 ce4 = _hour + 4;
        uint32 ce8 = _hour + 8;
        uint32 ce24 = _hour + 24;
        uint32 cs = (_hour/CHECK_POINT_HOUR+1)*CHECK_POINT_HOUR;
        AreaCheckPoint storage _userAreaCheckPoints = userAreaCheckPoints[_user];
        uint32 cp = 0;
        for (uint index = 0; index < area.length; ++index) {
            _area = area[index];
            _count = count[index];
            if (period[index] == 4) {
                for (cp = cs; cp <= ce4; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            } else if (period[index] == 8) {
                for (cp = cs; cp <= ce8; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            } else if (period[index] == 24) {
                for (cp = cs; cp <= ce24; cp += CHECK_POINT_HOUR) {
                    areaCheckPoints[cp][_area] += _count;
                    _userAreaCheckPoints.hour[cp][_area] += _count;
                }
            }
        }
    }

    

    event DeployMiner(address addr, uint32 area, uint32 start, uint32 end, uint32 count);

    event Collect(address addr, uint32 area, uint32 start, uint32 end, uint areaCount);

    function getMyLastCollectHour(uint32 area) public view returns (uint32){
        return userAreaHourDeployed[msg.sender].lastCollectHour[area];
    }

    
    
    function collect(address user, uint32[] area) public  checkWhiteList whenNotPaused {
        require(address(dayQualitysContract) != address(0));
        uint32 current = uint32((now - constractDeployTime) * timeScale / 1 hours);
        require(area.length > 0);
        address _user = user;
        if (_user == address(0)) {
            _user = msg.sender;
        }
        uint total = 0;
        
        for (uint a = 0; a < area.length; ++a) {
            uint len = deployRange[msg.sender][area[a]].length;
            bool finish = true;
            for (uint i = 0; i < len; i += 1) {
                uint s = uint128(deployRange[msg.sender][area[a]][i]);
                uint e = uint128(deployRange[msg.sender][area[a]][i] >> 128);
                if (current < e && current >= s ) {
                    total += _collect(_user, uint32(s), current, area[a]);
                    
                    deployRange[msg.sender][area[a]][i] = current | (e << 128);
                    finish = false;
                } else if (current >= e) {
                    total += _collect(_user, uint32(s), uint32(e), area[a]);
                }
            }
            
            if (finish) {
                deployRange[msg.sender][area[a]].length = 0;
            } else {
                deployRange[msg.sender][area[a]][0] = deployRange[msg.sender][area[a]][len - 1];
                deployRange[msg.sender][area[a]].length = 1;
            }
        }    

        ERC20(this).transfer(_user, total);
    }

    function _collect(address _user, uint32 start, uint32 end, uint32 area) internal returns (uint) {
        uint result = 0;
        uint32 writeCount = 1;
        uint income = 0;
        uint32[] memory totalMiners = new uint32[](CHECK_POINT_HOUR);
        uint32[] memory userMiners = new uint32[](CHECK_POINT_HOUR);
        uint32 ps = start/CHECK_POINT_HOUR*CHECK_POINT_HOUR+CHECK_POINT_HOUR;
        if (ps >= end) {
            
            (income, writeCount) = _collectMinersByCheckPoints(_user, area, start, end, totalMiners, userMiners, writeCount);
            result += income;
        } else {
            
            (income, writeCount) = _collectMinersByCheckPoints(_user, area, start, ps, totalMiners, userMiners, writeCount);
            result += income;

            while (ps < end) {
                (income, writeCount) = _collectMinersByCheckPoints(_user, area, ps, uint32(Math.min64(end, ps + CHECK_POINT_HOUR)), totalMiners, userMiners, writeCount);
                result += income;

                ps += CHECK_POINT_HOUR;
            }
        }
        Collect(_user, area, start, end, result);
        return result;
    }

    function _collectMinersByCheckPoints(address _user, uint32 area, uint32 start, uint32 end, uint32[] memory totalMiners, uint32[] memory userMiners, uint32 _writeCount) internal returns (uint income, uint32 writeCount) {
        //now start from start's nearest check point
        writeCount = _writeCount;
        income = 0;
        
        
        if (userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] == 0 && userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR + CHECK_POINT_HOUR][area] == 0) {
            return;
        }
        _getMinersByCheckPoints(_user, area, start, end, totalMiners, userMiners);
        uint ao = dayAverageOutput[start / 24];
        if (ao == 0) {
            uint32 d = start / 24;
            for (; d >= 0; --d) {
                if (dayAverageOutput[d] != 0) {
                    break;
                }
            } 
            ao = dayAverageOutput[d];
            for (d = d+1; d <= start / 24; ++d) {
                ao = ao*9996/10000;
                if ((start / 24 - d) < writeCount) {
                    dayAverageOutput[d] = ao;
                }
            }
            if (writeCount > (start / 24 - d - 1)) {
                writeCount = writeCount - (start / 24 - d - 1);
            } else {
                writeCount = 0;
            }
        }

        uint week = dayQualitysContract.getAreaQualityByDay(uint32(start * 1 hours + constractDeployTime), area);
        require(week > 0);

        ao = week * ao / 10 / 24 / 72;
        
        income = _getTotalIncomeAt(end - start, userMiners, totalMiners, ao, week);

        if (week == 10) { 
            income = income * 8 / 10;
        } else if (week == 5) { 
            income = income * 6 / 10;
        } 
    }

    function _getTotalIncomeAt(uint32 hourLength, uint32[] memory userMiners, uint32[] memory totalMiners, uint areaOutput, uint week) internal view returns(uint) {
        uint income = 0;
        for (uint i = 0; i < hourLength; ++i) {
            if (userMiners[i] != 0 && totalMiners[i] != 0) {
                income += (Math.min256(10 ** uint256(decimals), areaOutput / totalMiners[i]) * userMiners[i]);
            }
        }
        return income;
    } 

    function _getMinersByCheckPoints(address _user, uint32 area, uint32 start, uint32 end, uint32[] memory totalMiners, uint32[] memory userMiners) internal view {
        require((end - start) <= CHECK_POINT_HOUR);
        //now start from start's nearest check point
        uint32 h = 0;
        int64 userInc = 0;
        int64 totalInc = 0;
        uint32[3] storage ptUser;
        uint32[3] storage ptArea;
        AreaHourDeployed storage _userAreaHourDeployed = userAreaHourDeployed[_user];
        
        for (h = start/CHECK_POINT_HOUR*CHECK_POINT_HOUR; h <= start; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            ptArea = areaHourDeployed[h][area];
            totalInc += ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
            userInc += ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
        }

        totalMiners[0] = areaCheckPoints[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] + uint32(totalInc);
        userMiners[0] = userAreaCheckPoints[_user].hour[start/CHECK_POINT_HOUR*CHECK_POINT_HOUR][area] + uint32(userInc);

        uint32 i = 1;
        for (h = start + 1; h < end; ++h) {
            
            
            
            ptUser = _userAreaHourDeployed.hour[h][area];
            ptArea = areaHourDeployed[h][area];
            totalMiners[i] = totalMiners[i-1] + ptArea[0] + ptArea[1] + ptArea[2] - areaHourDeployed[h - 4][area][0] - areaHourDeployed[h - 8][area][1] - areaHourDeployed[h - 24][area][2];
            userMiners[i] = userMiners[i-1] + ptUser[0] + ptUser[1] + ptUser[2] - _userAreaHourDeployed.hour[h - 4][area][0] - _userAreaHourDeployed.hour[h - 8][area][1] - _userAreaHourDeployed.hour[h - 24][area][2];
            ++i;
        }
    }

    
    function withdraw() public {
        uint remain = remainEther[msg.sender]; 
        require(remain > 0);
        remainEther[msg.sender] = 0;

        msg.sender.transfer(remain);
    }

    
    function withdrawMinerFee() public onlyOwner {
        require(amountEther > 0);
        owner.transfer(amountEther);
        amountEther = 0;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused() {
        require(paused);
        _;
    }

    function pause() onlyOwner whenNotPaused public {
        paused = true;
        Pause();
    }

    function unpause() onlyOwner whenPaused public {
        paused = false;
        Unpause();
    }

    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function setJewelContract(address jewel) public onlyOwner {
        jewelContract = Jewel(jewel);
    }

    function incise(uint256 value) public returns (uint) {
        require(jewelContract != address(0));

        uint256 balance = balances[msg.sender];
        require(balance >= value);
        uint256 count = (value / (10 ** uint256(decimals)));
        require(count >= 1);

        uint ret = jewelContract.incise(msg.sender, count);

        burn(count * 10 ** uint256(decimals));

        return ret;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"remainEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coldWallet","type":"address"}],"name":"setColdWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableWhiteUserList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CHECK_POINT_HOUR","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawMinerFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMyDeployAt","outputs":[{"name":"","type":"uint32[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint256"}],"name":"getDeployArrayLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getDeployAt","outputs":[{"name":"","type":"uint32[3]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMyMinersAt","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setServerAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"area","type":"uint32[]"}],"name":"collect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MINER_8_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint256"},{"name":"index","type":"uint256"}],"name":"getDeploy","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"string"}],"name":"authUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINER_4_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"incise","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINER_24_HOURS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dayQualitysContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deployRange","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"jewel","type":"address"}],"name":"setJewelContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"constractDeployTime","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"}],"name":"getMyLastCollectHour","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableCheckArea","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"jewelContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"area","type":"uint32"},{"name":"hour","type":"uint32"}],"name":"getMinersAt","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"area","type":"uint32[]"},{"name":"period","type":"uint32[]"},{"name":"count","type":"uint32[]"}],"name":"deployMiners","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"dayQualitys","type":"address"}],"name":"setDayQualitys","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeScale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"area","type":"uint32"},{"indexed":false,"name":"start","type":"uint32"},{"indexed":false,"name":"end","type":"uint32"},{"indexed":false,"name":"count","type":"uint32"}],"name":"DeployMiner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"area","type":"uint32"},{"indexed":false,"name":"start","type":"uint32"},{"indexed":false,"name":"end","type":"uint32"},{"indexed":false,"name":"areaCount","type":"uint256"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

Deployed Bytecode

0x60806040526004361061023a5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630433df85811461023f57806306087e5b1461027257806306fdde0314610295578063095ea7b31461031f57806314dacf5b146103575780631813aea51461036c57806318160ddd1461039757806323b872dd146103ac57806328ce5cdb146103d65780632b048f77146103eb5780632c027eb9146104475780632ff2e9dc1461045f578063313ce567146104745780633b404266146104895780633ccfd60b146104ad5780633dd00c42146104c25780633f4ba83a146104ff57806342966c681461051457806347b64eb01461052c5780634d6a7d331461054d5780634dbd71eb146105b057806350beb835146105c55780635a589fc9146105f95780635c975abb1461065257806363c2558a14610667578063661884631461067c57806370a08231146106a057806382281104146106c15780638456cb59146106d95780638da5cb5b146106ee5780638e73d8571461071f5780638ffdbf0b1461073457806390ce34ec1461074957806395d89b411461077057806395ddb3a614610785578063a7d53800146107a6578063a9059cbb146107bb578063a949f3af146107df578063b74d13a5146107fd578063cc99ece114610812578063d6387a3e14610827578063d73dd6231461084b578063dd62ed3e1461086f578063eea0d16814610896578063f0a7975f1461095e578063f2fde38b1461097f578063f32b85e8146109a0575b600080fd5b34801561024b57600080fd5b50610260600160a060020a03600435166109b5565b60408051918252519081900360200190f35b34801561027e57600080fd5b50610293600160a060020a03600435166109c7565b005b3480156102a157600080fd5b506102aa610a0d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e45781810151838201526020016102cc565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b50610343600160a060020a0360043516602435610a9b565b604080519115158252519081900360200190f35b34801561036357600080fd5b50610293610b01565b34801561037857600080fd5b50610381610b24565b6040805160ff9092168252519081900360200190f35b3480156103a357600080fd5b50610260610b29565b3480156103b857600080fd5b50610343600160a060020a0360043581169060243516604435610b2f565b3480156103e257600080fd5b50610293610b5c565b3480156103f757600080fd5b5061040f63ffffffff60043581169060243516610bc6565b6040518082606080838360005b8381101561043457818101518382015260200161041c565b5050505090500191505060405180910390f35b34801561045357600080fd5b50610260600435610c64565b34801561046b57600080fd5b50610260610c86565b34801561048057600080fd5b50610381610c98565b34801561049557600080fd5b5061040f63ffffffff60043581169060243516610ca1565b3480156104b957600080fd5b50610293610ccc565b3480156104ce57600080fd5b506104e663ffffffff60043581169060243516610d27565b6040805163ffffffff9092168252519081900360200190f35b34801561050b57600080fd5b50610293610d3b565b34801561052057600080fd5b50610293600435610db3565b34801561053857600080fd5b50610293600160a060020a0360043516610e71565b34801561055957600080fd5b50604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750949750610eb79650505050505050565b3480156105bc57600080fd5b50610260611381565b3480156105d157600080fd5b506105e060043560243561138c565b6040805192835260208301919091528051918290030190f35b34801561060557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102939436949293602493928401919081908401838280828437509497506114399650505050505050565b34801561065e57600080fd5b50610343611499565b34801561067357600080fd5b506102606114a9565b34801561068857600080fd5b50610343600160a060020a03600435166024356114b4565b3480156106ac57600080fd5b50610260600160a060020a03600435166115a4565b3480156106cd57600080fd5b506102606004356115bf565b3480156106e557600080fd5b506102936116d2565b3480156106fa57600080fd5b5061070361174f565b60408051600160a060020a039092168252519081900360200190f35b34801561072b57600080fd5b5061026061175e565b34801561074057600080fd5b50610703611769565b34801561075557600080fd5b50610260600160a060020a0360043516602435604435611778565b34801561077c57600080fd5b506102aa6117b4565b34801561079157600080fd5b50610293600160a060020a036004351661180f565b3480156107b257600080fd5b506104e6611855565b3480156107c757600080fd5b50610343600160a060020a0360043516602435611861565b3480156107eb57600080fd5b506104e663ffffffff60043516611885565b34801561080957600080fd5b506102936118c8565b34801561081e57600080fd5b506107036118ff565b34801561083357600080fd5b506104e663ffffffff6004358116906024351661190e565b34801561085757600080fd5b50610343600160a060020a036004351660243561191a565b34801561087b57600080fd5b50610260600160a060020a03600435811690602435166119b3565b604080516020600460248035828101358481028087018601909752808652610293968435600160a060020a031696369660449591949091019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506119de9650505050505050565b34801561096a57600080fd5b50610293600160a060020a0360043516611b2c565b34801561098b57600080fd5b50610293600160a060020a0360043516611b72565b3480156109ac57600080fd5b50610260611c07565b600f6020526000908152604090205481565b600354600160a060020a031633146109de57600080fd5b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b820191906000526020600020905b815481529060010190602001808311610a7657829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600354600160a060020a03163314610b1857600080fd5b6012805460ff19169055565b600481565b60005481565b60175460009060a060020a900460ff1615610b4957600080fd5b610b54848484611c0d565b949350505050565b600354600160a060020a03163314610b7357600080fd5b600e54600010610b8257600080fd5b600354600e54604051600160a060020a039092169181156108fc0291906000818181858888f19350505050158015610bbe573d6000803e3d6000fd5b506000600e55565b610bce613cbd565b336000908152600a6020908152604080832063ffffffff8087168552600990910190925290912090841660488110610c0257fe5b604080516060810191829052929190910190600390826000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610c1c57509498975050505050505050565b3360009081526007602052604081208260488110610c7e57fe5b015492915050565b60065460ff16600a0a632faf08000281565b60065460ff1681565b610ca9613cbd565b63ffffffff808316600090815260096020526040902090841660488110610c0257fe5b336000908152600f6020526040812054908111610ce857600080fd5b336000818152600f60205260408082208290555183156108fc0291849190818181858888f19350505050158015610d23573d6000803e3d6000fd5b5050565b6000610d34338484611d86565b9392505050565b600354600160a060020a03163314610d5257600080fd5b60175460a060020a900460ff161515610d6a57600080fd5b6017805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000808211610dc157600080fd5b33600090815260016020526040902054821115610ddd57600080fd5b5033600081815260016020526040902054610dfe908363ffffffff61200516565b600160a060020a03821660009081526001602052604081209190915554610e2b908363ffffffff61200516565b600055604080518381529051600160a060020a038316917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25050565b600354600160a060020a03163314610e8857600080fd5b6014805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000806000806000806000601260009054906101000a900460ff1615610ef8573360009081526013602052604090205460ff161515610ef857600080fd5b60175460a060020a900460ff1615610f0f57600080fd5b601754600160a060020a03161515610f2657600080fd5b600854601054610e109163ffffffff90911642030204985060008a51111515610f4e57600080fd5b8a9750600160a060020a0388161515610f65573397505b60009650600095505b89518610156112e0573360009081526007602052604090208a518b9088908110610f9457fe5b6020908102909101015163ffffffff1660488110610fae57fe5b0154945060019350600092505b84831015611198573360009081526007602052604090208a518b9088908110610fe057fe5b6020908102909101015163ffffffff1660488110610ffa57fe5b0180548490811061100757fe5b90600052602060002001546fffffffffffffffffffffffffffffffff16915060806007600033600160a060020a0316600160a060020a031681526020019081526020016000208b8881518110151561105b57fe5b6020908102909101015163ffffffff166048811061107557fe5b0180548590811061108257fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff169050808963ffffffff161080156110c25750818963ffffffff1610155b15611167576110ea88838b8d8a8151811015156110db57fe5b90602001906020020151612017565b3360009081526007602052604090208b51919098019763ffffffff8b16700100000000000000000000000000000000840217918c908990811061112957fe5b6020908102909101015163ffffffff166048811061114357fe5b0180548590811061115057fe5b90600052602060002001819055506000935061118d565b63ffffffff8916811161118d576111888883838d8a8151811015156110db57fe5b870196505b600183019250610fbb565b83156111e6573360009081526007602052604081208b518c90899081106111bb57fe5b6020908102909101015163ffffffff16604881106111d557fe5b6111e0910182613cdc565b506112d5565b3360009081526007602052604090208a518b908890811061120357fe5b6020908102909101015163ffffffff166048811061121d57fe5b018054600019870190811061122e57fe5b6000918252602080832090910154338352600790915260409091208b518c908990811061125757fe5b6020908102909101015163ffffffff166048811061127157fe5b018054600090811061127f57fe5b60009182526020808320909101929092553381526007909152604090208a51600191908c90899081106112ae57fe5b6020908102909101015163ffffffff16604881106112c857fe5b6112d3910182613cdc565b505b856001019550610f6e565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038a166004820152602481018990529051309163a9059cbb9160448083019260209291908290030181600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b505050506040513d602081101561137257600080fd5b50505050505050505050505050565b66038d7ea4c6800081565b33600090815260076020526040812081908190819086604881106113ac57fe5b018054869081106113b957fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff909116925060809087604881106113f857fe5b0180548790811061140557fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081819350935050509250929050565b601454600090600160a060020a031633148061145f5750600354600160a060020a031633145b151561146a57600080fd5b61147382612172565b600160a060020a03166000908152601360205260409020805460ff191660011790555050565b60175460a060020a900460ff1681565b6601c6bf5263400081565b336000908152600260209081526040808320600160a060020a03861684529091528120548083111561150957336000908152600260209081526040808320600160a060020a038816845290915281205561153e565b611519818463ffffffff61200516565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b601654600090819081908190600160a060020a031615156115df57600080fd5b336000908152600160205260409020549250848310156115fe57600080fd5b60065460ff16600a0a8581151561161157fe5b049150600182101561162257600080fd5b601654604080517f833eaa8b000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a039092169163833eaa8b916044808201926020929091908290030181600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050506040513d60208110156116b957600080fd5b5051600654909150610b549060ff16600a0a8302610db3565b600354600160a060020a031633146116e957600080fd5b60175460a060020a900460ff161561170057600080fd5b6017805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600354600160a060020a031681565b660aa87bee53800081565b601754600160a060020a031681565b6007602052600083815260409020826048811061179157fe5b0180548290811061179e57fe5b9060005260206000200160009250925050505481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a935780601f10610a6857610100808354040283529160200191610a93565b600354600160a060020a0316331461182657600080fd5b6016805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60105463ffffffff1681565b60175460009060a060020a900460ff161561187b57600080fd5b610d34838361223b565b336000908152600a6020526040812063ffffffff8316604881106118a557fe5b600891828204019190066004029054906101000a900463ffffffff169050919050565b600354600160a060020a031633146118df57600080fd5b6015805474ff000000000000000000000000000000000000000019169055565b601654600160a060020a031681565b6000610d34838361231e565b336000908152600260209081526040808320600160a060020a038616845290915281205461194e908363ffffffff61249516565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b6012546000908190819060ff1615611a0e573360009081526013602052604090205460ff161515611a0e57600080fd5b60175460a060020a900460ff1615611a2557600080fd5b8551600010611a3357600080fd5b8451865114611a4157600080fd5b8351865114611a4f57600080fd5b869250600160a060020a0383161515611a66573392505b600854601054610e109163ffffffff909116420302049150611a8886886124a4565b611a9583838888886126b5565b9050611aa48383888888612c16565b34811115611ab157600080fd5b336000908152600f60205260409020805434839003019055601554600160a060020a031615611b1a57601554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015611b14573d6000803e3d6000fd5b50611b23565b600e8054820190555b50505050505050565b600354600160a060020a03163314611b4357600080fd5b6017805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354600160a060020a03163314611b8957600080fd5b600160a060020a0381161515611b9e57600080fd5b600354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085481565b6000600160a060020a0383161515611c2457600080fd5b600160a060020a038416600090815260016020526040902054821115611c4957600080fd5b600160a060020a0384166000908152600260209081526040808320338452909152902054821115611c7957600080fd5b600160a060020a038416600090815260016020526040902054611ca2908363ffffffff61200516565b600160a060020a038086166000908152600160205260408082209390935590851681522054611cd7908363ffffffff61249516565b600160a060020a038085166000908152600160209081526040808320949094559187168152600282528281203382529091522054611d1b908363ffffffff61200516565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35060019392505050565b6000808080808060048063ffffffff8916600160a060020a038c166000908152600d60209081526040808320949093049490940263ffffffff81811683529390945220919650891660488110611dd857fe5b60088104919091015460079091166004026101000a900463ffffffff16158015611e565750600160a060020a0389166000908152600d6020908152604080832063ffffffff60048a0181168552925290912090891660488110611e3757fe5b60088104919091015460079091166004026101000a900463ffffffff16155b15611e645760009550611ff9565b50600160a060020a0388166000908152600a602052604081208594509092505b63ffffffff80881690851611611fa15763ffffffff8085166000908152600983016020526040902090891660488110611eb957fe5b63ffffffff6017198701811660009081526009850160205260409020929091019350891660488110611ee757fe5b015463ffffffff600719860181166000908152600984016020526040902068010000000000000000909204811691908a1660488110611f2257fe5b015463ffffffff6003198701811660009081526009850160205260409020640100000000909204811691908b1660488110611f5957fe5b015484546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169290920191611e84565b600160a060020a0389166000908152600d6020908152604080832063ffffffff808a168552925290912084918a1660488110611fd957fe5b600891828204019190066004029054906101000a900463ffffffff160195505b50505050509392505050565b60008282111561201157fe5b50900390565b60408051600480825260a08201909252600091829160019183916060918291849160208201608080388339505060408051600480825260a082019092529295509050602082016080803883390190505091506004808063ffffffff8d16040201905063ffffffff808a16908216106120a5576120988b898c8c87878b612f75565b9681019695509350612105565b6120b48b898c8487878b612f75565b96810196955093505b8863ffffffff168163ffffffff161015612105576120f58b89836120ed63ffffffff808f169060048401166132b5565b87878b612f75565b96810196955093506004016120bd565b60408051600160a060020a038d16815263ffffffff808b166020830152808d16828401528b1660608201526080810188905290517feb20d87b6aef9216f658e1fcee101a026ada2f53b25e6fc37e6ed979b8d9f44f9181900360a00190a150939998505050505050505050565b60008080805b845182101561223257848281518110151561218f57fe5b01602001517f0100000000000000000000000000000000000000000000000000000000000000908190048102049050603081108015906121d0575060398111155b156121e15760308103836010020192505b604181101580156121f35750605a8111155b156122045760378103836010020192505b606181101580156122165750607a8111155b156122275760578103836010020192505b600190910190612178565b50909392505050565b6000600160a060020a038316151561225257600080fd5b3360009081526001602052604090205482111561226e57600080fd5b3360009081526001602052604090205461228e908363ffffffff61200516565b3360009081526001602052604080822092909255600160a060020a038516815220546122c0908363ffffffff61249516565b600160a060020a0384166000818152600160209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b6000600463ffffffff831681900402808280805b63ffffffff808816908516116124475763ffffffff80851660009081526009602052604090209089166048811061236557fe5b63ffffffff60171987018116600090815260096020526040902092909101925089166048811061239157fe5b015463ffffffff60071986018116600090815260096020526040902068010000000000000000909204811691908a16604881106123ca57fe5b015463ffffffff600319870181166000908152600960205260409020640100000000909204811691908b16604881106123ff57fe5b015483546001979097019663ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169190910190612332565b63ffffffff8086166000908152600b6020526040902083918a166048811061246b57fe5b600891828204019190066004029054906101000a900463ffffffff16019550505050505092915050565b600082820183811015610d3457fe5b6060600080600080600080601560149054906101000a900460ff16156126aa5788516040519080825280602002602001820160405280156124ef578160200160208202803883390190505b50965060009550600094505b88518510156125b55760009350600092505b8583101561256557888581518110151561252357fe5b9060200190602002015163ffffffff16878481518110151561254157fe5b90602001906020020151141561255a5760019350612565565b60019092019161250d565b8315156125aa57888581518110151561257a57fe5b9060200190602002015163ffffffff16878781518110151561259857fe5b60209081029091010152600195909501945b6001909401936124fb565b600160a060020a038816600090815260116020526040902054151561262057600186146125e157600080fd5b6126028760008151811015156125f357fe5b906020019060200201516132df565b600160a060020a0389166000908152601160205260409020556126aa565b5050600160a060020a038616600090815260116020526040812054909350805b8585101561268e576000878681518110151561265857fe5b6020908102909101015160020a83161161267157600080fd5b61268287868151811015156125f357fe5b60019095019417612640565b600160a060020a03881660009081526011602052604090208190555b505050505050505050565b63ffffffff84166000818152600960208181526040808420600160a060020a038b168552600a8352818520958552949092019052812090918291829190825b8851811015612c0757878181518110151561270b57fe5b9060200190602002015163ffffffff16600414806127465750878181518110151561273257fe5b9060200190602002015163ffffffff166008145b8061276e5750878181518110151561275a57fe5b9060200190602002015163ffffffff166018145b151561277957600080fd5b878181518110151561278757fe5b9060200190602002015163ffffffff166004141561288e5786818151811015156127ad57fe5b90602001906020020151838a838151811015156127c657fe5b6020908102909101015163ffffffff16604881106127e057fe5b01805463ffffffff19811663ffffffff9182169390930116919091179055865187908290811061280c57fe5b90602001906020020151828a8381518110151561282557fe5b6020908102909101015163ffffffff166048811061283f57fe5b01805463ffffffff19811663ffffffff918216939093011691909117905586516601c6bf526340009088908390811061287457fe5b9060200190602002015163ffffffff160285019450612ae8565b878181518110151561289c57fe5b9060200190602002015163ffffffff16600814156129a85786818151811015156128c257fe5b90602001906020020151838a838151811015156128db57fe5b6020908102909101015163ffffffff16604881106128f557fe5b01805463ffffffff6401000000008083048216949094011690920267ffffffff0000000019909216919091179055865187908290811061293157fe5b90602001906020020151828a8381518110151561294a57fe5b6020908102909101015163ffffffff166048811061296457fe5b01805463ffffffff64010000000080830482169094011690920267ffffffff0000000019909216919091179055865166038d7ea4c680009088908390811061287457fe5b87818151811015156129b657fe5b9060200190602002015163ffffffff1660181415612ae85786818151811015156129dc57fe5b90602001906020020151838a838151811015156129f557fe5b6020908102909101015163ffffffff1660488110612a0f57fe5b01805463ffffffff68010000000000000000808304821694909401169092026bffffffff0000000000000000199092169190911790558651879082908110612a5357fe5b90602001906020020151828a83815181101515612a6c57fe5b6020908102909101015163ffffffff1660488110612a8657fe5b01805463ffffffff680100000000000000008083048216909401169092026bffffffff0000000000000000199092169190911790558651660aa87bee53800090889083908110612ad257fe5b9060200190602002015163ffffffff1602850194505b8681815181101515612af657fe5b90602001906020020151840193507f66412e9e4538ab9be49dd3e9c38afd30dc90b3bfdfe105047cf5cc945c311af68b8a83815181101515612b3457fe5b906020019060200201518c8b85815181101515612b4d57fe5b906020019060200201518e018b86815181101515612b6757fe5b602090810290910181015160408051600160a060020a03909716875263ffffffff9586169287019290925292841685820152908316606085015291166080830152519081900360a00190a1612bff8982815181101515612bc357fe5b9060200190602002015163ffffffff168b63ffffffff168a84815181101515612be857fe5b906020019060200201518d0163ffffffff1661335d565b6001016126f4565b50929998505050505050505050565b600160a060020a0385166000908152600d602052604081208190600487810191600889019160188a0191600163ffffffff8c16839004019091029085805b8b51811015612f65578b81815181101515612c6b57fe5b9060200190602002015198508981815181101515612c8557fe5b9060200190602002015197508a81815181101515612c9f57fe5b9060200190602002015163ffffffff1660041415612d83578391505b63ffffffff80881690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612cef57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612d4257fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612cbb565b612f5d565b8a81815181101515612d9157fe5b9060200190602002015163ffffffff1660081415612e70578391505b63ffffffff80871690831611612d7e5763ffffffff8083166000908152600b6020526040902089918b1660488110612de157fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612e3457fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612dad565b8a81815181101515612e7e57fe5b9060200190602002015163ffffffff1660181415612f5d578391505b63ffffffff80861690831611612f5d5763ffffffff8083166000908152600b6020526040902089918b1660488110612ece57fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811694909401841602919091179055828116600090815260208590526040902089918b1660488110612f2157fe5b60088104909101805463ffffffff6004600790941684026101000a80830482169095018116850294021916929092179091559190910190612e9a565b600101612c54565b5050505050505050505050505050565b600160a060020a0387166000908152600d60209081526040808320600463ffffffff8a811682900490910281168552925282208391839182918291908c1660488110612fbd57fe5b60088104919091015460079091166004026101000a900463ffffffff161580156130445750600160a060020a038c166000908152600d60209081526040808320600463ffffffff8f81168290048202909101811685529252909120908c166048811061302557fe5b60088104919091015460079091166004026101000a900463ffffffff16155b1561304e576132a6565b61305c8c8c8c8c8c8c613539565b601863ffffffff8b811691909104166000908152600c6020526040902054925082151561319d57601863ffffffff8b160491505b600063ffffffff8316106130ca5763ffffffff82166000908152600c6020526040902054156130be576130ca565b60001990910190613090565b63ffffffff82166000908152600c602052604090205492506001909101905b601863ffffffff8b160463ffffffff168263ffffffff1611151561315e5761271061270c84020492508363ffffffff168260188c63ffffffff1681151561312c57fe5b040363ffffffff1610156131535763ffffffff82166000908152600c602052604090208390555b8160010191506130e9565b600182601863ffffffff8d1604030363ffffffff168463ffffffff16111561319857600182601863ffffffff8d160403038403935061319d565b600093505b601754601054604080517f0eb3f993000000000000000000000000000000000000000000000000000000008152610e108e0263ffffffff9384160183166004820152918e16602483015251600160a060020a0390921691630eb3f993916044808201926020929091908290030181600087803b15801561321c57600080fd5b505af1158015613230573d6000803e3d6000fd5b505050506040513d602081101561324657600080fd5b505163ffffffff1690506000811161325d57600080fd5b60486018600a838602040404925061327a8a8a03888a8685613bd4565b945080600a141561329357600a600886020494506132a6565b80600514156132a657600a600686020494505b50505097509795505050505050565b60008167ffffffffffffffff168367ffffffffffffffff16106132d85781610d34565b5090919050565b60006008820460078316600284900a60001983018411613308576008600019840102820160020a175b60098360010110156133225760086001840102820160020a175b600060001983011061333d576000196008840283010160020a175b6008826001011015610b54576008929092020160010160020a1792915050565b33600090815260076020526040812081908190866048811061337b57fe5b015492508215156133d15733600090815260076020526040902086604881106133a057fe5b0180546001810182556000918252602090912070010000000000000000000000000000000086028717910155613531565b33600090815260076020526040902086604881106133eb57fe5b01805460001985019081106133fc57fe5b6000918252602080832090910154338352600790915260409091206fffffffffffffffffffffffffffffffff9091169250608090876048811061343b57fe5b018054600019860190811061344c57fe5b90600052602060002001549060020a90046fffffffffffffffffffffffffffffffff16905081851015801561348057508085105b156134ea578381116134925783613494565b805b336000908152600760205260409020909450700100000000000000000000000000000000850283179087604881106134c857fe5b01805460001986019081106134d957fe5b600091825260209091200155613531565b336000908152600760205260409020866048811061350457fe5b01805460018101825560009182526020909120700100000000000000000000000000000000860287179101555b505050505050565b6000808080808080600463ffffffff8c8c0316111561355757600080fd5b600160a060020a038d166000908152600a60205260408120600463ffffffff8e1681900402985090965086955091505b63ffffffff808c169088161161379c5763ffffffff80881660009081526009840160205260409020908d16604881106135bc57fe5b63ffffffff808a1660009081526009602052604090209290910195508d16604881106135e457fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061361057fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e166048811061364957fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f166048811061367e57fe5b015485546017198b0163ffffffff90811660009081526009880160205260409020928116828216640100000000840483160168010000000000000000909304821692909201919091039290920392909203811696909601958d16604881106136e257fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e166048811061371d57fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f166048811061375457fe5b0154865460019a909a019963ffffffff918216818316640100000000830484160168010000000000000000909204831691909101039190910391909103169590950194613587565b84600b6000600460ff16600460ff168f63ffffffff168115156137bb57fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156137ea57fe5b600891828204019190066004029054906101000a900463ffffffff160189600081518110151561381657fe5b9060200190602002019063ffffffff16908163ffffffff168152505085600d60008f600160a060020a0316600160a060020a031681526020019081526020016000206000016000600460ff16600460ff168f63ffffffff1681151561387757fe5b040263ffffffff1663ffffffff1681526020019081526020016000208d63ffffffff166048811015156138a657fe5b600891828204019190066004029054906101000a900463ffffffff16018860008151811015156138d257fe5b63ffffffff9092166020928302909101909101525060018a810196505b8963ffffffff168763ffffffff1610156113725763ffffffff80881660009081526009840160205260409020908d166048811061392857fe5b63ffffffff808a1660009081526009602052604090209290910195508d166048811061395057fe5b63ffffffff6017198a01811660009081526009602052604090209290910194508d166048811061397c57fe5b015463ffffffff60071989018116600090815260096020526040902068010000000000000000909204811691908e16604881106139b557fe5b015463ffffffff6003198a0181166000908152600960205260409020640100000000909204811691908f16604881106139ea57fe5b01600060088104919091015460079091166004026101000a900463ffffffff1685600260088104919091015460079091166004026101000a900463ffffffff1686600160088104919091015460079091166004026101000a900463ffffffff16876000600891828204019190066004029054906101000a900463ffffffff168e6001880363ffffffff16815181101515613a8057fe5b90602001906020020151010101030303898263ffffffff16815181101515613aa457fe5b63ffffffff92831660209182029092018101919091526017198901821660009081526009850190915260409020908d1660488110613ade57fe5b015463ffffffff600719890181166000908152600985016020526040902068010000000000000000909204811691908e1660488110613b1957fe5b015463ffffffff6003198a01811660009081526009860160205260409020640100000000909204811691908f1660488110613b5057fe5b015486548b5163ffffffff928316926801000000000000000083048116926401000000008104821692908216918f916000198a01909116908110613b9057fe5b90602001906020020151010101030303888263ffffffff16815181101515613bb457fe5b63ffffffff909216602092830290910190910152600196870196016138ef565b600080805b8763ffffffff16811015613ca3578681815181101515613bf557fe5b9060200190602002015163ffffffff16600014158015613c3357508581815181101515613c1e57fe5b9060200190602002015163ffffffff16600014155b15613c9b578681815181101515613c4657fe5b60209081029091010151600654875163ffffffff90921691613c959160ff16600a0a90899085908110613c7557fe5b9060200190602002015163ffffffff1688811515613c8f57fe5b04613cae565b02820191505b600101613bd9565b509695505050505050565b60008183106132d85781610d34565b6060604051908101604052806003906020820280388339509192915050565b815481835581811115613d0057600083815260209020613d00918101908301613d05565b505050565b613d2391905b80821115613d1f5760008155600101613d0b565b5090565b905600a165627a7a723058207502ec7dc64dc5cbf594830ad5a7904e16365f453afcbcc56527f1118d6986d90029

Swarm Source

bzzr://7502ec7dc64dc5cbf594830ad5a7904e16365f453afcbcc56527f1118d6986d9

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.