Sponsored:   Temco - Join the Largest VC Backed ICO on the Bitcoin Network! TEMCO KYC Whitelist Starts Now!!
Contract Overview
Balance: 0.002 Ether
Ether Value: $0.31 (@ $156.28/ETH)
Transactions: 19 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x3550c1727fa664a94089140f32094de64c0e9967at txn 0x9383a151e29edd7590068da58ef59d1a50eed536ceda9df4d006be2ba63af531
 Latest 19 txns

TxHash Age From To Value [TxFee]
0x4482589d595a36e987560e693b3a1e22bd5fcada6a5f479a3865ae57c3e01bbf73 days 5 hrs ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.001281576
0x576dfa72bb90ca812f0fc167b0d5ffa227ae9264ce6bc4d2bffea2e4312f72ed73 days 5 hrs ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.001062816
0x5f1b4658a69d309c135ed4e318fe424b64fcab7ca60151d6f4bcc38b4e0a0e7173 days 5 hrs ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.00129769
0xea860ab3049410f893e0f4989a817bc064ff4bf0c25635d688119f2da00efc9675 days 18 hrs ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.001214688
0x087535874742b43ef34e59d06b4f8d79e4cab281a5a821ca5e5735a67d6489dc75 days 19 hrs ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.001269822
0x025b21c2853c33af68ed86b1f82cf444c29966cf172d4b137e1f42d25a0c7dfd76 days 56 mins ago0x2f693afc1e1c447883276bb05176d49c31e75464  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.001584354
0xd8fe983748dc6338ac880128263876f45195fd9bf4b2f2c386ecfa466b053b7a76 days 22 hrs ago0xc1dcb9d1ed24bf1137b1071242234b0f8bae08e1  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.000373194
0xdbd0e95344bea5b706217845996453d281f2ffb4f0de7c9767d0faef1c2965f193 days 20 hrs ago0x31415fb6a06ae6240c3741b1ad19bfe091977278  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.001818234
0x82231ec751dc728750f6f1e42398487d918b63ed1ccb1b47b93bc679c79dce4693 days 20 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.002065592
0xf50fc9d0440aad3b21e6eebf6913aee608b03742ec5fa4c8b232f17ff3abcba5103 days 1 hr ago0x31415fb6a06ae6240c3741b1ad19bfe091977278  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.00598806
0x203590d5be788d1695e73b1e1c40cdfae261993b87caa1a19dc9bb2302ec550c103 days 12 hrs ago0x0035fc5208ef989c28d47e552e92b0c507d2b318  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.01 Ether0.002075568
0x5c3096edb89f76f9d17edd9e9aa110ad44dd41a32678bf7af6c7b3613fb1a964103 days 16 hrs ago0x31415fb6a06ae6240c3741b1ad19bfe091977278  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.000426684
0xc7ccce48b9e38b9595c7340ad50f81b2daf3841ee7fe9e48b2755e13275f779c104 days 15 hrs ago0x31415fb6a06ae6240c3741b1ad19bfe091977278  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0 Ether0.00044809
0x547f4fd0131a1f790b8350eb9043ef647d82ddced78d679e44569b04081778d3104 days 23 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.005 Ether0.000464459156
0x1be71863315157ffce3ab6de66984448e19a07358fd028d189c7f20a6dcab637104 days 23 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.00037113934
0x9922893205394395262a535117e4af08eed7cf2cd325389997cccd6054a97ca5104 days 23 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.006 Ether0.000521498
0x297cacc33ab9ae3fd434c92c92c31b0d3a19d298cf7c8e5d2159419689349ed4104 days 23 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.005 Ether0.0003911235
0xea7739913461dc554ef726f94bdbc8d80a96308ed44bb8e2cf003dfb10dc891d104 days 23 hrs ago0x3550c1727fa664a94089140f32094de64c0e9967  IN   0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0.001 Ether0.0004549905
0x9383a151e29edd7590068da58ef59d1a50eed536ceda9df4d006be2ba63af531105 days 6 mins ago0x3550c1727fa664a94089140f32094de64c0e9967  IN    Contract Creation0 Ether0.0096144699
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 8 Internal Transactions

ParentTxHash Block Age From To Value
0x4482589d595a36e987560e693b3a1e22bd5fcada6a5f479a3865ae57c3e01bbf628678073 days 5 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x2f693afc1e1c447883276bb05176d49c31e754640.001 Ether
0xea860ab3049410f893e0f4989a817bc064ff4bf0c25635d688119f2da00efc96627141175 days 18 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x2f693afc1e1c447883276bb05176d49c31e754640.005 Ether
0x087535874742b43ef34e59d06b4f8d79e4cab281a5a821ca5e5735a67d6489dc627125375 days 19 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x2f693afc1e1c447883276bb05176d49c31e754640.005 Ether
0xd8fe983748dc6338ac880128263876f45195fd9bf4b2f2c386ecfa466b053b7a626468076 days 22 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0xc1dcb9d1ed24bf1137b1071242234b0f8bae08e10.001 Ether
0xdbd0e95344bea5b706217845996453d281f2ffb4f0de7c9767d0faef1c2965f1616437493 days 20 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x31415fb6a06ae6240c3741b1ad19bfe0919772780.001 Ether
0xf50fc9d0440aad3b21e6eebf6913aee608b03742ec5fa4c8b232f17ff3abcba56109857103 days 1 hr ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x31415fb6a06ae6240c3741b1ad19bfe0919772780.01 Ether
0x5c3096edb89f76f9d17edd9e9aa110ad44dd41a32678bf7af6c7b3613fb1a9646106321103 days 16 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x31415fb6a06ae6240c3741b1ad19bfe0919772780.006 Ether
0xc7ccce48b9e38b9595c7340ad50f81b2daf3841ee7fe9e48b2755e13275f779c6100501104 days 15 hrs ago0x7a848abebea15a4bc2c27a40fa78f44c3daecd2c0x31415fb6a06ae6240c3741b1ad19bfe0919772780.001 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: TaskRegister
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;

// File: libs/EC.sol

