Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 129 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 5211805 | 2213 days ago | IN | 0 ETH | 0.00015419 | ||||
Buy Pack | 5211772 | 2213 days ago | IN | 0.01 ETH | 0.00011559 | ||||
Buy Pack | 5211767 | 2213 days ago | IN | 0.005 ETH | 0.00011559 | ||||
Buy Pack | 5211765 | 2213 days ago | IN | 0.01 ETH | 0.00131399 | ||||
Buy Pack | 5211765 | 2213 days ago | IN | 0.1 ETH | 0.00131399 | ||||
Buy Pack | 5211761 | 2213 days ago | IN | 0.005 ETH | 0.00131399 | ||||
Buy Pack | 5211758 | 2213 days ago | IN | 0.05 ETH | 0.00131399 | ||||
Buy Pack | 5211738 | 2213 days ago | IN | 0.1 ETH | 0.00131399 | ||||
Approve | 5208751 | 2213 days ago | IN | 0 ETH | 0.00013755 | ||||
Approve | 5208717 | 2213 days ago | IN | 0 ETH | 0.0000917 | ||||
Buy Pack | 5208011 | 2213 days ago | IN | 0.01 ETH | 0.00138899 | ||||
Drain Stack | 5205087 | 2214 days ago | IN | 0 ETH | 0.001 | ||||
Raise Slammer | 5205031 | 2214 days ago | IN | 0 ETH | 0.00009462 | ||||
End Coin Flip | 5205017 | 2214 days ago | IN | 0 ETH | 0.00013849 | ||||
Start Coin Flip | 5205008 | 2214 days ago | IN | 0 ETH | 0.00006062 | ||||
Start Coin Flip | 5205007 | 2214 days ago | IN | 0 ETH | 0.00015474 | ||||
Accept Counter S... | 5204997 | 2214 days ago | IN | 0 ETH | 0.00097753 | ||||
Submit Counter S... | 5204987 | 2214 days ago | IN | 0 ETH | 0.00059731 | ||||
Submit Stack | 5204986 | 2214 days ago | IN | 0 ETH | 0.00043347 | ||||
Submit Stack | 5204407 | 2214 days ago | IN | 0 ETH | 0.00055347 | ||||
Buy Pack | 5204384 | 2214 days ago | IN | 0.005 ETH | 0.00055559 | ||||
Buy Pack | 5204384 | 2214 days ago | IN | 0.005 ETH | 0.00055559 | ||||
Buy Pack | 5204340 | 2214 days ago | IN | 0.005 ETH | 0.00166678 | ||||
Buy Pack | 5204338 | 2214 days ago | IN | 0.005 ETH | 0.00166678 | ||||
Throw Slammer | 5203225 | 2214 days ago | IN | 0 ETH | 0.00063462 |
Latest 1 internal transaction
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
5211805 | 2213 days ago | 0.426 ETH |
Loading...
Loading
Contract Name:
Cryptogs
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-04 */ pragma solidity ^0.4.15; /* https://cryptogs.io --Austin Thomas Griffith for ETHDenver ( PS this gas guzzling beast is still unaudited ) */ //adapted from https://github.com/ethereum/EIPs/issues/721 // thanks to Dieter Shirley && http://axiomzen.co contract NFT { function NFT() public { } mapping (uint256 => address) public tokenIndexToOwner; mapping (address => uint256) ownershipTokenCount; mapping (uint256 => address) public tokenIndexToApproved; function transfer(address _to,uint256 _tokenId) external { require(_to != address(0)); require(_to != address(this)); require(_owns(msg.sender, _tokenId)); _transfer(msg.sender, _to, _tokenId); } function _transfer(address _from, address _to, uint256 _tokenId) internal { ownershipTokenCount[_to]++; tokenIndexToOwner[_tokenId] = _to; if (_from != address(0)) { ownershipTokenCount[_from]--; delete tokenIndexToApproved[_tokenId]; } Transfer(_from, _to, _tokenId); } event Transfer(address from, address to, uint256 tokenId); function transferFrom(address _from,address _to,uint256 _tokenId) external { require(_to != address(0)); require(_to != address(this)); require(_approvedFor(msg.sender, _tokenId)); require(_owns(_from, _tokenId)); _transfer(_from, _to, _tokenId); } function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { return tokenIndexToOwner[_tokenId] == _claimant; } function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { return tokenIndexToApproved[_tokenId] == _claimant; } function _approve(uint256 _tokenId, address _approved) internal { tokenIndexToApproved[_tokenId] = _approved; } function approve(address _to,uint256 _tokenId) public returns (bool) { require(_owns(msg.sender, _tokenId)); _approve(_tokenId, _to); Approval(msg.sender, _to, _tokenId); return true; } event Approval(address owner, address approved, uint256 tokenId); function balanceOf(address _owner) public view returns (uint256 count) { return ownershipTokenCount[_owner]; } function ownerOf(uint256 _tokenId) external view returns (address owner) { owner = tokenIndexToOwner[_tokenId]; require(owner != address(0)); } function allowance(address _claimant, uint256 _tokenId) public view returns (bool) { return _approvedFor(_claimant,_tokenId); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Cryptogs is NFT, Ownable { string public constant name = "Cryptogs"; string public constant symbol = "POGS"; string public constant purpose = "ETHDenver"; string public constant contact = "https://cryptogs.io"; string public constant author = "Austin Thomas Griffith"; uint8 public constant FLIPPINESS = 64; uint8 public constant FLIPPINESSROUNDBONUS = 16; uint8 public constant TIMEOUTBLOCKS = 60; uint8 public constant BLOCKSUNTILCLEANUPSTACK=1; string public ipfs; function setIpfs(string _ipfs) public onlyOwner returns (bool){ ipfs=_ipfs; IPFS(ipfs); return true; } event IPFS(string ipfs); function Cryptogs() public { //0 index should be a blank item owned by no one Item memory _item = Item({ image: "" }); items.push(_item); } address public slammerTime; function setSlammerTime(address _slammerTime) public onlyOwner returns (bool){ //in order to trust that this contract isn't sending a players tokens // to a different contract, the slammertime contract is set once and // only once -- at deploy require(slammerTime==address(0)); slammerTime=_slammerTime; return true; } struct Item{ bytes32 image; //perhaps some are harder to flip over? //perhaps some have magical metadata? //I don't know, it's late and I'm weird } Item[] private items; function mint(bytes32 _image,address _owner) public onlyOwner returns (uint){ uint256 newId = _mint(_image); _transfer(0, _owner, newId); Mint(items[newId].image,tokenIndexToOwner[newId],newId); return newId; } event Mint(bytes32 _image,address _owner,uint256 _id); function _mint(bytes32 _image) internal returns (uint){ Item memory _item = Item({ image: _image }); uint256 newId = items.push(_item) - 1; tokensOfImage[items[newId].image]++; return newId; } Pack[] private packs; struct Pack{ uint256[10] tokens; uint256 price; } function mintPack(uint256 _price,bytes32 _image1,bytes32 _image2,bytes32 _image3,bytes32 _image4,bytes32 _image5,bytes32 _image6,bytes32 _image7,bytes32 _image8,bytes32 _image9,bytes32 _image10) public onlyOwner returns (bool){ uint256[10] memory tokens; tokens[0] = _mint(_image1); tokens[1] = _mint(_image2); tokens[2] = _mint(_image3); tokens[3] = _mint(_image4); tokens[4] = _mint(_image5); tokens[5] = _mint(_image6); tokens[6] = _mint(_image7); tokens[7] = _mint(_image8); tokens[8] = _mint(_image9); tokens[9] = _mint(_image10); Pack memory _pack = Pack({ tokens: tokens, price: _price }); MintPack(packs.push(_pack) - 1, _price,tokens[0],tokens[1],tokens[2],tokens[3],tokens[4],tokens[5],tokens[6],tokens[7],tokens[8],tokens[9]); return true; } event MintPack(uint256 packId,uint256 price,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5,uint256 token6,uint256 token7,uint256 token8,uint256 token9,uint256 token10); function buyPack(uint256 packId) public payable returns (bool) { //make sure pack is for sale require( packs[packId].price > 0 ); //make sure they sent in enough value require( msg.value >= packs[packId].price ); //right away set price to 0 to avoid some sort of reentrance packs[packId].price=0; //give tokens to owner for(uint8 i=0;i<10;i++){ tokenIndexToOwner[packs[packId].tokens[i]]=msg.sender; _transfer(0, msg.sender, packs[packId].tokens[i]); } //clear the price so it is no longer for sale delete packs[packId]; BuyPack(msg.sender,packId,msg.value); } event BuyPack(address sender, uint256 packId, uint256 price); //lets keep a count of how many of a specific image is created too //that will allow us to calculate rarity on-chain if we want mapping (bytes32 => uint256) public tokensOfImage; function getToken(uint256 _id) public view returns (address owner,bytes32 image,uint256 copies) { image = items[_id].image; copies = tokensOfImage[image]; return ( tokenIndexToOwner[_id], image, copies ); } uint256 nonce = 0; struct Stack{ //this will be an array of ids but for now just doing one for simplicity uint256[5] ids; address owner; uint32 block; } mapping (bytes32 => Stack) public stacks; mapping (bytes32 => bytes32) public stackCounter; function stackOwner(bytes32 _stack) public constant returns (address owner) { return stacks[_stack].owner; } function getStack(bytes32 _stack) public constant returns (address owner,uint32 block,uint256 token1,uint256 token2,uint256 token3,uint256 token4,uint256 token5) { return (stacks[_stack].owner,stacks[_stack].block,stacks[_stack].ids[0],stacks[_stack].ids[1],stacks[_stack].ids[2],stacks[_stack].ids[3],stacks[_stack].ids[4]); } //tx 1: of a game, player one approves the SlammerTime contract to take their tokens //this triggers an event to broadcast to other players that there is an open challenge function submitStack(uint256 _id,uint256 _id2,uint256 _id3,uint256 _id4,uint256 _id5, bool _public) public returns (bool) { //make sure slammerTime was set at deploy require(slammerTime!=address(0)); //the sender must own the token require(tokenIndexToOwner[_id]==msg.sender); require(tokenIndexToOwner[_id2]==msg.sender); require(tokenIndexToOwner[_id3]==msg.sender); require(tokenIndexToOwner[_id4]==msg.sender); require(tokenIndexToOwner[_id5]==msg.sender); //they approve the slammertime contract to take the token away from them require(approve(slammerTime,_id)); require(approve(slammerTime,_id2)); require(approve(slammerTime,_id3)); require(approve(slammerTime,_id4)); require(approve(slammerTime,_id5)); bytes32 stack = keccak256(nonce++,msg.sender); uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; stacks[stack] = Stack(ids,msg.sender,uint32(block.number)); //the event is triggered to the frontend to display the stack //the frontend will check if they want it public or not SubmitStack(msg.sender,now,stack,_id,_id2,_id3,_id4,_id5,_public); } event SubmitStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,uint256 _token1,uint256 _token2,uint256 _token3,uint256 _token4,uint256 _token5,bool _public); //tx 2: of a game, player two approves the SlammerTime contract to take their tokens //this triggers an event to broadcast to player one that this player wants to rumble function submitCounterStack(bytes32 _stack, uint256 _id, uint256 _id2, uint256 _id3, uint256 _id4, uint256 _id5) public returns (bool) { //make sure slammerTime was set at deploy require(slammerTime!=address(0)); //the sender must own the token require(tokenIndexToOwner[_id]==msg.sender); require(tokenIndexToOwner[_id2]==msg.sender); require(tokenIndexToOwner[_id3]==msg.sender); require(tokenIndexToOwner[_id4]==msg.sender); require(tokenIndexToOwner[_id5]==msg.sender); //they approve the slammertime contract to take the token away from them require(approve(slammerTime,_id)); require(approve(slammerTime,_id2)); require(approve(slammerTime,_id3)); require(approve(slammerTime,_id4)); require(approve(slammerTime,_id5)); //stop playing with yourself require(msg.sender!=stacks[_stack].owner); bytes32 counterstack = keccak256(nonce++,msg.sender,_id); uint256[5] memory ids = [_id,_id2,_id3,_id4,_id5]; stacks[counterstack] = Stack(ids,msg.sender,uint32(block.number)); stackCounter[counterstack] = _stack; //the event is triggered to the frontend to display the stack //the frontend will check if they want it public or not CounterStack(msg.sender,now,_stack,counterstack,_id,_id2,_id3,_id4,_id5); } event CounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack, bytes32 _counterStack, uint256 _token1, uint256 _token2, uint256 _token3, uint256 _token4, uint256 _token5); // if someone creates a stack they should be able to clean it up // its not really that big of a deal because we will have a timeout // in the frontent, but still... function cancelStack(bytes32 _stack) public returns (bool) { //it must be your stack require(msg.sender==stacks[_stack].owner); //make sure there is no mode set yet require(mode[_stack]==0); //make sure they aren't trying to cancel a counterstack using this function require(stackCounter[_stack]==0x00000000000000000000000000000000); delete stacks[_stack]; CancelStack(msg.sender,now,_stack); } event CancelStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack); function cancelCounterStack(bytes32 _stack,bytes32 _counterstack) public returns (bool) { //it must be your stack require(msg.sender==stacks[_counterstack].owner); //the counter must be a counter of stack 1 require(stackCounter[_counterstack]==_stack); //make sure there is no mode set yet require(mode[_stack]==0); delete stacks[_counterstack]; delete stackCounter[_counterstack]; CancelCounterStack(msg.sender,now,_stack,_counterstack); } event CancelCounterStack(address indexed _sender,uint256 indexed timestamp,bytes32 indexed _stack,bytes32 _counterstack); mapping (bytes32 => bytes32) public counterOfStack; mapping (bytes32 => uint8) public mode; mapping (bytes32 => uint8) public round; mapping (bytes32 => uint32) public lastBlock; mapping (bytes32 => uint32) public commitBlock; mapping (bytes32 => address) public lastActor; mapping (bytes32 => uint256[10]) public mixedStack; //tx 3: of a game, player one approves counter stack and transfers everything in function acceptCounterStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { //sender must be owner of stack 1 require(msg.sender==stacks[_stack].owner); //the counter must be a counter of stack 1 require(stackCounter[_counterStack]==_stack); //make sure there is no mode set yet require(mode[_stack]==0); //do the transfer SlammerTime slammerTimeContract = SlammerTime(slammerTime); require( slammerTimeContract.startSlammerTime(msg.sender,stacks[_stack].ids,stacks[_counterStack].owner,stacks[_counterStack].ids) ); //save the block for a timeout lastBlock[_stack]=uint32(block.number); lastActor[_stack]=stacks[_counterStack].owner; mode[_stack]=1; counterOfStack[_stack]=_counterStack; //// LOL @ mixedStack[_stack][0] = stacks[_stack].ids[0]; mixedStack[_stack][1] = stacks[_counterStack].ids[0]; mixedStack[_stack][2] = stacks[_stack].ids[1]; mixedStack[_stack][3] = stacks[_counterStack].ids[1]; mixedStack[_stack][4] = stacks[_stack].ids[2]; mixedStack[_stack][5] = stacks[_counterStack].ids[2]; mixedStack[_stack][6] = stacks[_stack].ids[3]; mixedStack[_stack][7] = stacks[_counterStack].ids[3]; mixedStack[_stack][8] = stacks[_stack].ids[4]; mixedStack[_stack][9] = stacks[_counterStack].ids[4]; //let the front end know that the transfer is good and we are ready for the coin flip AcceptCounterStack(msg.sender,_stack,_counterStack); } event AcceptCounterStack(address indexed _sender,bytes32 indexed _stack, bytes32 indexed _counterStack); mapping (bytes32 => bytes32) public commit; function getMixedStack(bytes32 _stack) external view returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){ uint256[10] thisStack = mixedStack[_stack]; return (thisStack[0],thisStack[1],thisStack[2],thisStack[3],thisStack[4],thisStack[5],thisStack[6],thisStack[7],thisStack[8],thisStack[9]); } //tx 4: player one commits and flips coin up //at this point, the timeout goes into effect and if any transaction including //the coin flip don't come back in time, we need to allow the other party //to withdraw all tokens... this keeps either player from refusing to //reveal their commit. (every tx from here on out needs to update the lastBlock and lastActor) //and in the withdraw function you check currentblock-lastBlock > timeout = refund to lastActor //and by refund I mean let them withdraw if they want //we could even have a little timer on the front end that tells you how long your opponnet has //before they will forfet function startCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { //make sure it's the owner of the first stack (player one) doing the flip require(stacks[_stack].owner==msg.sender); //the counter must be a counter of stack 1 require(stackCounter[_counterStack]==_stack); require(counterOfStack[_stack]==_counterStack); //make sure that we are in mode 1 require(mode[_stack]==1); //store the commit for the next tx commit[_stack]=_commit; commitBlock[_stack]=uint32(block.number); //inc the mode to 2 mode[_stack]=2; StartCoinFlip(_stack,_commit); } event StartCoinFlip(bytes32 stack, bytes32 commit); //tx5: player one ends coin flip with reveal function endCoinFlip(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { //make sure it's the owner of the first stack (player one) doing the flip require(stacks[_stack].owner==msg.sender); //the counter must be a counter of stack 1 require(stackCounter[_counterStack]==_stack); require(counterOfStack[_stack]==_counterStack); //make sure that we are in mode 2 require(mode[_stack]==2); //make sure hash of reveal == commit if(keccak256(_reveal)!=commit[_stack]){ //commit/reveal failed.. this can happen if they //reload, so don't punish, just go back to the //start of the coin flip stage mode[_stack]=1; CoinFlipFail(_stack); return false; }else{ //successful coin flip, ready to get random mode[_stack]=3; round[_stack]=1; bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); if(uint256(pseudoRandomHash)%2==0){ //player1 goes first lastBlock[_stack]=uint32(block.number); lastActor[_stack]=stacks[_counterStack].owner; CoinFlipSuccess(_stack,stacks[_stack].owner,true); }else{ //player2 goes first lastBlock[_stack]=uint32(block.number); lastActor[_stack]=stacks[_stack].owner; CoinFlipSuccess(_stack,stacks[_counterStack].owner,false); } return true; } } event CoinFlipSuccess(bytes32 indexed stack,address whosTurn,bool heads); event CoinFlipFail(bytes32 stack); //tx6 next player raises slammer function raiseSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _commit) public returns (bool) { if(lastActor[_stack]==stacks[_stack].owner){ //it is player2's turn require(stacks[_counterStack].owner==msg.sender); }else{ //it is player1's turn require(stacks[_stack].owner==msg.sender); } //the counter must be a counter of stack 1 require(stackCounter[_counterStack]==_stack); require(counterOfStack[_stack]==_counterStack); //make sure that we are in mode 3 require(mode[_stack]==3); //store the commit for the next tx commit[_stack]=_commit; commitBlock[_stack]=uint32(block.number); //inc the mode to 2 mode[_stack]=4; RaiseSlammer(_stack,_commit); } event RaiseSlammer(bytes32 stack, bytes32 commit); //tx7 player throws slammer function throwSlammer(bytes32 _stack, bytes32 _counterStack, bytes32 _reveal) public returns (bool) { if(lastActor[_stack]==stacks[_stack].owner){ //it is player2's turn require(stacks[_counterStack].owner==msg.sender); }else{ //it is player1's turn require(stacks[_stack].owner==msg.sender); } //the counter must be a counter of stack 1 require(stackCounter[_counterStack]==_stack); require(counterOfStack[_stack]==_counterStack); //make sure that we are in mode 4 require(mode[_stack]==4); uint256[10] memory flipped; if(keccak256(_reveal)!=commit[_stack]){ //commit/reveal failed.. this can happen if they //reload, so don't punish, just go back to the //start of the slammer raise mode[_stack]=3; throwSlammerEvent(_stack,msg.sender,address(0),flipped); return false; }else{ //successful slam!!!!!!!!!!!! At this point I have officially been awake for 24 hours !!!!!!!!!! mode[_stack]=3; address previousLastActor = lastActor[_stack]; bytes32 pseudoRandomHash = keccak256(_reveal,block.blockhash(commitBlock[_stack])); //Debug(_reveal,block.blockhash(block.number-1),pseudoRandomHash); if(lastActor[_stack]==stacks[_stack].owner){ //player1 goes next lastBlock[_stack]=uint32(block.number); lastActor[_stack]=stacks[_counterStack].owner; }else{ //player2 goes next lastBlock[_stack]=uint32(block.number); lastActor[_stack]=stacks[_stack].owner; } //look through the stack of remaining pogs and compare to byte to see if less than FLIPPINESS and transfer back to correct owner // oh man, that smells like reentrance -- I think the mode would actually break that right? bool done=true; uint8 randIndex = 0; for(uint8 i=0;i<10;i++){ if(mixedStack[_stack][i]>0){ //there is still a pog here, check for flip uint8 thisFlipper = uint8(pseudoRandomHash[randIndex++]); //DebugFlip(pseudoRandomHash,i,randIndex,thisFlipper,FLIPPINESS); if(thisFlipper<(FLIPPINESS+round[_stack]*FLIPPINESSROUNDBONUS)){ //ITS A FLIP! uint256 tempId = mixedStack[_stack][i]; flipped[i]=tempId; mixedStack[_stack][i]=0; SlammerTime slammerTimeContract = SlammerTime(slammerTime); //require( slammerTimeContract.transferBack(msg.sender,tempId) ); slammerTimeContract.transferBack(msg.sender,tempId); }else{ done=false; } } } throwSlammerEvent(_stack,msg.sender,previousLastActor,flipped); if(done){ FinishGame(_stack); mode[_stack]=9; delete mixedStack[_stack]; delete stacks[_stack]; delete stackCounter[_counterStack]; delete stacks[_counterStack]; delete lastBlock[_stack]; delete lastActor[_stack]; delete counterOfStack[_stack]; delete round[_stack]; delete commitBlock[_stack]; delete commit[_stack]; }else{ round[_stack]++; } return true; } } event ThrowSlammer(bytes32 indexed stack, address indexed whoDoneIt, address indexed otherPlayer, uint256 token1Flipped, uint256 token2Flipped, uint256 token3Flipped, uint256 token4Flipped, uint256 token5Flipped, uint256 token6Flipped, uint256 token7Flipped, uint256 token8Flipped, uint256 token9Flipped, uint256 token10Flipped); event FinishGame(bytes32 stack); function throwSlammerEvent(bytes32 stack,address whoDoneIt,address otherAccount, uint256[10] flipArray) internal { ThrowSlammer(stack,whoDoneIt,otherAccount,flipArray[0],flipArray[1],flipArray[2],flipArray[3],flipArray[4],flipArray[5],flipArray[6],flipArray[7],flipArray[8],flipArray[9]); } function drainStack(bytes32 _stack, bytes32 _counterStack) public returns (bool) { //this function is for the case of a timeout in the commit / reveal // if a player realizes they are going to lose, they can refuse to reveal // therefore we must have a timeout of TIMEOUTBLOCKS and if that time is reached // the other player can get in and drain the remaining tokens from the game require( stacks[_stack].owner==msg.sender || stacks[_counterStack].owner==msg.sender ); //the counter must be a counter of stack 1 require( stackCounter[_counterStack]==_stack ); require( counterOfStack[_stack]==_counterStack ); //the bad guy shouldn't be able to drain require( lastActor[_stack]==msg.sender ); //must be after timeout period require( block.number - lastBlock[_stack] >= TIMEOUTBLOCKS); //game must still be going require( mode[_stack]<9 ); for(uint8 i=0;i<10;i++){ if(mixedStack[_stack][i]>0){ uint256 tempId = mixedStack[_stack][i]; mixedStack[_stack][i]=0; SlammerTime slammerTimeContract = SlammerTime(slammerTime); slammerTimeContract.transferBack(msg.sender,tempId); } } FinishGame(_stack); mode[_stack]=9; delete mixedStack[_stack]; delete stacks[_stack]; delete stackCounter[_counterStack]; delete stacks[_counterStack]; delete lastBlock[_stack]; delete lastActor[_stack]; delete counterOfStack[_stack]; delete round[_stack]; delete commitBlock[_stack]; delete commit[_stack]; DrainStack(_stack,_counterStack,msg.sender); } event DrainStack(bytes32 stack,bytes32 counterStack,address sender); function totalSupply() public view returns (uint) { return items.length - 1; } function tokensOfOwner(address _owner) external view returns(uint256[]) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 total = totalSupply(); uint256 resultIndex = 0; uint256 id; for (id = 1; id <= total; id++) { if (tokenIndexToOwner[id] == _owner) { result[resultIndex] = id; resultIndex++; } } return result; } } function withdraw(uint256 _amount) public onlyOwner returns (bool) { require(this.balance >= _amount); assert(owner.send(_amount)); return true; } function withdrawToken(address _token,uint256 _amount) public onlyOwner returns (bool) { StandardToken token = StandardToken(_token); token.transfer(msg.sender,_amount); return true; } } contract StandardToken { function transfer(address _to, uint256 _value) public returns (bool) { } } contract SlammerTime { function startSlammerTime(address _player1,uint256[5] _id1,address _player2,uint256[5] _id2) public returns (bool) { } function transferBack(address _toWhom, uint256 _id) public returns (bool) { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_stack","type":"bytes32"}],"name":"stackOwner","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"round","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"}],"name":"acceptCounterStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_image","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_id","type":"uint256"},{"name":"_id2","type":"uint256"},{"name":"_id3","type":"uint256"},{"name":"_id4","type":"uint256"},{"name":"_id5","type":"uint256"}],"name":"submitCounterStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contact","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FLIPPINESS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"},{"name":"_image1","type":"bytes32"},{"name":"_image2","type":"bytes32"},{"name":"_image3","type":"bytes32"},{"name":"_image4","type":"bytes32"},{"name":"_image5","type":"bytes32"},{"name":"_image6","type":"bytes32"},{"name":"_image7","type":"bytes32"},{"name":"_image8","type":"bytes32"},{"name":"_image9","type":"bytes32"},{"name":"_image10","type":"bytes32"}],"name":"mintPack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BLOCKSUNTILCLEANUPSTACK","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"stacks","outputs":[{"name":"owner","type":"address"},{"name":"block","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"},{"name":"_commit","type":"bytes32"}],"name":"raiseSlammer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_stack","type":"bytes32"}],"name":"getMixedStack","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"},{"name":"_reveal","type":"bytes32"}],"name":"endCoinFlip","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FLIPPINESSROUNDBONUS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"tokensOfImage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"lastActor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"}],"name":"drainStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"purpose","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"lastBlock","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"commitBlock","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"slammerTime","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"mode","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"author","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_stack","type":"bytes32"}],"name":"getStack","outputs":[{"name":"owner","type":"address"},{"name":"block","type":"uint32"},{"name":"token1","type":"uint256"},{"name":"token2","type":"uint256"},{"name":"token3","type":"uint256"},{"name":"token4","type":"uint256"},{"name":"token5","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"name":"mixedStack","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterstack","type":"bytes32"}],"name":"cancelCounterStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ipfs","type":"string"}],"name":"setIpfs","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ipfs","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"stackCounter","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"packId","type":"uint256"}],"name":"buyPack","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_claimant","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"allowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"},{"name":"_reveal","type":"bytes32"}],"name":"throwSlammer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TIMEOUTBLOCKS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getToken","outputs":[{"name":"owner","type":"address"},{"name":"image","type":"bytes32"},{"name":"copies","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"},{"name":"_counterStack","type":"bytes32"},{"name":"_commit","type":"bytes32"}],"name":"startCoinFlip","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stack","type":"bytes32"}],"name":"cancelStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_id2","type":"uint256"},{"name":"_id3","type":"uint256"},{"name":"_id4","type":"uint256"},{"name":"_id5","type":"uint256"},{"name":"_public","type":"bool"}],"name":"submitStack","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"commit","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_slammerTime","type":"address"}],"name":"setSlammerTime","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"counterOfStack","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ipfs","type":"string"}],"name":"IPFS","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_image","type":"bytes32"},{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_id","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"packId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"token1","type":"uint256"},{"indexed":false,"name":"token2","type":"uint256"},{"indexed":false,"name":"token3","type":"uint256"},{"indexed":false,"name":"token4","type":"uint256"},{"indexed":false,"name":"token5","type":"uint256"},{"indexed":false,"name":"token6","type":"uint256"},{"indexed":false,"name":"token7","type":"uint256"},{"indexed":false,"name":"token8","type":"uint256"},{"indexed":false,"name":"token9","type":"uint256"},{"indexed":false,"name":"token10","type":"uint256"}],"name":"MintPack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"packId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"BuyPack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"_stack","type":"bytes32"},{"indexed":false,"name":"_token1","type":"uint256"},{"indexed":false,"name":"_token2","type":"uint256"},{"indexed":false,"name":"_token3","type":"uint256"},{"indexed":false,"name":"_token4","type":"uint256"},{"indexed":false,"name":"_token5","type":"uint256"},{"indexed":false,"name":"_public","type":"bool"}],"name":"SubmitStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"_stack","type":"bytes32"},{"indexed":false,"name":"_counterStack","type":"bytes32"},{"indexed":false,"name":"_token1","type":"uint256"},{"indexed":false,"name":"_token2","type":"uint256"},{"indexed":false,"name":"_token3","type":"uint256"},{"indexed":false,"name":"_token4","type":"uint256"},{"indexed":false,"name":"_token5","type":"uint256"}],"name":"CounterStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"_stack","type":"bytes32"}],"name":"CancelStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"_stack","type":"bytes32"},{"indexed":false,"name":"_counterstack","type":"bytes32"}],"name":"CancelCounterStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_stack","type":"bytes32"},{"indexed":true,"name":"_counterStack","type":"bytes32"}],"name":"AcceptCounterStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stack","type":"bytes32"},{"indexed":false,"name":"commit","type":"bytes32"}],"name":"StartCoinFlip","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"stack","type":"bytes32"},{"indexed":false,"name":"whosTurn","type":"address"},{"indexed":false,"name":"heads","type":"bool"}],"name":"CoinFlipSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stack","type":"bytes32"}],"name":"CoinFlipFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stack","type":"bytes32"},{"indexed":false,"name":"commit","type":"bytes32"}],"name":"RaiseSlammer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"stack","type":"bytes32"},{"indexed":true,"name":"whoDoneIt","type":"address"},{"indexed":true,"name":"otherPlayer","type":"address"},{"indexed":false,"name":"token1Flipped","type":"uint256"},{"indexed":false,"name":"token2Flipped","type":"uint256"},{"indexed":false,"name":"token3Flipped","type":"uint256"},{"indexed":false,"name":"token4Flipped","type":"uint256"},{"indexed":false,"name":"token5Flipped","type":"uint256"},{"indexed":false,"name":"token6Flipped","type":"uint256"},{"indexed":false,"name":"token7Flipped","type":"uint256"},{"indexed":false,"name":"token8Flipped","type":"uint256"},{"indexed":false,"name":"token9Flipped","type":"uint256"},{"indexed":false,"name":"token10Flipped","type":"uint256"}],"name":"ThrowSlammer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stack","type":"bytes32"}],"name":"FinishGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stack","type":"bytes32"},{"indexed":false,"name":"counterStack","type":"bytes32"},{"indexed":false,"name":"sender","type":"address"}],"name":"DrainStack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
6060604052600060095534156200001557600080fd5b6200001f6200007c565b60038054600160a060020a03191633600160a060020a03161790556020604051908101604052600081526006805491925090600181016200006183826200008e565b600092835260209092208391018151905550620000de915050565b60206040519081016040526000815290565b815481835581811511620000b557600083815260209020620000b5918101908301620000ba565b505050565b620000db91905b80821115620000d75760008155600101620000c1565b5090565b90565b61365980620000ee6000396000f3006060604052600436106102795763ffffffff60e060020a60003504166306fdde03811461027e578063086013c014610308578063095ea7b31461033a5780630dd5127d1461037057806318160ddd1461039c5780631d36e06c146103c157806323b872dd146103d757806324b77f0514610401578063293c6a3a1461041a57806329a404031461043c5780632e1a7d4d1461046157806333a8c45a14610477578063372e80c31461048a5780633791792a1461049d57806340a19a71146104d457806340ae7a5c146104e757806340b8783d14610525578063435ad5c1146105415780634bd8ae6f146105ad57806359828c99146105c95780636352211e146105dc5780636533b4bb146105f2578063686996a3146106085780636a8979991461061e57806370740aab1461063757806370a082311461064a57806370f6956a1461066957806374f6c562146106985780637712c870146106ae5780638462151c146106c15780638da5cb5b1461073357806395d89b41146107465780639e281a9814610759578063a591398b1461077b578063a6c3e6b914610791578063a716144a146107a4578063a8bd9c3214610807578063a9059cbb1461081d578063b20cf6fe1461083f578063b6ef78c214610858578063c31fa08314610871578063d7959cf9146108c2578063da87c969146108d5578063dc45bfb3146108eb578063ddc6a171146108f6578063de150d5d14610918578063e1757a3c14610934578063e4b50cb814610947578063e6e354071461098b578063e9db787b146109a7578063ed861328146109bd578063f14fcbc8146109e4578063f2fde38b146109fa578063f662112114610a19578063f903facc14610a38575b600080fd5b341561028957600080fd5b610291610a4e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102cd5780820151838201526020016102b5565b50505050905090810190601f1680156102fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031357600080fd5b61031e600435610a85565b604051600160a060020a03909116815260200160405180910390f35b341561034557600080fd5b61035c600160a060020a0360043516602435610aa6565b604051901515815260200160405180910390f35b341561037b57600080fd5b610386600435610b20565b60405160ff909116815260200160405180910390f35b34156103a757600080fd5b6103af610b35565b60405190815260200160405180910390f35b34156103cc57600080fd5b61031e600435610b40565b34156103e257600080fd5b6103ff600160a060020a0360043581169060243516604435610b5b565b005b341561040c57600080fd5b61035c600435602435610bcb565b341561042557600080fd5b6103af600435600160a060020a0360243516610e47565b341561044757600080fd5b61035c60043560243560443560643560843560a435610f0a565b341561046c57600080fd5b61035c60043561126f565b341561048257600080fd5b6102916112dd565b341561049557600080fd5b610386611314565b34156104a857600080fd5b61035c60043560243560443560643560843560a43560c43560e435610104356101243561014435611319565b34156104df57600080fd5b6103866114f7565b34156104f257600080fd5b6104fd6004356114fc565b604051600160a060020a03909216825263ffffffff1660208201526040908101905180910390f35b341561053057600080fd5b61035c600435602435604435611529565b341561054c57600080fd5b61055760043561168a565b604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390f35b34156105b857600080fd5b61035c6004356024356044356116dc565b34156105d457600080fd5b6103866119b4565b34156105e757600080fd5b61031e6004356119b9565b34156105fd57600080fd5b6103af6004356119dd565b341561061357600080fd5b61031e6004356119ef565b341561062957600080fd5b61035c600435602435611a0a565b341561064257600080fd5b610291611d86565b341561065557600080fd5b6103af600160a060020a0360043516611dbd565b341561067457600080fd5b61067f600435611dd8565b60405163ffffffff909116815260200160405180910390f35b34156106a357600080fd5b61067f600435611df0565b34156106b957600080fd5b61031e611e08565b34156106cc57600080fd5b6106e0600160a060020a0360043516611e17565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561071f578082015183820152602001610707565b505050509050019250505060405180910390f35b341561073e57600080fd5b61031e611ef8565b341561075157600080fd5b610291611f07565b341561076457600080fd5b61035c600160a060020a0360043516602435611f3e565b341561078657600080fd5b610386600435611fe2565b341561079c57600080fd5b610291611ff7565b34156107af57600080fd5b6107ba60043561202e565b604051600160a060020a03909716875263ffffffff90951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561081257600080fd5b61031e60043561207a565b341561082857600080fd5b6103ff600160a060020a0360043516602435612095565b341561084a57600080fd5b6103af6004356024356120ef565b341561086357600080fd5b61035c600435602435612111565b341561087c57600080fd5b61035c60046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506121f795505050505050565b34156108cd57600080fd5b6102916122db565b34156108e057600080fd5b6103af600435612379565b61035c60043561238b565b341561090157600080fd5b61035c600160a060020a036004351660243561255a565b341561092357600080fd5b61035c60043560243560443561256d565b341561093f57600080fd5b610386612b57565b341561095257600080fd5b61095d600435612b5c565b604051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390f35b341561099657600080fd5b61035c600435602435604435612ba9565b34156109b257600080fd5b61035c600435612cab565b34156109c857600080fd5b61035c60043560243560443560643560843560a4351515612d72565b34156109ef57600080fd5b6103af600435613088565b3415610a0557600080fd5b6103ff600160a060020a036004351661309a565b3415610a2457600080fd5b61035c600160a060020a0360043516613128565b3415610a4357600080fd5b6103af600435613181565b60408051908101604052600881527f43727970746f6773000000000000000000000000000000000000000000000000602082015281565b6000818152600a6020526040902060050154600160a060020a03165b919050565b6000610ab23383613193565b1515610abd57600080fd5b610ac782846131b3565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338484604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a150600192915050565b600e6020526000908152604090205460ff1681565b600654600019015b90565b600060208190529081526040902054600160a060020a031681565b600160a060020a0382161515610b7057600080fd5b30600160a060020a031682600160a060020a031614151515610b9157600080fd5b610b9b33826131e1565b1515610ba657600080fd5b610bb08382613193565b1515610bbb57600080fd5b610bc6838383613201565b505050565b6000828152600a6020526040812060050154819033600160a060020a03908116911614610bf757600080fd5b6000838152600b60205260409020548414610c1157600080fd5b6000848152600d602052604090205460ff1615610c2d57600080fd5b50600580546000858152600a602052604080822086835281832094850154600160a060020a0394851695869563291cef959533959390911692516020015260405163ffffffff861660e060020a028152600160a060020a038516600482019081529060c481019085906024015b815481526020019060010190808311610c9a575050600160a060020a038416815260c081019083906020015b815481526020019060010190808311610cc6575050945050505050602060405180830381600087803b1515610cfa57600080fd5b6102c65a03f11515610d0b57600080fd5b505050604051805190501515610d2057600080fd5b6000848152600f60209081526040808320805463ffffffff431663ffffffff19909116179055858352600a8083528184206005808201548a8752601186528487208054600160a060020a031916600160a060020a03928316179055600d8652848720805460ff19166001908117909155600c87528588208b90559386528487208054601290975296859020958655825486850155868401546002808801919091559383015460038088019190915584880154600480890191909155948401549287019290925581870154600687015590820154600786015594820154600885015501546009909201919091558491869133909116907fdd7fd1363175947f3a52d7ffa23edbf873a9960b97f9f425fd4846acd371b360905160405180910390a45092915050565b600354600090819033600160a060020a03908116911614610e6757600080fd5b610e70846132d6565b9050610e7e60008483613201565b7ff0bcd414edc501835c6c541058514fe45a43fa62a41671c9f62317c9889fcf7f600682815481101515610eae57fe5b600091825260208083209091015484835290829052604091829020549091600160a060020a0390911690849051928352600160a060020a0390911660208301526040808301919091526060909101905180910390a19392505050565b600080610f1561341a565b600554600160a060020a03161515610f2c57600080fd5b60008881526020819052604090205433600160a060020a03908116911614610f5357600080fd5b60008781526020819052604090205433600160a060020a03908116911614610f7a57600080fd5b60008681526020819052604090205433600160a060020a03908116911614610fa157600080fd5b60008581526020819052604090205433600160a060020a03908116911614610fc857600080fd5b60008481526020819052604090205433600160a060020a03908116911614610fef57600080fd5b60055461100590600160a060020a031689610aa6565b151561101057600080fd5b60055461102690600160a060020a031688610aa6565b151561103157600080fd5b60055461104790600160a060020a031687610aa6565b151561105257600080fd5b60055461106890600160a060020a031686610aa6565b151561107357600080fd5b60055461108990600160a060020a031685610aa6565b151561109457600080fd5b6000898152600a602052604090206005015433600160a060020a03908116911614156110bf57600080fd5b60098054600181019091553389604051928352600160a060020a03919091166c0100000000000000000000000002602083015260348201526054016040518091039020915060a06040519081016040528089815260200188815260200187815260200186815260200185815250905060606040519081016040908152828252600160a060020a03331660208084019190915263ffffffff4316828401526000858152600a9091522081516111769082906005613441565b506020820151600582018054600160a060020a031916600160a060020a039290921691909117905560408201516005909101805463ffffffff9290921660a060020a0277ffffffff000000000000000000000000000000000000000019909216919091179055506000828152600b6020526040908190208a905589904290600160a060020a033316907f47b61bcc3ca214175c4da7b195cc77174276ab281a2dc346245aa7dcf9289ad29086908d908d908d908d908d905195865260208601949094526040808601939093526060850191909152608084015260a083019190915260c0909101905180910390a450509695505050505050565b60035460009033600160a060020a0390811691161461128d57600080fd5b600160a060020a03301631829010156112a557600080fd5b600354600160a060020a031682156108fc0283604051600060405180830381858888f1935050505015156112d557fe5b506001919050565b60408051908101604052601381527f68747470733a2f2f63727970746f67732e696f00000000000000000000000000602082015281565b604081565b600061132361347f565b61132b61349a565b60035433600160a060020a0390811691161461134657600080fd5b61134f8d6132d6565b825261135a8c6132d6565b60208301526113688b6132d6565b60408301526113768a6132d6565b6060830152611384896132d6565b6080830152611392886132d6565b60a08301526113a0876132d6565b60c08301526113ae866132d6565b60e08301526113bc856132d6565b6101008301526113cb846132d6565b61012083015260408051908101604052808381526020018f81525090507f4a8f671d58a221ebb1bed4383288e424fe80b12424415a4f0d1a1678c46e918160016007805480600101828161141f91906134bc565b600092835260209092208591600b0201815161143e908290600a6134e8565b506020820151600a919091015550038f8451602086015160408701516060880151608089015160a08a015160c08b015160e08c01516101008d01516101208e01516040519b8c5260208c019a909a526040808c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e0870152610100860152610120850152610140840152610160830191909152610180909101905180910390a15060019d9c50505050505050505050505050565b600181565b600a60205260009081526040902060050154600160a060020a0381169060a060020a900463ffffffff1682565b6000838152600a60209081526040808320600501546011909252822054600160a060020a0390811691161415611588576000838152600a602052604090206005015433600160a060020a0390811691161461158357600080fd5b6115b2565b6000848152600a602052604090206005015433600160a060020a039081169116146115b257600080fd5b6000838152600b602052604090205484146115cc57600080fd5b6000848152600c602052604090205483146115e657600080fd5b6000848152600d602052604090205460ff1660031461160457600080fd5b600084815260136020908152604080832085905560108252808320805463ffffffff431663ffffffff19909116179055600d90915290819020805460ff191660041790557fc0ff20cfe5392a20092ea7efbdcdf530829097f1647cdd9763afb3152abe66fb90859084905191825260208201526040908101905180910390a19392505050565b6000908152601260205260409020805460018201546002830154600384015460048501546005860154600687015460078801546008890154600990990154979996989597949693959294919390929190565b6000838152600a6020526040812060050154819033600160a060020a0390811691161461170857600080fd5b6000848152600b6020526040902054851461172257600080fd5b6000858152600c6020526040902054841461173c57600080fd5b6000858152600d602052604090205460ff1660021461175a57600080fd5b600085815260136020526040908190205490849051908152602001604051908190039020146117da576000858152600d602052604090819020805460ff191660011790557ff635b6ec989f4625e37238e46592f6b9244568bac6557b4a51e189a03ea2516b9086905190815260200160405180910390a1600091506119ac565b6000858152600d60209081526040808320805460ff19908116600317909155600e83528184208054909116600117905560109091529081902054849163ffffffff90911640905191825260208201526040908101905190819003902090506002810615156118f9576000858152600f60209081526040808320805463ffffffff431663ffffffff19909116179055868352600a8083528184206005908101548a8652601185528386208054600160a060020a031916600160a060020a0392831617905591909352928190209091015487927fa099bb85eb0810506ac87658bdecae67a43f87ce335e4e7e8521342e13d9e9729291169060019051600160a060020a039092168252151560208201526040908101905180910390a26119a7565b6000858152600f60209081526040808320805463ffffffff431663ffffffff19909116179055600a808352818420600590810154601185528386208054600160a060020a031916600160a060020a03928316179055898652919093528184209092015488937fa099bb85eb0810506ac87658bdecae67a43f87ce335e4e7e8521342e13d9e97293919091169151600160a060020a039092168252151560208201526040908101905180910390a25b600191505b509392505050565b601081565b600081815260208190526040902054600160a060020a0316801515610aa157600080fd5b60086020526000908152604090205481565b601160205260009081526040902054600160a060020a031681565b6000828152600a602052604081206005015481908190819033600160a060020a0390811691161480611a5957506000858152600a602052604090206005015433600160a060020a039081169116145b1515611a6457600080fd5b6000858152600b60205260409020548614611a7e57600080fd5b6000868152600c60205260409020548514611a9857600080fd5b60008681526011602052604090205433600160a060020a03908116911614611abf57600080fd5b6000868152600f6020526040902054603c63ffffffff90911643031015611ae557600080fd5b6000868152600d6020526040902054600960ff90911610611b0557600080fd5b600092505b600a8360ff161015611c0257600086815260126020526040812060ff8516600a8110611b3257fe5b01541115611bf757600086815260126020526040902060ff8416600a8110611b5657fe5b015460008781526012602052604081209193509060ff8516600a8110611b7857fe5b015550600554600160a060020a03168063c8f2835f338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bdb57600080fd5b6102c65a03f11515611bec57600080fd5b505050604051805150505b600190920191611b0a565b7fe5f81b734f3f18d93d36ec80c862452fc71443fc8ebf0e47d1c6d2f1dbd892e08660405190815260200160405180910390a16000868152600d60209081526040808320805460ff1916600917905560129091528120611c6191613515565b6000868152600a6020526040812090611c7a8282613527565b506005018054600160c060020a03191690556000858152600b60209081526040808320839055600a909152812090611cb28282613527565b506005018054600160c060020a03191690556000868152600f60209081526040808320805463ffffffff19908116909155601183528184208054600160a060020a0319169055600c8352818420849055600e8352818420805460ff1916905560108352818420805490911690556013909152808220919091557ffb2a8622b9c682baa4d8b678e6733ba9de2dd0e5c64083a82ffd4ab7499094e390879087903390519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a150505092915050565b60408051908101604052600981527f45544844656e7665720000000000000000000000000000000000000000000000602082015281565b600160a060020a031660009081526001602052604090205490565b600f6020526000908152604090205463ffffffff1681565b60106020526000908152604090205463ffffffff1681565b600554600160a060020a031681565b611e1f61354a565b6000611e2961354a565b6000806000611e3787611dbd565b9450841515611e67576000604051805910611e4f5750595b90808252806020026020018201604052509550611eee565b84604051805910611e755750595b90808252806020026020018201604052509350611e90610b35565b925060009150600190505b828111611eea57600081815260208190526040902054600160a060020a0388811691161415611ee25780848381518110611ed157fe5b602090810290910101526001909101905b600101611e9b565b8395505b5050505050919050565b600354600160a060020a031681565b60408051908101604052600481527f504f475300000000000000000000000000000000000000000000000000000000602082015281565b600354600090819033600160a060020a03908116911614611f5e57600080fd5b5082600160a060020a03811663a9059cbb338560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611fbd57600080fd5b6102c65a03f11515611fce57600080fd5b505050604051805150600195945050505050565b600d6020526000908152604090205460ff1681565b60408051908101604052601681527f41757374696e2054686f6d617320477269666669746800000000000000000000602082015281565b6000908152600a6020526040902060058101548154600183015460028401546003850154600490950154600160a060020a0385169660a060020a90950463ffffffff1695939492939192565b600260205260009081526040902054600160a060020a031681565b600160a060020a03821615156120aa57600080fd5b30600160a060020a031682600160a060020a0316141515156120cb57600080fd5b6120d53382613193565b15156120e057600080fd5b6120eb338383613201565b5050565b601260205260008281526040902081600a811061210857fe5b01549150829050565b6000818152600a602052604081206005015433600160a060020a0390811691161461213b57600080fd5b6000828152600b6020526040902054831461215557600080fd5b6000838152600d602052604090205460ff161561217157600080fd5b6000828152600a602052604081209061218a8282613527565b506005018054600160c060020a03191690556000828152600b6020526040808220919091558390429033600160a060020a0316907f062e1030c9368c55de9601fd749b2f18ac68e0ac3a47b1efb13cab12a71e8c7d9086905190815260200160405180910390a492915050565b60035460009033600160a060020a0390811691161461221557600080fd5b600482805161222892916020019061355c565b507f3090bde09ffb6d36f4591138ff237ad3d1b676bc501c122d6976b94f3b23bfd76004604051602080825282546002600019610100600184161502019091160490820181905281906040820190849080156122c55780601f1061229a576101008083540402835291602001916122c5565b820191906000526020600020905b8154815290600101906020018083116122a857829003601f168201915b50509250505060405180910390a1506001919050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123715780601f1061234657610100808354040283529160200191612371565b820191906000526020600020905b81548152906001019060200180831161235457829003601f168201915b505050505081565b600b6020526000908152604090205481565b600080600060078481548110151561239f57fe5b90600052602060002090600b0201600a01541115156123bd57600080fd5b60078054849081106123cb57fe5b90600052602060002090600b0201600a015434101515156123eb57600080fd5b60006007848154811015156123fc57fe5b90600052602060002090600b0201600a0181905550600090505b600a8160ff1610156124c9573360008060078681548110151561243557fe5b60009182526020909120600b9091020160ff8516600a811061245357fe5b0154815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506124c160003360078681548110151561249c57fe5b60009182526020909120600b9091020160ff8516600a81106124ba57fe5b0154613201565b600101612416565b60078054849081106124d757fe5b600091825260208220600b90910201906124f18282613515565b600a82016000905550507f77169709497f21b632c8ed22314999645df83dda13ebcc08219e82776e6ceeb83384346040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150919050565b600061256683836131e1565b9392505050565b600061257761347f565b6000858152600a602090815260408083206005015460119092528220548291829182918291829182918291600160a060020a03918216911614156125e45760008c8152600a602052604090206005015433600160a060020a039081169116146125df57600080fd5b61260e565b60008d8152600a602052604090206005015433600160a060020a0390811691161461260e57600080fd5b60008c8152600b60205260409020548d1461262857600080fd5b60008d8152600c60205260409020548c1461264257600080fd5b60008d8152600d602052604090205460ff1660041461266057600080fd5b60008d8152601360205260409081902054908c9051908152602001604051908190039020146126b95760008d8152600d60205260408120805460ff191660031790556126b0908e9033908c61335e565b60009950612b47565b60008d8152600d60209081526040808320805460ff19166003179055601182528083205460109092529182902054600160a060020a0390911699508c9163ffffffff90911640905191825260208201526040908101905190819003902060008e8152600a6020908152604080832060050154601190925290912054919850600160a060020a03918216911614156127fa5743600f60008f6000191660001916815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550600a60008d6000191660001916815260200190815260200160002060050160009054906101000a9004600160a060020a0316601160008f6000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550612851565b60008d8152600f60209081526040808320805463ffffffff431663ffffffff19909116179055600a82528083206005015460119092529091208054600160a060020a031916600160a060020a039092169190911790555b6001955060009450600093505b600a8460ff1610156129e35760008d815260126020526040812060ff8616600a811061288657fe5b015411156129d8576001850194879060ff16602081106128a257fe5b60008f8152600e602052604090819020547f01000000000000000000000000000000000000000000000000000000000000009390921a830292909204945060ff908116601002909101811690841610156129d35760008d815260126020526040902060ff8516600a811061291257fe5b01549150818960ff8616600a811061292657fe5b6020908102919091019190915260008e815260129091526040812060ff8616600a811061294f57fe5b015550600554600160a060020a03168063c8f2835f338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156129b257600080fd5b6102c65a03f115156129c357600080fd5b50505060405180519050506129d8565b600095505b60019093019261285e565b6129ef8d338a8c61335e565b8515612b1f577fe5f81b734f3f18d93d36ec80c862452fc71443fc8ebf0e47d1c6d2f1dbd892e08d60405190815260200160405180910390a160008d8152600d60209081526040808320805460ff1916600917905560129091528120612a5491613515565b60008d8152600a6020526040812090612a6d8282613527565b506005018054600160c060020a031916905560008c8152600b60209081526040808320839055600a909152812090612aa58282613527565b506005018054600160c060020a031916905560008d8152600f60209081526040808320805463ffffffff19908116909155601183528184208054600160a060020a0319169055600c8352818420849055600e8352818420805460ff1916905560108352818420805490911690556013909152812055612b42565b60008d8152600e60205260409020805460ff8082166001011660ff199091161790555b600199505b5050505050505050509392505050565b603c81565b6000806000600684815481101515612b7057fe5b6000918252602080832091909101548083526008825260408084205497845291839052912054600160a060020a03169590949350915050565b6000838152600a602052604081206005015433600160a060020a03908116911614612bd357600080fd5b6000838152600b60205260409020548414612bed57600080fd5b6000848152600c60205260409020548314612c0757600080fd5b6000848152600d602052604090205460ff16600114612c2557600080fd5b600084815260136020908152604080832085905560108252808320805463ffffffff431663ffffffff19909116179055600d90915290819020805460ff191660021790557fe7734e0c9b6c6b123b7d035fcfbe050bf56999397e9807c82f841ebfccb16e6e90859084905191825260208201526040908101905180910390a19392505050565b6000818152600a602052604081206005015433600160a060020a03908116911614612cd557600080fd5b6000828152600d602052604090205460ff1615612cf157600080fd5b6000828152600b602052604090205415612d0a57600080fd5b6000828152600a6020526040812090612d238282613527565b506005018054600160c060020a0319169055814233600160a060020a03167f5988b3df3495bd77e3aea1be20b1e7a4750ef0d9a31fbc97a5b18d1c76b0a5d460405160405180910390a4919050565b600080612d7d61341a565b600554600160a060020a03161515612d9457600080fd5b60008981526020819052604090205433600160a060020a03908116911614612dbb57600080fd5b60008881526020819052604090205433600160a060020a03908116911614612de257600080fd5b60008781526020819052604090205433600160a060020a03908116911614612e0957600080fd5b60008681526020819052604090205433600160a060020a03908116911614612e3057600080fd5b60008581526020819052604090205433600160a060020a03908116911614612e5757600080fd5b600554612e6d90600160a060020a03168a610aa6565b1515612e7857600080fd5b600554612e8e90600160a060020a031689610aa6565b1515612e9957600080fd5b600554612eaf90600160a060020a031688610aa6565b1515612eba57600080fd5b600554612ed090600160a060020a031687610aa6565b1515612edb57600080fd5b600554612ef190600160a060020a031686610aa6565b1515612efc57600080fd5b600980546001810190915533604051918252600160a060020a03166c010000000000000000000000000260208201526034016040518091039020915060a0604051908101604052808a815260200189815260200188815260200187815260200186815250905060606040519081016040908152828252600160a060020a03331660208084019190915263ffffffff4316828401526000858152600a909152208151612faa9082906005613441565b506020820151600582018054600160a060020a031916600160a060020a039290921691909117905560408201516005909101805463ffffffff9290921660a060020a0277ffffffff000000000000000000000000000000000000000019909216919091179055508142600160a060020a0333167f39372912b756024e0f55c30508adca06029ca2e832fcfa2da38e30f2a0f4c3318c8c8c8c8c8c60405195865260208601949094526040808601939093526060850191909152608084015290151560a083015260c0909101905180910390a450509695505050505050565b60136020526000908152604090205481565b60035433600160a060020a039081169116146130b557600080fd5b600160a060020a03811615156130ca57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0392909216919091179055565b60035460009033600160a060020a0390811691161461314657600080fd5b600554600160a060020a03161561315c57600080fd5b5060058054600160a060020a038316600160a060020a03199091161790556001919050565b600c6020526000908152604090205481565b600090815260208190526040902054600160a060020a0391821691161490565b6000918252600260205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600090815260026020526040902054600160a060020a0391821691161490565b600160a060020a038083166000818152600160208181526040808420805490930190925585835282905290208054600160a060020a031916909117905583161561328157600160a060020a03831660009081526001602090815260408083208054600019019055838352600290915290208054600160a060020a03191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b60006132e061354a565b600060206040519081016040528481526006805491935060019180830161330783826135c9565b60009283526020909220859101815190555060068054929091039250600891600091908490811061333457fe5b60009182526020808320909101548352820192909252604001902080546001019055915050919050565b600160a060020a03828116908416857faac628e491aa8536c36958d1dc3e71f2b3acfceb21172980887d7c74bed416738451602086015160408701516060880151608089015160a08a015160c08b015160e08c01516101008d01516101208e0151604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390a450505050565b60a06040519081016040526005815b60008152602001906001900390816134295790505090565b826005810192821561346f579160200282015b8281111561346f578251825591602001919060010190613454565b5061347b9291506135e9565b5090565b61014060405190810160405260008152600960208201613429565b610160604051908101604052806134af61347f565b8152602001600081525090565b815481835581811511610bc657600b0281600b028360005260206000209182019101610bc69190613603565b82600a810192821561346f579160200282018281111561346f578251825591602001919060010190613454565b5061352490600a8101906135e9565b50565b506000815560010160008155600101600081556001016000815560010160009055565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359d57805160ff191683800117855561346f565b8280016001018555821561346f579182018281111561346f578251825591602001919060010190613454565b815481835581811511610bc657600083815260209020610bc69181019083015b610b3d91905b8082111561347b57600081556001016135ef565b610b3d91905b8082111561347b57600061361d8282613515565b506000600a820155600b016136095600a165627a7a723058205ce6b5eef6c7d8cbcb85c89b95ea79b09046690b3e79197947255e47278ac07b0029
Deployed Bytecode
0x6060604052600436106102795763ffffffff60e060020a60003504166306fdde03811461027e578063086013c014610308578063095ea7b31461033a5780630dd5127d1461037057806318160ddd1461039c5780631d36e06c146103c157806323b872dd146103d757806324b77f0514610401578063293c6a3a1461041a57806329a404031461043c5780632e1a7d4d1461046157806333a8c45a14610477578063372e80c31461048a5780633791792a1461049d57806340a19a71146104d457806340ae7a5c146104e757806340b8783d14610525578063435ad5c1146105415780634bd8ae6f146105ad57806359828c99146105c95780636352211e146105dc5780636533b4bb146105f2578063686996a3146106085780636a8979991461061e57806370740aab1461063757806370a082311461064a57806370f6956a1461066957806374f6c562146106985780637712c870146106ae5780638462151c146106c15780638da5cb5b1461073357806395d89b41146107465780639e281a9814610759578063a591398b1461077b578063a6c3e6b914610791578063a716144a146107a4578063a8bd9c3214610807578063a9059cbb1461081d578063b20cf6fe1461083f578063b6ef78c214610858578063c31fa08314610871578063d7959cf9146108c2578063da87c969146108d5578063dc45bfb3146108eb578063ddc6a171146108f6578063de150d5d14610918578063e1757a3c14610934578063e4b50cb814610947578063e6e354071461098b578063e9db787b146109a7578063ed861328146109bd578063f14fcbc8146109e4578063f2fde38b146109fa578063f662112114610a19578063f903facc14610a38575b600080fd5b341561028957600080fd5b610291610a4e565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102cd5780820151838201526020016102b5565b50505050905090810190601f1680156102fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031357600080fd5b61031e600435610a85565b604051600160a060020a03909116815260200160405180910390f35b341561034557600080fd5b61035c600160a060020a0360043516602435610aa6565b604051901515815260200160405180910390f35b341561037b57600080fd5b610386600435610b20565b60405160ff909116815260200160405180910390f35b34156103a757600080fd5b6103af610b35565b60405190815260200160405180910390f35b34156103cc57600080fd5b61031e600435610b40565b34156103e257600080fd5b6103ff600160a060020a0360043581169060243516604435610b5b565b005b341561040c57600080fd5b61035c600435602435610bcb565b341561042557600080fd5b6103af600435600160a060020a0360243516610e47565b341561044757600080fd5b61035c60043560243560443560643560843560a435610f0a565b341561046c57600080fd5b61035c60043561126f565b341561048257600080fd5b6102916112dd565b341561049557600080fd5b610386611314565b34156104a857600080fd5b61035c60043560243560443560643560843560a43560c43560e435610104356101243561014435611319565b34156104df57600080fd5b6103866114f7565b34156104f257600080fd5b6104fd6004356114fc565b604051600160a060020a03909216825263ffffffff1660208201526040908101905180910390f35b341561053057600080fd5b61035c600435602435604435611529565b341561054c57600080fd5b61055760043561168a565b604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390f35b34156105b857600080fd5b61035c6004356024356044356116dc565b34156105d457600080fd5b6103866119b4565b34156105e757600080fd5b61031e6004356119b9565b34156105fd57600080fd5b6103af6004356119dd565b341561061357600080fd5b61031e6004356119ef565b341561062957600080fd5b61035c600435602435611a0a565b341561064257600080fd5b610291611d86565b341561065557600080fd5b6103af600160a060020a0360043516611dbd565b341561067457600080fd5b61067f600435611dd8565b60405163ffffffff909116815260200160405180910390f35b34156106a357600080fd5b61067f600435611df0565b34156106b957600080fd5b61031e611e08565b34156106cc57600080fd5b6106e0600160a060020a0360043516611e17565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561071f578082015183820152602001610707565b505050509050019250505060405180910390f35b341561073e57600080fd5b61031e611ef8565b341561075157600080fd5b610291611f07565b341561076457600080fd5b61035c600160a060020a0360043516602435611f3e565b341561078657600080fd5b610386600435611fe2565b341561079c57600080fd5b610291611ff7565b34156107af57600080fd5b6107ba60043561202e565b604051600160a060020a03909716875263ffffffff90951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561081257600080fd5b61031e60043561207a565b341561082857600080fd5b6103ff600160a060020a0360043516602435612095565b341561084a57600080fd5b6103af6004356024356120ef565b341561086357600080fd5b61035c600435602435612111565b341561087c57600080fd5b61035c60046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506121f795505050505050565b34156108cd57600080fd5b6102916122db565b34156108e057600080fd5b6103af600435612379565b61035c60043561238b565b341561090157600080fd5b61035c600160a060020a036004351660243561255a565b341561092357600080fd5b61035c60043560243560443561256d565b341561093f57600080fd5b610386612b57565b341561095257600080fd5b61095d600435612b5c565b604051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390f35b341561099657600080fd5b61035c600435602435604435612ba9565b34156109b257600080fd5b61035c600435612cab565b34156109c857600080fd5b61035c60043560243560443560643560843560a4351515612d72565b34156109ef57600080fd5b6103af600435613088565b3415610a0557600080fd5b6103ff600160a060020a036004351661309a565b3415610a2457600080fd5b61035c600160a060020a0360043516613128565b3415610a4357600080fd5b6103af600435613181565b60408051908101604052600881527f43727970746f6773000000000000000000000000000000000000000000000000602082015281565b6000818152600a6020526040902060050154600160a060020a03165b919050565b6000610ab23383613193565b1515610abd57600080fd5b610ac782846131b3565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338484604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a150600192915050565b600e6020526000908152604090205460ff1681565b600654600019015b90565b600060208190529081526040902054600160a060020a031681565b600160a060020a0382161515610b7057600080fd5b30600160a060020a031682600160a060020a031614151515610b9157600080fd5b610b9b33826131e1565b1515610ba657600080fd5b610bb08382613193565b1515610bbb57600080fd5b610bc6838383613201565b505050565b6000828152600a6020526040812060050154819033600160a060020a03908116911614610bf757600080fd5b6000838152600b60205260409020548414610c1157600080fd5b6000848152600d602052604090205460ff1615610c2d57600080fd5b50600580546000858152600a602052604080822086835281832094850154600160a060020a0394851695869563291cef959533959390911692516020015260405163ffffffff861660e060020a028152600160a060020a038516600482019081529060c481019085906024015b815481526020019060010190808311610c9a575050600160a060020a038416815260c081019083906020015b815481526020019060010190808311610cc6575050945050505050602060405180830381600087803b1515610cfa57600080fd5b6102c65a03f11515610d0b57600080fd5b505050604051805190501515610d2057600080fd5b6000848152600f60209081526040808320805463ffffffff431663ffffffff19909116179055858352600a8083528184206005808201548a8752601186528487208054600160a060020a031916600160a060020a03928316179055600d8652848720805460ff19166001908117909155600c87528588208b90559386528487208054601290975296859020958655825486850155868401546002808801919091559383015460038088019190915584880154600480890191909155948401549287019290925581870154600687015590820154600786015594820154600885015501546009909201919091558491869133909116907fdd7fd1363175947f3a52d7ffa23edbf873a9960b97f9f425fd4846acd371b360905160405180910390a45092915050565b600354600090819033600160a060020a03908116911614610e6757600080fd5b610e70846132d6565b9050610e7e60008483613201565b7ff0bcd414edc501835c6c541058514fe45a43fa62a41671c9f62317c9889fcf7f600682815481101515610eae57fe5b600091825260208083209091015484835290829052604091829020549091600160a060020a0390911690849051928352600160a060020a0390911660208301526040808301919091526060909101905180910390a19392505050565b600080610f1561341a565b600554600160a060020a03161515610f2c57600080fd5b60008881526020819052604090205433600160a060020a03908116911614610f5357600080fd5b60008781526020819052604090205433600160a060020a03908116911614610f7a57600080fd5b60008681526020819052604090205433600160a060020a03908116911614610fa157600080fd5b60008581526020819052604090205433600160a060020a03908116911614610fc857600080fd5b60008481526020819052604090205433600160a060020a03908116911614610fef57600080fd5b60055461100590600160a060020a031689610aa6565b151561101057600080fd5b60055461102690600160a060020a031688610aa6565b151561103157600080fd5b60055461104790600160a060020a031687610aa6565b151561105257600080fd5b60055461106890600160a060020a031686610aa6565b151561107357600080fd5b60055461108990600160a060020a031685610aa6565b151561109457600080fd5b6000898152600a602052604090206005015433600160a060020a03908116911614156110bf57600080fd5b60098054600181019091553389604051928352600160a060020a03919091166c0100000000000000000000000002602083015260348201526054016040518091039020915060a06040519081016040528089815260200188815260200187815260200186815260200185815250905060606040519081016040908152828252600160a060020a03331660208084019190915263ffffffff4316828401526000858152600a9091522081516111769082906005613441565b506020820151600582018054600160a060020a031916600160a060020a039290921691909117905560408201516005909101805463ffffffff9290921660a060020a0277ffffffff000000000000000000000000000000000000000019909216919091179055506000828152600b6020526040908190208a905589904290600160a060020a033316907f47b61bcc3ca214175c4da7b195cc77174276ab281a2dc346245aa7dcf9289ad29086908d908d908d908d908d905195865260208601949094526040808601939093526060850191909152608084015260a083019190915260c0909101905180910390a450509695505050505050565b60035460009033600160a060020a0390811691161461128d57600080fd5b600160a060020a03301631829010156112a557600080fd5b600354600160a060020a031682156108fc0283604051600060405180830381858888f1935050505015156112d557fe5b506001919050565b60408051908101604052601381527f68747470733a2f2f63727970746f67732e696f00000000000000000000000000602082015281565b604081565b600061132361347f565b61132b61349a565b60035433600160a060020a0390811691161461134657600080fd5b61134f8d6132d6565b825261135a8c6132d6565b60208301526113688b6132d6565b60408301526113768a6132d6565b6060830152611384896132d6565b6080830152611392886132d6565b60a08301526113a0876132d6565b60c08301526113ae866132d6565b60e08301526113bc856132d6565b6101008301526113cb846132d6565b61012083015260408051908101604052808381526020018f81525090507f4a8f671d58a221ebb1bed4383288e424fe80b12424415a4f0d1a1678c46e918160016007805480600101828161141f91906134bc565b600092835260209092208591600b0201815161143e908290600a6134e8565b506020820151600a919091015550038f8451602086015160408701516060880151608089015160a08a015160c08b015160e08c01516101008d01516101208e01516040519b8c5260208c019a909a526040808c019990995260608b019790975260808a019590955260a089019390935260c088019190915260e0870152610100860152610120850152610140840152610160830191909152610180909101905180910390a15060019d9c50505050505050505050505050565b600181565b600a60205260009081526040902060050154600160a060020a0381169060a060020a900463ffffffff1682565b6000838152600a60209081526040808320600501546011909252822054600160a060020a0390811691161415611588576000838152600a602052604090206005015433600160a060020a0390811691161461158357600080fd5b6115b2565b6000848152600a602052604090206005015433600160a060020a039081169116146115b257600080fd5b6000838152600b602052604090205484146115cc57600080fd5b6000848152600c602052604090205483146115e657600080fd5b6000848152600d602052604090205460ff1660031461160457600080fd5b600084815260136020908152604080832085905560108252808320805463ffffffff431663ffffffff19909116179055600d90915290819020805460ff191660041790557fc0ff20cfe5392a20092ea7efbdcdf530829097f1647cdd9763afb3152abe66fb90859084905191825260208201526040908101905180910390a19392505050565b6000908152601260205260409020805460018201546002830154600384015460048501546005860154600687015460078801546008890154600990990154979996989597949693959294919390929190565b6000838152600a6020526040812060050154819033600160a060020a0390811691161461170857600080fd5b6000848152600b6020526040902054851461172257600080fd5b6000858152600c6020526040902054841461173c57600080fd5b6000858152600d602052604090205460ff1660021461175a57600080fd5b600085815260136020526040908190205490849051908152602001604051908190039020146117da576000858152600d602052604090819020805460ff191660011790557ff635b6ec989f4625e37238e46592f6b9244568bac6557b4a51e189a03ea2516b9086905190815260200160405180910390a1600091506119ac565b6000858152600d60209081526040808320805460ff19908116600317909155600e83528184208054909116600117905560109091529081902054849163ffffffff90911640905191825260208201526040908101905190819003902090506002810615156118f9576000858152600f60209081526040808320805463ffffffff431663ffffffff19909116179055868352600a8083528184206005908101548a8652601185528386208054600160a060020a031916600160a060020a0392831617905591909352928190209091015487927fa099bb85eb0810506ac87658bdecae67a43f87ce335e4e7e8521342e13d9e9729291169060019051600160a060020a039092168252151560208201526040908101905180910390a26119a7565b6000858152600f60209081526040808320805463ffffffff431663ffffffff19909116179055600a808352818420600590810154601185528386208054600160a060020a031916600160a060020a03928316179055898652919093528184209092015488937fa099bb85eb0810506ac87658bdecae67a43f87ce335e4e7e8521342e13d9e97293919091169151600160a060020a039092168252151560208201526040908101905180910390a25b600191505b509392505050565b601081565b600081815260208190526040902054600160a060020a0316801515610aa157600080fd5b60086020526000908152604090205481565b601160205260009081526040902054600160a060020a031681565b6000828152600a602052604081206005015481908190819033600160a060020a0390811691161480611a5957506000858152600a602052604090206005015433600160a060020a039081169116145b1515611a6457600080fd5b6000858152600b60205260409020548614611a7e57600080fd5b6000868152600c60205260409020548514611a9857600080fd5b60008681526011602052604090205433600160a060020a03908116911614611abf57600080fd5b6000868152600f6020526040902054603c63ffffffff90911643031015611ae557600080fd5b6000868152600d6020526040902054600960ff90911610611b0557600080fd5b600092505b600a8360ff161015611c0257600086815260126020526040812060ff8516600a8110611b3257fe5b01541115611bf757600086815260126020526040902060ff8416600a8110611b5657fe5b015460008781526012602052604081209193509060ff8516600a8110611b7857fe5b015550600554600160a060020a03168063c8f2835f338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611bdb57600080fd5b6102c65a03f11515611bec57600080fd5b505050604051805150505b600190920191611b0a565b7fe5f81b734f3f18d93d36ec80c862452fc71443fc8ebf0e47d1c6d2f1dbd892e08660405190815260200160405180910390a16000868152600d60209081526040808320805460ff1916600917905560129091528120611c6191613515565b6000868152600a6020526040812090611c7a8282613527565b506005018054600160c060020a03191690556000858152600b60209081526040808320839055600a909152812090611cb28282613527565b506005018054600160c060020a03191690556000868152600f60209081526040808320805463ffffffff19908116909155601183528184208054600160a060020a0319169055600c8352818420849055600e8352818420805460ff1916905560108352818420805490911690556013909152808220919091557ffb2a8622b9c682baa4d8b678e6733ba9de2dd0e5c64083a82ffd4ab7499094e390879087903390519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a150505092915050565b60408051908101604052600981527f45544844656e7665720000000000000000000000000000000000000000000000602082015281565b600160a060020a031660009081526001602052604090205490565b600f6020526000908152604090205463ffffffff1681565b60106020526000908152604090205463ffffffff1681565b600554600160a060020a031681565b611e1f61354a565b6000611e2961354a565b6000806000611e3787611dbd565b9450841515611e67576000604051805910611e4f5750595b90808252806020026020018201604052509550611eee565b84604051805910611e755750595b90808252806020026020018201604052509350611e90610b35565b925060009150600190505b828111611eea57600081815260208190526040902054600160a060020a0388811691161415611ee25780848381518110611ed157fe5b602090810290910101526001909101905b600101611e9b565b8395505b5050505050919050565b600354600160a060020a031681565b60408051908101604052600481527f504f475300000000000000000000000000000000000000000000000000000000602082015281565b600354600090819033600160a060020a03908116911614611f5e57600080fd5b5082600160a060020a03811663a9059cbb338560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611fbd57600080fd5b6102c65a03f11515611fce57600080fd5b505050604051805150600195945050505050565b600d6020526000908152604090205460ff1681565b60408051908101604052601681527f41757374696e2054686f6d617320477269666669746800000000000000000000602082015281565b6000908152600a6020526040902060058101548154600183015460028401546003850154600490950154600160a060020a0385169660a060020a90950463ffffffff1695939492939192565b600260205260009081526040902054600160a060020a031681565b600160a060020a03821615156120aa57600080fd5b30600160a060020a031682600160a060020a0316141515156120cb57600080fd5b6120d53382613193565b15156120e057600080fd5b6120eb338383613201565b5050565b601260205260008281526040902081600a811061210857fe5b01549150829050565b6000818152600a602052604081206005015433600160a060020a0390811691161461213b57600080fd5b6000828152600b6020526040902054831461215557600080fd5b6000838152600d602052604090205460ff161561217157600080fd5b6000828152600a602052604081209061218a8282613527565b506005018054600160c060020a03191690556000828152600b6020526040808220919091558390429033600160a060020a0316907f062e1030c9368c55de9601fd749b2f18ac68e0ac3a47b1efb13cab12a71e8c7d9086905190815260200160405180910390a492915050565b60035460009033600160a060020a0390811691161461221557600080fd5b600482805161222892916020019061355c565b507f3090bde09ffb6d36f4591138ff237ad3d1b676bc501c122d6976b94f3b23bfd76004604051602080825282546002600019610100600184161502019091160490820181905281906040820190849080156122c55780601f1061229a576101008083540402835291602001916122c5565b820191906000526020600020905b8154815290600101906020018083116122a857829003601f168201915b50509250505060405180910390a1506001919050565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123715780601f1061234657610100808354040283529160200191612371565b820191906000526020600020905b81548152906001019060200180831161235457829003601f168201915b505050505081565b600b6020526000908152604090205481565b600080600060078481548110151561239f57fe5b90600052602060002090600b0201600a01541115156123bd57600080fd5b60078054849081106123cb57fe5b90600052602060002090600b0201600a015434101515156123eb57600080fd5b60006007848154811015156123fc57fe5b90600052602060002090600b0201600a0181905550600090505b600a8160ff1610156124c9573360008060078681548110151561243557fe5b60009182526020909120600b9091020160ff8516600a811061245357fe5b0154815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055506124c160003360078681548110151561249c57fe5b60009182526020909120600b9091020160ff8516600a81106124ba57fe5b0154613201565b600101612416565b60078054849081106124d757fe5b600091825260208220600b90910201906124f18282613515565b600a82016000905550507f77169709497f21b632c8ed22314999645df83dda13ebcc08219e82776e6ceeb83384346040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150919050565b600061256683836131e1565b9392505050565b600061257761347f565b6000858152600a602090815260408083206005015460119092528220548291829182918291829182918291600160a060020a03918216911614156125e45760008c8152600a602052604090206005015433600160a060020a039081169116146125df57600080fd5b61260e565b60008d8152600a602052604090206005015433600160a060020a0390811691161461260e57600080fd5b60008c8152600b60205260409020548d1461262857600080fd5b60008d8152600c60205260409020548c1461264257600080fd5b60008d8152600d602052604090205460ff1660041461266057600080fd5b60008d8152601360205260409081902054908c9051908152602001604051908190039020146126b95760008d8152600d60205260408120805460ff191660031790556126b0908e9033908c61335e565b60009950612b47565b60008d8152600d60209081526040808320805460ff19166003179055601182528083205460109092529182902054600160a060020a0390911699508c9163ffffffff90911640905191825260208201526040908101905190819003902060008e8152600a6020908152604080832060050154601190925290912054919850600160a060020a03918216911614156127fa5743600f60008f6000191660001916815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff160217905550600a60008d6000191660001916815260200190815260200160002060050160009054906101000a9004600160a060020a0316601160008f6000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550612851565b60008d8152600f60209081526040808320805463ffffffff431663ffffffff19909116179055600a82528083206005015460119092529091208054600160a060020a031916600160a060020a039092169190911790555b6001955060009450600093505b600a8460ff1610156129e35760008d815260126020526040812060ff8616600a811061288657fe5b015411156129d8576001850194879060ff16602081106128a257fe5b60008f8152600e602052604090819020547f01000000000000000000000000000000000000000000000000000000000000009390921a830292909204945060ff908116601002909101811690841610156129d35760008d815260126020526040902060ff8516600a811061291257fe5b01549150818960ff8616600a811061292657fe5b6020908102919091019190915260008e815260129091526040812060ff8616600a811061294f57fe5b015550600554600160a060020a03168063c8f2835f338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156129b257600080fd5b6102c65a03f115156129c357600080fd5b50505060405180519050506129d8565b600095505b60019093019261285e565b6129ef8d338a8c61335e565b8515612b1f577fe5f81b734f3f18d93d36ec80c862452fc71443fc8ebf0e47d1c6d2f1dbd892e08d60405190815260200160405180910390a160008d8152600d60209081526040808320805460ff1916600917905560129091528120612a5491613515565b60008d8152600a6020526040812090612a6d8282613527565b506005018054600160c060020a031916905560008c8152600b60209081526040808320839055600a909152812090612aa58282613527565b506005018054600160c060020a031916905560008d8152600f60209081526040808320805463ffffffff19908116909155601183528184208054600160a060020a0319169055600c8352818420849055600e8352818420805460ff1916905560108352818420805490911690556013909152812055612b42565b60008d8152600e60205260409020805460ff8082166001011660ff199091161790555b600199505b5050505050505050509392505050565b603c81565b6000806000600684815481101515612b7057fe5b6000918252602080832091909101548083526008825260408084205497845291839052912054600160a060020a03169590949350915050565b6000838152600a602052604081206005015433600160a060020a03908116911614612bd357600080fd5b6000838152600b60205260409020548414612bed57600080fd5b6000848152600c60205260409020548314612c0757600080fd5b6000848152600d602052604090205460ff16600114612c2557600080fd5b600084815260136020908152604080832085905560108252808320805463ffffffff431663ffffffff19909116179055600d90915290819020805460ff191660021790557fe7734e0c9b6c6b123b7d035fcfbe050bf56999397e9807c82f841ebfccb16e6e90859084905191825260208201526040908101905180910390a19392505050565b6000818152600a602052604081206005015433600160a060020a03908116911614612cd557600080fd5b6000828152600d602052604090205460ff1615612cf157600080fd5b6000828152600b602052604090205415612d0a57600080fd5b6000828152600a6020526040812090612d238282613527565b506005018054600160c060020a0319169055814233600160a060020a03167f5988b3df3495bd77e3aea1be20b1e7a4750ef0d9a31fbc97a5b18d1c76b0a5d460405160405180910390a4919050565b600080612d7d61341a565b600554600160a060020a03161515612d9457600080fd5b60008981526020819052604090205433600160a060020a03908116911614612dbb57600080fd5b60008881526020819052604090205433600160a060020a03908116911614612de257600080fd5b60008781526020819052604090205433600160a060020a03908116911614612e0957600080fd5b60008681526020819052604090205433600160a060020a03908116911614612e3057600080fd5b60008581526020819052604090205433600160a060020a03908116911614612e5757600080fd5b600554612e6d90600160a060020a03168a610aa6565b1515612e7857600080fd5b600554612e8e90600160a060020a031689610aa6565b1515612e9957600080fd5b600554612eaf90600160a060020a031688610aa6565b1515612eba57600080fd5b600554612ed090600160a060020a031687610aa6565b1515612edb57600080fd5b600554612ef190600160a060020a031686610aa6565b1515612efc57600080fd5b600980546001810190915533604051918252600160a060020a03166c010000000000000000000000000260208201526034016040518091039020915060a0604051908101604052808a815260200189815260200188815260200187815260200186815250905060606040519081016040908152828252600160a060020a03331660208084019190915263ffffffff4316828401526000858152600a909152208151612faa9082906005613441565b506020820151600582018054600160a060020a031916600160a060020a039290921691909117905560408201516005909101805463ffffffff9290921660a060020a0277ffffffff000000000000000000000000000000000000000019909216919091179055508142600160a060020a0333167f39372912b756024e0f55c30508adca06029ca2e832fcfa2da38e30f2a0f4c3318c8c8c8c8c8c60405195865260208601949094526040808601939093526060850191909152608084015290151560a083015260c0909101905180910390a450509695505050505050565b60136020526000908152604090205481565b60035433600160a060020a039081169116146130b557600080fd5b600160a060020a03811615156130ca57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0392909216919091179055565b60035460009033600160a060020a0390811691161461314657600080fd5b600554600160a060020a03161561315c57600080fd5b5060058054600160a060020a038316600160a060020a03199091161790556001919050565b600c6020526000908152604090205481565b600090815260208190526040902054600160a060020a0391821691161490565b6000918252600260205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600090815260026020526040902054600160a060020a0391821691161490565b600160a060020a038083166000818152600160208181526040808420805490930190925585835282905290208054600160a060020a031916909117905583161561328157600160a060020a03831660009081526001602090815260408083208054600019019055838352600290915290208054600160a060020a03191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b60006132e061354a565b600060206040519081016040528481526006805491935060019180830161330783826135c9565b60009283526020909220859101815190555060068054929091039250600891600091908490811061333457fe5b60009182526020808320909101548352820192909252604001902080546001019055915050919050565b600160a060020a03828116908416857faac628e491aa8536c36958d1dc3e71f2b3acfceb21172980887d7c74bed416738451602086015160408701516060880151608089015160a08a015160c08b015160e08c01516101008d01516101208e0151604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152610120830191909152610140909101905180910390a450505050565b60a06040519081016040526005815b60008152602001906001900390816134295790505090565b826005810192821561346f579160200282015b8281111561346f578251825591602001919060010190613454565b5061347b9291506135e9565b5090565b61014060405190810160405260008152600960208201613429565b610160604051908101604052806134af61347f565b8152602001600081525090565b815481835581811511610bc657600b0281600b028360005260206000209182019101610bc69190613603565b82600a810192821561346f579160200282018281111561346f578251825591602001919060010190613454565b5061352490600a8101906135e9565b50565b506000815560010160008155600101600081556001016000815560010160009055565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359d57805160ff191683800117855561346f565b8280016001018555821561346f579182018281111561346f578251825591602001919060010190613454565b815481835581811511610bc657600083815260209020610bc69181019083015b610b3d91905b8082111561347b57600081556001016135ef565b610b3d91905b8082111561347b57600061361d8282613515565b506000600a820155600b016136095600a165627a7a723058205ce6b5eef6c7d8cbcb85c89b95ea79b09046690b3e79197947255e47278ac07b0029
Swarm Source
bzzr://5ce6b5eef6c7d8cbcb85c89b95ea79b09046690b3e79197947255e47278ac07b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.