Sponsored Link:   DocTailor - Legal Self Customisable Smart Contract Platform - Bridging the Gap Between Business & Cryptocurrency Holders - Join Now!
Contract Overview | GronDigitalToken
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 404 txns
Token Contract (ERC20): Gron Digital (GRO)
  Latest 25 txns from a total Of 404 transactions View All

TxHash Age From To Value [TxFee]
0x527861d9d4e7476266a28190512ff2ce7228eb794eabf1ea251f22a124123e423 days 10 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0x5b0f4efd21b3333a696510ccc8a18acafcd2b4467cd4c0d86f4193b899c8a1c14 days 8 hrs ago0xe50d75b9a69e308a7b005e8087c627bd41e38ad0  IN   GronDigitalToken0 Ether0.00128214
0xee16312b6a12c865d22533451c046fdc88a0932c70c128c24810235e38fec5e94 days 9 hrs ago0xe50d75b9a69e308a7b005e8087c627bd41e38ad0  IN   GronDigitalToken0 Ether0.001275
0xabe056368fb11b20901ba4b3b38178f30e056c7bcc3761a6482bf7ffade25b194 days 17 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0x5436dcf0323d79e08e1bea92d4470bd7cfe464bb7d572c47ab9a8499d4b4f37b4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293612
0x4b3839798e45090f6e955e0a97605ec88b3310234bb4c0da465e7919f27ddedb4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293356
0x613d962fa9408f0ddc31f7ce4ce9ec243f8465f65742d005335827c923a1e8624 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293612
0x3aed86ad98352be892542b31f78c6cfca3344c4612f6e87a0ec88b28e7ea34fa4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0xa3446d61eacaabb2c7994bfc22f5a58826b14e1f0ba79ed26c71bfc1b3168e9f4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293612
0x4f5fb2e7b56c0aad8bcaf22a9f1097f6ce6a8b4f8f11cb3a4406fa7ec62eb5c44 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0xea08c1e645461f04c38d573f5043e751110e9908c73a12836dceafa4d1fb67e14 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0xd7ad5c49fdf2fed26f10984871f64d0ea3f63d2da8ca7a6822d4d2981dd24e494 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0x7b493025f6e91106dfe7b7e73f2fb9dfe9478340efe94b5a65edeb69c693f9df4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293612
0x0b401a3aaba70927401acfd1b2c94d7641635058931121faf7c078debd3d32fe4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00293612
0xc2ad8c34488d9cf0e42f82b67f770f0f7a1920c20696f083cce0f75e8b81bbb34 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00233612
0x7a0fc0f01f08c5bd67fd121f79a4b4cf408e4dff6165bff5787c5bbe4ba01b7a4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00222108
0x3ef93ff6aea4533b62461e301e0afa597fd532b830fa74bf6136bd95388e1b3d4 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00222108
0xc501c25946c23b7ca3fa2057e6f84dc6696fac48be1bb732b6531d2a3a6ba9274 days 18 hrs agoGronDigitalWallet  IN   GronDigitalToken0 Ether0.00222108
0xb0881223e5c7144a363241e3b6d5b76a98da8061a5832592317fc2085a189aa711 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.002514
0xed9a2d6e7e3ad333dc3c46f1e9235880e3e5e942e288a266d5e49834afc6b52111 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.002514
0x5e43ab8c53df98963e88c18a463d67f84a2c709bacc5d80007f32aa43996dbfe11 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.0015084
0x51e50022d756fd1d2abdda76b5fc64e678fd23f2e6f7d3050b8388f1f05710d911 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.00144
0x88900e258a6a32c182e2c0bc427cf0556ba4e214127518acd2d63a4731eb43a311 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.0025076
0xe88ad3960ca143e2e45784e8b1620b2075b962e4beec20bac65b42ddc0e778e711 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.002514
0xaac0c555e41435ddb1e2f7c412f430424c7ad7b68d926eca94d615ebcb22844411 days 17 hrs ago0x3a53519bdfc3bd3783f69bb194338f35816f1d65  IN   GronDigitalToken0 Ether0.002514
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xa7b4c63d185df617d24d86148247d7ede90b1555bc1371eb0cfc16a4fd4c0a6a516315252 days 1 hr ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.33 Ether
0x1a9023407a2d605594e7a2893a27ad3469fefd2c00186ac01b266fa5b9cb4253516265852 days 3 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248362 Ether
0xe54bfce33071524949a8252da812228f35d2c7680b19f8d623a3ac3734148516516243952 days 4 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x9da23a956b68c9cc1a590747141cde9221037837ade2fc76adc73a4fdfcebfad516228552 days 5 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xfd94b18ffe9bb07e73cc65ed36d262a431438d4e2dbf3a6febd194a89270c3ff516219652 days 5 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.2 Ether
0x8801a7801ee4c1dff236a19d8e330eaf437f76b49ac67b2cf2ab53de59a9ec4e516202552 days 6 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.16 Ether
0xed5e62f4321be83ce327572e223fcb7327bb92fc516ee2c3cf1813b1c41bebdc516151252 days 8 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x104af496452652bfdcfb138615adedf2a9009e7661e48a1d04ff94b6fb60a20f516134252 days 8 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x2bb1e83395d58c783342cd06cfa4c93a0e29f015fddbaeab81e90da2ec3d66bf516121652 days 9 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xa32d900619a67d0bb10ba8d23239d36784f80d977f4ff5a7fe34a61483ee64b3516035052 days 12 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.12 Ether
0xf4d584a62855e8280e5ab7acc3308e1e4a5feb8b0cf95f8aad048802198845e4516032252 days 13 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.199 Ether
0xe60724ce0ebde19bef59b44a34e97b2dd01dbcb28dddb53c9b301c558f2367c5516031552 days 13 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xe5bf544e3732e22b4c0cdc237c7f9679ea0f35ab85e9ecaa6bbc51503efc315b516020152 days 13 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.15 Ether
0x34c375a28fed0787f7473abbabee8e034c14b6716745d9340e81ec8fe8604224515980052 days 15 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.11 Ether
0x11a446b89ba35a37c4e7b402e462e04fac3442813adcb8c484ad709f494588b7515977452 days 15 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.2 Ether
0xf65eee066cb05cb6f636f5e49f904475d022ca2c8d391140852aa1306cf2ecd7515961752 days 16 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x83f89e72ec07b7bf663ce52d54966cf1cec83048b89a44921a32911048a7f32a515956252 days 16 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x14701d144599d93b8cae1324ccf1085778639318c14dbb5c3661988791162b9e515918852 days 17 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248361.2 Ether
0x6f602dd1768d92cf387867a732cc5fffe4168d1d9db5cea07351e1c68a4f2dbd515885652 days 19 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.3 Ether
0x56803403b38750463c78df9040fd0e76c223d8be605e3ad9f7d2398fe36eb6d0515860452 days 20 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248361 Ether
0xa626e4080e2beff6f16747039398f12832cf69d4778ef61eade6fe38843020d7515848952 days 20 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0xbb7e65c0693b36434fb2b22f9f1b1333803d333617bb5e16f4df522d2d1dddc8515832952 days 21 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.111624439 Ether
0x048fd534eedf62ff9d6f734cde2b4af76f386aa7226d87bf79b95dbe425b8853515807252 days 22 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.105771679986680225 Ether
0x0283e6f4980282b560d10d0ea1a921ac4a8853a0f04ac681f549ab6dbe5dc4a0515799952 days 22 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
0x9d56b35eaa8d12733a4f77140ab4b13f39a6eac00d94c622cf58fc2c9dbbb4d4515791452 days 23 hrs ago0x997e3adb550a85895f5becf54a2751e6df24edc80x004e6f03648b0b0f529511697b0f36a463a248360.1 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: GRO
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity 0.4.18;

