Sponsored Link:   DocTailor - Legal Self Customisable Smart Contract Platform - Bridging the Gap Between Business & Cryptocurrency Holders - Join Now!
  Latest 25 txns from a total Of 25594 transactions View All

TxHash Age From To Value [TxFee]
0xc27022babe89a981729a6c0922f4ddfa60f4cf5f441316b14293bb5f9739c1b213 days 3 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00338408
0x4d9726f835cf2f9f7f7797417af81a06312bee2f18e1943f2613521eca1ca2eb13 days 17 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00258488
0x2c8f8744c8e45cce8a81b395e2681c7cc8e6348be992e390c70c39aa99ea73fe13 days 17 hrs ago0x451e9948f930c33bcda8d97f99fc1df4737921db  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.5 Ether0.000182833
0x6a4a34d3282a5ce8b728402389cbc8196a0374835e34ca35613c4dda89aad2e619 days 17 hrs ago0x8f053f4d6d70039fc62814907094ca87b9524384  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.009979 Ether0.0000246664
0x143b9675fbdcf0c7f296ad6cb593f9d691e54673dab08c41bc042ac5e7a247e037 days 16 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00279694
0xab9cc194593574631d2dba6b35cbb6f701fc50dee62dea57d8df06116c626a1a37 days 16 hrs ago0x65a96e3a8016fd434aa6e0441248808fffeb4489  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.45 Ether0.007496153
0x94c5b538e7893f1e737f85f02dceda097c32e6d98fa4db4e26bd2d1e752d741643 days 7 hrs ago0xbcc356a0525b8d03f79a332d5f75cf09b4e6673e  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.11 Ether0.000919384
0x87a91cf29e05960879411c3b52df3af027fdc068f54952e60212658aac91a1c943 days 7 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00258488
0x74d1fb48986444e2a5bf64aa5dc42e4e4bebb3d1aacc0a902a5fbe2e0170b45443 days 7 hrs ago0xbcc356a0525b8d03f79a332d5f75cf09b4e6673e  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.3 Ether0.007496153
0xfa05057ef7a1a5b02ae1f945cfd64d2a869288222cbc182be33c08047122557248 days 22 hrs ago0x3f8860b846635417a5bd35b5e01d105d677cc119  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.35 Ether0.000365666
0xab46da10b60aa9af5b467f3d58b2097350a0c181d916aad3512a6d9ba8deb04448 days 22 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00080668
0xe130efc9c935dc11fbf8d3898db3d69ff533efb2413bee714991d671c571f33c48 days 22 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00258488
0x421955b099ace18f8bbcca424611e0611a8dd147ca349087602c0fd428cbc54a48 days 22 hrs ago0x3f8860b846635417a5bd35b5e01d105d677cc119  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.2 Ether0.000365666
0xa28a1eb68b8ff8b8504b5f3b013aaeab44d3cd77cb6f9f1c774ad52f6568ad9548 days 23 hrs agoOraclize  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.0025836
0x7e819a866fae010e0bcfc78424a79dc935ae976f719b944358838c1af6fd7ba348 days 23 hrs ago0x3f8860b846635417a5bd35b5e01d105d677cc119  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.2 Ether0.000365666
0x3f06e3b67b0bbe87621cd443456c96814df3147fe300401ea57eb743060c7f2064 days 18 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00054126
0x31fe42a81f0b9aed3a080a12e90494d80b5e6bbd830814a2c4ba879a2c86759e67 days 10 hrs ago0x370e970d67ccfdfb0137096025a7972ad68c4791  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.25 Ether0.001399419
0x0963d5a97011851087d558e72598a4698002064466bcf46870d7cde25983c98369 days 20 hrs ago0xdc791fb1816ec606c9fc4d0c43d76233f837f6df  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.2 Ether0.000910733
0xcea03483845311ae680da88a8fd9b922346c27a9699fb9ba35a1a47833c582fb69 days 20 hrs ago0xdc791fb1816ec606c9fc4d0c43d76233f837f6df  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0.2 Ether0.000910733
0xf0d065d700b43ba19611c63484b0310f41a76c0a9b00f0979ce065b0123a131772 days 16 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00053998
0x3fd7333c23bab59e862d47b7fc75f02e7ae36ec9766a82f6a597d813ab30cad272 days 16 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00065606
0xdfbc0601eb5ab7d973755da2edf606e338bd140514fb7d41ccff97eb0b05f6b375 days 6 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00088248
0x33e8361e3e1b96171339895a2622bf632a2fb23cd43877b53ce7a2a42ac8eb8675 days 7 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.0008748
0x7f192048c55370b41351449818d556fd27859cdaafafab3d9b8f4dd3df4d0fed75 days 18 hrs ago0x0043a408e6a35c07e3c6e8f231b445d36a68e424  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.00132372
0x92b163921259f0c2591aa41e8b944d0d5b4338fdcf1aea06bb8a7ecb79a9cbe075 days 21 hrs ago0x007a368cd2410e138abd7d50e135a65ff282a39c  IN   0xe6517b766e6ee07f91b517435ed855926bcb1aae0 Ether0.0001
[ 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
0xc27022babe89a981729a6c0922f4ddfa60f4cf5f441316b14293bb5f9739c1b2540837313 days 3 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0xd6a062cae6123c158768a5c444ca0896cc60d6b10.543478260869565217 Ether
0xda3c6d02eefc346450e511055feb8dd669477f6d9afc2f004f0b8e0d0bb29b95540837013 days 3 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0xda3c6d02eefc346450e511055feb8dd669477f6d9afc2f004f0b8e0d0bb29b95540837013 days 3 hrs ago0xd6a062cae6123c158768a5c444ca0896cc60d6b10xe6517b766e6ee07f91b517435ed855926bcb1aae0.5 Ether
0x4d9726f835cf2f9f7f7797417af81a06312bee2f18e1943f2613521eca1ca2eb540489813 days 17 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x451e9948f930c33bcda8d97f99fc1df4737921db1 wei
0x2c8f8744c8e45cce8a81b395e2681c7cc8e6348be992e390c70c39aa99ea73fe540489413 days 17 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.0051333587345408 Ether
0x143b9675fbdcf0c7f296ad6cb593f9d691e54673dab08c41bc042ac5e7a247e0526150637 days 16 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x65a96e3a8016fd434aa6e0441248808fffeb44890.489130434782608695 Ether
0xab9cc194593574631d2dba6b35cbb6f701fc50dee62dea57d8df06116c626a1a526144537 days 16 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005059 Ether
0x87a91cf29e05960879411c3b52df3af027fdc068f54952e60212658aac91a1c9522837243 days 7 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0xbcc356a0525b8d03f79a332d5f75cf09b4e6673e1 wei
0x74d1fb48986444e2a5bf64aa5dc42e4e4bebb3d1aacc0a902a5fbe2e0170b454522836943 days 7 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005059 Ether
0xfa05057ef7a1a5b02ae1f945cfd64d2a869288222cbc182be33c080471225572519522248 days 22 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005059 Ether
0xe130efc9c935dc11fbf8d3898db3d69ff533efb2413bee714991d671c571f33c519519148 days 22 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3f8860b846635417a5bd35b5e01d105d677cc1191 wei
0x421955b099ace18f8bbcca424611e0611a8dd147ca349087602c0fd428cbc54a519518848 days 22 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005059 Ether
0xa28a1eb68b8ff8b8504b5f3b013aaeab44d3cd77cb6f9f1c774ad52f6568ad95519510448 days 23 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3f8860b846635417a5bd35b5e01d105d677cc1191 wei
0x7e819a866fae010e0bcfc78424a79dc935ae976f719b944358838c1af6fd7ba3519510248 days 23 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005059 Ether
0xdfbc0601eb5ab7d973755da2edf606e338bd140514fb7d41ccff97eb0b05f6b3503931875 days 6 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x000c8b261f173172532b5ff072508423e4514035150 Ether
0x33e8361e3e1b96171339895a2622bf632a2fb23cd43877b53ce7a2a42ac8eb86503929975 days 7 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x000c8b261f173172532b5ff072508423e4514035150 wei
0x7f192048c55370b41351449818d556fd27859cdaafafab3d9b8f4dd3df4d0fed503648675 days 18 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x000c8b261f173172532b5ff072508423e4514035300 Ether
0x54066c0b0ec4fac7ba7eaee5b44e49fbddebb0f4b6854a1c90c86788e0dbcb86501568879 days 6 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x000c8b261f173172532b5ff072508423e4514035435.82712 Ether
0x4f98907034ca02e41c3402141ac3be46fbe9f446c4353ea5fc9599029076b8e5498725984 days 2 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x65a96e3a8016fd434aa6e0441248808fffeb44891 wei
0xa11f1f22d082ac3323ac2bb295a500f1045f62c5930d439f9f03f511c26e8142498722084 days 2 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005046 Ether
0x7091731bd6b9a69b14cd0f8f6d1e70a8a8e5fda05c827d55c23f9ed2e22fdfff498156285 days 1 hr ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x65a96e3a8016fd434aa6e0441248808fffeb44891 wei
0xc1d265a71e24adf467e74b0aaaef116fca3129e2510a522735a1d5a6fb262a17498156085 days 1 hr ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005046 Ether
0xd03a679f892c4b3045fd5bb1c11a001574e729cf6b8e104b44e0a47e480cedab497880785 days 12 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x8a33431efe78ea6fa9a743ee88db34882eb88c3d1 wei
0x9ae6f95203a47ccaedba08ada5d743849b4d2299dfebcb14df45448004de1d30497880585 days 12 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x3dbdc81a6edc94c720b0b88fb65dbd7e395fdcf60.005046 Ether
0x861b081529010b21b2c3268c6035f5964cbd59b64ed837074ef47ae3401553cb497872285 days 12 hrs ago0xe6517b766e6ee07f91b517435ed855926bcb1aae0x65a96e3a8016fd434aa6e0441248808fffeb44891 wei
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity), DelegateCallReturnValue (low-severity), ECRecoverMalformedInput (medium-severity), SkipEmptyStringLiteral (low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: IDice
Compiler Version: v0.4.11-nightly.2017.3.21+commit.6fb27dee
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity ^0.4.2;

// <ORACLIZE_API>
/*
Copyright (c) 2015-2016 Oraclize SRL
Copyright (c) 2016 Oraclize LTD



Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:



The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0

contract OraclizeI {
    address public cbAddress;
    function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id);
    function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id);
    function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id);
    function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id);
    function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id);
    function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id);
    function getPrice(string _datasource) returns (uint _dsprice);
    function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice);
    function useCoupon(string _coupon);
    function setProofType(byte _proofType);
    function setConfig(bytes32 _config);
    function setCustomGasPrice(uint _gasPrice);
}
contract OraclizeAddrResolverI {
    function getAddress() returns (address _addr);
}
contract usingOraclize {
    uint constant day = 60*60*24;
    uint constant week = 60*60*24*7;
    uint constant month = 60*60*24*30;
    byte constant proofType_NONE = 0x00;
    byte constant proofType_TLSNotary = 0x10;
    byte constant proofStorage_IPFS = 0x01;
    uint8 constant networkID_auto = 0;
    uint8 constant networkID_mainnet = 1;
    uint8 constant networkID_testnet = 2;
    uint8 constant networkID_morden = 2;
    uint8 constant networkID_consensys = 161;

    OraclizeAddrResolverI OAR;

    OraclizeI oraclize;
    modifier oraclizeAPI {
        if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto);
        oraclize = OraclizeI(OAR.getAddress());
        _;
    }
    modifier coupon(string code){
        oraclize = OraclizeI(OAR.getAddress());
        oraclize.useCoupon(code);
        _;
    }

    function oraclize_setNetwork(uint8 networkID) internal returns(bool){
        if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet
            OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed);
            return true;
        }
        if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet
            OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1);
            return true;
        }
        if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet
            OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e);
            return true;
        }
        if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge
            OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
            return true;
        }
        if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide
            OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF);
            return true;
        }
        if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity
            OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA);
            return true;
        }
        return false;
    }

    function __callback(bytes32 myid, string result) {
        __callback(myid, result, new bytes(0));
    }
    function __callback(bytes32 myid, string result, bytes proof) {
    }

    function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){
        return oraclize.getPrice(datasource);
    }

    function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){
        return oraclize.getPrice(datasource, gaslimit);
    }

    function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(0, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query.value(price)(timestamp, datasource, arg);
    }
    function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(0, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2);
    }
    function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit);
    }
    function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN.value(price)(0, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource);
        if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN.value(price)(timestamp, datasource, args);
    }
    function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        bytes memory args = stra2cbor(argN);
        return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit);
    }
    function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](1);
        dynargs[0] = args[0];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](2);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](3);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](4);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        return oraclize_query(datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs);
    }
    function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(timestamp, datasource, dynargs, gaslimit);
    }
    function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) {
        string[] memory dynargs = new string[](5);
        dynargs[0] = args[0];
        dynargs[1] = args[1];
        dynargs[2] = args[2];
        dynargs[3] = args[3];
        dynargs[4] = args[4];
        return oraclize_query(datasource, dynargs, gaslimit);
    }

    function oraclize_cbAddress() oraclizeAPI internal returns (address){
        return oraclize.cbAddress();
    }
    function oraclize_setProof(byte proofP) oraclizeAPI internal {
        return oraclize.setProofType(proofP);
    }
    function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
        return oraclize.setCustomGasPrice(gasPrice);
    }
    function oraclize_setConfig(bytes32 config) oraclizeAPI internal {
        return oraclize.setConfig(config);
    }

    function getCodeSize(address _addr) constant internal returns(uint _size) {
        assembly {
            _size := extcodesize(_addr)
        }
    }

    function parseAddr(string _a) internal returns (address){
        bytes memory tmp = bytes(_a);
        uint160 iaddr = 0;
        uint160 b1;
        uint160 b2;
        for (uint i=2; i<2+2*20; i+=2){
            iaddr *= 256;
            b1 = uint160(tmp[i]);
            b2 = uint160(tmp[i+1]);
            if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87;
            else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48;
            if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87;
            else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48;
            iaddr += (b1*16+b2);
        }
        return address(iaddr);
    }

    function strCompare(string _a, string _b) internal returns (int) {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        for (uint i = 0; i < minLength; i ++)
            if (a[i] < b[i])
                return -1;
            else if (a[i] > b[i])
                return 1;
        if (a.length < b.length)
            return -1;
        else if (a.length > b.length)
            return 1;
        else
            return 0;
    }

    function indexOf(string _haystack, string _needle) internal returns (int) {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if(h.length < 1 || n.length < 1 || (n.length > h.length))
            return -1;
        else if(h.length > (2**128 -1))
            return -1;
        else
        {
            uint subindex = 0;
            for (uint i = 0; i < h.length; i ++)
            {
                if (h[i] == n[0])
                {
                    subindex = 1;
                    while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex])
                    {
                        subindex++;
                    }
                    if(subindex == n.length)
                        return int(i);
                }
            }
            return -1;
        }
    }

    function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }

    function strConcat(string _a, string _b, string _c, string _d) internal returns (string) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string _a, string _b, string _c) internal returns (string) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string _a, string _b) internal returns (string) {
        return strConcat(_a, _b, "", "", "");
    }

    // parseInt
    function parseInt(string _a) internal returns (uint) {
        return parseInt(_a, 0);
    }

    // parseInt(parseFloat*10^_b)
    function parseInt(string _a, uint _b) internal returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                   if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }

    function uint2str(uint i) internal returns (string){
        if (i == 0) return "0";
        uint j = i;
        uint len;
        while (j != 0){
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (i != 0){
            bstr[k--] = byte(48 + i % 10);
            i /= 10;
        }
        return string(bstr);
    }

    function stra2cbor(string[] arr) internal returns (bytes) {
            uint arrlen = arr.length;

            // get correct cbor output length
            uint outputlen = 0;
            bytes[] memory elemArray = new bytes[](arrlen);
            for (uint i = 0; i < arrlen; i++) {
                elemArray[i] = (bytes(arr[i]));
                outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types
            }
            uint ctr = 0;
            uint cborlen = arrlen + 0x80;
            outputlen += byte(cborlen).length;
            bytes memory res = new bytes(outputlen);

            while (byte(cborlen).length > ctr) {
                res[ctr] = byte(cborlen)[ctr];
                ctr++;
            }
            for (i = 0; i < arrlen; i++) {
                res[ctr] = 0x5F;
                ctr++;
                for (uint x = 0; x < elemArray[i].length; x++) {
                    // if there's a bug with larger strings, this may be the culprit
                    if (x % 23 == 0) {
                        uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x;
                        elemcborlen += 0x40;
                        uint lctr = ctr;
                        while (byte(elemcborlen).length > ctr - lctr) {
                            res[ctr] = byte(elemcborlen)[ctr - lctr];
                            ctr++;
                        }
                    }
                    res[ctr] = elemArray[i][x];
                    ctr++;
                }
                res[ctr] = 0xFF;
                ctr++;
            }
            return res;
        }
}
// </ORACLIZE_API>

// Etheroll Functions
contract DSSafeAddSub {
    function safeToAdd(uint a, uint b) internal returns (bool) {
        return (a + b >= a);
    }
    function safeAdd(uint a, uint b) internal returns (uint) {
        if (!safeToAdd(a, b)) throw;
        return a + b;
    }

    function safeToSubtract(uint a, uint b) internal returns (bool) {
        return (b <= a);
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        if (!safeToSubtract(a, b)) throw;
        return a - b;
    }
}

contract IDice is usingOraclize, DSSafeAddSub {

    /*
     * checks player profit and number is within range
    */
    modifier betIsValid(uint _betSize, uint _playerNumber) {
        if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw;
		_;
    }

    /*
     * checks game is currently active
    */
    modifier gameIsActive {
        if(gamePaused == true) throw;
		_;
    }

    /*
     * checks payouts are currently active
    */
    modifier payoutsAreActive {
        if(payoutsPaused == true) throw;
		_;
    }

    /*
     * checks only Oraclize address is calling
    */
    modifier onlyOraclize {
        if (msg.sender != oraclize_cbAddress()) throw;
        _;
    }

    /*
     * checks only owner address is calling
    */
    modifier onlyOwner {
         if (msg.sender != owner) throw;
         _;
    }

    /*
     * checks only treasury address is calling
    */
    modifier onlyTreasury {
         if (msg.sender != treasury) throw;
         _;
    }

    /*
     * game vars
    */

    uint constant public maxBetDivisor = 1000000;
    uint constant public houseEdgeDivisor = 1000;
    uint constant public maxNumber = 99;
    uint constant public minNumber = 2;
	bool public gamePaused;
    uint32 public gasForOraclize;
    address public owner;
    bool public payoutsPaused;
    address public treasury;
    uint public contractBalance;
    uint public houseEdge;
    uint public maxProfit;
    uint public maxProfitAsPercentOfHouse;
    uint public minBet;
    int public totalBets;
    uint public totalUserProfit;
    uint public maxPendingPayouts;

    /*
     * player vars
    */
    mapping (bytes32 => address) playerAddress;
    mapping (bytes32 => address) playerTempAddress;
    mapping (bytes32 => bytes32) playerBetId;
    mapping (bytes32 => uint) playerBetValue;
    mapping (bytes32 => uint) playerTempBetValue;
    mapping (bytes32 => uint) playerRandomResult;
    mapping (bytes32 => uint) playerDieResult;
    mapping (bytes32 => uint) playerNumber;
    mapping (address => uint) playerPendingWithdrawals;
    mapping (bytes32 => uint) playerProfit;
    mapping (bytes32 => uint) playerTempReward;


    /*
     * events
    */
    /* log bets + output to web3 for precise 'payout on win' field in UI */
    event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber);
    /* output to web3 UI on bet result*/
    /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/
	event LogResult(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof);
    /* log manual refunds */
    event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue);
    /* log owner transfers */
    event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred);


    /*
     * init
    */
    function IDice() {

        owner = msg.sender;
        treasury = msg.sender;

        // This setnetwork is unncessary
        oraclize_setNetwork(networkID_auto);
        /* use TLSNotary for oraclize call */
		oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);

        /* init 990 = 99% (1% houseEdge)*/
        ownerSetHouseEdge(935);

        // 25,000 = 2.5% is our max profit of the house
        ownerSetMaxProfitAsPercentOfHouse(25000);
        /* init min bet (0.2 ether) */

        ownerSetMinBet(200000000000000000);
        /* init gas for oraclize */
        gasForOraclize = 250000;

    }

    /*
     * public function
     * player submit bet
     * only if game is active & bet is valid can query oraclize and set player vars
    */
    function playerRollDice(uint rollUnder) public
        payable
        gameIsActive
        betIsValid(msg.value, rollUnder)
	{

        /*
        * assign partially encrypted query to oraclize
        * only the apiKey is encrypted
        * integer query is in plain text
        */
        bytes32 rngId = oraclize_query("nested", "[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\"jsonrpc\":\"2.0\",\"method\":\"generateSignedIntegers\",\"params\":{\"apiKey\":${[decrypt] BDC819nTYbEiByr/iwndzNdSJ9JGJGRWwOTnFLhrFcxtWh53H7szcqHaC+Z/6UKH6T6N57RiPNmBWGeFSmqURHUqCSyN8vmUjVj9gEi7HmCoQlLSpx8QJTV9OxhFf43u8Vn7DugZcgyVcPEkEs2lTP1BXiAd},\"n\":1,\"min\":1,\"max\":100,\"replacement\":true,\"base\":10${[identity] \"}\"},\"id\":1${[identity] \"}\"}']", gasForOraclize);
        /* total number of bets (display purpose only) */
        totalBets += 1;
        /* map bet id to this oraclize query */
		playerBetId[rngId] = rngId;
        /* map player lucky number to this oraclize query */
		playerNumber[rngId] = rollUnder;
        /* map value of wager to this oraclize query */
        playerBetValue[rngId] = msg.value;
        /* map player address to this oraclize query */
        playerAddress[rngId] = msg.sender;
        /* safely map player reward to this oraclize query */
        playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value;
        /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */
        maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]);
        /* check contract can payout on win */
        if(maxPendingPayouts >= contractBalance) throw;
        /* provides accurate numbers for web3 and manual refunds in case of no oraclize __callback */
        LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]);

    }


    /*
    * semi-public function - only oraclize can call
    */
    /*TLSNotary for oraclize call */
	function __callback(bytes32 myid, string result, bytes proof) public
    //function __callback(bytes32 myid, string result) public
		onlyOraclize
		payoutsAreActive
	{

        /* player address mapped to query id does not exist */
        if (playerAddress[myid]==0x0) throw;

	    /* map result to player */
        playerRandomResult[myid] = parseInt(result);

        /* provably-fair random integer for player bounded to 1-100 inclusive
        *  sha3 the result from random.org and proof (IPFS address of TLSNotary proof)
        */
        playerDieResult[myid] = uint(sha3(playerRandomResult[myid], proof)) % (100 - 1) + 1;

        /* get the playerAddress for this query id */
        playerTempAddress[myid] = playerAddress[myid];
        /* delete playerAddress for this query id */
        delete playerAddress[myid];

        /* map the playerProfit for this query id */
        playerTempReward[myid] = playerProfit[myid];
        /* set  playerProfit for this query id to 0 */
        playerProfit[myid] = 0;

        /* safely reduce maxPendingPayouts liability */
        maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]);

        /* map the playerBetValue for this query id */
        playerTempBetValue[myid] = playerBetValue[myid];
        /* set  playerBetValue for this query id to 0 */
        playerBetValue[myid] = 0;

        /*
        * refund
        * if result from oraclize is 0 refund only the original bet value
        * if refund fails save refund value to playerPendingWithdrawals
        */
        if(playerDieResult[myid]==0){

             LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3);

            /*
            * send refund - external call to an untrusted contract
            * if send fails map refund value to playerPendingWithdrawals[address]
            * for withdrawal later via playerWithdrawPendingTransactions
            */
            if(!playerTempAddress[myid].send(playerTempBetValue[myid])){
                LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof);
                //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4);
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
                playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]);
            }

            return;
        }

        /*
        * pay winner
        * update contract balance to calculate new max bet
        * send reward
        * if send of reward fails save value to playerPendingWithdrawals
        */
        if(playerDieResult[myid] < playerNumber[myid]){

            /* safely reduce contract balance by player profit */
            contractBalance = safeSub(contractBalance, playerTempReward[myid]);

            /* safely calculate total payout as player profit plus original wager */
            playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]);

            totalUserProfit = totalUserProfit + playerTempReward[myid]; // total profits

            LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1);

            /* update maximum profit */
            setMaxProfit();

            /*
            * send win - external call to an untrusted contract
            * if send fails map reward value to playerPendingWithdrawals[address]
            * for withdrawal later via playerWithdrawPendingTransactions
            */
            if(!playerTempAddress[myid].send(playerTempReward[myid])){
                LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof);
                //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2);
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
                playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]);
            }

            return;
        }

        /*
        * no win
        * send 1 wei to a losing bet
        * update contract balance to calculate new max bet
        */
        if(playerDieResult[myid] >= playerNumber[myid]){

            LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof);
            //LogResult(playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0);

            /*
            *  safe adjust contractBalance
            *  setMaxProfit
            *  send 1 wei to losing bet
            */
            contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1));

            /* update maximum profit */
            setMaxProfit();

            /*
            * send 1 wei - external call to an untrusted contract
            */
            if(!playerTempAddress[myid].send(1)){
                /* if send failed let player withdraw via playerWithdrawPendingTransactions */
               playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1);
            }

            return;

        }

    }

    /*
    * public function
    * in case of a failed refund or win send
    */
    function playerWithdrawPendingTransactions() public
        payoutsAreActive
        returns (bool)
     {
        uint withdrawAmount = playerPendingWithdrawals[msg.sender];
        playerPendingWithdrawals[msg.sender] = 0;
        /* external call to untrusted contract */
        if (msg.sender.call.value(withdrawAmount)()) {
            return true;
        } else {
            /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */
            /* player can try to withdraw again later */
            playerPendingWithdrawals[msg.sender] = withdrawAmount;
            return false;
        }
    }

    /* check for pending withdrawals  */
    function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) {
        return playerPendingWithdrawals[addressToCheck];
    }

    /*
    * internal function
    * sets max profit
    */
    function setMaxProfit() internal {
        maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxBetDivisor;
    }

    /*
    * owner/treasury address only functions
    */
    function ()
        payable
    {
        playerRollDice(47);
    }

    function ownerAddBankroll ()
    payable
    onlyTreasury
    {
        /* safely update contract balance */
        contractBalance = safeAdd(contractBalance, msg.value);
        /* update the maximum profit */
        setMaxProfit();
    }

    /* set gas for oraclize query */
    function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public
		onlyOwner
	{
    	gasForOraclize = newSafeGasToOraclize;
    }

    /* only owner address can set houseEdge */
    function ownerSetHouseEdge(uint newHouseEdge) public
		onlyOwner
    {
        houseEdge = newHouseEdge;
    }

    /* only owner address can set maxProfitAsPercentOfHouse */
    function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public
		onlyOwner
    {
        /* restrict to maximum profit of 5% of total house balance*/
        if(newMaxProfitAsPercent > 50000) throw;
        maxProfitAsPercentOfHouse = newMaxProfitAsPercent;
        setMaxProfit();
    }

    /* only owner address can set minBet */
    function ownerSetMinBet(uint newMinimumBet) public
		onlyOwner
    {
        minBet = newMinimumBet;
    }

    /* only owner address can transfer ether */
    function ownerTransferEther(address sendTo, uint amount) public
		onlyOwner
    {
        /* safely update contract balance when sending out funds*/
        contractBalance = safeSub(contractBalance, amount);
        /* update max profit */
        setMaxProfit();
        if(!sendTo.send(amount)) throw;
        LogOwnerTransfer(sendTo, amount);
    }

    /* only owner address can do manual refund
    * used only if bet placed + oraclize failed to __callback
    * filter LogBet by address and/or playerBetId:
    * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]);
    * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding:
    * LogResult or LogRefund
    * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions
    */
    function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public
		onlyOwner
    {
        /* safely reduce pendingPayouts by playerProfit[rngId] */
        maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit);
        /* send refund */
        if(!sendTo.send(originalPlayerBetValue)) throw;
        /* log refunds */
        LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue);
    }

    /* only owner address can set emergency pause #1 */
    function ownerPauseGame(bool newStatus) public
		onlyOwner
    {
		gamePaused = newStatus;
    }

    /* only owner address can set emergency pause #2 */
    function ownerPausePayouts(bool newPayoutStatus) public
		onlyOwner
    {
		payoutsPaused = newPayoutStatus;
    }

    /* only owner address can set treasury address */
    function ownerSetTreasury(address newTreasury) public
		onlyOwner
	{
        treasury = newTreasury;
    }

    /* only owner address can set owner address */
    function ownerChangeOwner(address newOwner) public
		onlyOwner
	{
        owner = newOwner;
    }

    /* only owner address can suicide - emergency */
    function ownerkill() public
		onlyOwner
	{
		suicide(owner);
	}


}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"maxProfitAsPercentOfHouse","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newHouseEdge","type":"uint256"}],"name":"ownerSetHouseEdge","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payoutsPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newTreasury","type":"address"}],"name":"ownerSetTreasury","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"ownerAddBankroll","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"myid","type":"bytes32"},{"name":"result","type":"string"},{"name":"proof","type":"bytes"}],"name":"__callback","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxBetDivisor","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"addressToCheck","type":"address"}],"name":"playerGetPendingTxByAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPayoutStatus","type":"bool"}],"name":"ownerPausePayouts","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"ownerChangeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newMaxProfitAsPercent","type":"uint256"}],"name":"ownerSetMaxProfitAsPercentOfHouse","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"treasury","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newMinimumBet","type":"uint256"}],"name":"ownerSetMinBet","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newStatus","type":"bool"}],"name":"ownerPauseGame","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"gasForOraclize","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sendTo","type":"address"},{"name":"amount","type":"uint256"}],"name":"ownerTransferEther","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"contractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minBet","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"playerWithdrawPendingTransactions","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalUserProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalBets","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"gamePaused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"originalPlayerBetId","type":"bytes32"},{"name":"sendTo","type":"address"},{"name":"originalPlayerProfit","type":"uint256"},{"name":"originalPlayerBetValue","type":"uint256"}],"name":"ownerRefundPlayer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newSafeGasToOraclize","type":"uint32"}],"name":"ownerSetOraclizeSafeGas","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"ownerkill","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseEdge","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"rollUnder","type":"uint256"}],"name":"playerRollDice","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"houseEdgeDivisor","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxPendingPayouts","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"RewardValue","type":"uint256"},{"indexed":false,"name":"ProfitValue","type":"uint256"},{"indexed":false,"name":"BetValue","type":"uint256"},{"indexed":false,"name":"PlayerNumber","type":"uint256"}],"name":"LogBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"PlayerNumber","type":"uint256"},{"indexed":false,"name":"DiceResult","type":"uint256"},{"indexed":false,"name":"Value","type":"uint256"},{"indexed":false,"name":"Status","type":"int256"},{"indexed":false,"name":"Proof","type":"bytes"}],"name":"LogResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"BetID","type":"bytes32"},{"indexed":true,"name":"PlayerAddress","type":"address"},{"indexed":true,"name":"RefundValue","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"SentToAddress","type":"address"},{"indexed":true,"name":"AmountTransferred","type":"uint256"}],"name":"LogOwnerTransfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200000d57fe5b5b60028054600160a060020a033316600160a060020a0319918216811790925560038054909116909117905562000053600064010000000062001be56200011882021704565b506200008d7f110000000000000000000000000000000000000000000000000000000000000064010000000062001f846200038082021704565b620000a86103a7640100000000620008f36200051082021704565b620000c36161a8640100000000620013796200053782021704565b620000e46702c68af0bb140000640100000000620013c66200058782021704565b6001805460a860020a63ffffffff0219167703d0900000000000000000000000000000000000000000001790555b620005ca565b60008062000148731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed64010000000062001bdd620005ae82021704565b11156200017e575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560016200037b565b6000620001ad73c03a2615d5efaf5f49f60b7bb6583eaec212fdf164010000000062001bdd620005ae82021704565b1115620001e3575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560016200037b565b60006200021273b7a07bcf2ba2f2703b24c0691b5278999c59ac7e64010000000062001bdd620005ae82021704565b111562000248575060008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560016200037b565b600062000277736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47564010000000062001bdd620005ae82021704565b1115620002ad575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47517905560016200037b565b6000620002dc7320e12a1f859b3feae5fb2a0a32c18f5a65555bbf64010000000062001bdd620005ae82021704565b111562000312575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf17905560016200037b565b6000620003417351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa64010000000062001bdd620005ae82021704565b111562000377575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa17905560016200037b565b5060005b919050565b600054600160a060020a03161580620003bb5750600054620003b990600160a060020a031664010000000062001bdd620005ae82021704565b155b15620003dd57620003db600064010000000062001be56200011882021704565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b15156200045257fe5b60325a03f115156200046057fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190557f688dcfd70000000000000000000000000000000000000000000000000000000083527fff000000000000000000000000000000000000000000000000000000000000008616600484015292519216925063688dcfd791602480830192600092919082900301818387803b1515620004fa57fe5b60325a03f115156200050857fe5b5050505b5b50565b60025433600160a060020a039081169116146200052d5760006000fd5b60058190555b5b50565b60025433600160a060020a03908116911614620005545760006000fd5b61c350811115620005655760006000fd5b60078190556200050c64010000000062001a6d620005b682021704565b5b5b50565b60025433600160a060020a03908116911614620005a45760006000fd5b60088190555b5b50565b803b5b919050565b600754600454620f424091025b046006555b565b6122c180620005da6000396000f300606060405236156101905763ffffffff60e060020a60003504166323214fab81146101a3578063268d50fe146101c557806327dc297e146101da578063301cf6e714610233578063313752421461025757806331b296291461027557806338bbfa501461027f57806339849771146103155780633a4f6999146103375780633c314a91146103595780634b7fcee7146103875780634f44728d1461039e57806355b93031146103bc5780635e968a49146103de57806361d027b3146103f35780636cdf4c901461041f5780636eacd48a146104345780637072a9771461044b5780637ac37d58146104745780638b7afe2e146104955780638da5cb5b146104b75780639619367d146104e3578063a5f4af3314610505578063b539cd5514610529578063b69f5ada1461054b578063befa1e2f1461056d578063c3de1ab91461058f578063cf832ce2146105b3578063d207e757146105da578063d263b7eb146105f5578063d667dcd714610607578063dc6dd15214610629578063e5c774de14610636578063ed62f50114610658575b6101a15b61019e602f61067a565b5b565b005b34156101ab57fe5b6101b36108ed565b60408051918252519081900360200190f35b34156101cd57fe5b6101a16004356108f3565b005b34156101e257fe5b60408051602060046024803582810135601f81018590048502860185019096528585526101a1958335959394604494939290920191819084018382808284375094965061091995505050505050565b005b341561023b57fe5b610243610949565b604080519115158252519081900360200190f35b341561025f57fe5b6101a1600160a060020a0360043516610959565b005b6101a1610995565b005b341561028757fe5b60408051602060046024803582810135601f81018590048502860185019096528585526101a1958335959394604494939290920191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979998810197919650918201945092508291508401838280828437509496506109cc95505050505050565b005b341561031d57fe5b6101b36112c4565b60408051918252519081900360200190f35b341561033f57fe5b6101b36112cb565b60408051918252519081900360200190f35b341561036157fe5b6101b3600160a060020a03600435166112d0565b60408051918252519081900360200190f35b341561038f57fe5b6101a160043515156112ef565b005b34156103a657fe5b6101a1600160a060020a0360043516611338565b005b34156103c457fe5b6101b3611374565b60408051918252519081900360200190f35b34156103e657fe5b6101a1600435611379565b005b34156103fb57fe5b6104036113b7565b60408051600160a060020a039092168252519081900360200190f35b341561042757fe5b6101a16004356113c6565b005b341561043c57fe5b6101a160043515156113ec565b005b341561045357fe5b61045b611435565b6040805163ffffffff9092168252519081900360200190f35b341561047c57fe5b6101a1600160a060020a0360043516602435611448565b005b341561049d57fe5b6101b36114e8565b60408051918252519081900360200190f35b34156104bf57fe5b6104036114ee565b60408051600160a060020a039092168252519081900360200190f35b34156104eb57fe5b6101b36114fd565b60408051918252519081900360200190f35b341561050d57fe5b610243611503565b604080519115158252519081900360200190f35b341561053157fe5b6101b3611592565b60408051918252519081900360200190f35b341561055357fe5b6101b3611598565b60408051918252519081900360200190f35b341561057557fe5b6101b361159e565b60408051918252519081900360200190f35b341561059757fe5b6102436115a4565b604080519115158252519081900360200190f35b34156105bb57fe5b6101a1600435600160a060020a03602435166044356064356115b4565b005b34156105e257fe5b6101a163ffffffff60043516611650565b005b34156105fd57fe5b6101a16116a1565b005b341561060f57fe5b6101b36116ce565b60408051918252519081900360200190f35b6101a160043561067a565b005b341561063e57fe5b6101b36116d4565b60408051918252519081900360200190f35b341561066057fe5b6101b36116da565b60408051918252519081900360200190f35b6001805460009160a060020a90910460ff161515141561069a5760006000fd5b3482600654826103e8600554856106b28660016116e0565b6106bd8760016116e0565b60640388028115156106cb57fe5b0401028115156106d757fe5b040311806106e6575060085482105b806106f15750600281105b806106fc5750606381115b156107075760006000fd5b610773604060405190810160405280600681526020017f6e657374656400000000000000000000000000000000000000000000000000008152506101c0604051908101604052806101a081526020016120d66101a0913960015460a860020a900463ffffffff16611703565b6009805460019081019091556000828152600e6020908152604080832085905560138252808320899055600f82528083203490819055600c9092529091208054600160a060020a03191633600160a060020a0316179055600554929550916103e89183906107e29089906116e0565b6107ed8960016116e0565b60640334028115156107fb57fe5b04010281151561080757fe5b60008681526015602052604090209190049190910390819055600b5461082c91611a4a565b600b81905560045490106108405760006000fd5b6000838152600f60209081526040808320546015909252909120546108659190611a4a565b6000848152600c6020908152604080832054600e8352818420546015845282852054600f855283862054601386529584902054845191825294810195909552848301939093529051600160a060020a03909116927f1cb5bfc4e69cbacf65c8e05bdb84d7a327bd6bb4c034ff82359aefd7443775c4919081900360600190a45b5b50505b5050565b60075481565b60025433600160a060020a0390811691161461090f5760006000fd5b60058190555b5b50565b6108e98282600060405180591061092d5750595b908082528060200260200182016040525b506109cc565b5b5050565b60025460a060020a900460ff1681565b60025433600160a060020a039081169116146109755760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60035433600160a060020a039081169116146109b15760006000fd5b6109bd60045434611a4a565b60045561019e611a6d565b5b5b565b6109d4611a81565b600160a060020a031633600160a060020a03161415156109f45760006000fd5b60025460a060020a900460ff16151560011415610a115760006000fd5b6000838152600c6020526040902054600160a060020a03161515610a355760006000fd5b610a3e82611bbd565b6000848152601160209081526040918290208390559051828152835160639392859291828201918401908083835b60208310610a8b5780518252601f199092019160209182019101610a6c565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120935050508215159050610ac357fe5b600085815260126020908152604080832094909306600101909355600c83528181208054600d85528383208054600160a060020a03909216600160a060020a0319928316179055815416905560158352818120805460169094529181209283559055600b549054610b3491906116e0565b600b556000838152600f602090815260408083208054601084528285205583905560129091529020541515610dee57600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086529584902054845187815280870182905260039581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215610c18575b805182526020831115610c1857601f199092019160209182019101610bf8565b505050905090810190601f168015610c445780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d60209081526040808320546010909252808320549051600160a060020a039092169281156108fc029290818181858888f193505050501515610de957600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086529584902054845187815280870182905260049581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215610d4c575b805182526020831115610d4c57601f199092019160209182019101610d2c565b505050905090810190601f168015610d785780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d6020908152604080832054600160a060020a031683526014825280832054868452601090925290912054610dc39190611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b6112bb565b60008381526013602090815260408083205460129092529091205410156110f457600454600084815260166020526040902054610e2b91906116e0565b600455600083815260166020908152604080832054601090925290912054610e539190611a4a565b6000848152601660208181526040808420858155600a80549096019095556013825280842054600d835281852054600e8452828620546012855295839020549484529554825185815280850182905260019381018490526080606082018181528a519183019190915289519398600160a060020a0316979660008051602061227683398151915296909593948b93929160a0840191908501908083838215610f16575b805182526020831115610f1657601f199092019160209182019101610ef6565b505050905090810190601f168015610f425780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4610f5a611a6d565b6000838152600d60209081526040808320546016909252808320549051600160a060020a039092169281156108fc029290818181858888f193505050501515610de957600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601686529584902054845187815280870182905260029581018690526080606082018181528a519183019190915289519598600160a060020a0390951697939660008051602061227683398151915296939490938b93929160a0840191908501908083838215611052575b80518252602083111561105257601f199092019160209182019101611032565b505050905090810190601f16801561107e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a46000838152600d6020908152604080832054600160a060020a031683526014825280832054868452601690925290912054610dc39190611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b6112bb565b600083815260136020908152604080832054601290925290912054106112bb57600083815260136020908152604080832054600d835281842054600e8452828520546012855283862054601086528487205485518281528088018290529586018890526080606087018181528a519188019190915289519598600160a060020a03909516979396600080516020612276833981519152969395929492938b9391929160a08401919085019080838382156111c9575b8051825260208311156111c957601f1990920191602091820191016111a9565b505050905090810190601f1680156111f55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4600454600084815260106020526040902054611225919060001901611a4a565b600455611230611a6d565b6000838152600d6020526040808220549051600160a060020a03909116919060019082818181858883f193505050501515610de9576000838152600d6020908152604080832054600160a060020a031683526014909152902054610dc3906001611a4a565b6000848152600d6020908152604080832054600160a060020a0316835260149091529020555b5b5b5b5b505050565b620f424081565b606381565b600160a060020a0381166000908152601460205260409020545b919050565b60025433600160a060020a0390811691161461130b5760006000fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a831515021790555b5b50565b60025433600160a060020a039081169116146113545760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b5b50565b600281565b60025433600160a060020a039081169116146113955760006000fd5b61c3508111156113a55760006000fd5b6007819055610915611a6d565b5b5b50565b600354600160a060020a031681565b60025433600160a060020a039081169116146113e25760006000fd5b60088190555b5b50565b60025433600160a060020a039081169116146114085760006000fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a831515021790555b5b50565b60015460a860020a900463ffffffff1681565b60025433600160a060020a039081169116146114645760006000fd5b611470600454826116e0565b60045561147b611a6d565b604051600160a060020a0383169082156108fc029083906000818181858888f1935050505015156114ac5760006000fd5b6040518190600160a060020a038416907f42c501a185f41a8eb77b0a3e7b72a6435ea7aa752f8a1a0a13ca4628495eca9190600090a35b5b5050565b60045481565b600254600160a060020a031681565b60085481565b60006000600260149054906101000a900460ff1615156001151514156115295760006000fd5b50600160a060020a033316600081815260146020526040808220805490839055905190929183919081818185876185025a03f1925050501561156e576001915061158c565b600160a060020a033316600090815260146020526040812082905591505b5b5b5090565b60065481565b600a5481565b60095481565b60015460a060020a900460ff1681565b60025433600160a060020a039081169116146115d05760006000fd5b6115dc600b54836116e0565b600b55604051600160a060020a0384169082156108fc029083906000818181858888f1935050505015156116105760006000fd5b6040518190600160a060020a0385169086907f7b6ccf85690b8ce1b7d21a94ca738803a9da7dc74e10140f269efa0d8d6fb85190600090a45b5b50505050565b60025433600160a060020a0390811691161461166c5760006000fd5b6001805478ffffffff000000000000000000000000000000000000000000191660a860020a63ffffffff8416021790555b5b50565b60025433600160a060020a039081169116146116bd5760006000fd5b600254600160a060020a0316ff5b5b565b60055481565b6103e881565b600b5481565b60006116ec8383611bd2565b15156116f85760006000fd5b508082035b92915050565b600080548190600160a060020a03161580611730575060005461172e90600160a060020a0316611bdd565b155b156117415761173f6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b151561179c57fe5b60325a03f115156117a957fe5b505060408051805160018054600160a060020a031916600160a060020a039283161790819055600060209384015283517f2ef3accc00000000000000000000000000000000000000000000000000000000815260248101899052600481019485528a5160448201528a51919092169450632ef3accc938a93899391928392606401918601908083838215611858575b80518252602083111561185857601f199092019160209182019101611838565b505050905090810190601f1680156118845780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15156118a057fe5b60325a03f115156118ad57fe5b505060405151915050670de0b6b3a76400003a8402018111156118d35760009150611a41565b600160009054906101000a9004600160a060020a0316600160a060020a031663c51be90f8260008888886000604051602001526040518663ffffffff1660e060020a028152600401808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360008314611973575b80518252602083111561197357601f199092019160209182019101611953565b505050905090810190601f16801561199f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838382156119de575b8051825260208311156119de57601f1990920191602091820191016119be565b505050905090810190601f168015611a0a5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1515611a2857fe5b61235a5a03f11515611a3657fe5b505060405151935050505b5b509392505050565b6000611a568383611de2565b1515611a625760006000fd5b508181015b92915050565b600754600454620f424091025b046006555b565b60008054600160a060020a03161580611aac5750600054611aaa90600160a060020a0316611bdd565b155b15611abd57611abb6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515611b1857fe5b60325a03f11515611b2557fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190556000602093840181905284517fc281d19e000000000000000000000000000000000000000000000000000000008152945191909216945063c281d19e9360048082019493918390030190829087803b1515611ba257fe5b60325a03f11515611baf57fe5b5050604051519150505b5b90565b6000611bca826000611df0565b90505b919050565b818111155b92915050565b803b5b919050565b60006000611c06731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed611bdd565b1115611c3a575060008054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed17905560016112ea565b6000611c5973c03a2615d5efaf5f49f60b7bb6583eaec212fdf1611bdd565b1115611c8d575060008054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf117905560016112ea565b6000611cac73b7a07bcf2ba2f2703b24c0691b5278999c59ac7e611bdd565b1115611ce0575060008054600160a060020a03191673b7a07bcf2ba2f2703b24c0691b5278999c59ac7e17905560016112ea565b6000611cff736f485c8bf6fc43ea212e93bbf8ce046c7f1cb475611bdd565b1115611d33575060008054600160a060020a031916736f485c8bf6fc43ea212e93bbf8ce046c7f1cb47517905560016112ea565b6000611d527320e12a1f859b3feae5fb2a0a32c18f5a65555bbf611bdd565b1115611d86575060008054600160a060020a0319167320e12a1f859b3feae5fb2a0a32c18f5a65555bbf17905560016112ea565b6000611da57351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa611bdd565b1115611dd9575060008054600160a060020a0319167351efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa17905560016112ea565b5060005b919050565b808201829010155b92915050565b6000611dfa611f72565b5082600080805b8351811015611f525783517f300000000000000000000000000000000000000000000000000000000000000090859083908110611e3a57fe5b90602001015160f860020a900460f860020a02600160f860020a03191610158015611eb0575083517f390000000000000000000000000000000000000000000000000000000000000090859083908110611e9057fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b15611f0a578115611ecf57851515611ec757611f52565b600019909501945b5b600a8302925060308482815181101515611ee657fe5b90602001015160f860020a900460f860020a0260f860020a90040383019250611f48565b8381815181101515611f1857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a021415611f4857600191505b5b5b600101611e01565b6000861115611f645785600a0a830292505b8294505b5050505092915050565b60408051602081019091526000815290565b600054600160a060020a03161580611fae5750600054611fac90600160a060020a0316611bdd565b155b15611fbf57611fbd6000611be5565b505b600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b151561201a57fe5b60325a03f1151561202757fe5b505060408051805160018054600160a060020a031916600160a060020a0392831617908190557f688dcfd70000000000000000000000000000000000000000000000000000000083527fff000000000000000000000000000000000000000000000000000000000000008616600484015292519216925063688dcfd791602480830192600092919082900301818387803b15156120c057fe5b60325a03f115156108e557fe5b5050505b5b5056005b55524c5d205b276a736f6e2868747470733a2f2f6170692e72616e646f6d2e6f72672f6a736f6e2d7270632f312f696e766f6b65292e726573756c742e72616e646f6d2e646174612e30272c20275c6e7b226a736f6e727063223a22322e30222c226d6574686f64223a2267656e65726174655369676e6564496e746567657273222c22706172616d73223a7b226170694b6579223a247b5b646563727970745d204244433831396e54596245694279722f69776e647a4e64534a394a474a475257774f546e464c687246637874576835334837737a63714861432b5a2f36554b483654364e35375269504e6d4257476546536d7155524855714353794e38766d556a566a3967456937486d436f516c4c53707838514a5456394f7868466634337538566e374475675a636779566350456b4573326c54503142586941647d2c226e223a312c226d696e223a312c226d6178223a3130302c227265706c6163656d656e74223a747275652c2262617365223a3130247b5b6964656e746974795d20227d227d2c226964223a31247b5b6964656e746974795d20227d227d275d631b7e83754f4cdc55b37da22c617abf4803c0263b8ea1a436d43eed60d6a1e8a165627a7a72305820f1ae9585307ee165eb7d9bf3324ba5b8d107da0e476a62014ad07e1d40c3aac50029

   Swarm Source:
bzzr://f1ae9585307ee165eb7d9bf3324ba5b8d107da0e476a62014ad07e1d40c3aac5

 

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.