Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,894 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw For | 5588245 | 2376 days ago | IN | 0 ETH | 0.00192119 | ||||
Update State | 5588239 | 2376 days ago | IN | 0 ETH | 0.00203991 | ||||
Deposit | 5587558 | 2376 days ago | IN | 0 ETH | 0.00068512 | ||||
Withdraw For | 5587290 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587279 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587272 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587204 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587171 | 2376 days ago | IN | 0 ETH | 0.00192119 | ||||
Withdraw For | 5587130 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587082 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587058 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5587042 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586978 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586962 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586956 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Deposit | 5586804 | 2376 days ago | IN | 0 ETH | 0.00068512 | ||||
Deposit | 5586778 | 2376 days ago | IN | 0 ETH | 0.00102522 | ||||
Withdraw For | 5586748 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586740 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586733 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586675 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586660 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Withdraw For | 5586647 | 2376 days ago | IN | 0 ETH | 0.00345 | ||||
Deposit | 5586600 | 2376 days ago | IN | 0 ETH | 0.00068512 | ||||
Deposit | 5586378 | 2376 days ago | IN | 0 ETH | 0.00102375 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EdgelessCasino
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-17 */ /** * The edgeless casino contract holds the players's funds and provides state channel functionality. * The casino has at no time control over the players's funds. * State channels can be updated and closed from both parties: the player and the casino. * author: Julia Altenried **/ pragma solidity ^0.4.17; contract SafeMath { function safeSub(uint a, uint b) pure internal returns(uint) { assert(b <= a); return a - b; } function safeSub(int a, int b) pure internal returns(int) { if(b < 0) assert(a - b > a); else assert(a - b <= a); return a - b; } function safeAdd(uint a, uint b) pure internal returns(uint) { uint c = a + b; assert(c >= a && c >= b); return c; } function safeMul(uint a, uint b) pure internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } } contract owned { address public owner; modifier onlyOwner { require(msg.sender == owner); _; } function owned() public{ owner = msg.sender; } function changeOwner(address newOwner) onlyOwner public{ owner = newOwner; } } /** owner should be able to close the contract is nobody has been using it for at least 30 days */ contract mortal is owned { /** contract can be closed by the owner anytime after this timestamp if non-zero */ uint public closeAt; /** * lets the owner close the contract if there are no player funds on it or if nobody has been using it for at least 30 days */ function closeContract(uint playerBalance) internal{ if(playerBalance == 0) selfdestruct(owner); if(closeAt == 0) closeAt = now + 30 days; else if(closeAt < now) selfdestruct(owner); } /** * in case close has been called accidentally. **/ function open() onlyOwner public{ closeAt = 0; } /** * make sure the contract is not in process of being closed. **/ modifier isAlive { require(closeAt == 0); _; } /** * delays the time of closing. **/ modifier keepAlive { if(closeAt > 0) closeAt = now + 30 days; _; } } contract chargingGas is mortal, SafeMath{ /** the price per kgas and GWei in tokens (5 decimals) */ uint public gasPrice; /** the amount of gas used per transaction in kGas */ mapping(bytes4 => uint) public gasPerTx; /** * sets the amount of gas consumed by methods with the given sigantures. * only called from the edgeless casino constructor. * @param signatures an array of method-signatures * gasNeeded the amount of gas consumed by these methods * */ function setGasUsage(bytes4[3] signatures, uint[3] gasNeeded) internal{ require(signatures.length == gasNeeded.length); for(uint8 i = 0; i < signatures.length; i++) gasPerTx[signatures[i]] = gasNeeded[i]; } /** * adds the gas cost of the tx to the given value. * @param value the value to add the gas cost to * */ function addGas(uint value) internal constant returns(uint){ return safeAdd(value,getGasCost()); } /** * subtracts the gas cost of the tx from the given value. * @param value the value to subtract the gas cost from * */ function subtractGas(uint value) internal constant returns(uint){ return safeSub(value,getGasCost()); } /** * updates the price per 1000 gas in EDG. * @param price the new gas price (4 decimals, max 0.0256 EDG) **/ function setGasPrice(uint8 price) public onlyOwner{ gasPrice = price; } /** * returns the gas cost of the called function. * */ function getGasCost() internal constant returns(uint){ return safeMul(safeMul(gasPerTx[msg.sig], gasPrice), tx.gasprice)/1000000000; } } contract Token { function transferFrom(address sender, address receiver, uint amount) public returns(bool success) {} function transfer(address receiver, uint amount) public returns(bool success) {} function balanceOf(address holder) public constant returns(uint) {} } contract CasinoBank is chargingGas{ /** the total balance of all players with 5 virtual decimals **/ uint public playerBalance; /** the balance per player in edgeless tokens with 5 virtual decimals */ mapping(address=>uint) public balanceOf; /** in case the user wants/needs to call the withdraw function from his own wallet, he first needs to request a withdrawal */ mapping(address=>uint) public withdrawAfter; /** the edgeless token contract */ Token edg; /** the maximum amount of tokens the user is allowed to deposit (5 decimals) */ uint public maxDeposit; /** waiting time for withdrawal if not requested via the server **/ uint public waitingTime; /** informs listeners how many tokens were deposited for a player */ event Deposit(address _player, uint _numTokens, bool _chargeGas); /** informs listeners how many tokens were withdrawn from the player to the receiver address */ event Withdrawal(address _player, address _receiver, uint _numTokens); function CasinoBank(address tokenContract, uint depositLimit) public{ edg = Token(tokenContract); maxDeposit = depositLimit; waitingTime = 90 minutes; } /** * accepts deposits for an arbitrary address. * retrieves tokens from the message sender and adds them to the balance of the specified address. * edgeless tokens do not have any decimals, but are represented on this contract with 5 decimals. * @param receiver address of the receiver * numTokens number of tokens to deposit (0 decimals) * chargeGas indicates if the gas cost is subtracted from the user's edgeless token balance **/ function deposit(address receiver, uint numTokens, bool chargeGas) public isAlive{ require(numTokens > 0); uint value = safeMul(numTokens,100000); if(chargeGas) value = subtractGas(value); uint newBalance = safeAdd(balanceOf[receiver], value); require(newBalance <= maxDeposit); assert(edg.transferFrom(msg.sender, address(this), numTokens)); balanceOf[receiver] = newBalance; playerBalance = safeAdd(playerBalance, value); Deposit(receiver, numTokens, chargeGas); } /** * If the user wants/needs to withdraw his funds himself, he needs to request the withdrawal first. * This method sets the earliest possible withdrawal date to 'waitingTime from now (default 90m, but up to 24h). * Reason: The user should not be able to withdraw his funds, while the the last game methods have not yet been mined. **/ function requestWithdrawal() public{ withdrawAfter[msg.sender] = now + waitingTime; } /** * In case the user requested a withdrawal and changes his mind. * Necessary to be able to continue playing. **/ function cancelWithdrawalRequest() public{ withdrawAfter[msg.sender] = 0; } /** * withdraws an amount from the user balance if the waiting time passed since the request. * @param amount the amount of tokens to withdraw **/ function withdraw(uint amount) public keepAlive{ require(withdrawAfter[msg.sender]>0 && now>withdrawAfter[msg.sender]); withdrawAfter[msg.sender] = 0; uint value = safeMul(amount,100000); balanceOf[msg.sender]=safeSub(balanceOf[msg.sender],value); playerBalance = safeSub(playerBalance, value); assert(edg.transfer(msg.sender, amount)); Withdrawal(msg.sender, msg.sender, amount); } /** * lets the owner withdraw from the bankroll * @param numTokens the number of tokens to withdraw (0 decimals) **/ function withdrawBankroll(uint numTokens) public onlyOwner { require(numTokens <= bankroll()); assert(edg.transfer(owner, numTokens)); } /** * returns the current bankroll in tokens with 0 decimals **/ function bankroll() constant public returns(uint){ return safeSub(edg.balanceOf(address(this)), playerBalance/100000); } /** * updates the maximum deposit. * @param newMax the new maximum deposit (5 decimals) **/ function setMaxDeposit(uint newMax) public onlyOwner{ maxDeposit = newMax; } /** * sets the time the player has to wait for his funds to be unlocked before withdrawal (if not withdrawing with help of the casino server). * the time may not be longer than 24 hours. * @param newWaitingTime the new waiting time in seconds * */ function setWaitingTime(uint newWaitingTime) public onlyOwner{ require(newWaitingTime <= 24 hours); waitingTime = newWaitingTime; } /** * lets the owner close the contract if there are no player funds on it or if nobody has been using it for at least 30 days * */ function close() public onlyOwner{ closeContract(playerBalance); } } contract EdgelessCasino is CasinoBank{ /** indicates if an address is authorized to act in the casino's name */ mapping(address => bool) public authorized; /** a number to count withdrawal signatures to ensure each signature is different even if withdrawing the same amount to the same address */ mapping(address => uint) public withdrawCount; /** the most recent known state of a state channel */ mapping(address => State) public lastState; /** fired when the state is updated */ event StateUpdate(uint128 count, int128 winBalance, int difference, uint gasCost, address player, uint128 lcount); /** fired if one of the parties chooses to log the seeds and results */ event GameData(address player, bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results); struct State{ uint128 count; int128 winBalance; } modifier onlyAuthorized { require(authorized[msg.sender]); _; } /** * creates a new edgeless casino contract. * @param authorizedAddress the address which may send transactions to the Edgeless Casino * tokenContract the address of the Edgeless token contract * depositLimit the maximum deposit allowed * kGasPrice the price per kGas in WEI **/ function EdgelessCasino(address authorizedAddress, address tokenContract, uint depositLimit, uint8 kGasPrice) CasinoBank(tokenContract, depositLimit) public{ authorized[authorizedAddress] = true; //deposit, withdrawFor, updateChannel bytes4[3] memory signatures = [bytes4(0x3edd1128),0x9607610a, 0x713d30c6]; //amount of gas consumed by the above methods in GWei uint[3] memory gasUsage = [uint(141),95,60]; setGasUsage(signatures, gasUsage); setGasPrice(kGasPrice); } /** * transfers an amount from the contract balance to the owner's wallet. * @param receiver the receiver address * amount the amount of tokens to withdraw (0 decimals) * v,r,s the signature of the player **/ function withdrawFor(address receiver, uint amount, uint8 v, bytes32 r, bytes32 s) public onlyAuthorized keepAlive{ var player = ecrecover(keccak256(receiver, amount, withdrawCount[receiver]), v, r, s); withdrawCount[receiver]++; uint value = addGas(safeMul(amount,100000)); balanceOf[player] = safeSub(balanceOf[player], value); playerBalance = safeSub(playerBalance, value); assert(edg.transfer(receiver, amount)); Withdrawal(player, receiver, amount); } /** * authorize a address to call game functions. * @param addr the address to be authorized **/ function authorize(address addr) public onlyOwner{ authorized[addr] = true; } /** * deauthorize a address to call game functions. * @param addr the address to be deauthorized **/ function deauthorize(address addr) public onlyOwner{ authorized[addr] = false; } /** * closes a state channel. can also be used for intermediate state updates. can be called by both parties. * 1. verifies the signature. * 2. verifies if the signed game-count is higher than the last known game-count of this channel. * 3. updates the balances accordingly. This means: It checks the already performed updates for this channel and computes * the new balance difference to add or subtract from the player‘s balance. * @param winBalance the current win or loss * gameCount the number of signed game moves * v,r,s the signature of either the casino or the player * */ function updateState(int128 winBalance, uint128 gameCount, uint8 v, bytes32 r, bytes32 s) public{ address player = determinePlayer(winBalance, gameCount, v, r, s); uint gasCost = 0; if(player == msg.sender)//if the player closes the state channel himself, make sure the signer is a casino wallet require(authorized[ecrecover(keccak256(player, winBalance, gameCount), v, r, s)]); else//if the casino wallet is the sender, subtract the gas costs from the player balance gasCost = getGasCost(); State storage last = lastState[player]; require(gameCount > last.count); int difference = updatePlayerBalance(player, winBalance, last.winBalance, gasCost); lastState[player] = State(gameCount, winBalance); StateUpdate(gameCount, winBalance, difference, gasCost, player, last.count); } /** * determines if the msg.sender or the signer of the passed signature is the player. returns the player's address * @param winBalance the current winBalance, used to calculate the msg hash * gameCount the current gameCount, used to calculate the msg.hash * v, r, s the signature of the non-sending party * */ function determinePlayer(int128 winBalance, uint128 gameCount, uint8 v, bytes32 r, bytes32 s) constant internal returns(address){ if (authorized[msg.sender])//casino is the sender -> player is the signer return ecrecover(keccak256(winBalance, gameCount), v, r, s); else return msg.sender; } /** * computes the difference of the win balance relative to the last known state and adds it to the player's balance. * in case the casino is the sender, the gas cost in EDG gets subtracted from the player's balance. * @param player the address of the player * winBalance the current win-balance * lastWinBalance the win-balance of the last known state * gasCost the gas cost of the tx * */ function updatePlayerBalance(address player, int128 winBalance, int128 lastWinBalance, uint gasCost) internal returns(int difference){ difference = safeSub(winBalance, lastWinBalance); int outstanding = safeSub(difference, int(gasCost)); uint outs; if(outstanding < 0){ outs = uint256(outstanding * (-1)); playerBalance = safeSub(playerBalance, outs); balanceOf[player] = safeSub(balanceOf[player], outs); } else{ outs = uint256(outstanding); playerBalance = safeAdd(playerBalance, outs); balanceOf[player] = safeAdd(balanceOf[player], outs); } } /** * logs some seeds and game results for players wishing to have their game history logged by the contract * @param serverSeeds array containing the server seeds * clientSeeds array containing the client seeds * results array containing the results * v, r, s the signature of the non-sending party (to make sure the corrcet results are logged) * */ function logGameData(bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results, uint8 v, bytes32 r, bytes32 s) public{ address player = determinePlayer(serverSeeds, clientSeeds, results, v, r, s); GameData(player, serverSeeds, clientSeeds, results); //charge gas in case the server is logging the results for the player if(player != msg.sender){ uint gasCost = (57 + 768 * serverSeeds.length / 1000)*gasPrice; balanceOf[player] = safeSub(balanceOf[player], gasCost); playerBalance = safeSub(playerBalance, gasCost); } } /** * determines if the msg.sender or the signer of the passed signature is the player. returns the player's address * @param serverSeeds array containing the server seeds * clientSeeds array containing the client seeds * results array containing the results * v, r, s the signature of the non-sending party * */ function determinePlayer(bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results, uint8 v, bytes32 r, bytes32 s) constant internal returns(address){ if (authorized[msg.sender])//casino is the sender -> player is the signer return ecrecover(keccak256(serverSeeds, clientSeeds, results), v, r, s); else return msg.sender; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"serverSeeds","type":"bytes32[]"},{"name":"clientSeeds","type":"bytes32[]"},{"name":"results","type":"int256[]"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"logGameData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bankroll","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"numTokens","type":"uint256"}],"name":"withdrawBankroll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastState","outputs":[{"name":"count","type":"uint128"},{"name":"winBalance","type":"int128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"deauthorize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"price","type":"uint8"}],"name":"setGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"numTokens","type":"uint256"},{"name":"chargeGas","type":"bool"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawAfter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"playerBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"winBalance","type":"int128"},{"name":"gameCount","type":"uint128"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"updateState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"closeAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waitingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"gasPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"authorize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"authorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setMaxDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"requestWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancelWithdrawalRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newWaitingTime","type":"uint256"}],"name":"setWaitingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"open","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"authorizedAddress","type":"address"},{"name":"tokenContract","type":"address"},{"name":"depositLimit","type":"uint256"},{"name":"kGasPrice","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"count","type":"uint128"},{"indexed":false,"name":"winBalance","type":"int128"},{"indexed":false,"name":"difference","type":"int256"},{"indexed":false,"name":"gasCost","type":"uint256"},{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"lcount","type":"uint128"}],"name":"StateUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"serverSeeds","type":"bytes32[]"},{"indexed":false,"name":"clientSeeds","type":"bytes32[]"},{"indexed":false,"name":"results","type":"int256[]"}],"name":"GameData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_player","type":"address"},{"indexed":false,"name":"_numTokens","type":"uint256"},{"indexed":false,"name":"_chargeGas","type":"bool"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_player","type":"address"},{"indexed":false,"name":"_receiver","type":"address"},{"indexed":false,"name":"_numTokens","type":"uint256"}],"name":"Withdrawal","type":"event"}]
Contract Creation Code
606060405234156200001057600080fd5b60405160808062001aa883398101604052808051919060200180519190602001805191906020018051915062000047905062000221565b620000516200024a565b60008054600160a060020a03338116600160a060020a031992831617835560078054828a16931692909217909155600886905561151860095587168152600a602052604090819020805460ff191660011790556060905190810160409081527f3edd11280000000000000000000000000000000000000000000000000000000082527f9607610a0000000000000000000000000000000000000000000000000000000060208301527f713d30c60000000000000000000000000000000000000000000000000000000081830152909250606090519081016040908152608d8252605f6020830152603c9082015290506200015a8282640100000000620017836200017f82021704565b62000173836401000000006200090f620001fd82021704565b50505050505062000272565b60005b60038160ff161015620001f8578160ff8216600381106200019f57fe5b6020020151600360008560ff8516838110620001b757fe5b60200201517fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205560010162000182565b505050565b60005433600160a060020a039081169116146200021957600080fd5b60ff16600255565b60606040519081016040526003815b600081526000199091019060200181620002305790505090565b60606040519081016040526003815b6000815260200190600190039081620002595790505090565b61182680620002826000396000f30060606040526004361061015b5763ffffffff60e060020a6000350416630102305b81146101605780630c657eb01461024157806319c7670014610266578063203faa891461027c57806327c97fa5146102c45780632e102ee4146102e35780632e1a7d4d146102fc5780633edd11281461031257806343d726d6146103395780634659f42a1461034c5780634f23618f1461036b5780636083e59a1461038a578063651f066a1461039d57806370a08231146103b0578063713d30c6146103cf5780638da5cb5b146104005780639607610a1461042f578063a6f9dae11461045d578063a98540871461047c578063aa13e8c21461048f578063ad8ce06b146104a2578063b6a5d7de146104d7578063b9181611146104f6578063bb371fdd14610529578063dbaf21451461053f578063e714a02814610552578063ebc73e6514610565578063fcfff16f1461057b578063fe173b971461058e575b600080fd5b341561016b57600080fd5b61023f600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505060ff85351694602081013594506040013592506105a1915050565b005b341561024c57600080fd5b610254610761565b60405190815260200160405180910390f35b341561027157600080fd5b61023f6004356107ef565b341561028757600080fd5b61029b600160a060020a03600435166108ac565b6040516001608060020a039092168252600f90810b900b60208201526040908101905180910390f35b34156102cf57600080fd5b61023f600160a060020a03600435166108d3565b34156102ee57600080fd5b61023f60ff6004351661090f565b341561030757600080fd5b61023f600435610932565b341561031d57600080fd5b61023f600160a060020a03600435166024356044351515610adb565b341561034457600080fd5b61023f610c64565b341561035757600080fd5b610254600160a060020a0360043516610c8c565b341561037657600080fd5b610254600160a060020a0360043516610c9e565b341561039557600080fd5b610254610cb0565b34156103a857600080fd5b610254610cb6565b34156103bb57600080fd5b610254600160a060020a0360043516610cbc565b34156103da57600080fd5b61023f600435600f0b6001608060020a036024351660ff60443516606435608435610cce565b341561040b57600080fd5b610413610f60565b604051600160a060020a03909116815260200160405180910390f35b341561043a57600080fd5b61023f600160a060020a036004351660243560ff60443516606435608435610f6f565b341561046857600080fd5b61023f600160a060020a03600435166111d0565b341561048757600080fd5b61025461121a565b341561049a57600080fd5b610254611220565b34156104ad57600080fd5b6102547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516611226565b34156104e257600080fd5b61023f600160a060020a0360043516611238565b341561050157600080fd5b610515600160a060020a0360043516611277565b604051901515815260200160405180910390f35b341561053457600080fd5b61023f60043561128c565b341561054a57600080fd5b61023f6112ac565b341561055d57600080fd5b61023f6112cf565b341561057057600080fd5b61023f6004356112ea565b341561058657600080fd5b61023f61131a565b341561059957600080fd5b61025461133c565b6000806105b2888888888888611342565b91507fbece1b229c929279540d66d856136d3d9de34cfc3ce051ad16a5b99c5430c53282898989604051600160a060020a03851681526080602082018181529060408301906060840190840187818151815260200191508051906020019060200280838360005b83811015610631578082015183820152602001610619565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610670578082015183820152602001610658565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106af578082015183820152602001610697565b5050505090500197505050505050505060405180910390a133600160a060020a031682600160a060020a0316141515610757576002546103e88951610300028115156106f757fe5b0460390102905061072d6005600084600160a060020a0316600160a060020a031681526020019081526020016000205482611488565b600160a060020a0383166000908152600560205260409020556004546107539082611488565b6004555b5050505050505050565b6007546000906107ea90600160a060020a03166370a0823130846040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156107c057600080fd5b6102c65a03f115156107d157600080fd5b5050506040518051600454909150620186a09004611488565b905090565b60005433600160a060020a0390811691161461080a57600080fd5b610812610761565b81111561081e57600080fd5b60075460008054600160a060020a039283169263a9059cbb9291169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561088657600080fd5b6102c65a03f1151561089757600080fd5b5050506040518051905015156108a957fe5b50565b600c602052600090815260409020546001608060020a03811690608060020a9004600f0b82565b60005433600160a060020a039081169116146108ee57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60005433600160a060020a0390811691161461092a57600080fd5b60ff16600255565b60008060015411156109485762278d0042016001555b600160a060020a0333166000908152600660205260408120541180156109855750600160a060020a03331660009081526006602052604090205442115b151561099057600080fd5b600160a060020a0333166000908152600660205260408120556109b682620186a061149a565b600160a060020a0333166000908152600560205260409020549091506109dc9082611488565b600160a060020a033316600090815260056020526040902055600454610a029082611488565b600455600754600160a060020a031663a9059cbb338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a6457600080fd5b6102c65a03f11515610a7557600080fd5b505050604051805190501515610a8757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398333384604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600154600090819015610aed57600080fd5b60008411610afa57600080fd5b610b0784620186a061149a565b91508215610b1b57610b18826114c5565b91505b600160a060020a038516600090815260056020526040902054610b3e90836114de565b600854909150811115610b5057600080fd5b600754600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bbc57600080fd5b6102c65a03f11515610bcd57600080fd5b505050604051805190501515610bdf57fe5b600160a060020a0385166000908152600560205260409020819055600454610c0790836114de565b6004557f693c1828300d1cab0919b948d714897f817e305af51c026ad14233b6a8939adb858585604051600160a060020a039093168352602083019190915215156040808301919091526060909101905180910390a15050505050565b60005433600160a060020a03908116911614610c7f57600080fd5b610c8a6004546114f8565b565b60066020526000908152604090205481565b600b6020526000908152604090205481565b60085481565b60045481565b60056020526000908152604090205481565b600080600080610ce1898989898961153c565b93506000925033600160a060020a031684600160a060020a03161415610df257600a60006001868c8c6040516c01000000000000000000000000600160a060020a03909416939093028352608060020a600f92830b90920b820260148401526001608060020a031602602482015260340160405180910390208a8a8a6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515610dbc57600080fd5b505060206040510351600160a060020a0316815260208101919091526040016000205460ff161515610ded57600080fd5b610dfd565b610dfa611611565b92505b600160a060020a0384166000908152600c6020526040902080549092506001608060020a0390811690891611610e3257600080fd5b8154610e4c9085908b90608060020a9004600f0b8661166c565b90506040805190810160409081526001608060020a038a168252600f8b900b602080840191909152600160a060020a0387166000908152600c90915220815181546fffffffffffffffffffffffffffffffff19166001608060020a039190911617815560208201518154600f9190910b6001608060020a03908116608060020a029181169190911790915583547f03a6981b750fc8bdd6c0c53d263db8d5a4cfbbe60e9ba3c212ab4eb01d62327c92508a918c91859188918a91166040516001608060020a039687168152600f95860b90950b60208601526040808601949094526060850192909252600160a060020a0316608084015290921660a082015260c001905180910390a1505050505050505050565b600054600160a060020a031681565b600160a060020a0333166000908152600a6020526040812054819060ff161515610f9857600080fd5b60006001541115610fad5762278d0042016001555b600160a060020a0387166000908152600b602052604090819020546001918991899151600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561106757600080fd5b505060206040510351600160a060020a0388166000908152600b602052604090208054600101905591506110a66110a187620186a061149a565b611748565b600160a060020a0383166000908152600560205260409020549091506110cc9082611488565b600160a060020a0383166000908152600560205260409020556004546110f29082611488565b600455600754600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561115457600080fd5b6102c65a03f1151561116557600080fd5b50505060405180519050151561117757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398828888604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a150505050505050565b60005433600160a060020a039081169116146111eb57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60095481565b60036020526000908152604090205481565b60005433600160a060020a0390811691161461125357600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b600a6020526000908152604090205460ff1681565b60005433600160a060020a039081169116146112a757600080fd5b600855565b600954600160a060020a0333166000908152600660205260409020429091019055565b600160a060020a033316600090815260066020526040812055565b60005433600160a060020a0390811691161461130557600080fd5b6201518081111561131557600080fd5b600955565b60005433600160a060020a0390811691161461133557600080fd5b6000600155565b60025481565b600160a060020a0333166000908152600a602052604081205460ff161561147b57600187878760405180848051906020019060200280838360005b8381101561139557808201518382015260200161137d565b50505050905001838051906020019060200280838360005b838110156113c55780820151838201526020016113ad565b50505050905001828051906020019060200280838360005b838110156113f55780820151838201526020016113dd565b50505050905001935050505060405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561146b57600080fd5b505060206040510351905061147e565b50335b9695505050505050565b60008282111561149457fe5b50900390565b60008282028315806114b657508284828115156114b357fe5b04145b15156114be57fe5b9392505050565b60006114d8826114d3611611565b611488565b92915050565b60008282018381108015906114b65750828110156114be57fe5b80151561150d57600054600160a060020a0316ff5b60015415156115245762278d0042016001556108a9565b4260015410156108a957600054600160a060020a0316ff5b600160a060020a0333166000908152600a602052604081205460ff16156116055760018686604051608060020a600f93840b90930b830281526001608060020a03909116909102601082015260200160405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156115f557600080fd5b5050602060405103519050611608565b50335b95945050505050565b600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260036020526040812054600254633b9aca009161165d91611657919061149a565b3a61149a565b81151561166657fe5b04905090565b600080600061168186600f0b86600f0b61175b565b925061168d838561175b565b915060008212156116ef57816000190290506116ab60045482611488565b600455600160a060020a0387166000908152600560205260409020546116d19082611488565b600160a060020a03881660009081526005602052604090205561173e565b8190506116fe600454826114de565b600455600160a060020a03871660009081526005602052604090205461172490826114de565b600160a060020a0388166000908152600560205260409020555b5050949350505050565b60006114d882611756611611565b6114de565b6000808212156117765781830383901361177157fe5b611494565b8183038390131561149457fe5b60005b60038160ff1610156117f5578160ff8216600381106117a157fe5b6020020151600360008560ff85168381106117b857fe5b60200201517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602081019190915260400160002055600101611786565b5050505600a165627a7a7230582072be0575f3e134c72cca69ec3bf9706078d2d126f16a56c79548c28f6803a39b0029000000000000000000000000d2560f528b01e3f3c2d268d3dcf51a2ba13b985a00000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c0000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode
0x60606040526004361061015b5763ffffffff60e060020a6000350416630102305b81146101605780630c657eb01461024157806319c7670014610266578063203faa891461027c57806327c97fa5146102c45780632e102ee4146102e35780632e1a7d4d146102fc5780633edd11281461031257806343d726d6146103395780634659f42a1461034c5780634f23618f1461036b5780636083e59a1461038a578063651f066a1461039d57806370a08231146103b0578063713d30c6146103cf5780638da5cb5b146104005780639607610a1461042f578063a6f9dae11461045d578063a98540871461047c578063aa13e8c21461048f578063ad8ce06b146104a2578063b6a5d7de146104d7578063b9181611146104f6578063bb371fdd14610529578063dbaf21451461053f578063e714a02814610552578063ebc73e6514610565578063fcfff16f1461057b578063fe173b971461058e575b600080fd5b341561016b57600080fd5b61023f600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505060ff85351694602081013594506040013592506105a1915050565b005b341561024c57600080fd5b610254610761565b60405190815260200160405180910390f35b341561027157600080fd5b61023f6004356107ef565b341561028757600080fd5b61029b600160a060020a03600435166108ac565b6040516001608060020a039092168252600f90810b900b60208201526040908101905180910390f35b34156102cf57600080fd5b61023f600160a060020a03600435166108d3565b34156102ee57600080fd5b61023f60ff6004351661090f565b341561030757600080fd5b61023f600435610932565b341561031d57600080fd5b61023f600160a060020a03600435166024356044351515610adb565b341561034457600080fd5b61023f610c64565b341561035757600080fd5b610254600160a060020a0360043516610c8c565b341561037657600080fd5b610254600160a060020a0360043516610c9e565b341561039557600080fd5b610254610cb0565b34156103a857600080fd5b610254610cb6565b34156103bb57600080fd5b610254600160a060020a0360043516610cbc565b34156103da57600080fd5b61023f600435600f0b6001608060020a036024351660ff60443516606435608435610cce565b341561040b57600080fd5b610413610f60565b604051600160a060020a03909116815260200160405180910390f35b341561043a57600080fd5b61023f600160a060020a036004351660243560ff60443516606435608435610f6f565b341561046857600080fd5b61023f600160a060020a03600435166111d0565b341561048757600080fd5b61025461121a565b341561049a57600080fd5b610254611220565b34156104ad57600080fd5b6102547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516611226565b34156104e257600080fd5b61023f600160a060020a0360043516611238565b341561050157600080fd5b610515600160a060020a0360043516611277565b604051901515815260200160405180910390f35b341561053457600080fd5b61023f60043561128c565b341561054a57600080fd5b61023f6112ac565b341561055d57600080fd5b61023f6112cf565b341561057057600080fd5b61023f6004356112ea565b341561058657600080fd5b61023f61131a565b341561059957600080fd5b61025461133c565b6000806105b2888888888888611342565b91507fbece1b229c929279540d66d856136d3d9de34cfc3ce051ad16a5b99c5430c53282898989604051600160a060020a03851681526080602082018181529060408301906060840190840187818151815260200191508051906020019060200280838360005b83811015610631578082015183820152602001610619565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610670578082015183820152602001610658565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106af578082015183820152602001610697565b5050505090500197505050505050505060405180910390a133600160a060020a031682600160a060020a0316141515610757576002546103e88951610300028115156106f757fe5b0460390102905061072d6005600084600160a060020a0316600160a060020a031681526020019081526020016000205482611488565b600160a060020a0383166000908152600560205260409020556004546107539082611488565b6004555b5050505050505050565b6007546000906107ea90600160a060020a03166370a0823130846040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156107c057600080fd5b6102c65a03f115156107d157600080fd5b5050506040518051600454909150620186a09004611488565b905090565b60005433600160a060020a0390811691161461080a57600080fd5b610812610761565b81111561081e57600080fd5b60075460008054600160a060020a039283169263a9059cbb9291169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561088657600080fd5b6102c65a03f1151561089757600080fd5b5050506040518051905015156108a957fe5b50565b600c602052600090815260409020546001608060020a03811690608060020a9004600f0b82565b60005433600160a060020a039081169116146108ee57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60005433600160a060020a0390811691161461092a57600080fd5b60ff16600255565b60008060015411156109485762278d0042016001555b600160a060020a0333166000908152600660205260408120541180156109855750600160a060020a03331660009081526006602052604090205442115b151561099057600080fd5b600160a060020a0333166000908152600660205260408120556109b682620186a061149a565b600160a060020a0333166000908152600560205260409020549091506109dc9082611488565b600160a060020a033316600090815260056020526040902055600454610a029082611488565b600455600754600160a060020a031663a9059cbb338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a6457600080fd5b6102c65a03f11515610a7557600080fd5b505050604051805190501515610a8757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398333384604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600154600090819015610aed57600080fd5b60008411610afa57600080fd5b610b0784620186a061149a565b91508215610b1b57610b18826114c5565b91505b600160a060020a038516600090815260056020526040902054610b3e90836114de565b600854909150811115610b5057600080fd5b600754600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bbc57600080fd5b6102c65a03f11515610bcd57600080fd5b505050604051805190501515610bdf57fe5b600160a060020a0385166000908152600560205260409020819055600454610c0790836114de565b6004557f693c1828300d1cab0919b948d714897f817e305af51c026ad14233b6a8939adb858585604051600160a060020a039093168352602083019190915215156040808301919091526060909101905180910390a15050505050565b60005433600160a060020a03908116911614610c7f57600080fd5b610c8a6004546114f8565b565b60066020526000908152604090205481565b600b6020526000908152604090205481565b60085481565b60045481565b60056020526000908152604090205481565b600080600080610ce1898989898961153c565b93506000925033600160a060020a031684600160a060020a03161415610df257600a60006001868c8c6040516c01000000000000000000000000600160a060020a03909416939093028352608060020a600f92830b90920b820260148401526001608060020a031602602482015260340160405180910390208a8a8a6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515610dbc57600080fd5b505060206040510351600160a060020a0316815260208101919091526040016000205460ff161515610ded57600080fd5b610dfd565b610dfa611611565b92505b600160a060020a0384166000908152600c6020526040902080549092506001608060020a0390811690891611610e3257600080fd5b8154610e4c9085908b90608060020a9004600f0b8661166c565b90506040805190810160409081526001608060020a038a168252600f8b900b602080840191909152600160a060020a0387166000908152600c90915220815181546fffffffffffffffffffffffffffffffff19166001608060020a039190911617815560208201518154600f9190910b6001608060020a03908116608060020a029181169190911790915583547f03a6981b750fc8bdd6c0c53d263db8d5a4cfbbe60e9ba3c212ab4eb01d62327c92508a918c91859188918a91166040516001608060020a039687168152600f95860b90950b60208601526040808601949094526060850192909252600160a060020a0316608084015290921660a082015260c001905180910390a1505050505050505050565b600054600160a060020a031681565b600160a060020a0333166000908152600a6020526040812054819060ff161515610f9857600080fd5b60006001541115610fad5762278d0042016001555b600160a060020a0387166000908152600b602052604090819020546001918991899151600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561106757600080fd5b505060206040510351600160a060020a0388166000908152600b602052604090208054600101905591506110a66110a187620186a061149a565b611748565b600160a060020a0383166000908152600560205260409020549091506110cc9082611488565b600160a060020a0383166000908152600560205260409020556004546110f29082611488565b600455600754600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561115457600080fd5b6102c65a03f1151561116557600080fd5b50505060405180519050151561117757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398828888604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a150505050505050565b60005433600160a060020a039081169116146111eb57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60095481565b60036020526000908152604090205481565b60005433600160a060020a0390811691161461125357600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b600a6020526000908152604090205460ff1681565b60005433600160a060020a039081169116146112a757600080fd5b600855565b600954600160a060020a0333166000908152600660205260409020429091019055565b600160a060020a033316600090815260066020526040812055565b60005433600160a060020a0390811691161461130557600080fd5b6201518081111561131557600080fd5b600955565b60005433600160a060020a0390811691161461133557600080fd5b6000600155565b60025481565b600160a060020a0333166000908152600a602052604081205460ff161561147b57600187878760405180848051906020019060200280838360005b8381101561139557808201518382015260200161137d565b50505050905001838051906020019060200280838360005b838110156113c55780820151838201526020016113ad565b50505050905001828051906020019060200280838360005b838110156113f55780820151838201526020016113dd565b50505050905001935050505060405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561146b57600080fd5b505060206040510351905061147e565b50335b9695505050505050565b60008282111561149457fe5b50900390565b60008282028315806114b657508284828115156114b357fe5b04145b15156114be57fe5b9392505050565b60006114d8826114d3611611565b611488565b92915050565b60008282018381108015906114b65750828110156114be57fe5b80151561150d57600054600160a060020a0316ff5b60015415156115245762278d0042016001556108a9565b4260015410156108a957600054600160a060020a0316ff5b600160a060020a0333166000908152600a602052604081205460ff16156116055760018686604051608060020a600f93840b90930b830281526001608060020a03909116909102601082015260200160405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156115f557600080fd5b5050602060405103519050611608565b50335b95945050505050565b600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260036020526040812054600254633b9aca009161165d91611657919061149a565b3a61149a565b81151561166657fe5b04905090565b600080600061168186600f0b86600f0b61175b565b925061168d838561175b565b915060008212156116ef57816000190290506116ab60045482611488565b600455600160a060020a0387166000908152600560205260409020546116d19082611488565b600160a060020a03881660009081526005602052604090205561173e565b8190506116fe600454826114de565b600455600160a060020a03871660009081526005602052604090205461172490826114de565b600160a060020a0388166000908152600560205260409020555b5050949350505050565b60006114d882611756611611565b6114de565b6000808212156117765781830383901361177157fe5b611494565b8183038390131561149457fe5b60005b60038160ff1610156117f5578160ff8216600381106117a157fe5b6020020151600360008560ff85168381106117b857fe5b60200201517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602081019190915260400160002055600101611786565b5050505600a165627a7a7230582072be0575f3e134c72cca69ec3bf9706078d2d126f16a56c79548c28f6803a39b0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d2560f528b01e3f3c2d268d3dcf51a2ba13b985a00000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c0000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000032
-----Decoded View---------------
Arg [0] : authorizedAddress (address): 0xD2560f528b01E3F3C2D268d3dCF51a2ba13B985a
Arg [1] : tokenContract (address): 0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c
Arg [2] : depositLimit (uint256): 15000000
Arg [3] : kGasPrice (uint8): 50
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d2560f528b01e3f3c2d268d3dcf51a2ba13b985a
Arg [1] : 00000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000e4e1c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Swarm Source
bzzr://72be0575f3e134c72cca69ec3bf9706078d2d126f16a56c79548c28f6803a39b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.