Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
91.002071402670861358 ETH
Eth Value
$332,016.49 (@ $3,648.45/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 35,575 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Change Developer... | 17521149 | 532 days ago | IN | 0 ETH | 0.00042438 | ||||
Invest | 17398207 | 549 days ago | IN | 0 ETH | 0.00157052 | ||||
Transfer | 17050942 | 598 days ago | IN | 0.002 ETH | 0.00430961 | ||||
Transfer | 17050936 | 598 days ago | IN | 0.001 ETH | 0.00046123 | ||||
Transfer | 17050932 | 598 days ago | IN | 0.001 ETH | 0.00053824 | ||||
Set Nickname | 17050850 | 598 days ago | IN | 0 ETH | 0.00102589 | ||||
Change Developer... | 16362393 | 695 days ago | IN | 0 ETH | 0.04986802 | ||||
Change Developer... | 16362393 | 695 days ago | IN | 0 ETH | 0.04986802 | ||||
Change Developer... | 16362352 | 695 days ago | IN | 0 ETH | 0.04469023 | ||||
Transfer | 6832135 | 2190 days ago | IN | 0 ETH | 0.00036 | ||||
Transfer | 6829588 | 2190 days ago | IN | 0 ETH | 0.00120978 | ||||
Withdraw Investm... | 6337644 | 2271 days ago | IN | 0 ETH | 0.0014319 | ||||
Withdraw Investm... | 6337625 | 2271 days ago | IN | 0 ETH | 0.00120077 | ||||
Withdraw Investm... | 5268734 | 2454 days ago | IN | 0 ETH | 0.00089949 | ||||
Withdraw Investm... | 5162503 | 2472 days ago | IN | 0 ETH | 0.0000682 | ||||
Withdraw Investm... | 4916734 | 2513 days ago | IN | 0 ETH | 0.00147969 | ||||
Withdraw Investm... | 4916731 | 2513 days ago | IN | 0 ETH | 0.00147969 | ||||
Withdraw Investm... | 4916702 | 2513 days ago | IN | 0 ETH | 0.00147969 | ||||
Withdraw Investm... | 4916655 | 2513 days ago | IN | 0 ETH | 0.00262268 | ||||
Withdraw Investm... | 4916654 | 2513 days ago | IN | 0 ETH | 0.00262268 | ||||
Withdraw Investm... | 4825598 | 2530 days ago | IN | 0 ETH | 0.00007218 | ||||
Withdraw Investm... | 4731163 | 2546 days ago | IN | 0 ETH | 0.00138915 | ||||
Transfer | 4729676 | 2546 days ago | IN | 0.05 ETH | 0.009603 | ||||
Withdraw Investm... | 4721152 | 2548 days ago | IN | 0 ETH | 0.00262453 | ||||
Withdraw Investm... | 4721095 | 2548 days ago | IN | 0 ETH | 0.00131134 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
4825598 | 2530 days ago | 98.4033986 ETH | ||||
4731163 | 2546 days ago | 91.90858101 ETH | ||||
4721152 | 2548 days ago | 109.03215008 ETH | ||||
4721095 | 2548 days ago | 182.00265136 ETH | ||||
4721071 | 2548 days ago | 108.58848586 ETH | ||||
4721044 | 2548 days ago | 163.54512099 ETH | ||||
4720951 | 2548 days ago | 98.12893507 ETH | ||||
4569600 | 2573 days ago | 195.35041347 ETH | ||||
4549300 | 2576 days ago | 91.14005777 ETH | ||||
4366246 | 2607 days ago | 200.41464462 ETH | ||||
4366236 | 2607 days ago | 90.86968344 ETH | ||||
4366236 | 2607 days ago | 90.86968344 ETH | ||||
4366225 | 2607 days ago | 90.86968344 ETH | ||||
4366219 | 2607 days ago | 90.86968344 ETH | ||||
4366211 | 2607 days ago | 90.86968344 ETH | ||||
4333248 | 2618 days ago | 182.07128202 ETH | ||||
4333229 | 2618 days ago | 91.06142823 ETH | ||||
4333177 | 2618 days ago | 91.00132568 ETH | ||||
4333152 | 2618 days ago | 91.05621662 ETH | ||||
4333118 | 2618 days ago | 91.00132568 ETH | ||||
4333118 | 2618 days ago | 91.00132568 ETH | ||||
4333030 | 2618 days ago | 91.00132568 ETH | ||||
4333030 | 2618 days ago | 91.00132568 ETH | ||||
4333003 | 2618 days ago | 91.01211501 ETH | ||||
4333003 | 2618 days ago | 90.99859506 ETH |
Loading...
Loading
Contract Name:
Rouleth
Compiler Version
v0.3.5-2016-07-01-48238c9
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2016-09-04 */ // , ; , .-'"""'-. , ; , // \\|/ .' '. \|// // \-;-/ () () \-;-/ // // ; ; \\ // //__; :. .; ;__\\ // `-----\'.'-.....-'.'/-----' // '.'.-.-,_.'.' // '( (..-' // '-' // ROULETH // // Play the Roulette on ethereum blockchain ! // (or become a member of Rouleth's Decentralized Organisation and contribute to the bankroll.) // // // // check latest contract address version on the current website interface // V 2 // // // contract Rouleth { //Game and Global Variables, Structure of gambles address developer; uint8 blockDelay; //nb of blocks to wait before spin uint8 blockExpiration; //nb of blocks before bet expiration (due to hash storage limits) uint256 maxGamble; //max gamble value manually set by config uint256 minGamble; //min gamble value manually set by config uint maxBetsPerBlock; //limits the number of bets per blocks to prevent miner cheating uint nbBetsCurrentBlock; //counts the nb of bets in the block uint casinoStatisticalLimit; //ratio payroll and max win //Current gamble value possibly lower than limit auto uint256 currentMaxGamble; //Gambles enum BetTypes{number, color, parity, dozen, column, lowhigh} struct Gamble { address player; bool spinned; //Was the rouleth spinned ? bool win; //Possible bet types BetTypes betType; uint8 input; //stores number, color, dozen or oddeven uint256 wager; uint256 blockNumber; //block of bet uint256 blockSpinned; //block of spin uint8 wheelResult; } Gamble[] private gambles; uint totalGambles; //Tracking progress of players mapping (address=>uint) gambleIndex; //current gamble index of the player //records current status of player enum Status {waitingForBet, waitingForSpin} mapping (address=>Status) playerStatus; //********************************************** // Management & Config FUNCTIONS // //********************************************** function Rouleth() private //creation settings { developer = msg.sender; blockDelay=1; //indicates which block after bet will be used for RNG blockExpiration=200; //delay after which gamble expires minGamble=50 finney; //configurable min bet maxGamble=500 finney; //configurable max bet maxBetsPerBlock=5; // limit of bets per block, to prevent multiple bets per miners casinoStatisticalLimit=100; //we are targeting at least 400 } modifier onlyDeveloper() { if (msg.sender!=developer) throw; _ } function changeDeveloper_only_Dev(address new_dev) noEthSent onlyDeveloper { developer=new_dev; } //Prevents accidental sending of Eth when you shouldn't modifier noEthSent() { if (msg.value>0) { throw; } _ } //Activate, Deactivate Betting enum States{active, inactive} States private contract_state; function disableBetting_only_Dev() noEthSent onlyDeveloper { contract_state=States.inactive; } function enableBetting_only_Dev() noEthSent onlyDeveloper { contract_state=States.active; } modifier onlyActive() { if (contract_state==States.inactive) throw; _ } //Change some settings within safety bounds function changeSettings_only_Dev(uint newCasinoStatLimit, uint newMaxBetsBlock, uint256 newMinGamble, uint256 newMaxGamble, uint16 newMaxInvestor, uint256 newMinInvestment,uint256 newMaxInvestment, uint256 newLockPeriod, uint8 newBlockDelay, uint8 newBlockExpiration) noEthSent onlyDeveloper { // changes the statistical multiplier that guarantees the long run casino survival if (newCasinoStatLimit<100) throw; casinoStatisticalLimit=newCasinoStatLimit; //Max number of bets per block to prevent miner cheating maxBetsPerBlock=newMaxBetsBlock; //MAX BET : limited by payroll/(casinoStatisticalLimit*35) if (newMaxGamble<newMinGamble) throw; else { maxGamble=newMaxGamble; } //Min Bet if (newMinGamble<0) throw; else { minGamble=newMinGamble; } //MAX NB of DAO members (can only increase (within bounds) or stay equal) //this number of members can only increase after 25k spins on Rouleth //refuse change of max number of members if less than 25k spins played if (newMaxInvestor!=setting_maxInvestors && gambles.length<25000) throw; if ( newMaxInvestor<setting_maxInvestors || newMaxInvestor>investors.length) throw; else { setting_maxInvestors=newMaxInvestor;} //computes the results of the vote of the VIP members, fees to apply to new members computeResultVoteExtraInvestFeesRate(); if (newMaxInvestment<newMinInvestment) throw; //MIN INVEST : setting_minInvestment=newMinInvestment; //MAX INVEST : setting_maxInvestment=newMaxInvestment; //Invest LOCK PERIOD //1 year max //can also serve as a failsafe to shutdown withdraws for a period if (setting_lockPeriod>360 days) throw; setting_lockPeriod=newLockPeriod; //Delay before spin : blockDelay=newBlockDelay; if (newBlockExpiration<blockDelay+20) throw; blockExpiration=newBlockExpiration; updateMaxBet(); } //********************************************** // Nicknames FUNCTIONS // //********************************************** //User set nickname mapping (address => string) nicknames; function setNickname(string name) noEthSent { if (bytes(name).length >= 2 && bytes(name).length <= 30) nicknames[msg.sender] = name; } function getNickname(address _address) constant returns(string _name) { _name = nicknames[_address]; } //********************************************** // BETTING FUNCTIONS // //********************************************** //***//basic betting without Mist or contract call //activates when the player only sends eth to the contract //without specifying any type of bet. function () { //defaut bet : bet on red betOnColor(true,false); } //Admin function that //recalculates max bet //updated after each bet and change of bankroll function updateMaxBet() private { //check that setting is still within safety bounds if (payroll/(casinoStatisticalLimit*35) > maxGamble) { currentMaxGamble=maxGamble; } else { currentMaxGamble = payroll/(casinoStatisticalLimit*35); } } //***//Guarantees that gamble is under max bet and above min. // returns bet value function checkBetValue() private returns(uint256 playerBetValue) { if (msg.value < minGamble) throw; if (msg.value > currentMaxGamble) //if above max, send difference back { playerBetValue=currentMaxGamble; } else { playerBetValue=msg.value; } return; } //check number of bets in block (to prevent miner cheating) modifier checkNbBetsCurrentBlock() { if (gambles.length!=0 && block.number==gambles[gambles.length-1].blockNumber) nbBetsCurrentBlock+=1; else nbBetsCurrentBlock=0; if (nbBetsCurrentBlock>=maxBetsPerBlock) throw; _ } //Function record bet called by all others betting functions function placeBet(BetTypes betType_, uint8 input_) private { // Before we record, we may have to spin the past bet if the croupier bot // is down for some reason or if the player played again too quickly. // This would fail though if the player tries too play to quickly (in consecutive block). // gambles should be spaced by at least a block // the croupier bot should spin within 2 blocks (~30 secs) after your bet. // if the bet expires it is added to casino profit, otherwise it would be a way to cheat if (playerStatus[msg.sender]!=Status.waitingForBet) { SpinTheWheel(msg.sender); } //Once this is done, we can record the new bet playerStatus[msg.sender]=Status.waitingForSpin; gambleIndex[msg.sender]=gambles.length; totalGambles++; //adapts wager to casino limits uint256 betValue = checkBetValue(); gambles.push(Gamble(msg.sender, false, false, betType_, input_, betValue, block.number, 0, 37)); //37 indicates not spinned yet //refund excess bet (at last step vs re-entry) if (betValue<msg.value) { if (msg.sender.send(msg.value-betValue)==false) throw; } } //***//bet on Number function betOnNumber(uint8 numberChosen) onlyActive checkNbBetsCurrentBlock { //check that number chosen is valid and records bet if (numberChosen>36) throw; placeBet(BetTypes.number, numberChosen); } //***// function betOnColor //bet type : color //input : 0 for red //input : 1 for black function betOnColor(bool Red, bool Black) onlyActive checkNbBetsCurrentBlock { uint8 count; uint8 input; if (Red) { count+=1; input=0; } if (Black) { count+=1; input=1; } if (count!=1) throw; placeBet(BetTypes.color, input); } //***// function betOnLow_High //bet type : lowhigh //input : 0 for low //input : 1 for low function betOnLowHigh(bool Low, bool High) onlyActive checkNbBetsCurrentBlock { uint8 count; uint8 input; if (Low) { count+=1; input=0; } if (High) { count+=1; input=1; } if (count!=1) throw; placeBet(BetTypes.lowhigh, input); } //***// function betOnOddEven //bet type : parity //input : 0 for even //input : 1 for odd function betOnOddEven(bool Odd, bool Even) onlyActive checkNbBetsCurrentBlock { uint8 count; uint8 input; if (Even) { count+=1; input=0; } if (Odd) { count+=1; input=1; } if (count!=1) throw; placeBet(BetTypes.parity, input); } //***// function betOnDozen // //bet type : dozen // //input : 0 for first dozen // //input : 1 for second dozen // //input : 2 for third dozen function betOnDozen(bool First, bool Second, bool Third) { betOnColumnOrDozen(First,Second,Third, BetTypes.dozen); } // //***// function betOnColumn // //bet type : column // //input : 0 for first column // //input : 1 for second column // //input : 2 for third column function betOnColumn(bool First, bool Second, bool Third) { betOnColumnOrDozen(First, Second, Third, BetTypes.column); } function betOnColumnOrDozen(bool First, bool Second, bool Third, BetTypes bet) private onlyActive checkNbBetsCurrentBlock { uint8 count; uint8 input; if (First) { count+=1; input=0; } if (Second) { count+=1; input=1; } if (Third) { count+=1; input=2; } if (count!=1) throw; placeBet(bet, input); } //********************************************** // Spin The Wheel & Check Result FUNCTIONS// //********************************************** event Win(address player, uint8 result, uint value_won, bytes32 bHash, bytes32 sha3Player, uint gambleId); event Loss(address player, uint8 result, uint value_loss, bytes32 bHash, bytes32 sha3Player, uint gambleId); //***//function to spin callable // no eth allowed function spinTheWheel(address spin_for_player) noEthSent { SpinTheWheel(spin_for_player); } function SpinTheWheel(address playerSpinned) private { if (playerSpinned==0) { playerSpinned=msg.sender; //if no index spins for the sender } //check that player has to spin if (playerStatus[playerSpinned]!=Status.waitingForSpin) throw; //redundent double check : check that gamble has not been spinned already if (gambles[gambleIndex[playerSpinned]].spinned==true) throw; //check that the player waited for the delay before spin //and also that the bet is not expired uint playerblock = gambles[gambleIndex[playerSpinned]].blockNumber; //too early to spin if (block.number<=playerblock+blockDelay) throw; //too late, bet expired, player lost else if (block.number>playerblock+blockExpiration) solveBet(playerSpinned, 255, false, 1, 0, 0) ; //spin ! else { uint8 wheelResult; //Spin the wheel, bytes32 blockHash= block.blockhash(playerblock+blockDelay); //security check that the Hash is not empty if (blockHash==0) throw; // generate the hash for RNG from the blockHash and the player's address bytes32 shaPlayer = sha3(playerSpinned, blockHash); // get the final wheel result wheelResult = uint8(uint256(shaPlayer)%37); //check result against bet and pay if win checkBetResult(wheelResult, playerSpinned, blockHash, shaPlayer); } } //CHECK BETS FUNCTIONS private function checkBetResult(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { BetTypes betType=gambles[gambleIndex[player]].betType; //bet on Number if (betType==BetTypes.number) checkBetNumber(result, player, blockHash, shaPlayer); else if (betType==BetTypes.parity) checkBetParity(result, player, blockHash, shaPlayer); else if (betType==BetTypes.color) checkBetColor(result, player, blockHash, shaPlayer); else if (betType==BetTypes.lowhigh) checkBetLowhigh(result, player, blockHash, shaPlayer); else if (betType==BetTypes.dozen) checkBetDozen(result, player, blockHash, shaPlayer); else if (betType==BetTypes.column) checkBetColumn(result, player, blockHash, shaPlayer); updateMaxBet(); //at the end, update the Max possible bet } // function solve Bet once result is determined : sends to winner, adds loss to profit function solveBet(address player, uint8 result, bool win, uint8 multiplier, bytes32 blockHash, bytes32 shaPlayer) private { //Update status and record spinned playerStatus[player]=Status.waitingForBet; gambles[gambleIndex[player]].wheelResult=result; gambles[gambleIndex[player]].spinned=true; gambles[gambleIndex[player]].blockSpinned=block.number; uint bet_v = gambles[gambleIndex[player]].wager; if (win) { gambles[gambleIndex[player]].win=true; uint win_v = (multiplier-1)*bet_v; lossSinceChange+=win_v; Win(player, result, win_v, blockHash, shaPlayer, gambleIndex[player]); //send win! //safe send vs potential callstack overflowed spins if (player.send(win_v+bet_v)==false) throw; } else { Loss(player, result, bet_v-1, blockHash, shaPlayer, gambleIndex[player]); profitSinceChange+=bet_v-1; //send 1 wei to confirm spin if loss if (player.send(1)==false) throw; } } // checkbeton number(input) // bet type : number // input : chosen number function checkBetNumber(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool win; //win if (result==gambles[gambleIndex[player]].input) { win=true; } solveBet(player, result,win,36, blockHash, shaPlayer); } // checkbet on oddeven // bet type : parity // input : 0 for even, 1 for odd function checkBetParity(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool win; //win if (result%2==gambles[gambleIndex[player]].input && result!=0) { win=true; } solveBet(player,result,win,2, blockHash, shaPlayer); } // checkbet on lowhigh // bet type : lowhigh // input : 0 low, 1 high function checkBetLowhigh(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool win; //win if (result!=0 && ( (result<19 && gambles[gambleIndex[player]].input==0) || (result>18 && gambles[gambleIndex[player]].input==1) ) ) { win=true; } solveBet(player,result,win,2, blockHash, shaPlayer); } // checkbet on color // bet type : color // input : 0 red, 1 black uint[18] red_list=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]; function checkBetColor(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool red; //check if red for (uint8 k; k<18; k++) { if (red_list[k]==result) { red=true; break; } } bool win; //win if ( result!=0 && ( (gambles[gambleIndex[player]].input==0 && red) || ( gambles[gambleIndex[player]].input==1 && !red) ) ) { win=true; } solveBet(player,result,win,2, blockHash, shaPlayer); } // checkbet on dozen // bet type : dozen // input : 0 first, 1 second, 2 third function checkBetDozen(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool win; //win on first dozen if ( result!=0 && ( (result<13 && gambles[gambleIndex[player]].input==0) || (result>12 && result<25 && gambles[gambleIndex[player]].input==1) || (result>24 && gambles[gambleIndex[player]].input==2) ) ) { win=true; } solveBet(player,result,win,3, blockHash, shaPlayer); } // checkbet on column // bet type : column // input : 0 first, 1 second, 2 third function checkBetColumn(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private { bool win; //win if ( result!=0 && ( (gambles[gambleIndex[player]].input==0 && result%3==1) || ( gambles[gambleIndex[player]].input==1 && result%3==2) || ( gambles[gambleIndex[player]].input==2 && result%3==0) ) ) { win=true; } solveBet(player,result,win,3, blockHash, shaPlayer); } //D.A.O. FUNCTIONS //total casino payroll uint256 payroll; //Profit Loss since last investor change uint256 profitSinceChange; uint256 lossSinceChange; //DAO members struct array (hard capped to 777 members (77 VIP + 700 extra members) ) struct Investor { address investor; uint256 time; } Investor[777] private investors; //array of 777 elements (max Rouleth's members nb.) uint16 setting_maxInvestors = 77; //Initially restricted to 77 VIP Members //Balances of the DAO members mapping (address=>uint256) balance; //lockPeriod //minimum membership time uint256 setting_lockPeriod=30 days ; uint256 setting_minInvestment=100 ether; //min amount to send when using "invest()" uint256 setting_maxInvestment=200 ether; //max amount to send when using "invest()" event newInvest(address player, uint invest_v, uint net_invest_v); //Become a DAO member. function invest() { // update balances before altering the shares updateBalances(); uint256 netInvest; uint excess; // reset the open position counter to values out of bounds // =999 if full uint16 openPosition=999; bool alreadyInvestor; // loop over array to find if already member, // and record a potential openPosition for (uint16 k = 0; k<setting_maxInvestors; k++) { // captures an index of an open position if (investors[k].investor==0) openPosition=k; // captures if already a member else if (investors[k].investor==msg.sender) { alreadyInvestor=true; break; } } //new Member if (!alreadyInvestor) { // check that more than min is sent (variable setting) if (msg.value<setting_minInvestment) throw; // check that less than max is sent (variable setting) // otherwise refund if (msg.value>setting_maxInvestment) { excess=msg.value-setting_maxInvestment; netInvest=setting_maxInvestment; } else { netInvest=msg.value; } //members can't become a VIP member after the initial period if (setting_maxInvestors >77 && openPosition<77) throw; //case : array not full, record new member else if (openPosition!=999) investors[openPosition]=Investor(msg.sender, now); //case : array full else { throw; } } //already a member else { netInvest=msg.value; //is already above the max balance allowed or is sending // too much refuse additional invest if (balance[msg.sender]+msg.value>setting_maxInvestment) { throw; } // this additionnal amount should be of at least 1/5 of "setting_minInvestment" (vs spam) if (msg.value<setting_minInvestment/5) throw; } // add to balance of member and to bankroll // 10% of initial 77 VIP members investment is allocated to // game developement provider chosen by Rouleth DAO // 90% to bankroll //share that will be allocated to game dev uint256 developmentAllocation; developmentAllocation=10*netInvest/100; netInvest-=developmentAllocation; //send game development allocation to Rouleth DAO or tech provider if (developer.send(developmentAllocation)==false) throw; // Apply extra entry fee once casino has been opened to extra members // that fee will be shared between the VIP members and represents the increment of // market value of their shares in Rouleth to outsiders // warning if a VIP adds to its initial invest after the casino has been opened to // extra members he will pay have to pay this fee. if (setting_maxInvestors>77) { // % of extra member's investment that rewards VIP funders // Starts at 100% // is set by a vote and computed when settings are changed // to allow more investors uint256 entryExtraCost=voted_extraInvestFeesRate*netInvest/100; // add to VIP profit (to be shared by later call by dev.) profitVIP += entryExtraCost; netInvest-=entryExtraCost; } newInvest(msg.sender, msg.value, netInvest);//event log balance[msg.sender]+=netInvest; //add to balance payroll+=netInvest; //add to bankroll updateMaxBet(); //refund potential excess if (excess>0) { if (msg.sender.send(excess)==false) throw; } } //Allows to transfer your DAO account to another address //target should not be currently a DAO member of rouleth //enter twice the address to make sure you make no mistake. //this can't be reversed if you don't own the target account function transferInvestorAccount(address newInvestorAccountOwner, address newInvestorAccountOwner_confirm) noEthSent { if (newInvestorAccountOwner!=newInvestorAccountOwner_confirm) throw; if (newInvestorAccountOwner==0) throw; //retrieve investor ID uint16 investorID=999; for (uint16 k = 0; k<setting_maxInvestors; k++) { //new address cant be of a current investor if (investors[k].investor==newInvestorAccountOwner) throw; //retrieve investor id if (investors[k].investor==msg.sender) { investorID=k; } } if (investorID==999) throw; //stop if not a member else //accept and execute change of address //votes on entryFeesRate are not transfered //new address should vote again { balance[newInvestorAccountOwner]=balance[msg.sender]; balance[msg.sender]=0; investors[investorID].investor=newInvestorAccountOwner; } } //***// Withdraw function (only after lockPeriod) // input : amount to withdraw in Wei (leave empty for full withdraw) // if your withdraw brings your balance under the min required, // your balance is fully withdrawn event withdraw(address player, uint withdraw_v); function withdrawInvestment(uint256 amountToWithdrawInWei) noEthSent { //vs spam withdraw min 1/10 of min if (amountToWithdrawInWei!=0 && amountToWithdrawInWei<setting_minInvestment/10) throw; //before withdraw, update balances with the Profit and Loss sinceChange updateBalances(); //check that amount requested is authorized if (amountToWithdrawInWei>balance[msg.sender]) throw; //retrieve member ID uint16 investorID=999; for (uint16 k = 0; k<setting_maxInvestors; k++) { if (investors[k].investor==msg.sender) { investorID=k; break; } } if (investorID==999) throw; //stop if not a member //check if investment lock period is over if (investors[investorID].time+setting_lockPeriod>now) throw; //if balance left after withdraw is still above min accept partial withdraw if (balance[msg.sender]-amountToWithdrawInWei>=setting_minInvestment && amountToWithdrawInWei!=0) { balance[msg.sender]-=amountToWithdrawInWei; payroll-=amountToWithdrawInWei; //send amount to investor (with security if transaction fails) if (msg.sender.send(amountToWithdrawInWei)==false) throw; withdraw(msg.sender, amountToWithdrawInWei); } else //if amountToWithdraw=0 : user wants full withdraw //if balance after withdraw is < min invest, withdraw all and delete member { //send amount to member (with security if transaction fails) uint256 fullAmount=balance[msg.sender]; payroll-=fullAmount; balance[msg.sender]=0; //delete member delete investors[investorID]; if (msg.sender.send(fullAmount)==false) throw; withdraw(msg.sender, fullAmount); } updateMaxBet(); } //***// updates balances with Profit Losses when there is a withdraw/deposit // can be called by dev for accounting when there are no more changes function manualUpdateBalances_only_Dev() noEthSent onlyDeveloper { updateBalances(); } function updateBalances() private { //split Profits uint256 profitToSplit; uint256 lossToSplit; if (profitSinceChange==0 && lossSinceChange==0) { return; } else { // Case : Global profit (more win than losses) // 20% fees for game development on global profit (if profit>loss) if (profitSinceChange>lossSinceChange) { profitToSplit=profitSinceChange-lossSinceChange; uint256 developerFees=profitToSplit*20/100; profitToSplit-=developerFees; if (developer.send(developerFees)==false) throw; } else { lossToSplit=lossSinceChange-profitSinceChange; } //share the loss and profits between all DAO members //(proportionnaly. to each one's balance) uint totalShared; for (uint16 k=0; k<setting_maxInvestors; k++) { address inv=investors[k].investor; if (inv==0) continue; else { if (profitToSplit!=0) { uint profitShare=(profitToSplit*balance[inv])/payroll; balance[inv]+=profitShare; totalShared+=profitShare; } else if (lossToSplit!=0) { uint lossShare=(lossToSplit*balance[inv])/payroll; balance[inv]-=lossShare; totalShared+=lossShare; } } } // update bankroll // and handle potential very small left overs from integer div. if (profitToSplit !=0) { payroll+=profitToSplit; balance[developer]+=profitToSplit-totalShared; } else if (lossToSplit !=0) { payroll-=lossToSplit; balance[developer]-=lossToSplit-totalShared; } profitSinceChange=0; //reset Profit; lossSinceChange=0; //reset Loss ; } } //VIP Voting on Extra Invest Fees Rate //mapping records 100 - vote mapping (address=>uint) hundredminus_extraInvestFeesRate; // max fee is 99% // a fee of 100% indicates that the VIP has never voted. function voteOnNewEntryFees_only_VIP(uint8 extraInvestFeesRate_0_to_99) noEthSent { if (extraInvestFeesRate_0_to_99<1 || extraInvestFeesRate_0_to_99>99) throw; hundredminus_extraInvestFeesRate[msg.sender]=100-extraInvestFeesRate_0_to_99; } uint256 payrollVIP; uint256 voted_extraInvestFeesRate; function computeResultVoteExtraInvestFeesRate() private { payrollVIP=0; voted_extraInvestFeesRate=0; //compute total payroll of the VIPs //compute vote results among VIPs for (uint8 k=0; k<77; k++) { if (investors[k].investor==0) continue; else { //don't count vote if the VIP never voted if (hundredminus_extraInvestFeesRate[investors[k].investor]==0) continue; else { payrollVIP+=balance[investors[k].investor]; voted_extraInvestFeesRate+=hundredminus_extraInvestFeesRate[investors[k].investor]*balance[investors[k].investor]; } } } //compute final result if (payrollVIP!=0) { voted_extraInvestFeesRate=100-voted_extraInvestFeesRate/payrollVIP; } } //Split the profits of the VIP members on extra members' contribution uint profitVIP; function splitProfitVIP_only_Dev() noEthSent onlyDeveloper { payrollVIP=0; //compute total payroll of the VIPs for (uint8 k=0; k<77; k++) { if (investors[k].investor==0) continue; else { payrollVIP+=balance[investors[k].investor]; } } //split the profits of the VIP members on extra member's contribution uint totalSplit; for (uint8 i=0; i<77; i++) { if (investors[i].investor==0) continue; else { uint toSplit=balance[investors[i].investor]*profitVIP/payrollVIP; balance[investors[i].investor]+=toSplit; totalSplit+=toSplit; } } //take care of Integer Div remainders, and add to bankroll balance[developer]+=profitVIP-totalSplit; payroll+=profitVIP; //reset var profitVIP profitVIP=0; } //INFORMATION FUNCTIONS function checkProfitLossSinceInvestorChange() constant returns(uint profit_since_update_balances, uint loss_since_update_balances, uint profit_VIP_since_update_balances) { profit_since_update_balances=profitSinceChange; loss_since_update_balances=lossSinceChange; profit_VIP_since_update_balances=profitVIP; return; } function checkInvestorBalance(address investor) constant returns(uint balanceInWei) { balanceInWei=balance[investor]; return; } function getInvestorList(uint index) constant returns(address investor, uint endLockPeriod) { investor=investors[index].investor; endLockPeriod=investors[index].time+setting_lockPeriod; return; } function investmentEntryInfos() constant returns(uint current_max_nb_of_investors, uint investLockPeriod, uint voted_Fees_Rate_on_extra_investments) { investLockPeriod=setting_lockPeriod; voted_Fees_Rate_on_extra_investments=voted_extraInvestFeesRate; current_max_nb_of_investors=setting_maxInvestors; return; } function getSettings() constant returns(uint maxBet, uint8 blockDelayBeforeSpin) { maxBet=currentMaxGamble; blockDelayBeforeSpin=blockDelay; return ; } function getTotalGambles() constant returns(uint _totalGambles) { _totalGambles=totalGambles; return ; } function getPayroll() constant returns(uint payroll_at_last_update_balances) { payroll_at_last_update_balances=payroll; return ; } function checkMyBet(address player) constant returns(Status player_status, BetTypes bettype, uint8 input, uint value, uint8 result, bool wheelspinned, bool win, uint blockNb, uint blockSpin, uint gambleID) { player_status=playerStatus[player]; bettype=gambles[gambleIndex[player]].betType; input=gambles[gambleIndex[player]].input; value=gambles[gambleIndex[player]].wager; result=gambles[gambleIndex[player]].wheelResult; wheelspinned=gambles[gambleIndex[player]].spinned; win=gambles[gambleIndex[player]].win; blockNb=gambles[gambleIndex[player]].blockNumber; blockSpin=gambles[gambleIndex[player]].blockSpinned; gambleID=gambleIndex[player]; return; } function getGamblesList(uint256 index) constant returns(address player, BetTypes bettype, uint8 input, uint value, uint8 result, bool wheelspinned, bool win, uint blockNb, uint blockSpin) { player=gambles[index].player; bettype=gambles[index].betType; input=gambles[index].input; value=gambles[index].wager; result=gambles[index].wheelResult; wheelspinned=gambles[index].spinned; win=gambles[index].win; blockNb=gambles[index].blockNumber; blockSpin=gambles[index].blockSpinned; return; } } //end of contract
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setNickname","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"amountToWithdrawInWei","type":"uint256"}],"name":"withdrawInvestment","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"manualUpdateBalances_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"checkProfitLossSinceInvestorChange","outputs":[{"name":"profit_since_update_balances","type":"uint256"},{"name":"loss_since_update_balances","type":"uint256"},{"name":"profit_VIP_since_update_balances","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"extraInvestFeesRate_0_to_99","type":"uint8"}],"name":"voteOnNewEntryFees_only_VIP","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newInvestorAccountOwner","type":"address"},{"name":"newInvestorAccountOwner_confirm","type":"address"}],"name":"transferInvestorAccount","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"getTotalGambles","outputs":[{"name":"_totalGambles","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"disableBetting_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"Red","type":"bool"},{"name":"Black","type":"bool"}],"name":"betOnColor","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"investmentEntryInfos","outputs":[{"name":"current_max_nb_of_investors","type":"uint256"},{"name":"investLockPeriod","type":"uint256"},{"name":"voted_Fees_Rate_on_extra_investments","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"}],"name":"checkMyBet","outputs":[{"name":"player_status","type":"uint8"},{"name":"bettype","type":"uint8"},{"name":"input","type":"uint8"},{"name":"value","type":"uint256"},{"name":"result","type":"uint8"},{"name":"wheelspinned","type":"bool"},{"name":"win","type":"bool"},{"name":"blockNb","type":"uint256"},{"name":"blockSpin","type":"uint256"},{"name":"gambleID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getInvestorList","outputs":[{"name":"investor","type":"address"},{"name":"endLockPeriod","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"enableBetting_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"new_dev","type":"address"}],"name":"changeDeveloper_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"getSettings","outputs":[{"name":"maxBet","type":"uint256"},{"name":"blockDelayBeforeSpin","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"getPayroll","outputs":[{"name":"payroll_at_last_update_balances","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getNickname","outputs":[{"name":"_name","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"Low","type":"bool"},{"name":"High","type":"bool"}],"name":"betOnLowHigh","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"numberChosen","type":"uint8"}],"name":"betOnNumber","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"Odd","type":"bool"},{"name":"Even","type":"bool"}],"name":"betOnOddEven","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"splitProfitVIP_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getGamblesList","outputs":[{"name":"player","type":"address"},{"name":"bettype","type":"uint8"},{"name":"input","type":"uint8"},{"name":"value","type":"uint256"},{"name":"result","type":"uint8"},{"name":"wheelspinned","type":"bool"},{"name":"win","type":"bool"},{"name":"blockNb","type":"uint256"},{"name":"blockSpin","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"First","type":"bool"},{"name":"Second","type":"bool"},{"name":"Third","type":"bool"}],"name":"betOnDozen","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newCasinoStatLimit","type":"uint256"},{"name":"newMaxBetsBlock","type":"uint256"},{"name":"newMinGamble","type":"uint256"},{"name":"newMaxGamble","type":"uint256"},{"name":"newMaxInvestor","type":"uint16"},{"name":"newMinInvestment","type":"uint256"},{"name":"newMaxInvestment","type":"uint256"},{"name":"newLockPeriod","type":"uint256"},{"name":"newBlockDelay","type":"uint8"},{"name":"newBlockExpiration","type":"uint8"}],"name":"changeSettings_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"First","type":"bool"},{"name":"Second","type":"bool"},{"name":"Third","type":"bool"}],"name":"betOnColumn","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"spin_for_player","type":"address"}],"name":"spinTheWheel","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"invest","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"checkInvestorBalance","outputs":[{"name":"balanceInWei","type":"uint256"}],"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"result","type":"uint8"},{"indexed":false,"name":"value_won","type":"uint256"},{"indexed":false,"name":"bHash","type":"bytes32"},{"indexed":false,"name":"sha3Player","type":"bytes32"},{"indexed":false,"name":"gambleId","type":"uint256"}],"name":"Win","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"result","type":"uint8"},{"indexed":false,"name":"value_loss","type":"uint256"},{"indexed":false,"name":"bHash","type":"bytes32"},{"indexed":false,"name":"sha3Player","type":"bytes32"},{"indexed":false,"name":"gambleId","type":"uint256"}],"name":"Loss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"invest_v","type":"uint256"},{"indexed":false,"name":"net_invest_v","type":"uint256"}],"name":"newInvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"withdraw_v","type":"uint256"}],"name":"withdraw","type":"event"}]
Contract Creation Code
6102a06040819052600160609081526003608052600560a052600760c052600960e052600c61010052600e6101205260106101405260126101605260136101805260156101a05260176101c05260196101e052601b61020052601e61022052602061024052602261026052602461028052600d91601f919083905b8281111561009857825182600050559160200191906001019061007a565b506100b49291505b8082111561017657600081556001016100a0565b5050610634805461ffff1916604d17905562278d006106365568056bc75e2d6310000061063755680ad78ebc5ac6200000610638556000805475c800000000000000000000000000000000000000000060a860020a60ff021960a060020a60ff0219600160a060020a031990931633179290921674010000000000000000000000000000000000000000179190911617905566b1a2bc2ec500006002556706f05b59d3b2000060015560056003819055606490556129108061017a6000396000f35b509056606060405236156101485760e060020a60003504631c5d9faa81146101575780632037fcbf146101aa578063266710ca146101c45780632c6b2c92146101d55780632e0ef395146101e857806333ce7787146101fc578063402e623014610217578063580bdf3c146102215780635b7d47a9146102325780636ad50ed4146102545780636e1b6bcc146102705780636ed43eb01461042c578063750cae6a1461047a5780637c9cd7df1461048b57806385b4bb531461049f578063942385eb146104c5578063adaccd74146104d0578063adf54e0c1461054f578063b400d14914610570578063b738169c14610589578063bb84d362146105aa578063bcb3b5d2146105c3578063bfe8c1071461077f578063c7144269146107ac578063e548cf13146107dd578063e56c8552146107f6578063e8b5e51f1461080a578063f7ae94211461084f575b6108746108dc6001600061023c565b6040805160206004803580820135601f81018490048402850184019095528484526108749491936024939092918401919081908401838280828437509496505050505050506000341115610b2257610002565b6108746004356000600060006000341115610bf957610002565b6108746000341115610e3457610002565b6108de60205460215461063c545b909192565b6108746004356000341115610e5857610002565b610874600435602435600060006000341115610e9d57610002565b6108fc6008545b90565b6108746000341115610fc557610002565b6108746004356024355b600b54600090819060ff1660011415610a5a57610002565b6108de6106345461063b546106365461ffff90921691906101e3565b61090e600435600160a060020a0381166000908152600a602090815260408083205460099092528220546007805460ff9390931693928392839283928392839283928392839291811015610002578154600582026000805160206128f0833981519152015460b060020a900460ff169b50811015610002578154600582026000805160206128f0833981519152015460b860020a900460ff169a50811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901549950811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c015460ff169850811015610002578154600582026000805160206128f0833981519152015460a060020a900460ff169750811015610002578154600582026000805160206128f0833981519152015460a860020a900460ff169650811015610002578154600582026000805160206128d08339815191520154955081101561000257600581027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549b9d9a9c50989a979996989597949693959392505050565b61096960043560008060228361030981101561000257506106365460028502820154600160a060020a0316935090846103098110156100025790906002020160005060010154019050915091565b6108746000341115610ff057610002565b610874600435600034111561101857610002565b60005460408051600654815260a060020a90920460ff1660208301528051918290030190f35b6108fc601f5461021e565b61098f60043560408051602081810183526000808352600160a060020a0385168152600c8252835190849020805460026001821615610100026000190190911604601f810184900484028301840190955284825292939092918301828280156110745780601f1061104957610100808354040283529160200191611074565b610874600435602435600b54600090819060ff166001141561108257610002565b610874600435600b5460ff166001141561111d57610002565b610874600435602435600b54600090819060ff166001141561119e57610002565b6108746000600060006000600034111561123957610002565b6109fd60043560006000600060006000600060006000600060076000508a8154811015610002578154828452600582026000805160206128f08339815191520154600160a060020a03169b50811015610002579060005260206000209060050201600050546007805460b060020a90920460ff169950908b90811015610002579060005260206000209060050201600050546007805460b860020a90920460ff169850908b9081101561000257906000526020600020906005020160005060078054600192909201549750908b90811015610002579060005260206000209060050201600050600780546004929092015460ff169650908b90811015610002579060005260206000209060050201600050546007805460a060020a90920460ff169550908b90811015610002579060005260206000209060050201600050546007805460a860020a90920460ff169450908b908110156100025790600052602060002090600502016000506002015460078054919350908b90811015610002575050506005989098027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549698959794969395929491939092565b610874600435602435604435610bbf83838360035b600b54600090819060ff1660011415611c4457610002565b61087460043560243560443560643560843560a43560c43560e435610104356101243560003411156113d857610002565b610874600435602435604435610bbf8383836004610794565b610874600435600034111561158d57610002565b61087460006000600060006000600060006115d85b600060006000600060006000600060006020600050546000148015610845575060215481145b15611a7e57611b19565b6108fc600435600160a060020a0381166000908152610635602052604090205461107d565b005b60408051600160a060020a03331681526020810183905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a15b610b1c5b600154600554601f54602390910290041115611c31576001546006555b565b60408051938452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519a8b5260208b019990995260ff9788168a8a015260608a019690965293909516608088015290151560a0870152151560c086015260e085019290925261010084019190915261012083015251908190036101400190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156109ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051600160a060020a039a909a168a5260208a019890985260ff968716898901526060890195909552929094166080870152151560a086015291151560c085015260e084019190915261010083015251908190036101200190f35b600754600014801590610a96575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15610aa957600480546001019055610aaf565b60006004555b60035460045410610abf57610002565b8315610acc575060010160005b8215610ada57506001908101905b60ff8216600114610aea57610002565b610b1c6001825b600160a060020a0333166000908152600a602052604081205460ff1681146118815761188133611592565b50505050565b6002815110158015610b365750601e815111155b15610bc25780600c600050600033600160a060020a031681526020019081526020016000206000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610bc557805160ff19168380011785555b50610bbf9291505b80821115610bf55760008155600101610bab565b50505b50565b82800160010185558215610ba3579182015b82811115610ba3578251826000505591602001919060010190610bd7565b5090565b83600014158015610c10575061063754600a900484105b15610c1a57610002565b610c2261081f565b600160a060020a03331660009081526106356020526040902054841115610c4857610002565b6103e79250600091505b6106345461ffff9081169083161015610c9a57600160a060020a033316602261ffff8416610309811015610002576002020154600160a060020a03161415610cad5781925082505b8261ffff166103e71415610cb957610002565b60019190910190610c52565b610636544290602261ffff8616610309811015610002576002020160005060010154011115610ce757610002565b61063754600160a060020a0333166000908152610635602052604090205485900310801590610d17575083600014155b15610d6557600160a060020a0333166000818152610635602052604080822080548890039055601f8054889003905551869082818181858883f11515909214159250610deb91505057610002565b50600160a060020a0333166000908152610635602052604081208054601f80548290039055919055602261ffff841661030981101561000257600202016000508054600160a060020a03191681556000600191909101819055604051600160a060020a0333169190839082818181858883f1151590921415925061087691505057610002565b60408051600160a060020a03331681526020810186905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a16108bb565b600054600160a060020a039081163390911614610e5057610002565b6108dc61081f565b60018160ff161080610e6d575060638160ff16115b15610e7757610002565b600160a060020a033316600090815261063960205260409020606482900360ff16905550565b600160a060020a0384811690841614610eb557610002565b83600160a060020a031660001415610ecc57610002565b506103e7905060005b6106345461ffff9081169082161015610f1c57600160a060020a038416602261ffff8316610309811015610002576002020154600160a060020a03161415610f2f57610002565b8161ffff166103e71415610f6a57610002565b600160a060020a033316602261ffff8316610309811015610002576002020154600160a060020a03161415610f62579050805b600101610ed5565b600160a060020a03338116600081815261063560205260408082208054948916835290822093909355908152905583602261ffff841661030981101561000257600202018054600160a060020a031916909117905550505050565b600054600160a060020a039081163390911614610fe157610002565b600b805460ff19166001179055565b600054600160a060020a03908116339091161461100c57610002565b600b805460ff19169055565b600054600160a060020a03908116339091161461103457610002565b60008054600160a060020a0319168217905550565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b50939450505050505b919050565b6007546000148015906110be575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156110d1576004805460010190556110d7565b60006004555b600354600454106110e757610002565b83156110f4575060010160005b821561110257506001908101905b60ff821660011461111257610002565b610b1c600582610af1565b600754600014801590611159575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b1561116c57600480546001019055611172565b60006004555b6003546004541061118257610002565b60248160ff16111561119357610002565b610bc2600082610af1565b6007546000148015906111da575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156111ed576004805460010190556111f3565b60006004555b6003546004541061120357610002565b8215611210575060010160005b831561121e57506001908101905b60ff821660011461122e57610002565b610b1c600282610af1565b600054600160a060020a03908116339091161461125557610002565b600061063a81905593505b604d8460ff16101561129757602260ff8516610309811015610002576002020154600160a060020a0316600014156112d35761130e565b600091505b604d8260ff16101561131a57602260ff8316610309811015610002576002020154600160a060020a031660001415611355576113cc565b6106356000602260ff8716610309811015610002576002020154600160a060020a03168152602091909152604090205461063a805490910190555b60019390930192611260565b61063c805460008054600160a060020a0316815261063560205260408120805492879003909201909155601f80548354019055905550505050565b61063a5461063c546106356000602260ff871661030981101561000257600202810154600160a060020a0316825260208390526040822054939093029390930493508392909160ff8616610309811015610002576002020154600160a060020a031681526040902080549290920190915550918201915b6001919091019061129c565b600054600160a060020a0390811633909116146113f457610002565b60648a101561140257610002565b60058a905560038990558787101561141957610002565b6001879055600088101561142c57610002565b60028890556106345461ffff80881691161480159061144f57506007546161a890105b1561145957610002565b6106345461ffff9081169087161080611477575061030961ffff8716115b1561148157610002565b610634805461ffff1916871790556114d8600061063a81905561063b8190555b604d8160ff161015611cf357602260ff8216610309811015610002576002020154600160a060020a031660001415611d1357611de7565b848410156114e557610002565b610637859055610638849055610636546301da9c0090111561150657610002565b6106368390556000805474ff0000000000000000000000000000000000000000191660a060020a8481029190911791829055900460ff9081166014018116908216101561155257610002565b6000805475ff000000000000000000000000000000000000000000191660a860020a83021790556115816108bf565b50505050505050505050565b610bc2815b600060006000600084600160a060020a0316600014156115b0573394505b600160a060020a0385166000908152600a602052604090205460ff16600114611def57610002565b6103e79450600092505b6106345461ffff908116908416101561166257602261ffff8416610309811015610002576002020154600160a060020a03166000141561162e5782945084505b600192909201916115e2565b600160a060020a033316602261ffff8516610309811015610002576002020154600160a060020a0316141561162257600193505b83151561167957610637543410156116a757610002565b61063854600160a060020a033316600090815261063560205260409020543498508801111561178557610002565b610638543411156116c3576106385496503487900395506116c7565b3496505b61063454604d61ffff9091161180156116e45750604d8561ffff16105b156116ee57610002565b6103e761ffff8616146117805760408051808201909152338152426020820152602261ffff8716610309811015610002576002029081018054600160a060020a031916331790554260239190910155505b600080546040516064600a8b0204998a9003999450600160a060020a03919091169190849082818181858883f1151590921415925061179991505057610002565b610002565b610637546005900434101561173f57610002565b61063454604d61ffff90911611156117c9575061063b5461063c8054606492890292909204918201905595869003955b60408051600160a060020a033316815234602082015280820189905290517f7acd04125f685c90097481d254317c7cd6b69a6c8eb0d0eb375f6a98ad2687329181900360600190a1600160a060020a033316600090815261063560205260409020805488019055601f8054880190556118406108bf565b600086111561187857604051600160a060020a03331690600090889082818181858883f1151590921415925061187891505057610002565b50505050505050565b600160a060020a0333166000908152600a60209081526040808320805460ff1916600190811790915560075460099093529220556008805490910190556118d360025460009034101561228757610002565b9050600760005080548060010182818154818355818115116119645760008390526119649060059081026000805160206128f0833981519152908101918402015b80821115610bf557805477ffffffffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201819055600382015560048101805460ff19169055600501611914565b5050506000928352506040805160208085206101208301845233808452918301869052928201859052606082018890526080820187905260a082018690524360c0830181905260e083018690526025610100939093018390526005949094029092018054600160a060020a03191690921776ffffff0000000000000000000000000000000000000000191660b060020a88021777ff0000000000000000000000000000000000000000000000191660b860020a87021782556001820185905560028201929092556003810192909255600491909101805460ff1916909117905534811015610bbf57604051600160a060020a03331690600090348490039082818181858883f11515909214159250610bbf91505057610002565b602054602154901115611b2357602054602154600080546040516064939094036014810293909304928390039b50919850600160a060020a039190911691889082818181858883f11515909214159250611b7491505057610002565b60008714611b0e57601f8054889003905560008054600160a060020a03168152610635602052604090208054868903900390555b600060208190556021555b5050505050505050565b6020546021540396505b600093505b6106345461ffff9081169085161015611b7957602261ffff8516610309811015610002576002020154600160a060020a031692506000831415611baf57611c25565b611b2d565b60008814611ada57601f80548901905560008054600160a060020a03168152610635602052604090208054868a03019055611b0e565b60008814611bec57601f54600160a060020a03841660009081526106356020526040902080548a8102929092049182019055948501949150611c25565b60008714611c255750601f54600160a060020a038316600090815261063560205260409020805480890292909204918290039055938401935b60019390930192611b32565b600554601f546023919091029004600655565b600754600014801590611c80575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15611c9357600480546001019055611c99565b60006004555b60035460045410611ca957610002565b8515611cb6575060010160005b8415611cc457506001908101905b8315611cd1575060010160025b60ff8216600114611ce157610002565b611ceb8382610af1565b505050505050565b61063a54600014610bc25761063a5461063b805491909104606403905550565b6106396000602260ff8416610309811015610002576002020154600160a060020a0316815260209190915260408120541415611d4e57611de7565b6106356000602260ff841661030981101561000257600202810154600160a060020a03168252602083905261063a8054604084205401905560ff841661030981101561000257600202810154600160a060020a0316825260408220549250610639919060ff8516610309811015610002576002020154600160a060020a03168152602091909152604090205461063b8054919092020190555b6001016114a1565b600160a060020a03851660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460a060020a900460ff16151560011415611e4957610002565b600160a060020a0385166000908152600960205260409020546007805490919081101561000257600091825290546005919091026000805160206128d08339815191520154945060a060020a900460ff1684014311611ea757610002565b60005460a860020a900460ff168401431115611ece57611eed8560ff600060018180611fe9565b6000805460a060020a900460ff168501409250821415611ef457610002565b5050505050565b5060408051600160a060020a0386166c01000000000000000000000000028152601481018390529051908190036034019020602581069250611eed83868484600160a060020a0383166000908152600960205260078054604083205490811015610002579082526005026000805160206128f0833981519152015460b060020a900460ff1690811415612357576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460ff86811660b860020a909204161415611fde575060015b611eed848683602487875b600160a060020a0386166000908152600a60209081526040808320805460ff191690556009909152600780549183205483928992919081101561000257604084206005919091027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c01805460ff191693909317909255600160a060020a038a168352805491546001928110156100025760009182526005026000805160206128f0833981519152019050805460a060020a9290920274ff00000000000000000000000000000000000000001992909216919091179055600160a060020a038816600090815260096020526040902054600780544392908110156100025760009182526005026000805160206128f083398151915201905060030155600160a060020a03881660009081526009602052604090205460078054909190811015610002579082526005027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6890154915085156122a257600160a060020a03881660009081526009602052604090205460078054600192908110156100025760009182526005026000805160206128f0833981519152019050805460a860020a9290920275ff00000000000000000000000000000000000000000019929092169190911790555060218054600019860160ff9081168402918201909255600160a060020a038916600081815260096020908152604091829020548251938452948b1690830152818101839052606082018790526080820186905260a0820193909352915190917f2d405b4396de541fd8b7448de00c152385ac44ad14f9eb281de4262f1243a735919081900360c00190a1604051600160a060020a038916906000908385019082818181858883f1151590921415925061235291505057610002565b60065434111561229a575060065461229d565b50345b61021e565b600160a060020a03881660008181526009602090815260409182902054825193845260ff8b1691840191909152600019850183830152606083018790526080830186905260a0830152517f48156d9ccd5f1a9d70cfcbc377888e2b2b5d40f87ce4e3d83708a065a50743d99181900360c00190a1604051602080548401600019019055600160a060020a0389169060009060019082818181858883f11515909214159250611b1991505057610002565b611b19565b60028114156123ec576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f08339815191520154600260ff87811691909106811660b860020a909204161480156123cc57508460ff16600014155b156123d5575060015b611eed84868360028787611fe9565b611eed6108bf565b600181141561250b576123e4858585856000600060005b60128260ff161015612432578660ff16600d6000508360ff16601281101561000257015414156128c457600192505b8660ff166000141580156124f35750600160a060020a038616600090815260096020526040902054600780549091908110156100025760009182526005026000805160206128f0833981519152015460b860020a900460ff161480156124955750825b806124f35750600160a060020a03861660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff1660011480156124f3575082155b156124fc575060015b61187886888360028989611fe9565b60058114156125fb576123e48585858560008460ff166000141580156123cc575060138560ff161080156125825750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806123cc575060128560ff161180156123cc5750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff16600114156123d557506001611eed84868360028787611fe9565b600381141561275f576123e48585858560008460ff166000141580156127475750600d8560ff161080156126725750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806126e45750600c8560ff1611801561268e575060198560ff16105b80156126e45750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001145b80612747575060188560ff161180156127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002145b15612750575060015b611eed84868360038787611fe9565b60048114156123e4576123e48585858560008460ff166000141580156127475750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff16811480156127dc575060038560ff160660ff166001145b806128455750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001148015612845575060038560ff160660ff166002145b806127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002148015612747575060038560ff160660ff166000141561275057506001611eed84868360038787611fe9565b6001919091019061240356a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68aa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688
Deployed Bytecode
0x606060405236156101485760e060020a60003504631c5d9faa81146101575780632037fcbf146101aa578063266710ca146101c45780632c6b2c92146101d55780632e0ef395146101e857806333ce7787146101fc578063402e623014610217578063580bdf3c146102215780635b7d47a9146102325780636ad50ed4146102545780636e1b6bcc146102705780636ed43eb01461042c578063750cae6a1461047a5780637c9cd7df1461048b57806385b4bb531461049f578063942385eb146104c5578063adaccd74146104d0578063adf54e0c1461054f578063b400d14914610570578063b738169c14610589578063bb84d362146105aa578063bcb3b5d2146105c3578063bfe8c1071461077f578063c7144269146107ac578063e548cf13146107dd578063e56c8552146107f6578063e8b5e51f1461080a578063f7ae94211461084f575b6108746108dc6001600061023c565b6040805160206004803580820135601f81018490048402850184019095528484526108749491936024939092918401919081908401838280828437509496505050505050506000341115610b2257610002565b6108746004356000600060006000341115610bf957610002565b6108746000341115610e3457610002565b6108de60205460215461063c545b909192565b6108746004356000341115610e5857610002565b610874600435602435600060006000341115610e9d57610002565b6108fc6008545b90565b6108746000341115610fc557610002565b6108746004356024355b600b54600090819060ff1660011415610a5a57610002565b6108de6106345461063b546106365461ffff90921691906101e3565b61090e600435600160a060020a0381166000908152600a602090815260408083205460099092528220546007805460ff9390931693928392839283928392839283928392839291811015610002578154600582026000805160206128f0833981519152015460b060020a900460ff169b50811015610002578154600582026000805160206128f0833981519152015460b860020a900460ff169a50811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901549950811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c015460ff169850811015610002578154600582026000805160206128f0833981519152015460a060020a900460ff169750811015610002578154600582026000805160206128f0833981519152015460a860020a900460ff169650811015610002578154600582026000805160206128d08339815191520154955081101561000257600581027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549b9d9a9c50989a979996989597949693959392505050565b61096960043560008060228361030981101561000257506106365460028502820154600160a060020a0316935090846103098110156100025790906002020160005060010154019050915091565b6108746000341115610ff057610002565b610874600435600034111561101857610002565b60005460408051600654815260a060020a90920460ff1660208301528051918290030190f35b6108fc601f5461021e565b61098f60043560408051602081810183526000808352600160a060020a0385168152600c8252835190849020805460026001821615610100026000190190911604601f810184900484028301840190955284825292939092918301828280156110745780601f1061104957610100808354040283529160200191611074565b610874600435602435600b54600090819060ff166001141561108257610002565b610874600435600b5460ff166001141561111d57610002565b610874600435602435600b54600090819060ff166001141561119e57610002565b6108746000600060006000600034111561123957610002565b6109fd60043560006000600060006000600060006000600060076000508a8154811015610002578154828452600582026000805160206128f08339815191520154600160a060020a03169b50811015610002579060005260206000209060050201600050546007805460b060020a90920460ff169950908b90811015610002579060005260206000209060050201600050546007805460b860020a90920460ff169850908b9081101561000257906000526020600020906005020160005060078054600192909201549750908b90811015610002579060005260206000209060050201600050600780546004929092015460ff169650908b90811015610002579060005260206000209060050201600050546007805460a060020a90920460ff169550908b90811015610002579060005260206000209060050201600050546007805460a860020a90920460ff169450908b908110156100025790600052602060002090600502016000506002015460078054919350908b90811015610002575050506005989098027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549698959794969395929491939092565b610874600435602435604435610bbf83838360035b600b54600090819060ff1660011415611c4457610002565b61087460043560243560443560643560843560a43560c43560e435610104356101243560003411156113d857610002565b610874600435602435604435610bbf8383836004610794565b610874600435600034111561158d57610002565b61087460006000600060006000600060006115d85b600060006000600060006000600060006020600050546000148015610845575060215481145b15611a7e57611b19565b6108fc600435600160a060020a0381166000908152610635602052604090205461107d565b005b60408051600160a060020a03331681526020810183905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a15b610b1c5b600154600554601f54602390910290041115611c31576001546006555b565b60408051938452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519a8b5260208b019990995260ff9788168a8a015260608a019690965293909516608088015290151560a0870152151560c086015260e085019290925261010084019190915261012083015251908190036101400190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156109ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051600160a060020a039a909a168a5260208a019890985260ff968716898901526060890195909552929094166080870152151560a086015291151560c085015260e084019190915261010083015251908190036101200190f35b600754600014801590610a96575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15610aa957600480546001019055610aaf565b60006004555b60035460045410610abf57610002565b8315610acc575060010160005b8215610ada57506001908101905b60ff8216600114610aea57610002565b610b1c6001825b600160a060020a0333166000908152600a602052604081205460ff1681146118815761188133611592565b50505050565b6002815110158015610b365750601e815111155b15610bc25780600c600050600033600160a060020a031681526020019081526020016000206000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610bc557805160ff19168380011785555b50610bbf9291505b80821115610bf55760008155600101610bab565b50505b50565b82800160010185558215610ba3579182015b82811115610ba3578251826000505591602001919060010190610bd7565b5090565b83600014158015610c10575061063754600a900484105b15610c1a57610002565b610c2261081f565b600160a060020a03331660009081526106356020526040902054841115610c4857610002565b6103e79250600091505b6106345461ffff9081169083161015610c9a57600160a060020a033316602261ffff8416610309811015610002576002020154600160a060020a03161415610cad5781925082505b8261ffff166103e71415610cb957610002565b60019190910190610c52565b610636544290602261ffff8616610309811015610002576002020160005060010154011115610ce757610002565b61063754600160a060020a0333166000908152610635602052604090205485900310801590610d17575083600014155b15610d6557600160a060020a0333166000818152610635602052604080822080548890039055601f8054889003905551869082818181858883f11515909214159250610deb91505057610002565b50600160a060020a0333166000908152610635602052604081208054601f80548290039055919055602261ffff841661030981101561000257600202016000508054600160a060020a03191681556000600191909101819055604051600160a060020a0333169190839082818181858883f1151590921415925061087691505057610002565b60408051600160a060020a03331681526020810186905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a16108bb565b600054600160a060020a039081163390911614610e5057610002565b6108dc61081f565b60018160ff161080610e6d575060638160ff16115b15610e7757610002565b600160a060020a033316600090815261063960205260409020606482900360ff16905550565b600160a060020a0384811690841614610eb557610002565b83600160a060020a031660001415610ecc57610002565b506103e7905060005b6106345461ffff9081169082161015610f1c57600160a060020a038416602261ffff8316610309811015610002576002020154600160a060020a03161415610f2f57610002565b8161ffff166103e71415610f6a57610002565b600160a060020a033316602261ffff8316610309811015610002576002020154600160a060020a03161415610f62579050805b600101610ed5565b600160a060020a03338116600081815261063560205260408082208054948916835290822093909355908152905583602261ffff841661030981101561000257600202018054600160a060020a031916909117905550505050565b600054600160a060020a039081163390911614610fe157610002565b600b805460ff19166001179055565b600054600160a060020a03908116339091161461100c57610002565b600b805460ff19169055565b600054600160a060020a03908116339091161461103457610002565b60008054600160a060020a0319168217905550565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b50939450505050505b919050565b6007546000148015906110be575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156110d1576004805460010190556110d7565b60006004555b600354600454106110e757610002565b83156110f4575060010160005b821561110257506001908101905b60ff821660011461111257610002565b610b1c600582610af1565b600754600014801590611159575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b1561116c57600480546001019055611172565b60006004555b6003546004541061118257610002565b60248160ff16111561119357610002565b610bc2600082610af1565b6007546000148015906111da575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156111ed576004805460010190556111f3565b60006004555b6003546004541061120357610002565b8215611210575060010160005b831561121e57506001908101905b60ff821660011461122e57610002565b610b1c600282610af1565b600054600160a060020a03908116339091161461125557610002565b600061063a81905593505b604d8460ff16101561129757602260ff8516610309811015610002576002020154600160a060020a0316600014156112d35761130e565b600091505b604d8260ff16101561131a57602260ff8316610309811015610002576002020154600160a060020a031660001415611355576113cc565b6106356000602260ff8716610309811015610002576002020154600160a060020a03168152602091909152604090205461063a805490910190555b60019390930192611260565b61063c805460008054600160a060020a0316815261063560205260408120805492879003909201909155601f80548354019055905550505050565b61063a5461063c546106356000602260ff871661030981101561000257600202810154600160a060020a0316825260208390526040822054939093029390930493508392909160ff8616610309811015610002576002020154600160a060020a031681526040902080549290920190915550918201915b6001919091019061129c565b600054600160a060020a0390811633909116146113f457610002565b60648a101561140257610002565b60058a905560038990558787101561141957610002565b6001879055600088101561142c57610002565b60028890556106345461ffff80881691161480159061144f57506007546161a890105b1561145957610002565b6106345461ffff9081169087161080611477575061030961ffff8716115b1561148157610002565b610634805461ffff1916871790556114d8600061063a81905561063b8190555b604d8160ff161015611cf357602260ff8216610309811015610002576002020154600160a060020a031660001415611d1357611de7565b848410156114e557610002565b610637859055610638849055610636546301da9c0090111561150657610002565b6106368390556000805474ff0000000000000000000000000000000000000000191660a060020a8481029190911791829055900460ff9081166014018116908216101561155257610002565b6000805475ff000000000000000000000000000000000000000000191660a860020a83021790556115816108bf565b50505050505050505050565b610bc2815b600060006000600084600160a060020a0316600014156115b0573394505b600160a060020a0385166000908152600a602052604090205460ff16600114611def57610002565b6103e79450600092505b6106345461ffff908116908416101561166257602261ffff8416610309811015610002576002020154600160a060020a03166000141561162e5782945084505b600192909201916115e2565b600160a060020a033316602261ffff8516610309811015610002576002020154600160a060020a0316141561162257600193505b83151561167957610637543410156116a757610002565b61063854600160a060020a033316600090815261063560205260409020543498508801111561178557610002565b610638543411156116c3576106385496503487900395506116c7565b3496505b61063454604d61ffff9091161180156116e45750604d8561ffff16105b156116ee57610002565b6103e761ffff8616146117805760408051808201909152338152426020820152602261ffff8716610309811015610002576002029081018054600160a060020a031916331790554260239190910155505b600080546040516064600a8b0204998a9003999450600160a060020a03919091169190849082818181858883f1151590921415925061179991505057610002565b610002565b610637546005900434101561173f57610002565b61063454604d61ffff90911611156117c9575061063b5461063c8054606492890292909204918201905595869003955b60408051600160a060020a033316815234602082015280820189905290517f7acd04125f685c90097481d254317c7cd6b69a6c8eb0d0eb375f6a98ad2687329181900360600190a1600160a060020a033316600090815261063560205260409020805488019055601f8054880190556118406108bf565b600086111561187857604051600160a060020a03331690600090889082818181858883f1151590921415925061187891505057610002565b50505050505050565b600160a060020a0333166000908152600a60209081526040808320805460ff1916600190811790915560075460099093529220556008805490910190556118d360025460009034101561228757610002565b9050600760005080548060010182818154818355818115116119645760008390526119649060059081026000805160206128f0833981519152908101918402015b80821115610bf557805477ffffffffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201819055600382015560048101805460ff19169055600501611914565b5050506000928352506040805160208085206101208301845233808452918301869052928201859052606082018890526080820187905260a082018690524360c0830181905260e083018690526025610100939093018390526005949094029092018054600160a060020a03191690921776ffffff0000000000000000000000000000000000000000191660b060020a88021777ff0000000000000000000000000000000000000000000000191660b860020a87021782556001820185905560028201929092556003810192909255600491909101805460ff1916909117905534811015610bbf57604051600160a060020a03331690600090348490039082818181858883f11515909214159250610bbf91505057610002565b602054602154901115611b2357602054602154600080546040516064939094036014810293909304928390039b50919850600160a060020a039190911691889082818181858883f11515909214159250611b7491505057610002565b60008714611b0e57601f8054889003905560008054600160a060020a03168152610635602052604090208054868903900390555b600060208190556021555b5050505050505050565b6020546021540396505b600093505b6106345461ffff9081169085161015611b7957602261ffff8516610309811015610002576002020154600160a060020a031692506000831415611baf57611c25565b611b2d565b60008814611ada57601f80548901905560008054600160a060020a03168152610635602052604090208054868a03019055611b0e565b60008814611bec57601f54600160a060020a03841660009081526106356020526040902080548a8102929092049182019055948501949150611c25565b60008714611c255750601f54600160a060020a038316600090815261063560205260409020805480890292909204918290039055938401935b60019390930192611b32565b600554601f546023919091029004600655565b600754600014801590611c80575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15611c9357600480546001019055611c99565b60006004555b60035460045410611ca957610002565b8515611cb6575060010160005b8415611cc457506001908101905b8315611cd1575060010160025b60ff8216600114611ce157610002565b611ceb8382610af1565b505050505050565b61063a54600014610bc25761063a5461063b805491909104606403905550565b6106396000602260ff8416610309811015610002576002020154600160a060020a0316815260209190915260408120541415611d4e57611de7565b6106356000602260ff841661030981101561000257600202810154600160a060020a03168252602083905261063a8054604084205401905560ff841661030981101561000257600202810154600160a060020a0316825260408220549250610639919060ff8516610309811015610002576002020154600160a060020a03168152602091909152604090205461063b8054919092020190555b6001016114a1565b600160a060020a03851660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460a060020a900460ff16151560011415611e4957610002565b600160a060020a0385166000908152600960205260409020546007805490919081101561000257600091825290546005919091026000805160206128d08339815191520154945060a060020a900460ff1684014311611ea757610002565b60005460a860020a900460ff168401431115611ece57611eed8560ff600060018180611fe9565b6000805460a060020a900460ff168501409250821415611ef457610002565b5050505050565b5060408051600160a060020a0386166c01000000000000000000000000028152601481018390529051908190036034019020602581069250611eed83868484600160a060020a0383166000908152600960205260078054604083205490811015610002579082526005026000805160206128f0833981519152015460b060020a900460ff1690811415612357576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460ff86811660b860020a909204161415611fde575060015b611eed848683602487875b600160a060020a0386166000908152600a60209081526040808320805460ff191690556009909152600780549183205483928992919081101561000257604084206005919091027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c01805460ff191693909317909255600160a060020a038a168352805491546001928110156100025760009182526005026000805160206128f0833981519152019050805460a060020a9290920274ff00000000000000000000000000000000000000001992909216919091179055600160a060020a038816600090815260096020526040902054600780544392908110156100025760009182526005026000805160206128f083398151915201905060030155600160a060020a03881660009081526009602052604090205460078054909190811015610002579082526005027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6890154915085156122a257600160a060020a03881660009081526009602052604090205460078054600192908110156100025760009182526005026000805160206128f0833981519152019050805460a860020a9290920275ff00000000000000000000000000000000000000000019929092169190911790555060218054600019860160ff9081168402918201909255600160a060020a038916600081815260096020908152604091829020548251938452948b1690830152818101839052606082018790526080820186905260a0820193909352915190917f2d405b4396de541fd8b7448de00c152385ac44ad14f9eb281de4262f1243a735919081900360c00190a1604051600160a060020a038916906000908385019082818181858883f1151590921415925061235291505057610002565b60065434111561229a575060065461229d565b50345b61021e565b600160a060020a03881660008181526009602090815260409182902054825193845260ff8b1691840191909152600019850183830152606083018790526080830186905260a0830152517f48156d9ccd5f1a9d70cfcbc377888e2b2b5d40f87ce4e3d83708a065a50743d99181900360c00190a1604051602080548401600019019055600160a060020a0389169060009060019082818181858883f11515909214159250611b1991505057610002565b611b19565b60028114156123ec576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f08339815191520154600260ff87811691909106811660b860020a909204161480156123cc57508460ff16600014155b156123d5575060015b611eed84868360028787611fe9565b611eed6108bf565b600181141561250b576123e4858585856000600060005b60128260ff161015612432578660ff16600d6000508360ff16601281101561000257015414156128c457600192505b8660ff166000141580156124f35750600160a060020a038616600090815260096020526040902054600780549091908110156100025760009182526005026000805160206128f0833981519152015460b860020a900460ff161480156124955750825b806124f35750600160a060020a03861660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff1660011480156124f3575082155b156124fc575060015b61187886888360028989611fe9565b60058114156125fb576123e48585858560008460ff166000141580156123cc575060138560ff161080156125825750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806123cc575060128560ff161180156123cc5750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff16600114156123d557506001611eed84868360028787611fe9565b600381141561275f576123e48585858560008460ff166000141580156127475750600d8560ff161080156126725750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806126e45750600c8560ff1611801561268e575060198560ff16105b80156126e45750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001145b80612747575060188560ff161180156127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002145b15612750575060015b611eed84868360038787611fe9565b60048114156123e4576123e48585858560008460ff166000141580156127475750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff16811480156127dc575060038560ff160660ff166001145b806128455750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001148015612845575060038560ff160660ff166002145b806127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002148015612747575060038560ff160660ff166000141561275057506001611eed84868360038787611fe9565b6001919091019061240356a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68aa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.