contract EC {

    uint256 constant public gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798;
    uint256 constant public gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8;
    uint256 constant public n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F;
    uint256 constant public a = 0;
    uint256 constant public b = 7;

    function _jAdd(
        uint256 x1, uint256 z1,
        uint256 x2, uint256 z2)
        public 
        pure
        returns(uint256 x3, uint256 z3)
    {
        (x3, z3) = (
            addmod(
                mulmod(z2, x1, n),
                mulmod(x2, z1, n),
                n
            ),
            mulmod(z1, z2, n)
        );
    }

    function _jSub(
        uint256 x1, uint256 z1,
        uint256 x2, uint256 z2)
        public 
        pure
        returns(uint256 x3, uint256 z3)
    {
        (x3, z3) = (
            addmod(
                mulmod(z2, x1, n),
                mulmod(n - x2, z1, n),
                n
            ),
            mulmod(z1, z2, n)
        );
    }

    function _jMul(
        uint256 x1, uint256 z1,
        uint256 x2, uint256 z2)
        public 
        pure
        returns(uint256 x3, uint256 z3)
    {
        (x3, z3) = (
            mulmod(x1, x2, n),
            mulmod(z1, z2, n)
        );
    }

    function _jDiv(
        uint256 x1, uint256 z1,
        uint256 x2, uint256 z2) 
        public 
        pure
        returns(uint256 x3, uint256 z3)
    {
        (x3, z3) = (
            mulmod(x1, z2, n),
            mulmod(z1, x2, n)
        );
    }

    function _inverse(uint256 val) public pure
        returns(uint256 invVal)
    {
        uint256 t = 0;
        uint256 newT = 1;
        uint256 r = n;
        uint256 newR = val;
        uint256 q;
        while (newR != 0) {
            q = r / newR;

            (t, newT) = (newT, addmod(t, (n - mulmod(q, newT, n)), n));
            (r, newR) = (newR, r - q * newR );
        }

        return t;
    }

    function _ecAdd(
        uint256 x1, uint256 y1, uint256 z1,
        uint256 x2, uint256 y2, uint256 z2) 
        public 
        pure
        returns(uint256 x3, uint256 y3, uint256 z3)
    {
        uint256 lx;
        uint256 lz;
        uint256 da;
        uint256 db;

        if (x1 == 0 && y1 == 0) {
            return (x2, y2, z2);
        }

        if (x2 == 0 && y2 == 0) {
            return (x1, y1, z1);
        }

        if (x1 == x2 && y1 == y2) {
            (lx, lz) = _jMul(x1, z1, x1, z1);
            (lx, lz) = _jMul(lx, lz, 3, 1);
            (lx, lz) = _jAdd(lx, lz, a, 1);

            (da,db) = _jMul(y1, z1, 2, 1);
        } else {
            (lx, lz) = _jSub(y2, z2, y1, z1);
            (da, db) = _jSub(x2, z2, x1, z1);
        }

        (lx, lz) = _jDiv(lx, lz, da, db);

        (x3, da) = _jMul(lx, lz, lx, lz);
        (x3, da) = _jSub(x3, da, x1, z1);
        (x3, da) = _jSub(x3, da, x2, z2);

        (y3, db) = _jSub(x1, z1, x3, da);
        (y3, db) = _jMul(y3, db, lx, lz);
        (y3, db) = _jSub(y3, db, y1, z1);

        if (da != db) {
            x3 = mulmod(x3, db, n);
            y3 = mulmod(y3, da, n);
            z3 = mulmod(da, db, n);
        } else {
            z3 = da;
        }
    }

    function _ecDouble(uint256 x1, uint256 y1, uint256 z1) public pure
        returns(uint256 x3, uint256 y3, uint256 z3)
    {
        (x3, y3, z3) = _ecAdd(x1, y1, z1, x1, y1, z1);
    }

    function _ecMul(uint256 d, uint256 x1, uint256 y1, uint256 z1) public pure
        returns(uint256 x3, uint256 y3, uint256 z3)
    {
        uint256 remaining = d;
        uint256 px = x1;
        uint256 py = y1;
        uint256 pz = z1;
        uint256 acx = 0;
        uint256 acy = 0;
        uint256 acz = 1;

        if (d == 0) {
            return (0, 0, 1);
        }

        while (remaining != 0) {
            if ((remaining & 1) != 0) {
                (acx,acy,acz) = _ecAdd(acx, acy, acz, px, py, pz);
            }
            remaining = remaining / 2;
            (px, py, pz) = _ecDouble(px, py, pz);
        }

        (x3, y3, z3) = (acx, acy, acz);
    }

    function ecadd(
        uint256 x1, uint256 y1,
        uint256 x2, uint256 y2)
        public
        pure
        returns(uint256 x3, uint256 y3)
    {
        uint256 z;
        (x3, y3, z) = _ecAdd(x1, y1, 1, x2, y2, 1);
        z = _inverse(z);
        x3 = mulmod(x3, z, n);
        y3 = mulmod(y3, z, n);
    }

    function ecmul(uint256 x1, uint256 y1, uint256 scalar) public pure
        returns(uint256 x2, uint256 y2)
    {
        uint256 z;
        (x2, y2, z) = _ecMul(scalar, x1, y1, 1);
        z = _inverse(z);
        x2 = mulmod(x2, z, n);
        y2 = mulmod(y2, z, n);
    }

    function ecmulVerify(uint256 x1, uint256 y1, uint256 scalar, uint256 qx, uint256 qy) public pure
        returns(bool)
    {
        uint256 m = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141;
        address signer = ecrecover(0, y1 % 2 != 0 ? 28 : 27, bytes32(x1), bytes32(mulmod(scalar, x1, m)));
        address xyAddress = address(uint256(keccak256(abi.encodePacked(qx, qy))) & 0x00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
        return xyAddress == signer;
    }

    function publicKey(uint256 privKey) public pure
        returns(uint256 qx, uint256 qy)
    {
        return ecmul(gx, gy, privKey);
    }

    function publicKeyVerify(uint256 privKey, uint256 x, uint256 y) public pure
        returns(bool)
    {
        return ecmulVerify(gx, gy, privKey, x, y);
    }

    function deriveKey(uint256 privKey, uint256 pubX, uint256 pubY) public pure
        returns(uint256 qx, uint256 qy)
    {
        uint256 z;
        (qx, qy, z) = _ecMul(privKey, pubX, pubY, 1);
        z = _inverse(z);
        qx = mulmod(qx, z, n);
        qy = mulmod(qy, z, n);
    }
}

// File: zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: contracts/Upgradable.sol

contract IUpgradable {
    function startUpgrade() public;
    function endUpgrade() public;
}

contract Upgradable is Ownable {
    struct UpgradableState {
        bool isUpgrading;
        address prevVersion;
        address nextVersion;
    }

    UpgradableState public upgradableState;

    event Initialized(address indexed prevVersion);
    event Upgrading(address indexed nextVersion);
    event Upgraded(address indexed nextVersion);

    modifier isLastestVersion {
        require(!upgradableState.isUpgrading);
        require(upgradableState.nextVersion == address(0));
        _;
    }

    modifier onlyOwnerOrigin {
        require(tx.origin == owner);
        _;
    }

    constructor(address _prevVersion) public {
        if (_prevVersion != address(0)) {
            require(msg.sender == Ownable(_prevVersion).owner());
            upgradableState.isUpgrading = true;
            upgradableState.prevVersion = _prevVersion;
            IUpgradable(_prevVersion).startUpgrade();
        } else {
            emit Initialized(_prevVersion);
        }
    }

    function startUpgrade() public onlyOwnerOrigin {
        require(msg.sender != owner);
        require(!upgradableState.isUpgrading);
        require(upgradableState.nextVersion == 0);
        upgradableState.isUpgrading = true;
        upgradableState.nextVersion = msg.sender;
        emit Upgrading(msg.sender);
    }

    //function upgrade(uint index, uint size) public onlyOwner {}

    function endUpgrade() public onlyOwnerOrigin {
        require(upgradableState.isUpgrading);
        upgradableState.isUpgrading = false;
        if (msg.sender != owner) {
            require(upgradableState.nextVersion == msg.sender);
            emit Upgraded(upgradableState.nextVersion);
        } 
        else  {
            if (upgradableState.prevVersion != address(0)) {
                Upgradable(upgradableState.prevVersion).endUpgrade();
            }
            emit Initialized(upgradableState.prevVersion);
        }
    }
}

// File: contracts/VanityLib.sol

contract VanityLib {
    uint constant m = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f;

    function haveCommonPrefixUntilZero(bytes32 a, bytes32 b) public pure returns(bool) {
        for (uint i = 0; i < 32; i++) {
            if (a[i] == 0 || b[i] == 0) {
                return true;
            }
            if (a[i] != b[i]) {
                return false;
            }
        }
        return true;
    }
    
    function bytesToBytes32(bytes source) public pure returns(bytes32 result) {
        assembly {
            result := mload(add(source, 32))
        }
    }

    /* Converts given number to base58, limited by 32 symbols */
    function toBase58Checked(uint256 _value, byte appCode) public pure returns(bytes32) {
        string memory letters = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
        bytes memory alphabet = bytes(letters);
        uint8 base = 58;
        uint8 len = 0;
        uint256 remainder = 0;
        bool needBreak = false;
        bytes memory bytesReversed = bytes(new string(32));
        
        for (uint8 i = 0; true; i++) {
            if (_value < base) {
                needBreak = true;
            }
            remainder = _value % base;
            _value = uint256(_value / base);
            if (len == 32) {
                for (uint j = 0; j < len - 1; j++) {
                    bytesReversed[j] = bytesReversed[j + 1];
                }
                len--;
            }
            bytesReversed[len] = alphabet[remainder];
            len++;
            if (needBreak) {
                break;
            }
        }
        
        // Reverse
        bytes memory result = bytes(new string(32));
        result[0] = appCode;
        for (i = 0; i < 31; i++) {
            result[i + 1] = bytesReversed[len - 1 - i];
        }
        
        return bytesToBytes32(result);
    }

    // Create BTC Address: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses#How_to_create_Bitcoin_Address
    function createBtcAddressHex(uint256 publicXPoint, uint256 publicYPoint) public pure returns(uint256) {
        bytes20 publicKeyPart = ripemd160(abi.encodePacked(sha256(abi.encodePacked(byte(0x04), publicXPoint, publicYPoint))));
        bytes32 publicKeyCheckCode = sha256(abi.encodePacked(sha256(abi.encodePacked(byte(0x00), publicKeyPart))));
        
        bytes memory publicKey = new bytes(32);
        for (uint i = 0; i < 7; i++) {
            publicKey[i] = 0x00;
        }
        publicKey[7] = 0x00; // Main Network
        for (uint j = 0; j < 20; j++) {
            publicKey[j + 8] = publicKeyPart[j];
        }
        publicKey[28] = publicKeyCheckCode[0];
        publicKey[29] = publicKeyCheckCode[1];
        publicKey[30] = publicKeyCheckCode[2];
        publicKey[31] = publicKeyCheckCode[3];
        
        return uint256(bytesToBytes32(publicKey));
    }
    
    function createBtcAddress(uint256 publicXPoint, uint256 publicYPoint) public pure returns(bytes32) {
        return toBase58Checked(createBtcAddressHex(publicXPoint, publicYPoint), "1");
    }

    function complexityForBtcAddressPrefix(bytes prefix) public pure returns(uint) {
        return complexityForBtcAddressPrefixWithLength(prefix, prefix.length);
    }

    // https://bitcoin.stackexchange.com/questions/48586
    function complexityForBtcAddressPrefixWithLength(bytes prefix, uint length) public pure returns(uint) {
        require(prefix.length >= length);
        
        uint8[128] memory unbase58 = [
            255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 
            255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
            255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 
            255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 255, 255, 255, 255, 255, 255, 
            255, 9, 10, 11, 12, 13, 14, 15, 16, 255, 17, 18, 19, 20, 21, 255, 
            22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 255, 255, 255, 255, 255,
            255, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 255, 44, 45, 46,
            47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 255, 255, 255, 255, 255
        ];

        uint leadingOnes = countBtcAddressLeadingOnes(prefix, length);

        uint256 prefixValue = 0;
        uint256 prefix1 = 1;
        for (uint i = 0; i < length; i++) {
            uint index = uint(prefix[i]);
            require(index != 255);
            prefixValue = prefixValue * 58 + unbase58[index];
            prefix1 *= 58;
        }

        uint256 top = (uint256(1) << (200 - 8*leadingOnes));
        uint256 total = 0;
        uint256 prefixMin = prefixValue;
        uint256 diff = 0;
        for (uint digits = 1; prefix1/58 < (1 << 192); digits++) {
            prefix1 *= 58;
            prefixMin *= 58;
            prefixValue = prefixValue * 58 + 57;

            diff = 0;
            if (prefixValue >= top) {
                diff += prefixValue - top;
            }
            if (prefixMin < (top >> 8)) {
                diff += (top >> 8) - prefixMin;
            }
            
            if ((58 ** digits) >= diff) {
                total += (58 ** digits) - diff;
            }
        }

        if (prefixMin == 0) { // if prefix is contains only ones: 111111
            total = (58 ** (digits - 1)) - diff;
        }

        return (1 << 192) / total;
    }

    function countBtcAddressLeadingOnes(bytes prefix, uint length) public pure returns(uint) {
        uint leadingOnes = 1;
        for (uint j = 0; j < length && prefix[j] == 49; j++) {
            leadingOnes = j + 1;
        }
        return leadingOnes;
    }

    function isValidBicoinAddressPrefix(bytes prefixArg) public pure returns(bool) {
        if (prefixArg.length < 5) {
            return false;
        }
        if (prefixArg[0] != "1" && prefixArg[0] != "3") {
            return false;
        }
        
        for (uint i = 0; i < prefixArg.length; i++) {
            byte ch = prefixArg[i];
            if (ch == "0" || ch == "O" || ch == "I" || ch == "l") {
                return false;
            }
            if (!((ch >= "1" && ch <= "9") || (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z"))) {
                return false;
            }
        }

        return true;
    }

    function isValidPublicKey(uint256 x, uint256 y) public pure returns(bool) {
        return (mulmod(y, y, m) == addmod(mulmod(x, mulmod(x, x, m), m), 7, m));
    }

}

// File: zeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

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

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

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

// File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  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);
}

// File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @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
  );
}