contract Token { // ERC20 standard

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract SafeMath {

  function safeMul(uint a, uint b) pure internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }
  function safeSub(uint a, uint b) pure internal returns (uint) {
    assert(b <= a);
    return a - b;
  }
  function safeAdd(uint a, uint b) pure internal returns (uint) {
    uint c = a + b;
    assert(c>=a && c>=b);
    return c;
  }
  function safeNumDigits(uint number) pure internal returns (uint8) {
    uint8 digits = 0;
    while (number != 0) {
        number /= 10;
        digits++;
    }
    return digits;
}

  // mitigate short address attack
  // thanks to https://github.com/numerai/contract/blob/c182465f82e50ced8dacb3977ec374a892f5fa8c/contracts/Safe.sol#L30-L34.
  // TODO: doublecheck implication of >= compared to ==
  modifier onlyPayloadSize(uint numWords) {
     assert(msg.data.length >= numWords * 32 + 4);
     _;
  }

}

contract StandardToken is Token, SafeMath {

    uint256 public totalSupply;

    function transfer(address _to, uint256 _value) onlyPayloadSize(2) public returns (bool success) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value && _value > 0);
        balances[msg.sender] = safeSub(balances[msg.sender], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Transfer(msg.sender, _to, _value);

        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(3) public returns (bool success) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0);
        balances[_from] = safeSub(balances[_from], _value);
        balances[_to] = safeAdd(balances[_to], _value);
        allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender], _value);
        Transfer(_from, _to, _value);

        return true;
    }

    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }

    // To change the approve amount you first have to reduce the addresses'
    //  allowance to zero by calling 'approve(_spender, 0)' if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    function approve(address _spender, uint256 _value) public onlyPayloadSize(2) returns (bool success) {
        require((_value == 0) || (allowed[msg.sender][_spender] == 0));
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);

        return true;
    }

    function changeApproval(address _spender, uint256 _oldValue, uint256 _newValue) public onlyPayloadSize(3) returns (bool success) {
        require(allowed[msg.sender][_spender] == _oldValue);
        allowed[msg.sender][_spender] = _newValue;
        Approval(msg.sender, _spender, _newValue);

        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

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

}