// File: contracts/TaskRegister.sol

contract TaskRegister is Upgradable, VanityLib {
    using SafeMath for uint256;

    enum TaskType {
        BITCOIN_ADDRESS_PREFIX
    }

    struct Task {
        uint256 taskId; // Upper 128 bits are TaskType
        address creator;
        address referrer;
        uint256 reward;
        bytes32 data;
        uint256 requestPublicXPoint;
        uint256 requestPublicYPoint;
        uint256 answerPrivateKey;
    }

    EC public ec;
    uint256 public nextTaskId = 1;
    uint256 public totalReward;
    uint256 constant public MAX_PERCENT = 1000000;
    uint256 public serviceFee; // 1% == 10000, 100% == 1000000
    uint256 public referrerFee; // Calculated from service fee, 50% == 500000

    Task[] public allTasks;
    uint256[] public taskIds;
    uint256[] public completedTaskIds;
    mapping(uint256 => uint) public indexOfTaskId; // Starting from 1
    mapping(uint256 => uint) public indexOfActiveTaskId; // Starting from 1
    mapping(uint256 => uint) public indexOfCompletedTaskId; // Starting from 1

    event TaskCreated(uint256 indexed taskId);
    event TaskSolved(uint256 indexed taskId, uint256 minerReward, uint256 referrerReward);
    event TaskPayed(uint256 indexed taskId, uint256 value);

    constructor(address _ec, address _prevVersion) public Upgradable(_prevVersion) {
        ec = EC(_ec);
    }

    function allTasksCount() public view returns(uint) {
        return allTasks.length;
    }

    function tasksCount() public view returns(uint) {
        return taskIds.length;
    }

    function tasks(uint i) public view returns(uint256, address, address, uint256, bytes32, uint256, uint256, uint256) {
        Task storage t = allTasks[indexOfTaskId[taskIds[i]].sub(1)];
        return (t.taskId, t.creator, t.referrer, t.reward, t.data, t.requestPublicXPoint, t.requestPublicYPoint, t.answerPrivateKey);
    }

    function completedTasksCount() public view returns(uint) {
        return completedTaskIds.length;
    }

    function completedTasks(uint i) public view returns(uint256, address, address, uint256, bytes32, uint256, uint256, uint256) {
        Task storage t = allTasks[indexOfTaskId[completedTaskIds[i]].sub(1)];
        return (t.taskId, t.creator, t.referrer, t.reward, t.data, t.requestPublicXPoint, t.requestPublicYPoint, t.answerPrivateKey);
    }

    function getActiveTasks() external view
        returns (
            uint256[] t_taskIds,
            address[] t_creators,
            //address[] t_referrers,
            uint256[] t_rewards,
            bytes32[] t_datas,
            uint256[] t_requestPublicXPoints,
            uint256[] t_requestPublicYPoints,
            uint256[] t_answerPrivateKeys
        )
    {
        t_taskIds = new uint256[](allTasks.length);
        t_creators = new address[](allTasks.length);
        //t_referrers = new address[](allTasks.length);
        t_rewards = new uint256[](allTasks.length);
        t_datas = new bytes32[](allTasks.length);
        t_requestPublicXPoints = new uint256[](allTasks.length);
        t_requestPublicYPoints = new uint256[](allTasks.length);
        t_answerPrivateKeys = new uint256[](allTasks.length);

        for (uint i = 0; i < taskIds.length; i++) {
            uint index = indexOfActiveTaskId[taskIds[i]];
            (
                t_taskIds[i],
                t_creators[i],
                //t_referrers[i],
                t_rewards[i],
                t_datas[i],
                t_requestPublicXPoints[i],
                t_requestPublicYPoints[i],
                t_answerPrivateKeys[i]
            ) = (
                allTasks[index].taskId,
                allTasks[index].creator,
                //allTasks[index].referrer,
                allTasks[index].reward,
                allTasks[index].data,
                allTasks[index].requestPublicXPoint,
                allTasks[index].requestPublicYPoint,
                allTasks[index].answerPrivateKey
            );
        }
    }

    function getCompletedTasks() external view
        returns (
            uint256[] t_taskIds,
            address[] t_creators,
            //address[] t_referrers,
            uint256[] t_rewards,
            bytes32[] t_datas,
            uint256[] t_requestPublicXPoints,
            uint256[] t_requestPublicYPoints,
            uint256[] t_answerPrivateKeys
        )
    {
        t_taskIds = new uint256[](allTasks.length);
        t_creators = new address[](allTasks.length);
        //t_referrers = new address[](allTasks.length);
        t_rewards = new uint256[](allTasks.length);
        t_datas = new bytes32[](allTasks.length);
        t_requestPublicXPoints = new uint256[](allTasks.length);
        t_requestPublicYPoints = new uint256[](allTasks.length);
        t_answerPrivateKeys = new uint256[](allTasks.length);

        for (uint i = 0; i < completedTaskIds.length; i++) {
            uint index = indexOfCompletedTaskId[completedTaskIds[i]];
            (
                t_taskIds[i],
                t_creators[i],
                //t_referrers[i],
                t_rewards[i],
                t_datas[i],
                t_requestPublicXPoints[i],
                t_requestPublicYPoints[i],
                t_answerPrivateKeys[i]
            ) = (
                allTasks[index].taskId,
                allTasks[index].creator,
                //allTasks[index].referrer,
                allTasks[index].reward,
                allTasks[index].data,
                allTasks[index].requestPublicXPoint,
                allTasks[index].requestPublicYPoint,
                allTasks[index].answerPrivateKey
            );
        }
    }

    function setServiceFee(uint256 _serviceFee) public onlyOwner {
        require(_serviceFee <= 20000, "setServiceFee: value should be less than 20000, which means 2% of miner reward");
        serviceFee = _serviceFee;
    }

    function setReferrerFee(uint256 _referrerFee) public onlyOwner {
        require(_referrerFee <= 500000, "setReferrerFee: value should be less than 500000, which means 50% of service fee");
        referrerFee = _referrerFee;
    }

    function upgrade(uint _size) public onlyOwner {
        require(upgradableState.isUpgrading);
        require(upgradableState.prevVersion != 0);

        // Migrate some vars
        TaskRegister prev = TaskRegister(upgradableState.prevVersion);
        nextTaskId = prev.nextTaskId();
        totalReward = prev.totalReward();
        serviceFee = prev.serviceFee();
        referrerFee = prev.referrerFee();

        uint index = allTasks.length;
        uint tasksLength = prev.tasksCount();
        
        // Migrate tasks

        for (uint i = index; i < index + _size && i < tasksLength; i++) {
            allTasks.push(Task((uint(TaskType.BITCOIN_ADDRESS_PREFIX) << 128) | 0,0,0,0,bytes32(0),0,0,0));
            uint j = prev.indexOfActiveTaskId(prev.taskIds(i));
            (
                allTasks[i].taskId,
                allTasks[i].creator,
                allTasks[i].referrer,
                allTasks[i].reward,
                ,//allTasks[i].data,
                ,//allTasks[i].requestPublicXPoint,
                ,//allTasks[i].requestPublicYPoint,
                 //allTasks[i].answerPrivateKey
            ) = prev.allTasks(j);
            indexOfTaskId[allTasks[i].taskId] = i + 1;
        }

        for (i = index; i < index + _size && i < tasksLength; i++) {
            j = prev.indexOfActiveTaskId(prev.taskIds(i));
            (
                ,//allTasks[i].taskId,
                ,//allTasks[i].creator,
                ,//allTasks[i].referrer,
                ,//allTasks[i].reward,
                allTasks[i].data,
                allTasks[i].requestPublicXPoint,
                allTasks[i].requestPublicYPoint,
                allTasks[i].answerPrivateKey
            ) = prev.allTasks(j);
        }

        for (i = index; i < index + _size && i < tasksLength; i++) {
            uint taskId = prev.taskIds(i);
            indexOfActiveTaskId[taskId] = taskIds.push(taskId);
        }
    }

    function endUpgrade() public {
        super.endUpgrade();

        if (upgradableState.nextVersion != 0) {
            upgradableState.nextVersion.transfer(address(this).balance);
        }

        //_removeAllActiveTasksWithHoles(0, taskIds.length);
    }

    function () public payable {
        require(msg.sender == upgradableState.prevVersion);
        require(address(this).balance >= totalReward);
    }

    function payForTask(uint256 _taskId) public payable isLastestVersion {
        if (msg.value > 0) {
            Task storage task = allTasks[indexOfTaskId[_taskId].sub(1)];
            require(task.answerPrivateKey == 0, "payForTask: you can't pay for the solved task");
            task.reward = task.reward.add(msg.value);
            totalReward = totalReward.add(msg.value);
            emit TaskPayed(_taskId, msg.value);
        }
    }

    function createBitcoinAddressPrefixTask(
        bytes prefix,
        uint256 requestPublicXPoint,
        uint256 requestPublicYPoint,
        address referrer
    )
        public
        payable
        isLastestVersion
    {
        require(prefix.length > 5);
        require(prefix[0] == "1");
        require(prefix[1] != "1"); // Do not support multiple 1s yet
        require(isValidBicoinAddressPrefix(prefix));
        require(isValidPublicKey(requestPublicXPoint, requestPublicYPoint));

        bytes32 data;
        assembly {
            data := mload(add(prefix, 32))
        }

        uint256 taskId = nextTaskId++;
        Task memory task = Task({
            taskId: (uint(TaskType.BITCOIN_ADDRESS_PREFIX) << 128) | taskId,
            creator: msg.sender,
            referrer: referrer,
            reward: 0,
            data: data,
            requestPublicXPoint: requestPublicXPoint,
            requestPublicYPoint: requestPublicYPoint,
            answerPrivateKey: 0
        });

        indexOfTaskId[taskId] = allTasks.push(task); // incremented to avoid 0 index
        indexOfActiveTaskId[taskId] = taskIds.push(taskId);
        emit TaskCreated(taskId);
        payForTask(taskId);
    }

    function solveTask(uint _taskId, uint256 _answerPrivateKey, uint256 publicXPoint, uint256 publicYPoint) public isLastestVersion {
        uint taskIndex = indexOfTaskId[_taskId].sub(1);
        Task storage task = allTasks[taskIndex];
        require(task.answerPrivateKey == 0, "solveTask: task is already solved");
        
        // Require private key to be part of address to prevent front-running attack
        require(_answerPrivateKey >> 128 == uint256(msg.sender) >> 32, "solveTask: this solution does not match miner address");

        if (TaskType(task.taskId >> 128) == TaskType.BITCOIN_ADDRESS_PREFIX) {
            ///(publicXPoint, publicYPoint) = ec.publicKey(_answerPrivateKey);
            require(ec.publicKeyVerify(_answerPrivateKey, publicXPoint, publicYPoint));
            (publicXPoint, publicYPoint) = ec.ecadd(
                task.requestPublicXPoint,
                task.requestPublicYPoint,
                publicXPoint,
                publicYPoint
            );

            bytes32 btcAddress = createBtcAddress(publicXPoint, publicYPoint);
            require(haveCommonPrefixUntilZero(task.data, btcAddress), "solveTask: found prefix is not enough");

            task.answerPrivateKey = _answerPrivateKey;
        } else {
            revert();
        }

        uint256 taskReard = task.reward;
        uint256 serviceReward = taskReard.mul(serviceFee).div(MAX_PERCENT); // 1%
        uint256 minerReward = taskReard - serviceReward; // 99%
        if (serviceReward != 0 && task.referrer != 0) {
            uint256 referrerReward = serviceReward.mul(referrerFee).div(MAX_PERCENT); // 50% of service reward
            task.referrer.transfer(referrerReward);
            emit TaskSolved(_taskId, minerReward, referrerReward);
        } else {
            emit TaskSolved(_taskId, minerReward, 0);
        }
        msg.sender.transfer(minerReward);
        totalReward -= taskReard;

        _completeTask(_taskId);
    }

    function _completeTask(uint _taskId) internal {
        indexOfCompletedTaskId[_taskId] = completedTaskIds.push(_taskId);
        uint activeTaskIndex = indexOfActiveTaskId[_taskId].sub(1);
        delete indexOfActiveTaskId[_taskId];

        if (activeTaskIndex + 1 < taskIds.length) { // if not latest
            uint256 lastTaskId = taskIds[taskIds.length - 1];
            taskIds[activeTaskIndex] = lastTaskId;
            indexOfActiveTaskId[lastTaskId] = activeTaskIndex + 1;
        }
        taskIds.length -= 1;
    }

    // function _removeAllActiveTasksWithHoles(uint _from, uint _to) internal {
    //     for (uint i = _from; i < _to && i < taskIds.length; i++) {
    //         uint taskId = taskIds[i];
    //         uint index = indexOfTaskId[taskId].sub(1);
    //         delete allTasks[index];
    //         delete indexOfTaskId[taskId];
    //         delete indexOfActiveTaskId[taskId];
    //     }
    //     if (_to >= taskIds.length) {
    //         taskIds.length = 0;
    //     }
    // }

    function claim(ERC20Basic _token, address _to) public onlyOwner {
        if (_token == address(0)) {
            _to.transfer(address(this).balance - totalReward);
        } else {
            _token.transfer(_to, _token.balanceOf(this));
        }
    }

}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"MAX_PERCENT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"indexOfActiveTaskId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"prefixArg","type":"bytes"}],"name":"isValidBicoinAddressPrefix","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"endUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"publicXPoint","type":"uint256"},{"name":"publicYPoint","type":"uint256"}],"name":"createBtcAddress","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"taskIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"},{"name":"appCode","type":"bytes1"}],"name":"toBase58Checked","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"prefix","type":"bytes"},{"name":"length","type":"uint256"}],"name":"complexityForBtcAddressPrefixWithLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"isValidPublicKey","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"allTasks","outputs":[{"name":"taskId","type":"uint256"},{"name":"creator","type":"address"},{"name":"referrer","type":"address"},{"name":"reward","type":"uint256"},{"name":"data","type":"bytes32"},{"name":"requestPublicXPoint","type":"uint256"},{"name":"requestPublicYPoint","type":"uint256"},{"name":"answerPrivateKey","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"completedTasks","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_size","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_taskId","type":"uint256"}],"name":"payForTask","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"prefix","type":"bytes"}],"name":"complexityForBtcAddressPrefix","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_serviceFee","type":"uint256"}],"name":"setServiceFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getActiveTasks","outputs":[{"name":"t_taskIds","type":"uint256[]"},{"name":"t_creators","type":"address[]"},{"name":"t_rewards","type":"uint256[]"},{"name":"t_datas","type":"bytes32[]"},{"name":"t_requestPublicXPoints","type":"uint256[]"},{"name":"t_requestPublicYPoints","type":"uint256[]"},{"name":"t_answerPrivateKeys","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCompletedTasks","outputs":[{"name":"t_taskIds","type":"uint256[]"},{"name":"t_creators","type":"address[]"},{"name":"t_rewards","type":"uint256[]"},{"name":"t_datas","type":"bytes32[]"},{"name":"t_requestPublicXPoints","type":"uint256[]"},{"name":"t_requestPublicYPoints","type":"uint256[]"},{"name":"t_answerPrivateKeys","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"completedTaskIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrerFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allTasksCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"completedTasksCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"prefix","type":"bytes"},{"name":"length","type":"uint256"}],"name":"countBtcAddressLeadingOnes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"serviceFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"tasks","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"indexOfCompletedTaskId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradableState","outputs":[{"name":"isUpgrading","type":"bool"},{"name":"prevVersion","type":"address"},{"name":"nextVersion","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"prefix","type":"bytes"},{"name":"requestPublicXPoint","type":"uint256"},{"name":"requestPublicYPoint","type":"uint256"},{"name":"referrer","type":"address"}],"name":"createBitcoinAddressPrefixTask","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tasksCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"source","type":"bytes"}],"name":"bytesToBytes32","outputs":[{"name":"result","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"publicXPoint","type":"uint256"},{"name":"publicYPoint","type":"uint256"}],"name":"createBtcAddressHex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_taskId","type":"uint256"},{"name":"_answerPrivateKey","type":"uint256"},{"name":"publicXPoint","type":"uint256"},{"name":"publicYPoint","type":"uint256"}],"name":"solveTask","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"bytes32"},{"name":"b","type":"bytes32"}],"name":"haveCommonPrefixUntilZero","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"indexOfTaskId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referrerFee","type":"uint256"}],"name":"setReferrerFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ec","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextTaskId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_ec","type":"address"},{"name":"_prevVersion","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"taskId","type":"uint256"}],"name":"TaskCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"taskId","type":"uint256"},{"indexed":false,"name":"minerReward","type":"uint256"},{"indexed":false,"name":"referrerReward","type":"uint256"}],"name":"TaskSolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"taskId","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TaskPayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"prevVersion","type":"address"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nextVersion","type":"address"}],"name":"Upgrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"nextVersion","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
608060405260016004553480156200001657600080fd5b50604051604080620043b483398101604052805160209091015160008054600160a060020a0319163317905580600160a060020a038116156200018a5780600160a060020a0316638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620000ab57600080fd5b505af1158015620000c0573d6000803e3d6000fd5b505050506040513d6020811015620000d757600080fd5b5051600160a060020a03163314620000ee57600080fd5b6001805460ff1916811761010060a860020a031916610100600160a060020a03841690810291909117909155604080517f2239c48a0000000000000000000000000000000000000000000000000000000081529051632239c48a9160048082019260009290919082900301818387803b1580156200016b57600080fd5b505af115801562000180573d6000803e3d6000fd5b50505050620001bf565b604051600160a060020a038216907f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e690600090a25b505060038054600160a060020a031916600160a060020a03929092169190911790556141c380620001f16000396000f3006080604052600436106101ea5763ffffffff60e060020a6000350416631036bbe281146102185780631a52c5ab1461023f57806321c0b342146102575780632239c48a1461027e57806322d8533414610293578063257e1f8f14610300578063301c66d61461031557806339118d2514610330578063396147591461034857806339fd615c1461036d5780633e99c395146103c85780633f90b454146103e357806340d22cf81461044857806345977d0314610460578063477fe4e6146104785780634c3221e1146104835780635cdf76f8146104dc5780636127f246146104f45780636c830f4b146106fb5780636cf84491146107105780636e88a7bd14610728578063715018a61461073d578063750142e6146107525780637adfec711461076757806380fa45171461077c57806386e4a33e146107915780638abdf5aa146107ec5780638d977672146108015780638da5cb5b146108195780639246d1ee1461084a5780639495f8c614610862578063a102ed86146108a1578063bb6a0f0714610903578063bfe370d914610918578063c2c927e814610971578063c4fa71e41461098c578063d384d177146109ad578063ea630d33146109c8578063f2fde38b146109e0578063f81a95db14610a01578063f83b5dce14610a19578063fdc3d8d714610a2e575b6001546101009004600160a060020a0316331461020657600080fd5b6005543031101561021657600080fd5b005b34801561022457600080fd5b5061022d610a43565b60408051918252519081900360200190f35b34801561024b57600080fd5b5061022d600435610a4a565b34801561026357600080fd5b50610216600160a060020a0360043581169060243516610a5c565b34801561028a57600080fd5b50610216610bd9565b34801561029f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102ec943694929360249392840191908190840183828082843750949750610c879650505050505050565b604080519115158252519081900360200190f35b34801561030c57600080fd5b50610216610f83565b34801561032157600080fd5b5061022d600435602435610fda565b34801561033c57600080fd5b5061022d600435610fff565b34801561035457600080fd5b5061022d600435600160f860020a03196024351661101e565b34801561037957600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022d94369492936024939284019190819084018382808284375094975050933594506112979350505050565b3480156103d457600080fd5b506102ec600435602435611825565b3480156103ef57600080fd5b506103fb600435611850565b60408051988952600160a060020a0397881660208a015295909616878601526060870193909352608086019190915260a085015260c084015260e083019190915251908190036101000190f35b34801561045457600080fd5b506103fb6004356118b0565b34801561046c57600080fd5b50610216600435611984565b61021660043561245b565b34801561048f57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022d9436949293602493928401919081908401838280828437509497506125b89650505050505050565b3480156104e857600080fd5b506102166004356125c5565b34801561050057600080fd5b50610509612687565b604051808060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b83811015610561578181015183820152602001610549565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b838110156105a0578181015183820152602001610588565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156105df5781810151838201526020016105c7565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b8381101561061e578181015183820152602001610606565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b8381101561065d578181015183820152602001610645565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b8381101561069c578181015183820152602001610684565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156106db5781810151838201526020016106c3565b505050509050019e50505050505050505050505050505060405180910390f35b34801561070757600080fd5b506105096129f0565b34801561071c57600080fd5b5061022d600435612d4e565b34801561073457600080fd5b5061022d612d5c565b34801561074957600080fd5b50610216612d62565b34801561075e57600080fd5b5061022d612dce565b34801561077357600080fd5b5061022d612dd4565b34801561078857600080fd5b5061022d612ddb565b34801561079d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022d9436949293602493928401919081908401838280828437509497505093359450612de19350505050565b3480156107f857600080fd5b5061022d612e3e565b34801561080d57600080fd5b506103fb600435612e44565b34801561082557600080fd5b5061082e612e6c565b60408051600160a060020a039092168252519081900360200190f35b34801561085657600080fd5b5061022d600435612e7b565b34801561086e57600080fd5b50610877612e8d565b604080519315158452600160a060020a039283166020850152911682820152519081900360600190f35b6040805160206004803580820135601f81018490048402850184019095528484526102169436949293602493928401919081908401838280828437509497505084359550505060208301359260400135600160a060020a03169150612ead9050565b34801561090f57600080fd5b5061022d6131e9565b34801561092457600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022d9436949293602493928401919081908401838280828437509497506131ef9650505050505050565b34801561097d57600080fd5b5061022d6004356024356131f6565b34801561099857600080fd5b50610216600435602435604435606435613695565b3480156109b957600080fd5b506102ec600435602435613be0565b3480156109d457600080fd5b5061022d600435613cae565b3480156109ec57600080fd5b50610216600160a060020a0360043516613cc0565b348015610a0d57600080fd5b50610216600435613ce0565b348015610a2557600080fd5b5061082e613da3565b348015610a3a57600080fd5b5061022d613db2565b620f424081565b600c6020526000908152604090205481565b600054600160a060020a03163314610a7357600080fd5b600160a060020a0382161515610ac357600554604051600160a060020a0383169130310380156108fc02916000818181858888f19350505050158015610abd573d6000803e3d6000fd5b50610bd5565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0384169163a9059cbb91849184916370a08231916024808201926020929091908290030181600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b505050506040513d6020811015610b5957600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610ba857600080fd5b505af1158015610bbc573d6000803e3d6000fd5b505050506040513d6020811015610bd257600080fd5b50505b5050565b600054600160a060020a03163214610bf057600080fd5b600054600160a060020a0316331415610c0857600080fd5b60015460ff1615610c1857600080fd5b600254600160a060020a031615610c2e57600080fd5b6001805460ff1916811790556002805473ffffffffffffffffffffffffffffffffffffffff1916339081179091556040517f9b11f1248596f4478e331d73b9f9dc654e243fdf41e2392f20919338ebf87d6f90600090a2565b6000806000600584511015610c9f5760009250610f7c565b836000815181101515610cae57fe5b90602001015160f860020a900460f860020a02600160f860020a03191660f860020a60310214158015610d2c5750836000815181101515610ceb57fe5b90602001015160f860020a900460f860020a02600160f860020a0319167f330000000000000000000000000000000000000000000000000000000000000014155b15610d3a5760009250610f7c565b600091505b8351821015610f77578382815181101515610d5657fe5b016020015160f860020a908190040290507f3000000000000000000000000000000000000000000000000000000000000000600160f860020a031982161480610dc857507f4f00000000000000000000000000000000000000000000000000000000000000600160f860020a03198216145b80610dfc57507f4900000000000000000000000000000000000000000000000000000000000000600160f860020a03198216145b80610e3057507f6c00000000000000000000000000000000000000000000000000000000000000600160f860020a03198216145b15610e3e5760009250610f7c565b60f860020a603102600160f860020a0319821610801590610e8957507f3900000000000000000000000000000000000000000000000000000000000000600160f860020a0319821611155b80610ef357507f6100000000000000000000000000000000000000000000000000000000000000600160f860020a0319821610801590610ef357507f7a00000000000000000000000000000000000000000000000000000000000000600160f860020a0319821611155b80610f5d57507f4100000000000000000000000000000000000000000000000000000000000000600160f860020a0319821610801590610f5d57507f5a00000000000000000000000000000000000000000000000000000000000000600160f860020a0319821611155b1515610f6c5760009250610f7c565b600190910190610d3f565b600192505b5050919050565b610f8b613db8565b600254600160a060020a031615610fd857600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610fd6573d6000803e3d6000fd5b505b565b6000610ff6610fe984846131f6565b60f860020a60310261101e565b90505b92915050565b600980548290811061100d57fe5b600091825260209091200154905081565b6040805160608082018352603a8083527f31323334353637383941424344454647484a4b4c4d4e505152535455565758596020808501919091527f5a6162636465666768696a6b6d6e6f707172737475767778797a0000000000008486015284518181528086019095526000948493869283928392918391829184919081810161040080388339019050509350600092505b8760ff168d10156110c057600194505b8760ff168d8115156110ce57fe5b0695508760ff168d8115156110df57fe5b049c508660ff166020141561115e57600091505b6001870360ff1682101561115657838260010181518110151561111257fe5b90602001015160f860020a900460f860020a02848381518110151561113357fe5b906020010190600160f860020a031916908160001a9053506001909101906110f3565b600019909601955b888681518110151561116c57fe5b90602001015160f860020a900460f860020a02848860ff1681518110151561119057fe5b906020010190600160f860020a031916908160001a90535060019096019584156111b9576111c4565b6001909201916110b0565b60408051602080825281830190925290808201610400803883390190505090508b8160008151811015156111f457fe5b906020010190600160f860020a031916908160001a905350600092505b601f8360ff16101561127d578383600189030360ff1681518110151561123357fe5b90602001015160f860020a900460f860020a02818460010160ff1681518110151561125a57fe5b906020010190600160f860020a031916908160001a905350600190920191611211565b611286816131ef565b9d9c50505050505050505050505050565b60006112a16140d5565b6000806000806000806000806000808c8e51101515156112c057600080fd5b604080516110008101825260ff8082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082018190526102408201819052610260820181905261028082018190526102a082018190526102c082018190526102e08201819052610300820181905261032082018190526103408201819052610360820181905261038082018190526103a082018190526103c082018190526103e08201819052610400820181905261042082018190526104408201819052610460820181905261048082018190526104a082018190526104c082018190526104e08201819052610500820181905261052082018190526105408201819052610560820181905261058082018190526105a082018190526105c082018190526105e082018190526106008201819052600061062083015260016106408301526002610660830152600361068083015260046106a083015260056106c083015260066106e0830152600761070083015260086107208301526107408201819052610760820181905261078082018190526107a082018190526107c082018190526107e0820181905261080082018190526009610820830152600a610840830152600b610860830152600c610880830152600d6108a0830152600e6108c0830152600f6108e08301526010610900830152610920820181905260116109408301526012610960830152601361098083015260146109a083015260156109c08301526109e082018190526016610a008301526017610a208301526018610a408301526019610a60830152601a610a80830152601b610aa0830152601c610ac0830152601d610ae0830152601e610b00830152601f610b20830152610b40820192909252610b608101829052610b808101829052610ba08101829052610bc08101829052610be08101829052610c0081018290526021610c208201526022610c408201526023610c608201526024610c808201526025610ca08201526026610cc08201526027610ce08201526028610d008201526029610d20820152602a610d40820152602b610d60820152610d808101829052602c610da0820152602d610dc0820152602e610de0820152602f610e008201526030610e208201526031610e408201526032610e608201526033610e808201526034610ea08201526035610ec08201526036610ee08201526037610f008201526038610f208201526039610f40820152610f608101829052610f808101829052610fa08101829052610fc08101829052610fe08101919091529a506116cf8e8e612de1565b99506000985060019750600096505b8c871015611743578d878151811015156116f457fe5b016020015160f860020a90819004810204955060ff86141561171557600080fd5b8a866080811061172157fe5b602002015160ff1689603a02019850603a8802975086806001019750506116de565b50505050506008850260c80360020a6000858160015b7801000000000000000000000000000000000000000000000000603a890410156117db576039603a998a020198978802979290920291600091508489106117a257848903820191505b61010085048310156117bc57610100850483900391909101905b8181603a0a1015156117d3578181603a0a03840193505b600101611759565b8215156117ee578160018203603a0a0393505b83780100000000000000000000000000000000000000000000000081151561181257fe5b049e9d5050505050505050505050505050565b60006401000003d01960076401000003d019808687098609086401000003d019838409149392505050565b600880548290811061185e57fe5b600091825260209091206008909102018054600182015460028301546003840154600485015460058601546006870154600790970154959750600160a060020a03948516969490931694919390929188565b600080600080600080600080600060086119006001600b6000600a8f8154811015156118d857fe5b9060005260206000200154815260200190815260200160002054613f1390919063ffffffff16565b8154811061190a57fe5b9060005260206000209060080201905080600001548160010160009054906101000a9004600160a060020a03168260020160009054906101000a9004600160a060020a0316836003015484600401548560050154866006015487600701549850985098509850985098509850985050919395975091939597565b6000805481908190819081908190600160a060020a031633146119a657600080fd5b60015460ff1615156119b757600080fd5b6001546101009004600160a060020a031615156119d357600080fd5b600160000160019054906101000a9004600160a060020a0316955085600160a060020a031663fdc3d8d76040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b50516004908155604080517f750142e60000000000000000000000000000000000000000000000000000000081529051600160a060020a0389169263750142e6928082019260209290918290030181600087803b158015611ab657600080fd5b505af1158015611aca573d6000803e3d6000fd5b505050506040513d6020811015611ae057600080fd5b5051600555604080517f8abdf5aa0000000000000000000000000000000000000000000000000000000081529051600160a060020a03881691638abdf5aa9160048083019260209291908290030181600087803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b505050506040513d6020811015611b6a57600080fd5b5051600655604080517f6e88a7bd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03881691636e88a7bd9160048083019260209291908290030181600087803b158015611bca57600080fd5b505af1158015611bde573d6000803e3d6000fd5b505050506040513d6020811015611bf457600080fd5b5051600755600854604080517fbb6a0f070000000000000000000000000000000000000000000000000000000081529051919650600160a060020a0388169163bb6a0f07916004808201926020929091908290030181600087803b158015611c5b57600080fd5b505af1158015611c6f573d6000803e3d6000fd5b505050506040513d6020811015611c8557600080fd5b505193508492505b86850183108015611c9d57508383105b1561211b57604080516101008101825260008082526020808301828152838501838152606085018481526080860185815260a0870186815260c0880187815260e0890188815260088054600181018255818b529a517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39b9091029a8b015595517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee48a01805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a039384161790915595517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee58b0180549097169082161790955592517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee689015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee7880155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee8870155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee986015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eea9094019390935583517f39118d25000000000000000000000000000000000000000000000000000000008152600481018890529351928a1693631a52c5ab9385936339118d2593602480850194919392918390030190829087803b158015611ebb57600080fd5b505af1158015611ecf573d6000803e3d6000fd5b505050506040513d6020811015611ee557600080fd5b50516040805160e060020a63ffffffff851602815260048101929092525160248083019260209291908290030181600087803b158015611f2457600080fd5b505af1158015611f38573d6000803e3d6000fd5b505050506040513d6020811015611f4e57600080fd5b5051604080517f3f90b454000000000000000000000000000000000000000000000000000000008152600481018390529051919350600160a060020a03881691633f90b45491602480820192610100929091908290030181600087803b158015611fb757600080fd5b505af1158015611fcb573d6000803e3d6000fd5b505050506040513d610100811015611fe257600080fd5b5080516020820151604083015160609093015160088054939492938890811061200757fe5b9060005260206000209060080201600001600060088981548110151561202957fe5b9060005260206000209060080201600101600060088b81548110151561204b57fe5b9060005260206000209060080201600201600060088d81548110151561206d57fe5b9060005260206000209060080201600301600088919050558791906101000a815481600160a060020a030219169083600160a060020a031602179055508691906101000a815481600160a060020a030219169083600160a060020a0316021790555085919050555050505082600101600b60006008868154811015156120ef57fe5b600091825260208083206008909202909101548352820192909252604001902055600190920191611c8d565b8492505b8685018310801561212f57508383105b156123725785600160a060020a0316631a52c5ab87600160a060020a03166339118d25866040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b505050506040513d60208110156121b657600080fd5b50516040805160e060020a63ffffffff851602815260048101929092525160248083019260209291908290030181600087803b1580156121f557600080fd5b505af1158015612209573d6000803e3d6000fd5b505050506040513d602081101561221f57600080fd5b5051604080517f3f90b454000000000000000000000000000000000000000000000000000000008152600481018390529051919350600160a060020a03881691633f90b45491602480820192610100929091908290030181600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d6101008110156122b357600080fd5b50608081015160a082015160c083015160e0909301516008805493949293889081106122db57fe5b906000526020600020906008020160040160006008898154811015156122fd57fe5b9060005260206000209060080201600501600060088b81548110151561231f57fe5b9060005260206000209060080201600601600060088d81548110151561234157fe5b600091825260209091206007600890920201019690965595909555949094559390935550506001909301925061211f565b8492505b8685018310801561238657508383105b156124525785600160a060020a03166339118d25846040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156123d457600080fd5b505af11580156123e8573d6000803e3d6000fd5b505050506040513d60208110156123fe57600080fd5b5051600980546001818101928390557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9091018390556000838152600c602052604090209190915593909301929050612376565b50505050505050565b60015460009060ff161561246e57600080fd5b600254600160a060020a03161561248457600080fd5b6000341115610bd5576000828152600b60205260409020546008906124b090600163ffffffff613f1316565b815481106124ba57fe5b906000526020600020906008020190508060070154600014151561254e576040805160e560020a62461bcd02815260206004820152602d60248201527f706179466f725461736b3a20796f752063616e27742070617920666f7220746860448201527f6520736f6c766564207461736b00000000000000000000000000000000000000606482015290519081900360840190fd5b6003810154612563903463ffffffff613f2516565b600382015560055461257b903463ffffffff613f2516565b60055560408051348152905183917feaf3bc986331d1fd7549357602b69d48111c76178bd69c0c96a9436540ebb1ca919081900360200190a25050565b6000610ff9828351611297565b600054600160a060020a031633146125dc57600080fd5b614e20811115612682576040805160e560020a62461bcd02815260206004820152604e60248201527f736574536572766963654665653a2076616c75652073686f756c64206265206c60448201527f657373207468616e2032303030302c207768696368206d65616e73203225206f60648201527f66206d696e657220726577617264000000000000000000000000000000000000608482015290519081900360a40190fd5b600655565b60608060608060608060606000806008805490506040519080825280602002602001820160405280156126c4578160200160208202803883390190505b50600854604080518281526020808402820101909152919a5080156126f3578160200160208202803883390190505b506008546040805182815260208084028201019091529199508015612722578160200160208202803883390190505b506008546040805182815260208084028201019091529198508015612751578160200160208202803883390190505b506008546040805182815260208084028201019091529197508015612780578160200160208202803883390190505b5060085460408051828152602080840282010190915291965080156127af578160200160208202803883390190505b5060085460408051828152602080840282010190915291955080156127de578160200160208202803883390190505b509250600091505b6009548210156129e557600c600060098481548110151561280357fe5b9060005260206000200154815260200190815260200160002054905060088181548110151561282e57fe5b90600052602060002090600802016000015460088281548110151561284f57fe5b906000526020600020906008020160010160009054906101000a9004600160a060020a031660088381548110151561288357fe5b9060005260206000209060080201600301546008848154811015156128a457fe5b9060005260206000209060080201600401546008858154811015156128c557fe5b9060005260206000209060080201600501546008868154811015156128e657fe5b90600052602060002090600802016006015460088781548110151561290757fe5b9060005260206000209060080201600701548f8981518110151561292757fe5b9060200190602002018f8a81518110151561293e57fe5b9060200190602002018f8b81518110151561295557fe5b9060200190602002018f8c81518110151561296c57fe5b9060200190602002018f8d81518110151561298357fe5b9060200190602002018f8e81518110151561299a57fe5b9060200190602002018f8f8151811015156129b157fe5b602090810290910101969096529590945294909352939052929052600160a060020a039092169052526001909101906127e6565b505090919293949596565b6060806060806060806060600080600880549050604051908082528060200260200182016040528015612a2d578160200160208202803883390190505b50600854604080518281526020808402820101909152919a508015612a5c578160200160208202803883390190505b506008546040805182815260208084028201019091529199508015612a8b578160200160208202803883390190505b506008546040805182815260208084028201019091529198508015612aba578160200160208202803883390190505b506008546040805182815260208084028201019091529197508015612ae9578160200160208202803883390190505b506008546040805182815260208084028201019091529196508015612b18578160200160208202803883390190505b506008546040805182815260208084028201019091529195508015612b47578160200160208202803883390190505b509250600091505b600a548210156129e557600d6000600a84815481101515612b6c57fe5b90600052602060002001548152602001908152602001600020549050600881815481101515612b9757fe5b906000526020600020906008020160000154600882815481101515612bb857fe5b906000526020600020906008020160010160009054906101000a9004600160a060020a0316600883815481101515612bec57fe5b906000526020600020906008020160030154600884815481101515612c0d57fe5b906000526020600020906008020160040154600885815481101515612c2e57fe5b906000526020600020906008020160050154600886815481101515612c4f57fe5b906000526020600020906008020160060154600887815481101515612c7057fe5b9060005260206000209060080201600701548f89815181101515612c9057fe5b9060200190602002018f8a815181101515612ca757fe5b9060200190602002018f8b815181101515612cbe57fe5b9060200190602002018f8c815181101515612cd557fe5b9060200190602002018f8d815181101515612cec57fe5b9060200190602002018f8e815181101515612d0357fe5b9060200190602002018f8f815181101515612d1a57fe5b602090810290910101969096529590945294909352939052929052600160a060020a03909216905252600190910190612b4f565b600a80548290811061100d57fe5b60075481565b600054600160a060020a03163314612d7957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60055481565b6008545b90565b600a5490565b60006001815b8381108015612e2657508481815181101515612dff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603160f860020a02145b15612e3657600101905080612de7565b509392505050565b60065481565b600080600080600080600080600060086119006001600b600060098f8154811015156118d857fe5b600054600160a060020a031681565b600d6020526000908152604090205481565b60015460025460ff821691600160a060020a036101009091048116911683565b600080612eb86140f5565b60015460ff1615612ec857600080fd5b600254600160a060020a031615612ede57600080fd5b8651600510612eec57600080fd5b866000815181101515612efb57fe5b90602001015160f860020a900460f860020a02600160f860020a03191660f860020a603102141515612f2c57600080fd5b866001815181101515612f3b57fe5b90602001015160f860020a900460f860020a02600160f860020a03191660f860020a60310214151515612f6d57600080fd5b612f7687610c87565b1515612f8157600080fd5b612f8b8686611825565b1515612f9657600080fd5b505050602084810151600480546001808201909255604080516101008101825282815233818701908152600160a060020a03888116838501908152600060608501818152608086018a815260a087018f815260c088018f815260e0890185815260088054808f018083558289528c517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3929093029182019290925599517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee48b01805473ffffffffffffffffffffffffffffffffffffffff19908116928c1692909217905597517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee58b01805490991699169890981790965592517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee688015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee7870155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee8860155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee985015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eea90930192909255848252600b88528382205560098054958601908190557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909501849055600c90965281862093909355519293909283917fba46948ae716559226cede7aac0175e8ddd11b7cb3ea0369c9f218ef908b87d591a26124528261245b565b60095490565b6020015190565b6000806000606060008060036002600460f860020a028a8a6040516020018084600160f860020a031916600160f860020a031916815260010183815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831061327e5780518252601f19909201916020918201910161325f565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af11580156132bf573d6000803e3d6000fd5b5050506040513d60208110156132d457600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106133205780518252601f199092019160209182019101613301565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015613361573d6000803e3d6000fd5b505060408051805160006020808401919091526bffffffffffffffffffffffff196c0100000000000000000000000090920291821660218401528351601581850301815260359093019384905282519199506002945084939182918401908083835b602083106133e25780518252601f1990920191602091820191016133c3565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af1158015613423573d6000803e3d6000fd5b5050506040513d602081101561343857600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106134845780518252601f199092019160209182019101613465565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000865af11580156134c5573d6000803e3d6000fd5b5050506040513d60208110156134da57600080fd5b505160408051602080825281830190925291955080820161040080388339019050509250600091505b600782101561354057825160009084908490811061351d57fe5b906020010190600160f860020a031916908160001a905350600190910190613503565b82516000908490600790811061355257fe5b906020010190600160f860020a031916908160001a905350600090505b60148110156135bc5784816014811061358457fe5b1a60f860020a02838260080181518110151561359c57fe5b906020010190600160f860020a031916908160001a90535060010161356f565b8360001a60f860020a0283601c8151811015156135d557fe5b906020010190600160f860020a031916908160001a9053508360011a60f860020a0283601d81518110151561360657fe5b906020010190600160f860020a031916908160001a9053508360021a60f860020a0283601e81518110151561363757fe5b906020010190600160f860020a031916908160001a9053508360031a60f860020a0283601f81518110151561366857fe5b906020010190600160f860020a031916908160001a905350613689836131ef565b98975050505050505050565b60015460009081908190819081908190819060ff16156136b457600080fd5b600254600160a060020a0316156136ca57600080fd5b60008b8152600b60205260409020546136ea90600163ffffffff613f1316565b96506008878154811015156136fb57fe5b906000526020600020906008020195508560070154600014151561378f576040805160e560020a62461bcd02815260206004820152602160248201527f736f6c76655461736b3a207461736b20697320616c726561647920736f6c766560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b7001000000000000000000000000000000008a04640100000000330414613826576040805160e560020a62461bcd02815260206004820152603560248201527f736f6c76655461736b3a207468697320736f6c7574696f6e20646f6573206e6f60448201527f74206d61746368206d696e657220616464726573730000000000000000000000606482015290519081900360840190fd5b600086547001000000000000000000000000000000009004600081111561384957fe5b600081111561385457fe5b1415613a6457600354604080517f66ce10b7000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604481018b90529051600160a060020a03909216916366ce10b7916064808201926020929091908290030181600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b505050506040513d60208110156138f957600080fd5b5051151561390657600080fd5b60035460058701546006880154604080517fbb8c256a00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482018c9052606482018b90528051600160a060020a039093169263bb8c256a9260848082019392918290030181600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b505050506040513d60408110156139b457600080fd5b50805160209091015190995097506139cc8989610fda565b94506139dc866004015486613be0565b1515613a58576040805160e560020a62461bcd02815260206004820152602560248201527f736f6c76655461736b3a20666f756e6420707265666978206973206e6f74206560448201527f6e6f756768000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600786018a9055613a69565b600080fd5b85600301549350613a98620f4240613a8c60065487613f3290919063ffffffff16565b9063ffffffff613f5b16565b925082840391508215801590613aba57506002860154600160a060020a031615155b15613b5857613adb620f4240613a8c60075486613f3290919063ffffffff16565b6002870154604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015613b18573d6000803e3d6000fd5b50604080518381526020810183905281518d927fea61a33de2fde98825272130cfb82e859b0f73536594146ef4700e23a9225376928290030190a2613b93565b604080518381526000602082015281518d927fea61a33de2fde98825272130cfb82e859b0f73536594146ef4700e23a9225376928290030190a25b604051339083156108fc029084906000818181858888f19350505050158015613bc0573d6000803e3d6000fd5b50600580548590039055613bd38b613f70565b5050505050505050505050565b6000805b6020811015613ca257838160208110613bf957fe5b1a60f860020a02600160f860020a031916600060f860020a021480613c405750828160208110613c2557fe5b1a60f860020a02600160f860020a031916600060f860020a02145b15613c4e5760019150613ca7565b828160208110613c5a57fe5b1a60f860020a02600160f860020a0319168482602081101515613c7957fe5b1a60f860020a02600160f860020a031916141515613c9a5760009150613ca7565b600101613be4565b600191505b5092915050565b600b6020526000908152604090205481565b600054600160a060020a03163314613cd757600080fd5b610fd681614058565b600054600160a060020a03163314613cf757600080fd5b6207a120811115613d9e576040805160e560020a62461bcd02815260206004820152605060248201527f73657452656665727265724665653a2076616c75652073686f756c642062652060448201527f6c657373207468616e203530303030302c207768696368206d65616e7320353060648201527f25206f6620736572766963652066656500000000000000000000000000000000608482015290519081900360a40190fd5b600755565b600354600160a060020a031681565b60045481565b600054600160a060020a03163214613dcf57600080fd5b60015460ff161515613de057600080fd5b6001805460ff19169055600054600160a060020a03163314613e5057600254600160a060020a03163314613e1357600080fd5b600254604051600160a060020a03909116907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2610fd8565b6001546101009004600160a060020a031615613ed557600160000160019054906101000a9004600160a060020a0316600160a060020a031663257e1f8f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015613ebc57600080fd5b505af1158015613ed0573d6000803e3d6000fd5b505050505b600154604051610100909104600160a060020a0316907f908408e307fc569b417f6cbec5d5a06f44a0a505ac0479b47d421a4b2fd6a1e690600090a2565b600082821115613f1f57fe5b50900390565b81810182811015610ff957fe5b6000821515613f4357506000610ff9565b50818102818382811515613f5357fe5b0414610ff957fe5b60008183811515613f6857fe5b049392505050565b600a80546001818101928390557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a89091018390556000838152600d6020908152604080832094909455600c9052918220548291613fd3919063ffffffff613f1316565b6000848152600c60205260408120556009549092506001830110156140455760098054600019810190811061400457fe5b906000526020600020015490508060098381548110151561402157fe5b6000918252602080832090910192909255828152600c909152604090206001830190555b600980546000190190610bd29082614150565b600160a060020a038116151561406d57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b611000604051908101604052806080906020820280388339509192915050565b61010060405190810160405280600081526020016000600160a060020a031681526020016000600160a060020a0316815260200160008152602001600080191681526020016000815260200160008152602001600081525090565b81548183558181111561417457600083815260209020614174918101908301614179565b505050565b612dd891905b80821115614193576000815560010161417f565b50905600a165627a7a72305820f5dbdba103ed4f1e8f4339895afc250d6b0b2cf28a6c21f29a8197e98aadfcd7002900000000000000000000000014712c5a51d1c0a993c5f3df5de844e345f05a2b0000000000000000000000000000000000000000000000000000000000000000

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000014712c5a51d1c0a993c5f3df5de844e345f05a2b0000000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000014712c5a51d1c0a993c5f3df5de844e345f05a2b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://f5dbdba103ed4f1e8f4339895afc250d6b0b2cf28a6c21f29a8197e98aadfcd7

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.