contract GRO is StandardToken {
    // FIELDS
    string public name = "Gron Digital";
    string public symbol = "GRO";
    uint256 public decimals = 18;
    string public version = "11.0";

    // Nine Hundred and Fifty million with support for 18 decimals
    uint256 public tokenCap = 950000000 * 10**18;

    // crowdsale parameters
    uint256 public fundingStartBlock;
    uint256 public fundingEndBlock;

    // vesting fields
    address public vestingContract;
    bool private vestingSet = false;

    // root control
    address public fundWallet;
    // control of liquidity and limited control of updatePrice
    address public controlWallet;
    // time to wait between controlWallet price updates
    uint256 public waitTime = 5 hours;

    // fundWallet controlled state variables
    // halted: halt buying due to emergency, tradeable: signal that GRON platform is up and running
    bool public halted = false;
    bool public tradeable = false;

    // -- totalSupply defined in StandardToken
    // -- mapping to token balances done in StandardToken

    uint256 public previousUpdateTime = 0;
    Price public currentPrice;
    uint256 public minAmount; // Minimum amount of ether to accept for GRO purchases

    // map participant address to a withdrawal request
    mapping (address => Withdrawal) public withdrawals;
    // maps previousUpdateTime to the next price
    mapping (uint256 => Price) public prices;
    // maps addresses
    mapping (address => bool) public whitelist;

    // TYPES

    struct Price { // tokensPerEth
        uint256 numerator;
    }

    struct Withdrawal {
        uint256 tokens;
        uint256 time; // time for each withdrawal is set to the previousUpdateTime
    }

    // EVENTS

    event Buy(address indexed participant, address indexed beneficiary, uint256 weiValue, uint256 amountTokens);
    event AllocatePresale(address indexed participant, uint256 amountTokens);
    event BonusAllocation(address indexed participant, string participant_addr, string txnHash, uint256 bonusTokens);
    event Mint(address indexed to, uint256 amount);
    event Whitelist(address indexed participant);
    event PriceUpdate(uint256 numerator);
    event AddLiquidity(uint256 ethAmount);
    event RemoveLiquidity(uint256 ethAmount);
    event WithdrawRequest(address indexed participant, uint256 amountTokens);
    event Withdraw(address indexed participant, uint256 amountTokens, uint256 etherAmount);

    // MODIFIERS

    modifier isTradeable { // exempt vestingContract and fundWallet to allow dev allocations
        require(tradeable || msg.sender == fundWallet || msg.sender == vestingContract);
        _;
    }

    modifier onlyWhitelist {
        require(whitelist[msg.sender]);
        _;
    }

    modifier onlyFundWallet {
        require(msg.sender == fundWallet);
        _;
    }

    modifier onlyManagingWallets {
        require(msg.sender == controlWallet || msg.sender == fundWallet);
        _;
    }

    modifier only_if_controlWallet {
        if (msg.sender == controlWallet) _;
    }
    modifier require_waited {
      require(safeSub(currentTime(), waitTime) >= previousUpdateTime);
        _;
    }
    modifier only_if_decrease (uint256 newNumerator) {
        if (newNumerator < currentPrice.numerator) _;
    }

    // CONSTRUCTOR
    function GRO() public {
        fundWallet = msg.sender;
        whitelist[fundWallet] = true;
        previousUpdateTime = currentTime();
    }

    // Called after deployment
    // Not all deployment clients support constructor arguments.
    // This function is provided for maximum compatibility. 
    function initialiseContract(address controlWalletInput, uint256 priceNumeratorInput, uint256 startBlockInput, uint256 endBlockInput) external onlyFundWallet {
      require(controlWalletInput != address(0));
      require(priceNumeratorInput > 0);
      require(endBlockInput > startBlockInput);
      controlWallet = controlWalletInput;
      whitelist[controlWallet] = true;
      currentPrice = Price(priceNumeratorInput);
      fundingStartBlock = startBlockInput;
      fundingEndBlock = endBlockInput;
      previousUpdateTime = currentTime();
      minAmount = 0.05 ether; // 500 GRO
    }

    // METHODS

    function setVestingContract(address vestingContractInput) external onlyFundWallet {
        require(vestingContractInput != address(0));
        vestingContract = vestingContractInput;
        whitelist[vestingContract] = true;
        vestingSet = true;
    }

    // allows controlWallet to update the price within a time contstraint, allows fundWallet complete control
    function updatePrice(uint256 newNumerator) external onlyManagingWallets {
        require(newNumerator > 0);
        require_limited_change(newNumerator);
        // either controlWallet command is compliant or transaction came from fundWallet
        currentPrice.numerator = newNumerator;
        // maps time to new Price (if not during ICO)
        prices[previousUpdateTime] = currentPrice;
        previousUpdateTime = currentTime();
        PriceUpdate(newNumerator);
    }

    function require_limited_change (uint256 newNumerator)
      private
      view
      only_if_controlWallet
      require_waited
      only_if_decrease(newNumerator)
    {
        uint256 percentage_diff = 0;
        percentage_diff = safeMul(newNumerator, 100) / currentPrice.numerator;
        percentage_diff = safeSub(100, percentage_diff);
        // controlWallet can only increase price by max 20% and only every waitTime
        require(percentage_diff <= 20);
    }

    function mint(address participant, uint256 amountTokens) private {
        require(vestingSet);
        // 40% of total allocated for Founders, Team incentives & Bonuses.

	// Solidity v0.4.18 - floating point is not fully supported,
	// integer division results in truncated values
	// Therefore we are multiplying out by 1000000... for
	// precision. This allows ratios values up to 0.0000x or 0.00x percent
	uint256 precision = 10**18;
	uint256 allocationRatio = safeMul(amountTokens, precision) / safeMul(570000000, precision);
        uint256 developmentAllocation = safeMul(allocationRatio, safeMul(380000000, precision)) / precision;
        // check that token cap is not exceeded
        uint256 newTokens = safeAdd(amountTokens, developmentAllocation);
        require(safeAdd(totalSupply, newTokens) <= tokenCap);
        // increase token supply, assign tokens to participant
        totalSupply = safeAdd(totalSupply, newTokens);
        balances[participant] = safeAdd(balances[participant], amountTokens);
        balances[vestingContract] = safeAdd(balances[vestingContract], developmentAllocation);

	Mint(fundWallet, newTokens);
	Transfer(fundWallet, participant, amountTokens);
	Transfer(fundWallet, vestingContract, developmentAllocation);
    }

    // amountTokens is supplied in major units, not subunits / decimal
    // units.
    function allocatePresaleTokens(
			       address participant_address,
			       string participant_str,
			       uint256 amountTokens,
			       string txnHash
			       )
      external onlyFundWallet {

      require(currentBlock() < fundingEndBlock);
      require(participant_address != address(0));
     
      uint256 bonusTokens = 0;
      uint256 totalTokens = safeMul(amountTokens, 10**18); // scale to subunit

      if (firstDigit(txnHash) == firstDigit(participant_str)) {
	  // Calculate 10% bonus
	  bonusTokens = safeMul(totalTokens, 10) / 100;
	  totalTokens = safeAdd(totalTokens, bonusTokens);
      }
        
        mint(participant_address, totalTokens);
	// Events        
        AllocatePresale(participant_address, totalTokens);
	BonusAllocation(participant_address, participant_str, txnHash, bonusTokens);
    }

    // returns the first character as a byte in a given hex string
    // address Given 0x1abcd... returns 1
    function firstDigit(string s) pure public returns(byte){
	bytes memory strBytes = bytes(s);
	return strBytes[2];
      }

    function verifyParticipant(address participant) external onlyManagingWallets {
        whitelist[participant] = true;
        Whitelist(participant);
    }

    // fallback function
    function() payable public {
      require(tx.origin == msg.sender);
      buyTo(msg.sender);
    }

    function buy() external payable {
        buyTo(msg.sender);
    }

    function buyTo(address participant) public payable {
      require(!halted);
      require(participant != address(0));
      require(msg.value >= minAmount);
      require(currentBlock() < fundingEndBlock);
      // msg.value in wei - scale to GRO
      uint256 baseAmountTokens = safeMul(msg.value, currentPrice.numerator);
      // calc lottery amount excluding potential ico bonus
      uint256 lotteryAmount = blockLottery(baseAmountTokens);
      uint256 icoAmount = safeMul(msg.value, icoNumeratorPrice());

      uint256 tokensToBuy = safeAdd(icoAmount, lotteryAmount);
      mint(participant, tokensToBuy);
      // send ether to fundWallet
      fundWallet.transfer(msg.value);
      // Events
      Buy(msg.sender, participant, msg.value, tokensToBuy);
    }

    // time based on blocknumbers, assuming a blocktime of 15s
    function icoNumeratorPrice() public constant returns (uint256) {

      if (currentBlock() < fundingStartBlock){
	return 14000;
      }
      
      uint256 icoDuration = safeSub(currentBlock(), fundingStartBlock);

      uint256 firstBlockPhase = 80640; // #blocks = 2*7*24*60*60/15 = 80640
      uint256 secondBlockPhase = 161280; // // #blocks = 4*7*24*60*60/15 = 161280
      uint256 thirdBlockPhase = 241920; // // #blocks = 6*7*24*60*60/15 = 241920

      if (icoDuration < firstBlockPhase ) {
	return  13000;	  
      } else if (icoDuration < secondBlockPhase ) { 
	return  12000;	    
      } else if (icoDuration < thirdBlockPhase ) { 
	return 11000;	    
      } else {
	return 10000;
      }
    }

    function currentBlock() private constant returns(uint256 _currentBlock) {
      return block.number;
    }

    function currentTime() private constant returns(uint256 _currentTime) {
      return now;
    }

    function blockLottery(uint256 _amountTokens) private constant returns(uint256) {
      uint256 divisor = 10;
      uint256 winning_digit = 0;
      uint256 tokenWinnings = 0;

      if (currentBlock() % divisor == winning_digit) {
	tokenWinnings = safeMul(_amountTokens, 10) / 100;
      }
      
      return tokenWinnings;	
    }

    function requestWithdrawal(uint256 amountTokensToWithdraw) external isTradeable onlyWhitelist {
      require(currentBlock() > fundingEndBlock);
        require(amountTokensToWithdraw > 0);
        address participant = msg.sender;
        require(balanceOf(participant) >= amountTokensToWithdraw);
        require(withdrawals[participant].tokens == 0); // participant cannot have outstanding withdrawals
        balances[participant] = safeSub(balances[participant], amountTokensToWithdraw);
        withdrawals[participant] = Withdrawal({tokens: amountTokensToWithdraw, time: previousUpdateTime});
        WithdrawRequest(participant, amountTokensToWithdraw);
    }

    function withdraw() external {
        address participant = msg.sender;
        uint256 tokens = withdrawals[participant].tokens;
        require(tokens > 0); // participant must have requested a withdrawal
        uint256 requestTime = withdrawals[participant].time;
        // obtain the next price that was set after the request
        Price price = prices[requestTime];
        require(price.numerator > 0); // price must have been set
        uint256 withdrawValue = tokens / price.numerator;
        // if contract ethbal > then send + transfer tokens to fundWallet, otherwise give tokens back
        withdrawals[participant].tokens = 0;
        if (this.balance >= withdrawValue) {
            enact_withdrawal_greater_equal(participant, withdrawValue, tokens);
	}
        else {
            enact_withdrawal_less(participant, withdrawValue, tokens);
	}
    }

    function enact_withdrawal_greater_equal(address participant, uint256 withdrawValue, uint256 tokens)
        private
    {
        assert(this.balance >= withdrawValue);
        balances[fundWallet] = safeAdd(balances[fundWallet], tokens);
        participant.transfer(withdrawValue);
        Withdraw(participant, tokens, withdrawValue);
    }
    function enact_withdrawal_less(address participant, uint256 withdrawValue, uint256 tokens)
        private
    {
        assert(this.balance < withdrawValue);
        balances[participant] = safeAdd(balances[participant], tokens);
        Withdraw(participant, tokens, 0); // indicate a failed withdrawal
    }

    // Returns the ether value (in wei units) for the amount of tokens
    // in subunits for decimal support, at the current GRO exchange
    // rate
    function checkWithdrawValue(uint256 amountTokensInSubunit) public constant returns (uint256 weiValue) {
        require(amountTokensInSubunit > 0);
        require(balanceOf(msg.sender) >= amountTokensInSubunit);
        uint256 withdrawValue = amountTokensInSubunit / currentPrice.numerator;
        require(this.balance >= withdrawValue);
        return withdrawValue;
    }

    // allow fundWallet or controlWallet to add ether to contract
    function addLiquidity() external onlyManagingWallets payable {
        require(msg.value > 0);
        AddLiquidity(msg.value);
    }

    // allow fundWallet to remove ether from contract
    function removeLiquidity(uint256 amount) external onlyManagingWallets {
        require(amount <= this.balance);
        fundWallet.transfer(amount);
        RemoveLiquidity(amount);
    }

    function changeFundWallet(address newFundWallet) external onlyFundWallet {
        require(newFundWallet != address(0));
        fundWallet = newFundWallet;
    }

    function changeControlWallet(address newControlWallet) external onlyFundWallet {
        require(newControlWallet != address(0));
        controlWallet = newControlWallet;
    }

    function changeWaitTime(uint256 newWaitTime) external onlyFundWallet {
        waitTime = newWaitTime;
    }

    // specified in wei
    function changeMinAmount(uint256 newMinAmount) external onlyFundWallet {
      minAmount = newMinAmount;
    }

    function updateFundingStartBlock(uint256 newFundingStartBlock) external onlyFundWallet {
      require(currentBlock() < fundingStartBlock);
        require(currentBlock() < newFundingStartBlock);
        fundingStartBlock = newFundingStartBlock;
    }

    function updateFundingEndBlock(uint256 newFundingEndBlock) external onlyFundWallet {
        require(currentBlock() < fundingEndBlock);
        require(currentBlock() < newFundingEndBlock);
        fundingEndBlock = newFundingEndBlock;
    }

    function halt() external onlyFundWallet {
        halted = true;
    }
    function unhalt() external onlyFundWallet {
        halted = false;
    }

    function enableTrading() external onlyFundWallet {
        require(currentBlock() > fundingEndBlock);
        tradeable = true;
    }

    function claimTokens(address _token) external onlyFundWallet {
        require(_token != address(0));
        Token token = Token(_token);
        uint256 balance = token.balanceOf(this);
        token.transfer(fundWallet, balance);
     }

    // prevent transfers until trading allowed
    function transfer(address _to, uint256 _value) public isTradeable returns (bool success) {
        return super.transfer(_to, _value);
    }
    function transferFrom(address _from, address _to, uint256 _value) public isTradeable returns (bool success) {
        return super.transferFrom(_from, _to, _value);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newWaitTime","type":"uint256"}],"name":"changeWaitTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"icoNumeratorPrice","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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newFundingStartBlock","type":"uint256"}],"name":"updateFundingStartBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"controlWalletInput","type":"address"},{"name":"priceNumeratorInput","type":"uint256"},{"name":"startBlockInput","type":"uint256"},{"name":"endBlockInput","type":"uint256"}],"name":"initialiseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"previousUpdateTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newControlWallet","type":"address"}],"name":"changeControlWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vestingContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"verifyParticipant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fundWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFundWallet","type":"address"}],"name":"changeFundWallet","outputs":[],"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":"vestingContractInput","type":"address"}],"name":"setVestingContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawals","outputs":[{"name":"tokens","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"participant_address","type":"address"},{"name":"participant_str","type":"string"},{"name":"amountTokens","type":"uint256"},{"name":"txnHash","type":"string"}],"name":"allocatePresaleTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controlWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableTrading","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newNumerator","type":"uint256"}],"name":"updatePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amountTokensInSubunit","type":"uint256"}],"name":"checkWithdrawValue","outputs":[{"name":"weiValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_oldValue","type":"uint256"},{"name":"_newValue","type":"uint256"}],"name":"changeApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"removeLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentPrice","outputs":[{"name":"numerator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amountTokensToWithdraw","type":"uint256"}],"name":"requestWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"prices","outputs":[{"name":"numerator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"s","type":"string"}],"name":"firstDigit","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"waitTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"buyTo","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tokenCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newFundingEndBlock","type":"uint256"}],"name":"updateFundingEndBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinAmount","type":"uint256"}],"name":"changeMinAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"addLiquidity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tradeable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"weiValue","type":"uint256"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"AllocatePresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"participant_addr","type":"string"},{"indexed":false,"name":"txnHash","type":"string"},{"indexed":false,"name":"bonusTokens","type":"uint256"}],"name":"BonusAllocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"Whitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"numerator","type":"uint256"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"}],"name":"WithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"amountTokens","type":"uint256"},{"indexed":false,"name":"etherAmount","type":"uint256"}],"name":"Withdraw","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"},{"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"}]

  Contract Creation Code Switch To Opcodes View
60606040526040805190810160405280600c81526020017f47726f6e204469676974616c0000000000000000000000000000000000000000815250600390805190602001906200005192919062000258565b506040805190810160405280600381526020017f47524f0000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000258565b5060126005556040805190810160405280600481526020017f31312e300000000000000000000000000000000000000000000000000000000081525060069080519060200190620000f292919062000258565b506b0311d253316c79d3760000006007556000600a60146101000a81548160ff021916908315150217905550614650600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600f5534156200016b57600080fd5b33600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002446200025064010000000002620039a1176401000000009004565b600f8190555062000307565b600042905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029b57805160ff1916838001178555620002cc565b82800160010185558215620002cc579182015b82811115620002cb578251825591602001919060010190620002ae565b5b509050620002db9190620002df565b5090565b6200030491905b8082111562000300576000816000905550600101620002e6565b5090565b90565b613f8780620003176000396000f30060606040526004361061025c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146102a157806306fe22121461032f578063095ea7b31461035257806318160ddd146103ac57806319476244146103d557806323b872dd146103fe578063276605bc14610477578063292636301461049a578063313ce567146104ee578063347820eb146105175780633ccfd60b1461054057806354fd4d50146105555780635a8cf571146105e35780635e6f60451461061c5780635ed7ca5b14610671578063643a769514610686578063664a1ad6146106bf5780636fb4adff1461071457806370a082311461074d578063749915691461079a5780637a9262a2146107d35780637e32716814610827578063823e569e146108915780638a8c523c146108e65780638d6cc56d146108fb5780638f11e5f91461091e57806391b43d13146109555780639281cd651461097e57806395d89b41146109e15780639b19251a14610a6f5780639b2cb5d814610ac05780639c8f9f2314610ae95780639d1b464a14610b0c5780639ee679e814610b35578063a6f2ae3a14610b58578063a9059cbb14610b62578063b9b8af0b14610bbc578063bc31c1c114610be9578063c02cc95714610c20578063cb3e64fd14610cd5578063ccca123b14610cea578063d648a64714610d13578063dcf72c1014610d3c578063dd54291b14610d6a578063dd62ed3e14610d93578063df8de3e714610dff578063e28b0d9a14610e38578063e34ffcb814610e5b578063e8078d9414610e7e578063f5ac9db614610e88575b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561029657600080fd5b61029f33610eb5565b005b34156102ac57600080fd5b6102b4611056565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f45780820151818401526020810190506102d9565b50505050905090810190601f1680156103215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561033a57600080fd5b61035060048080359060200190919050506110f4565b005b341561035d57600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061115a565b604051808215151515815260200191505060405180910390f35b34156103b757600080fd5b6103bf6112fb565b6040518082815260200191505060405180910390f35b34156103e057600080fd5b6103e8611301565b6040518082815260200191505060405180910390f35b341561040957600080fd5b61045d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061138e565b604051808215151515815260200191505060405180910390f35b341561048257600080fd5b610498600480803590602001909190505061146f565b005b34156104a557600080fd5b6104ec600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091908035906020019091905050611501565b005b34156104f957600080fd5b6105016116c0565b6040518082815260200191505060405180910390f35b341561052257600080fd5b61052a6116c6565b6040518082815260200191505060405180910390f35b341561054b57600080fd5b6105536116cc565b005b341561056057600080fd5b610568611835565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a857808201518184015260208101905061058d565b50505050905090810190601f1680156105d55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105ee57600080fd5b61061a600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118d3565b005b341561062757600080fd5b61062f6119af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561067c57600080fd5b6106846119d5565b005b341561069157600080fd5b6106bd600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a4e565b005b34156106ca57600080fd5b6106d2611ba0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561071f57600080fd5b61074b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611bc6565b005b341561075857600080fd5b610784600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ca2565b6040518082815260200191505060405180910390f35b34156107a557600080fd5b6107d1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611ceb565b005b34156107de57600080fd5b61080a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611e5c565b604051808381526020018281526020019250505060405180910390f35b341561083257600080fd5b61088f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001919091929080359060200190919080359060200190820180359060200191909192905050611e80565b005b341561089c57600080fd5b6108a4612124565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108f157600080fd5b6108f961214a565b005b341561090657600080fd5b61091c60048080359060200190919050506121da565b005b341561092957600080fd5b61093f600480803590602001909190505061231c565b6040518082815260200191505060405180910390f35b341561096057600080fd5b610968612387565b6040518082815260200191505060405180910390f35b341561098957600080fd5b6109c7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190505061238d565b604051808215151515815260200191505060405180910390f35b34156109ec57600080fd5b6109f4612523565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a34578082015181840152602081019050610a19565b50505050905090810190601f168015610a615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610a7a57600080fd5b610aa6600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125c1565b604051808215151515815260200191505060405180910390f35b3415610acb57600080fd5b610ad36125e1565b6040518082815260200191505060405180910390f35b3415610af457600080fd5b610b0a60048080359060200190919050506125e7565b005b3415610b1757600080fd5b610b1f61275d565b6040518082815260200191505060405180910390f35b3415610b4057600080fd5b610b566004808035906020019091905050612769565b005b610b60612a6a565b005b3415610b6d57600080fd5b610ba2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612a75565b604051808215151515815260200191505060405180910390f35b3415610bc757600080fd5b610bcf612b54565b604051808215151515815260200191505060405180910390f35b3415610bf457600080fd5b610c0a6004808035906020019091905050612b67565b6040518082815260200191505060405180910390f35b3415610c2b57600080fd5b610c7b600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050612b85565b60405180827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3415610ce057600080fd5b610ce8612bf4565b005b3415610cf557600080fd5b610cfd612c6d565b6040518082815260200191505060405180910390f35b3415610d1e57600080fd5b610d26612c73565b6040518082815260200191505060405180910390f35b610d68600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610eb5565b005b3415610d7557600080fd5b610d7d612c79565b6040518082815260200191505060405180910390f35b3415610d9e57600080fd5b610de9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c7f565b6040518082815260200191505060405180910390f35b3415610e0a57600080fd5b610e36600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d06565b005b3415610e4357600080fd5b610e596004808035906020019091905050612f52565b005b3415610e6657600080fd5b610e7c6004808035906020019091905050612fe4565b005b610e8661304a565b005b3415610e9357600080fd5b610e9b613146565b604051808215151515815260200191505060405180910390f35b600080600080600e60009054906101000a900460ff16151515610ed757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151515610f1357600080fd5b6011543410151515610f2457600080fd5b600954610f2f613159565b101515610f3b57600080fd5b610f4a34601060000154613161565b9350610f5584613194565b9250610f6834610f63611301565b613161565b9150610f7482846131e5565b9050610f80858261320f565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515610fe257600080fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f89f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e3484604051808381526020018281526020019250505060405180910390a35050505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110ec5780601f106110c1576101008083540402835291602001916110ec565b820191906000526020600020905b8154815290600101906020018083116110cf57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561115057600080fd5b80600d8190555050565b600060026004602082020160003690501015151561117457fe5b60008314806111ff57506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b151561120a57600080fd5b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b60005481565b6000806000806000600854611314613159565b1015611324576136b09450611387565b61133761132f613159565b6008546135c1565b935062013b0092506202760091506203b10090508284101561135d576132c89450611387565b8184101561136f57612ee09450611387565b8084101561138157612af89450611387565b61271094505b5050505090565b6000600e60019054906101000a900460ff16806113f85750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806114505750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561145b57600080fd5b6114668484846135da565b90509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114cb57600080fd5b6008546114d6613159565b1015156114e257600080fd5b806114eb613159565b1015156114f757600080fd5b8060088190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561159957600080fd5b6000831115156115a857600080fd5b81811115156115b657600080fd5b83600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506020604051908101604052808481525060106000820151816000015590505081600881905550806009819055506116a66139a1565b600f8190555066b1a2bc2ec5000060118190555050505050565b60055481565b600f5481565b6000806000806000339450601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154935060008411151561172b57600080fd5b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015492506013600084815260200190815260200160002091506000826000015411151561179857600080fd5b8160000154848115156117a757fe5b0490506000601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550803073ffffffffffffffffffffffffffffffffffffffff16311015156118225761181d8582866139a9565b61182e565b61182d858286613b37565b5b5050505050565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118cb5780601f106118a0576101008083540402835291602001916118cb565b820191906000526020600020905b8154815290600101906020018083116118ae57829003601f168201915b505050505081565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561192f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561196b57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a3157600080fd5b6001600e60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611af75750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611b0257600080fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167feb73900b98b6a3e2b8b01708fe544760cf570d21e7fbe5225f24e48b5b2b432e60405160405180910390a250565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c2257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c5e57600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d4757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d8357600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60146101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090508060000154908060010154905082565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611edf57600080fd5b600954611eea613159565b101515611ef657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515611f3257600080fd5b60009150611f4885670de0b6b3a7640000613161565b9050611f8587878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612b85565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611fe285858080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050612b85565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561203057606461201782600a613161565b81151561202057fe5b04915061202d81836131e5565b90505b61203a888261320f565b8773ffffffffffffffffffffffffffffffffffffffff167f69488271d7ab6c5d1d852b2fedbeafcee0ad158162b8c58145130bacd56bff76826040518082815260200191505060405180910390a28773ffffffffffffffffffffffffffffffffffffffff167f4df679e3cae3a2641649110128bf2d93f65fddaee12e077436767670e7b9077c8888878787604051808060200180602001848152602001838103835288888281815260200192508082843782019150508381038252868682818152602001925080828437820191505097505050505050505060405180910390a25050505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121a657600080fd5b6009546121b1613159565b1115156121bd57600080fd5b6001600e60016101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806122835750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561228e57600080fd5b60008111151561229d57600080fd5b6122a681613c41565b80601060000181905550601060136000600f548152602001908152602001600020600082015481600001559050506122dc6139a1565b600f819055507fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a816040518082815260200191505060405180910390a150565b60008060008311151561232e57600080fd5b8261233833611ca2565b1015151561234557600080fd5b6010600001548381151561235557fe5b049050803073ffffffffffffffffffffffffffffffffffffffff16311015151561237e57600080fd5b80915050919050565b60095481565b60006003600460208202016000369050101515156123a757fe5b83600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561243157600080fd5b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150509392505050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125b95780601f1061258e576101008083540402835291602001916125b9565b820191906000526020600020905b81548152906001019060200180831161259c57829003601f168201915b505050505081565b60146020528060005260406000206000915054906101000a900460ff1681565b60115481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806126905750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561269b57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156126c157600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561272357600080fd5b7f9a5a8a32afd899e7f95003c6e21c9fab2d50e11992439d14472229180c60c7aa816040518082815260200191505060405180910390a150565b60108060000154905081565b6000600e60019054906101000a900460ff16806127d35750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061282b5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561283657600080fd5b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561288e57600080fd5b600954612899613159565b1115156128a557600080fd5b6000821115156128b457600080fd5b339050816128c182611ca2565b101515156128ce57600080fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561291f57600080fd5b612968600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836135c1565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040805190810160405280838152602001600f54815250601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508073ffffffffffffffffffffffffffffffffffffffff167f17040713250ec5f668a1c39e7939900e78558350dbaff0ebef34268dfa8ea4ac836040518082815260200191505060405180910390a25050565b612a7333610eb5565b565b6000600e60019054906101000a900460ff1680612adf5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612b375750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612b4257600080fd5b612b4c8383613d0f565b905092915050565b600e60009054906101000a900460ff1681565b60136020528060005260406000206000915090508060000154905081565b6000612b8f613f47565b829050806002815181101515612ba157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002915050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c5057600080fd5b6000600e60006101000a81548160ff021916908315150217905550565b600d5481565b60085481565b60075481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d6557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612da157600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612e4757600080fd5b6102c65a03f11515612e5857600080fd5b5050506040518051905090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612f3157600080fd5b6102c65a03f11515612f4257600080fd5b5050506040518051905050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612fae57600080fd5b600954612fb9613159565b101515612fc557600080fd5b80612fce613159565b101515612fda57600080fd5b8060098190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561304057600080fd5b8060118190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806130f35750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156130fe57600080fd5b60003411151561310d57600080fd5b7ff53d9d58a7ff16a2e1360446f1c4b5e81a427d3efd25615be081f4003662400a346040518082815260200191505060405180910390a1565b600e60019054906101000a900460ff1681565b600043905090565b60008082840290506000841480613182575082848281151561317f57fe5b04145b151561318a57fe5b8091505092915050565b600080600080600a9250600091506000905081836131b0613159565b8115156131b957fe5b0614156131da5760646131cd86600a613161565b8115156131d657fe5b0490505b809350505050919050565b60008082840190508381101580156131fd5750828110155b151561320557fe5b8091505092915050565b600080600080600a60149054906101000a900460ff16151561323057600080fd5b670de0b6b3a764000093506132496321f9828085613161565b6132538686613161565b81151561325c57fe5b04925083613277846132726316a6570088613161565b613161565b81151561328057fe5b04915061328d85836131e5565b905060075461329e600054836131e5565b111515156132ab57600080fd5b6132b7600054826131e5565b600081905550613306600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866131e5565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b460016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131e5565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040518082815260200191505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050565b60008282111515156135cf57fe5b818303905092915050565b60006003600460208202016000369050101515156135f457fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561363057600080fd5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156136fb575082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156137075750600083115b151561371257600080fd5b61375b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137e7600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131e5565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b0600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b600042905090565b813073ffffffffffffffffffffffffffffffffffffffff1631101515156139cc57fe5b613a3760016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826131e5565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515613adc57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688284604051808381526020018281526020019250505060405180910390a2505050565b813073ffffffffffffffffffffffffffffffffffffffff1631101515613b5957fe5b613ba2600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826131e5565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568826000604051808381526020018281526020019250505060405180910390a2505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613d0b57600f54613caf613ca76139a1565b600d546135c1565b10151515613cbc57600080fd5b81601060000154811015613d095760009150601060000154613cdf846064613161565b811515613ce857fe5b049150613cf66064836135c1565b915060148211151515613d0857600080fd5b5b505b5050565b6000600260046020820201600036905010151515613d2957fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613d6557600080fd5b82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015613db45750600083115b1515613dbf57600080fd5b613e08600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846135c1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e94600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131e5565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6020604051908101604052806000815250905600a165627a7a72305820a25a6c88da760ddbc12060f0bf2469c2d4bb351efd648de8ae444f17e74f17f80029

   Swarm Source:
bzzr://a25a6c88da760ddbc12060f0bf2469c2d4bb351efd648de8ae444f17e74f17f8

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.