ETH Price: $3,241.33 (+1.44%)
 

Overview

ETH Balance

0.051632918192918263 ETH

Eth Value

$167.36 (@ $3,241.33/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem Token74689512019-03-30 9:33:552133 days ago1553938435IN
0x5dc66C18...3dE9c61a1
0 ETH0.000105032
Redeem Token74688742019-03-30 9:17:042133 days ago1553937424IN
0x5dc66C18...3dE9c61a1
0 ETH0.0005251710
Redeem Token74687182019-03-30 8:35:172133 days ago1553934917IN
0x5dc66C18...3dE9c61a1
0 ETH0.000105032
Redeem Token74686942019-03-30 8:29:072133 days ago1553934547IN
0x5dc66C18...3dE9c61a1
0 ETH0.00010492
Redeem Token74680422019-03-30 6:00:532133 days ago1553925653IN
0x5dc66C18...3dE9c61a1
0 ETH0.000105032
Withdraw74639402019-03-29 14:33:482134 days ago1553870028IN
0x5dc66C18...3dE9c61a1
0 ETH0.000229910
Redeem Token61053502018-08-07 15:52:062368 days ago1533657126IN
0x5dc66C18...3dE9c61a1
0 ETH0.000262585
Redeem Token61053372018-08-07 15:49:092368 days ago1533656949IN
0x5dc66C18...3dE9c61a1
0 ETH0.000119175
Redeem Token61052782018-08-07 15:37:122368 days ago1533656232IN
0x5dc66C18...3dE9c61a1
0 ETH0.0005251710
Resolve Lottery ...59987012018-07-20 15:14:592386 days ago1532099699IN
0x5dc66C18...3dE9c61a1
0 ETH0.0005457611
Resolve Lottery ...59986922018-07-20 15:13:202386 days ago1532099600IN
0x5dc66C18...3dE9c61a1
0 ETH0.0005457611
Buy Token59726222018-07-16 3:51:052391 days ago1531713065IN
0x5dc66C18...3dE9c61a1
0.115 ETH0.000084473.5
Buy Token59726052018-07-16 3:47:082391 days ago1531712828IN
0x5dc66C18...3dE9c61a1
0.1 ETH0.000084473.5
Add Lottery59481902018-07-12 2:14:592395 days ago1531361699IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012269611
Add Lottery59481742018-07-12 2:10:112395 days ago1531361411IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012276611
Add Lottery59481572018-07-12 2:05:352395 days ago1531361135IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012269611
Add Lottery59481462018-07-12 2:03:482395 days ago1531361028IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012269611
Add Lottery59481372018-07-12 2:01:492395 days ago1531360909IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012269611
Add Lottery59480782018-07-12 1:49:012395 days ago1531360141IN
0x5dc66C18...3dE9c61a1
0 ETH0.0012269611
Resolve Lottery ...59479332018-07-12 1:09:092395 days ago1531357749IN
0x5dc66C18...3dE9c61a1
0 ETH0.0007693211
Redeem Token59421712018-07-11 1:54:002396 days ago1531274040IN
0x5dc66C18...3dE9c61a1
0 ETH0.000262585
Resolve Lottery ...59420342018-07-11 1:17:392396 days ago1531271859IN
0x5dc66C18...3dE9c61a1
0 ETH0.0007693211
Redeem Token59307472018-07-09 2:44:382398 days ago1531104278IN
0x5dc66C18...3dE9c61a1
0 ETH0.000420138
Redeem Token59306692018-07-09 2:23:012398 days ago1531102981IN
0x5dc66C18...3dE9c61a1
0 ETH0.000262585
Redeem Token59304192018-07-09 1:25:112398 days ago1531099511IN
0x5dc66C18...3dE9c61a1
0 ETH0.000262585
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
74689512019-03-30 9:33:552133 days ago1553938435
0x5dc66C18...3dE9c61a1
0.080784 ETH
74689512019-03-30 9:33:552133 days ago1553938435
0x5dc66C18...3dE9c61a1
0.000816 ETH
74688742019-03-30 9:17:042133 days ago1553937424
0x5dc66C18...3dE9c61a1
0.10692 ETH
74688742019-03-30 9:17:042133 days ago1553937424
0x5dc66C18...3dE9c61a1
0.00108 ETH
74687182019-03-30 8:35:172133 days ago1553934917
0x5dc66C18...3dE9c61a1
0.022176 ETH
74687182019-03-30 8:35:172133 days ago1553934917
0x5dc66C18...3dE9c61a1
0.000224 ETH
74686942019-03-30 8:29:072133 days ago1553934547
0x5dc66C18...3dE9c61a1
0.076032 ETH
74686942019-03-30 8:29:072133 days ago1553934547
0x5dc66C18...3dE9c61a1
0.000768 ETH
74680422019-03-30 6:00:532133 days ago1553925653
0x5dc66C18...3dE9c61a1
0.066528 ETH
74680422019-03-30 6:00:532133 days ago1553925653
0x5dc66C18...3dE9c61a1
0.000672 ETH
74639402019-03-29 14:33:482134 days ago1553870028
0x5dc66C18...3dE9c61a1
0.2972 ETH
61053502018-08-07 15:52:062368 days ago1533657126
0x5dc66C18...3dE9c61a1
0.018216 ETH
61053502018-08-07 15:52:062368 days ago1533657126
0x5dc66C18...3dE9c61a1
0.000184 ETH
61052782018-08-07 15:37:122368 days ago1533656232
0x5dc66C18...3dE9c61a1
0.01976832 ETH
61052782018-08-07 15:37:122368 days ago1533656232
0x5dc66C18...3dE9c61a1
0.00019968 ETH
59421712018-07-11 1:54:002396 days ago1531274040
0x5dc66C18...3dE9c61a1
0.104544 ETH
59421712018-07-11 1:54:002396 days ago1531274040
0x5dc66C18...3dE9c61a1
0.001056 ETH
59307472018-07-09 2:44:382398 days ago1531104278
0x5dc66C18...3dE9c61a1
0.11088 ETH
59307472018-07-09 2:44:382398 days ago1531104278
0x5dc66C18...3dE9c61a1
0.00112 ETH
59306692018-07-09 2:23:012398 days ago1531102981
0x5dc66C18...3dE9c61a1
0.080784 ETH
59306692018-07-09 2:23:012398 days ago1531102981
0x5dc66C18...3dE9c61a1
0.000816 ETH
59304192018-07-09 1:25:112398 days ago1531099511
0x5dc66C18...3dE9c61a1
0.076032 ETH
59304192018-07-09 1:25:112398 days ago1531099511
0x5dc66C18...3dE9c61a1
0.000768 ETH
59304172018-07-09 1:24:442398 days ago1531099484
0x5dc66C18...3dE9c61a1
0.09504 ETH
59304172018-07-09 1:24:442398 days ago1531099484
0x5dc66C18...3dE9c61a1
0.00096 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TTGOracle

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-08
*/

pragma solidity ^0.4.18;

/*
VERSION DATE: 23/03/2018

CREATED BY: CRYPTO SPORTZ
UNJOY YOUR TEAM AND SPORTS AND EMAIL US IF YOU HAVE ANY QUESTIONS
*/

library SafeMathLib {

  function times(uint a, uint b) internal pure returns (uint) {
    uint c = a * b;
    require(a == 0 || c / a == b);
    return c;
  }

  function minus(uint a, uint b) internal pure returns (uint) {
    require(b <= a);
    return a - b;
  }

  function plus(uint a, uint b) internal pure returns (uint) {
    uint c = a + b;
    require(c>=a);
    return c;
  }
  function mul(uint a, uint b) internal pure returns (uint) {
    uint c = a * b;
    require(a == 0 || c / a == b);
    return c;
  }

  function div(uint a, uint b) internal pure returns (uint) {
    require(b > 0);
    uint c = a / b;
    require(a == b * c + a % b);
    return c;
  }

  function sub(uint a, uint b) internal pure returns (uint) {
    require(b <= a);
    return a - b;
  }

  function add(uint a, uint b) internal pure returns (uint) {
    uint c = a + b;
    require(c>=a && c>=b);
    return c;
  }

}

contract OraclizeI {
	address public cbAddress;
	function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id);
	function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id);
	function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id);
	function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id);
	function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id);
	function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id);
	function getPrice(string _datasource) public returns (uint _dsprice);
	function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice);
	function setProofType(byte _proofType) external;
	function setCustomGasPrice(uint _gasPrice) external;
	function randomDS_getSessionPubKeyHash() external constant returns(bytes32);
}
contract OraclizeAddrResolverI {
	function getAddress() public returns (address _addr);
}
contract usingOraclize {
	
	uint8 constant networkID_auto = 0;
	uint8 constant networkID_mainnet = 1;
	uint8 constant networkID_testnet = 2;
	uint8 constant networkID_morden = 2;
	uint8 constant networkID_consensys = 161;

	OraclizeAddrResolverI OAR;

	OraclizeI oraclize;
	modifier oraclizeAPI 
	{
		if((address(OAR)==0)||(getCodeSize(address(OAR))==0))
			oraclize_setNetwork(networkID_auto);

		if(address(oraclize) != OAR.getAddress())
			oraclize = OraclizeI(OAR.getAddress());

		_;
	}
	modifier coupon(string code){
		oraclize = OraclizeI(OAR.getAddress());
		_;
	}

	function oraclize_setNetwork(uint8 networkID) internal returns(bool)
	{
		return oraclize_setNetwork();
		networkID; // silence the warning and remain backwards compatible
	}
	
	function oraclize_setNetwork() internal returns(bool)
	{
		if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet
			OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed);
			return true;
		}

		if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet
			OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1);
			return true;
		}

		return false;
	}
	
	function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
		uint price = oraclize.getPrice(datasource, gaslimit);
		if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
		return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit);
	}

    function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){
        uint price = oraclize.getPrice(datasource, gaslimit);
        if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price
        return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit);
	}
	
	function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){
		return oraclize.getPrice(datasource);
	}

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

    function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal {
        return oraclize.setCustomGasPrice(gasPrice);
    }
	
	function oraclize_cbAddress() oraclizeAPI internal returns (address){
		return oraclize.cbAddress();
	}

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

}

contract ERC721Abstract
{
	function implementsERC721() public pure returns (bool);
	function balanceOf(address _owner) public view returns (uint256 balance);
	function ownerOf(uint256 _tokenId) public view returns (address owner);
	function approve(address _to, uint256 _tokenId) public;
	function transferFrom(address _from, address _to, uint256 _tokenId) public;
	function transfer(address _to, uint256 _tokenId) public;
 
	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

	// Optional
	// function totalSupply() public view returns (uint256 total);
	// function name() public view returns (string name);
	// function symbol() public view returns (string symbol);
	// function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId);
	// function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);
}

contract ERC721 is ERC721Abstract
{
	string constant public   name = "TotalGameOracle";
	string constant public symbol = "TTGO";

	uint256 public totalSupply;
	struct Token
	{
		uint256 price;			//  value of stake
		uint256	option;			//  [payout]96[idLottery]64[combination]32[dateBuy]0
	}
	mapping (uint256 => Token) tokens;
	
	// A mapping from tokens IDs to the address that owns them. All tokens have some valid owner address
	mapping (uint256 => address) public tokenIndexToOwner;
	
	// A mapping from owner address to count of tokens that address owns.	
	mapping (address => uint256) ownershipTokenCount; 

	// A mapping from tokenIDs to an address that has been approved to call transferFrom().
	// Each token can only have one approved address for transfer at any time.
	// A zero value means no approval is outstanding.
	mapping (uint256 => address) public tokenIndexToApproved;
	
	function implementsERC721() public pure returns (bool)
	{
		return true;
	}

	function balanceOf(address _owner) public view returns (uint256 count) 
	{
		return ownershipTokenCount[_owner];
	}
	
	function ownerOf(uint256 _tokenId) public view returns (address owner)
	{
		owner = tokenIndexToOwner[_tokenId];
		require(owner != address(0));
	}
	
	// Marks an address as being approved for transferFrom(), overwriting any previous approval. 
	// Setting _approved to address(0) clears all transfer approval.
	function _approve(uint256 _tokenId, address _approved) internal 
	{
		tokenIndexToApproved[_tokenId] = _approved;
	}
	
	// Checks if a given address currently has transferApproval for a particular token.
	// param _claimant the address we are confirming token is approved for.
	// param _tokenId token id, only valid when > 0
	function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
		return tokenIndexToApproved[_tokenId] == _claimant;
	}
	
	function approve( address _to, uint256 _tokenId ) public
	{
		// Only an owner can grant transfer approval.
		require(_owns(msg.sender, _tokenId));

		// Register the approval (replacing any previous approval).
		_approve(_tokenId, _to);

		// Emit approval event.
		Approval(msg.sender, _to, _tokenId);
	}
	
	function transferFrom( address _from, address _to, uint256 _tokenId ) public
	{
		// Check for approval and valid ownership
		require(_approvedFor(msg.sender, _tokenId));
		require(_owns(_from, _tokenId));

		// Reassign ownership (also clears pending approvals and emits Transfer event).
		_transfer(_from, _to, _tokenId);
	}
	
	function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
		return tokenIndexToOwner[_tokenId] == _claimant;
	}
	
	function _transfer(address _from, address _to, uint256 _tokenId) internal 
	{
		ownershipTokenCount[_to]++;
		tokenIndexToOwner[_tokenId] = _to;

		if (_from != address(0)) 
		{
			Transfer(_from, _to, _tokenId);
			ownershipTokenCount[_from]--;
			// clear any previously approved ownership exchange
			delete tokenIndexToApproved[_tokenId];
		}

	}
	
	function transfer(address _to, uint256 _tokenId) public
	{
		require(_to != address(0));
		require(_owns(msg.sender, _tokenId));
		_transfer(msg.sender, _to, _tokenId);
	}

}

contract Owned 
{
    address private candidate;
	address public owner;

	mapping(address => bool) public admins;
	
    function Owned() public 
	{
        owner = msg.sender;
    }

    function changeOwner(address newOwner) public 
	{
		require(msg.sender == owner);
        candidate = newOwner;
    }
	
	function confirmOwner() public 
	{
        require(candidate == msg.sender); // run by name=candidate
		owner = candidate;
    }
	
    function addAdmin(address addr) external 
	{
		require(msg.sender == owner);
        admins[addr] = true;
    }

    function removeAdmin(address addr) external
	{
		require(msg.sender == owner);
        admins[addr] = false;
    }
}

contract Functional
{
	// parseInt(parseFloat*10^_b)
	function parseInt(string _a, uint _b) internal pure returns (uint) 
	{
		bytes memory bresult = bytes(_a);
		uint mint = 0;
		bool decimals = false;
		for (uint i=0; i<bresult.length; i++){
			if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
				if (decimals){
				   if (_b == 0) break;
					else _b--;
				}
				mint *= 10;
				mint += uint(bresult[i]) - 48;
			} else if (bresult[i] == 46) decimals = true;
		}
		if (_b > 0) mint *= 10**_b;
		return mint;
	}
	
	function uint2str(uint i) internal pure returns (string)
	{
		if (i == 0) return "0";
		uint j = i;
		uint len;
		while (j != 0){
			len++;
			j /= 10;
		}
		bytes memory bstr = new bytes(len);
		uint k = len - 1;
		while (i != 0){
			bstr[k--] = byte(48 + i % 10);
			i /= 10;
		}
		return string(bstr);
	}
	
	function strConcat(string _a, string _b, string _c) internal pure returns (string)
	{
		bytes memory _ba = bytes(_a);
		bytes memory _bb = bytes(_b);
		bytes memory _bc = bytes(_c);
		string memory abc;
		uint k = 0;
		uint i;
		bytes memory babc;
		if (_ba.length==0)
		{
			abc = new string(_bc.length);
			babc = bytes(abc);
		}
		else
		{
			abc = new string(_ba.length + _bb.length+ _bc.length);
			babc = bytes(abc);
			for (i = 0; i < _ba.length; i++) babc[k++] = _ba[i];
			for (i = 0; i < _bb.length; i++) babc[k++] = _bb[i];
		}
        for (i = 0; i < _bc.length; i++) babc[k++] = _bc[i];
		return string(babc);
	}
	
	function timenow() public view returns(uint32) { return uint32(block.timestamp); }
}

contract TTGOracle is ERC721, usingOraclize, Functional, Owned
{
	using SafeMathLib for uint32;
	using SafeMathLib for uint256;
	uint256 public feeLottery;
	
	enum Status {
		NOTFOUND,		//0 game not created
		PLAYING,		//1 buying tickets
		PROCESSING,		//2 waiting for result
		PAYING,	 		//3 redeeming
		CANCELING		//4 canceling the game
	}
	
	struct Game {
		string  nameLottery;
		uint32  countCombinations;
		uint32  gameID;
		uint32  teamAID;
		uint32  teamBID;		
		uint32  dateStopBuy;
		uint32  minStake;				// per finney = 0.001E
		uint32  winCombination;
		uint256 betsSumIn;				// amount bets
		uint256 feeValue;				// amount fee
		Status status;					// status of game
		bool isFreezing;
	}
	Game[] private game;
	ITTGCoin private ttgCoin;
	IItemToken private itemToken;
	uint32 private userAirDropRate = 1000;
	uint32 private ownerAirDropRate = 100;

	struct Stake {
		uint256 sum;		// amount bets
		uint32 count;		// count bets 
	}
	mapping(uint32 => mapping (uint32 => Stake)) public betsAll; // ID-lottery => combination => Stake
	mapping(bytes32 => uint32) private queryRes;  // ID-query => ID-lottery
	
	uint256 public ORACLIZE_GAS_LIMIT = 2000000;
	uint256 public ORACLIZE_GASPRICE_GWEY = 40; // 40Gwey

	event LogEvent(string _event, string nameLottery, uint256 value);
	event LogToken(string _event, address user, uint32 idLottery, uint32 idToken, uint32 combination, uint256 amount);

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
	
	modifier onlyAdmin {
        require(msg.sender == owner || admins[msg.sender]);
        _;
    }

	modifier onlyOraclize {
        require (msg.sender == oraclize_cbAddress());
        _;
    }

   function setTTGCoin (address _ttgCoin) onlyOwner() public {
    ttgCoin = ITTGCoin(_ttgCoin);
   }

   function setItemToken (address _itemToken) onlyOwner() public {
    itemToken = IItemToken(_itemToken);
   }


	function getLotteryByID(uint32 _id) public view returns (
		string  nameLottery,
		uint32 countCombinations,
		uint32 dateStopBuy,
		uint32 gameID,
		uint32 teamAID,
		uint32 teamBID,		
		uint32 minStake,
		uint32 winCombination,
		uint32 betsCount,
		uint256 betsSumIn,
		uint256 feeValue,
		Status status,
		bool isFreezing
	){
		Game storage gm = game[_id];
		nameLottery = gm.nameLottery;
		countCombinations = gm.countCombinations;
		dateStopBuy = gm.dateStopBuy;
		gameID = gm.gameID;
		teamAID = gm.teamAID;
		teamBID = gm.teamBID;
		minStake = gm.minStake;
		winCombination = gm.winCombination;
		betsCount = getCountTokensByLottery(_id);
		betsSumIn = gm.betsSumIn;  
		if (betsSumIn==0) betsSumIn = getSumInByLottery(_id);
		feeValue = gm.feeValue;
		status = gm.status;
		if ( status == Status.PLAYING && timenow() > dateStopBuy ) status = Status.PROCESSING;
		isFreezing = gm.isFreezing;
	}
	
	function getCountTokensByLottery(uint32 idLottery) internal view returns (uint32)
	{
		Game storage curGame = game[idLottery];
		uint32 count = 0;
		for(uint32 i=1;i<=curGame.countCombinations;i++) count += betsAll[idLottery][i].count;
		return count;
	}
	
	function getSumInByLottery(uint32 idLottery) internal view returns (uint256)
	{
		Game storage curGame = game[idLottery];
		uint256 sum = 0;
		for(uint32 i=1;i<=curGame.countCombinations;i++) sum += betsAll[idLottery][i].sum;
		return sum;
	}
	
	function getTokenByID(uint256 _id) public view returns ( 
			uint256 price,
			uint256 payment,
			uint32 combination,
			uint32 dateBuy,
			uint32 idLottery,
			address ownerToken,
			bool payout,
			uint256 sameComboAmount,
			uint256 tokenID
	){
		Token storage tkn = tokens[_id];

		price = tkn.price;
		
		uint256 packed = tkn.option;
		payout = uint8((packed >> (12*8)) & 0xFF)==1?true:false;
		idLottery   = uint32((packed >> (8*8)) & 0xFFFFFFFF);
		combination = uint32((packed >> (4*8)) & 0xFFFFFFFF);
		dateBuy     = uint32(packed & 0xFFFFFFFF);
		sameComboAmount = betsAll[idLottery][combination].sum;
		tokenID = _id;

		payment = 0;
		Game storage curGame = game[idLottery];
		
		uint256 betsSumIn = curGame.betsSumIn;  
		if (betsSumIn==0) betsSumIn = getSumInByLottery(idLottery);

		if (curGame.winCombination==combination) payment = betsSumIn * tkn.price / betsAll[idLottery][ curGame.winCombination ].sum;
		if (curGame.status == Status.CANCELING) payment = tkn.price;
		
		ownerToken = tokenIndexToOwner[_id];
	}

	function getUserTokens(address user, uint32 count) public view returns ( string res ) 
	{
		res="";
		require(user!=0x0);
		uint32 findCount=0;
		for (uint256 i = totalSupply-1; i >= 0; i--)
		{
			if(i>totalSupply) break;
			if (user == tokenIndexToOwner[i]) 
			{
				res = strConcat( res, ",", uint2str(i) );
				findCount++;
				if (count!=0 && findCount>=count) break;
			}
		}
	}

	function getUserTokensByMatch(address user, uint32 matchID) public view returns ( string res ) 
	{
		res="";
		require(user!=0x0);
		uint32 findCount=0;
		for (uint256 i = totalSupply-1; i >= 0; i--)
		{
			if(i>totalSupply) break;
			if (user == tokenIndexToOwner[i]) 
			{
				Token storage tkn = tokens[i];
				uint256 packed = tkn.option;
				uint32 idStored   = uint32((packed >> (8*8)) & 0xFFFFFFFF);
				if(idStored == matchID){
					res = strConcat( res, ",", uint2str(i) );
					findCount++;
				}
				
			}
		}
	}	

	function getStatLotteries() public view returns ( 
			uint32 countAll,
			uint32 countPlaying,
			uint32 countProcessing,
			string listPlaying,
			string listProcessing
	){
		countAll = uint32(game.length);
		countPlaying = 0;
		countProcessing = 0;
		listPlaying="";
		listProcessing="";
		uint32 curtime = timenow();
		for (uint32 i = 0; i < countAll; i++)
		{
			if (game[i].status!=Status.PLAYING) continue;
			if (curtime <  game[i].dateStopBuy) { countPlaying++; listPlaying = strConcat( listPlaying, ",", uint2str(i) ); }
			if (curtime >= game[i].dateStopBuy) { countProcessing++; listProcessing = strConcat( listProcessing, ",", uint2str(i) ); }
		}
		
	}

	function TTGOracle() public 
	{
	}

	function setOraclizeGasPrice(uint256 priceGwey, uint256 limit) onlyAdmin public
	{
		ORACLIZE_GASPRICE_GWEY = priceGwey;
		ORACLIZE_GAS_LIMIT = limit;
		oraclize_setCustomGasPrice( uint256(ORACLIZE_GASPRICE_GWEY) * 10**9 );
	}

	function freezeLottery(uint32 idLottery, bool freeze) public onlyAdmin 
	{ 
		Game storage curGame = game[idLottery];
		require( curGame.isFreezing != freeze );
		curGame.isFreezing = freeze; 
	}

	function addLottery( string _nameLottery, uint32 _dateStopBuy, uint32 _countCombinations, uint32 gameID, uint32 teamAID, uint32 teamBID, uint32 _minStakeFinney ) onlyAdmin public 
	{

		require( bytes(_nameLottery).length > 2 );
		require( _countCombinations > 1 );
		require( _minStakeFinney > 0 );
		require( _dateStopBuy > timenow() );

		Game memory _game;
		_game.nameLottery = _nameLottery;
		_game.countCombinations = _countCombinations;
		_game.dateStopBuy = _dateStopBuy;
		_game.gameID = gameID;
		_game.minStake 	= _minStakeFinney;
		_game.status = Status.PLAYING;
		_game.teamAID = teamAID;
		_game.teamBID = teamBID;
		

		uint256 newGameId = game.push(_game) - 1;
		
		
		LogEvent( "AddGame", _nameLottery, newGameId );
	}

	function () payable public { require (msg.value == 0x0); }

	function setUserAirDropRate(uint32 rate) onlyAdmin public{
		userAirDropRate = rate;
	}

	function setOwnerAirDropRate(uint32 rate) onlyAdmin public{
		ownerAirDropRate = rate;
	}	
	
	function buyToken(uint32 idLottery, uint32 teamID, uint32 combination, address captainAddress) payable public
	{
		Game storage curGame = game[idLottery];
		require( curGame.status == Status.PLAYING );
		require( timenow() < curGame.dateStopBuy );
		require( combination > 0 && combination <= curGame.countCombinations );
		require( captainAddress != msg.sender );
		require( curGame.isFreezing == false );
		
		// check money for stake
		require( msg.value >= curGame.minStake * 1 finney );
		
		uint256 userStake = msg.value;
		uint256 airDropAmountUser = userStake.mul(userAirDropRate); 
		if(airDropAmountUser > 1000*10**18) airDropAmountUser = 1000*10**18;
		ttgCoin.airDrop(this, msg.sender, airDropAmountUser);
		address teamOwner = itemToken.ownerOf(teamID);
		if(teamOwner!=0x0){
			uint256 airDropAmountOwner = userStake.mul(ownerAirDropRate); 	
			if(airDropAmountOwner > 1000*10**18) airDropAmountOwner = 1000*10**18;			
			ttgCoin.airDrop(this, teamOwner, airDropAmountOwner);   //for team owner 
		}
		uint256 feeValue = userStake.mul(4).div(100);		// 4% fee for contract
		userStake = userStake.minus(feeValue);
		
		if (captainAddress!=0x0) 
		{
			//uint256 captainValue = feeValue.mul(20).div(100);		// bonus for captain = 1%
			// feeValue = feeValue - captainValue;
			// require(feeValue + captainValue + userStake == msg.value);
			// captainAddress.transfer(captainValue);
			ttgCoin.airDrop(this, captainAddress, airDropAmountOwner);   //team owner 
		}

		curGame.feeValue  = curGame.feeValue.add(feeValue);
		betsAll[idLottery][combination].sum += userStake;
		betsAll[idLottery][combination].count++;

		uint128 packed;
		packed = ( uint128(idLottery) << 64 ) + ( uint128(combination) << 32 ) + uint128(block.timestamp);

		Token memory _token = Token({
			price: userStake,
			option : packed
		});

		uint256 newTokenId = totalSupply++;
		tokens[newTokenId] = _token;
		_transfer(0, msg.sender, newTokenId);
		
		LogToken( "Buy", msg.sender, idLottery, uint32(newTokenId), combination, userStake);
	}
	
	// take win money or money for canceling lottery
	function redeemToken(uint256 _tokenId, uint32 teamID) public 
	{
		Token storage tkn = tokens[_tokenId];

		uint256 packed = tkn.option;
		bool payout = uint8((packed >> (96)) & 0xFF)==1?true:false;
		uint32 idLottery = uint32((packed >> (64)) & 0xFFFFFFFF);
		uint32 combination = uint32((packed >> (32)) & 0xFFFFFFFF);

		Game storage curGame = game[idLottery];
		
		require( curGame.status == Status.PAYING || curGame.status == Status.CANCELING);

		require( msg.sender == tokenIndexToOwner[_tokenId] );	// only onwer`s token
		require( payout == false ); // has not paid
		require( combination == curGame.winCombination || curGame.status == Status.CANCELING );

		uint256 sumPayment = 0;
		if ( curGame.status == Status.CANCELING ) sumPayment = tkn.price;
		if ( curGame.status == Status.PAYING ){			
			sumPayment = curGame.betsSumIn * tkn.price / betsAll[idLottery][curGame.winCombination].sum;
			address teamOwner = itemToken.ownerOf(teamID);
				if(teamOwner!=0x0){					
					teamOwner.transfer(sumPayment.div(100));
					sumPayment = sumPayment.mul(99).div(100);
				}
		}

		payout = true;
		packed += uint128(payout?1:0) << 96;
		tkn.option = packed;
	
		msg.sender.transfer(sumPayment);
		
		LogToken( "Redeem", msg.sender, idLottery, uint32(_tokenId), combination, sumPayment);
	}
	
	function cancelLottery(uint32 idLottery) public 
	{
		Game storage curGame = game[idLottery];
		
		require( curGame.status == Status.PLAYING );
		// only owner/admin or anybody after 7 days
		require( msg.sender == owner || admins[msg.sender] || timenow() > curGame.dateStopBuy.add(7 * 24*60*60) );

		curGame.status = Status.CANCELING;

		LogEvent( "CancelLottery", curGame.nameLottery, idLottery );
		
		takeFee(idLottery);
	}

	function __callback(bytes32 queryId, string _result) onlyOraclize public
	{
		uint32 idLottery = queryRes[queryId];
		require( idLottery != 0 );

		Game storage curGame = game[idLottery];
		
		require( curGame.status == Status.PLAYING );
		require( timenow() > curGame.dateStopBuy );
		
		uint32 tmpCombination = uint32(parseInt(_result,0));
		
		string memory error = "callback";
		if ( tmpCombination==0 ) error = "callback_result_not_found";
		if ( tmpCombination > curGame.countCombinations ) { tmpCombination = 0; error = "callback_result_limit"; }

		LogEvent( error, curGame.nameLottery, tmpCombination );

		if (tmpCombination!=0) 
		{
			curGame.winCombination = tmpCombination;
			checkWinNobody(idLottery);
		}
	}

	function resolveLotteryByOraclize(uint32 idLottery, uint32 delaySec) onlyAdmin public payable
	{
		Game storage curGame = game[idLottery];
		
		uint oraclizeFee = oraclize_getPrice( "URL", ORACLIZE_GAS_LIMIT );
		require(msg.value + curGame.feeValue > oraclizeFee); // if contract has not enought money to do query
		
		curGame.feeValue = curGame.feeValue + msg.value - oraclizeFee;

		LogEvent( "ResolveLotteryByOraclize", curGame.nameLottery, delaySec );
		
		string memory tmpQuery;
		tmpQuery = strConcat( "json(https://totalgame.io/api/v2/game/", uint2str(idLottery), "/result.json).result" );
	
		uint32 delay;
		if ( timenow() < curGame.dateStopBuy ) delay = curGame.dateStopBuy - timenow() + delaySec; //TODO:need to convert to safe math
										  else delay = delaySec;
	
		bytes32 queryId = oraclize_query(delay, "URL", tmpQuery, ORACLIZE_GAS_LIMIT);
		queryRes[queryId] = idLottery;
	}

	function resolveLotteryByHand(uint32 idLottery, uint32 combination) onlyAdmin public 
	{
		Game storage curGame = game[idLottery];
		
		require( curGame.status == Status.PLAYING );
		require( combination <= curGame.countCombinations );
		require( combination != 0 );

		//require( timenow() > curGame.dateStopBuy + 2*60*60 ); //TODO: remove comment

		curGame.winCombination = combination;
		
		LogEvent( "ResolveLotteryByHand", curGame.nameLottery, curGame.winCombination );
		
		checkWinNobody(idLottery);
	}
	
	function checkWinNobody(uint32 idLottery) internal
	{
		Game storage curGame = game[idLottery];
		
		curGame.status = Status.PAYING;
		curGame.betsSumIn = getSumInByLottery(idLottery);
		
		// nobody win = send all to feeLottery
		if ( betsAll[idLottery][curGame.winCombination].count == 0 )
		{
			if (curGame.betsSumIn+curGame.feeValue!=0) feeLottery = feeLottery.add(curGame.betsSumIn).add(curGame.feeValue);
			LogEvent( "NOBODYWIN", curGame.nameLottery, curGame.betsSumIn+curGame.feeValue );
		}
		else 
			takeFee(idLottery);
	}
	
	function takeFee(uint32 idLottery) internal
	{
		Game storage curGame = game[idLottery];
		
		// take fee
		if ( curGame.feeValue > 0 )
		{
			feeLottery = feeLottery + curGame.feeValue;
			LogEvent( "TakeFee", curGame.nameLottery, curGame.feeValue );
		}
	}
	
	function withdraw() onlyOwner public
	{
		require( feeLottery > 0 );

		uint256 tmpFeeLottery = feeLottery;
		feeLottery = 0;
		
		owner.transfer(tmpFeeLottery);
		LogEvent( "WITHDRAW", "", tmpFeeLottery);
	}

}


interface ITTGCoin {
  function airDrop(address transmitter, address receiver, uint amount) public  returns (uint actual);  
}

interface IItemToken {
    function ownerOf (uint256 _itemId) public view returns (address _owner);  
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getTokenByID","outputs":[{"name":"price","type":"uint256"},{"name":"payment","type":"uint256"},{"name":"combination","type":"uint32"},{"name":"dateBuy","type":"uint32"},{"name":"idLottery","type":"uint32"},{"name":"ownerToken","type":"address"},{"name":"payout","type":"bool"},{"name":"sameComboAmount","type":"uint256"},{"name":"tokenID","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"}],"name":"cancelLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"name":"betsAll","outputs":[{"name":"sum","type":"uint256"},{"name":"count","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"queryId","type":"bytes32"},{"name":"_result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint32"}],"name":"setUserAirDropRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timenow","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"priceGwey","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"setOraclizeGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ORACLIZE_GAS_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeLottery","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"freeze","type":"bool"}],"name":"freezeLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ttgCoin","type":"address"}],"name":"setTTGCoin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"combination","type":"uint32"}],"name":"resolveLotteryByHand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"delaySec","type":"uint32"}],"name":"resolveLotteryByOraclize","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint32"}],"name":"setOwnerAirDropRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"teamID","type":"uint32"}],"name":"redeemToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameLottery","type":"string"},{"name":"_dateStopBuy","type":"uint32"},{"name":"_countCombinations","type":"uint32"},{"name":"gameID","type":"uint32"},{"name":"teamAID","type":"uint32"},{"name":"teamBID","type":"uint32"},{"name":"_minStakeFinney","type":"uint32"}],"name":"addLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"count","type":"uint32"}],"name":"getUserTokens","outputs":[{"name":"res","type":"string"}],"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":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_itemToken","type":"address"}],"name":"setItemToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"matchID","type":"uint32"}],"name":"getUserTokensByMatch","outputs":[{"name":"res","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint32"}],"name":"getLotteryByID","outputs":[{"name":"nameLottery","type":"string"},{"name":"countCombinations","type":"uint32"},{"name":"dateStopBuy","type":"uint32"},{"name":"gameID","type":"uint32"},{"name":"teamAID","type":"uint32"},{"name":"teamBID","type":"uint32"},{"name":"minStake","type":"uint32"},{"name":"winCombination","type":"uint32"},{"name":"betsCount","type":"uint32"},{"name":"betsSumIn","type":"uint256"},{"name":"feeValue","type":"uint256"},{"name":"status","type":"uint8"},{"name":"isFreezing","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"teamID","type":"uint32"},{"name":"combination","type":"uint32"},{"name":"captainAddress","type":"address"}],"name":"buyToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"ORACLIZE_GASPRICE_GWEY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStatLotteries","outputs":[{"name":"countAll","type":"uint32"},{"name":"countPlaying","type":"uint32"},{"name":"countProcessing","type":"uint32"},{"name":"listPlaying","type":"string"},{"name":"listProcessing","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_event","type":"string"},{"indexed":false,"name":"nameLottery","type":"string"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_event","type":"string"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"idLottery","type":"uint32"},{"indexed":false,"name":"idToken","type":"uint32"},{"indexed":false,"name":"combination","type":"uint32"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

6080604052600d805460a060020a63ffffffff0219167503e800000000000000000000000000000000000000001760c060020a63ffffffff0219167864000000000000000000000000000000000000000000000000179055621e8480601055602860115534801561006f57600080fd5b5060088054600160a060020a031916331790556144fc806100916000396000f3006080604052600436106101df5763ffffffff60e060020a60003504166306fdde0381146101ec578063087205f014610276578063095ea7b3146102ea5780631051db341461030e57806311ac20c0146103375780631209a849146103555780631785f53c1461039757806318160ddd146103b85780631d36e06c146103df57806323b872dd1461041357806327dc297e1461043d5780632ece07c31461049b5780633ccfd60b146104b95780633fae1928146104ce57806340adf94e146104fc578063429b62e5146105175780634eb8ffb4146105385780635387a2331461054d57806356f99fcb146105625780636336ac19146105855780636352211e146105a657806370480275146105be57806370a08231146105df57806372b81b1c1461060057806373f1e6d7146106245780637461dbff1461063b57806377a9e15214610659578063874d73a71461067a5780638cc57368146107015780638da5cb5b1461072b57806395d89b4114610740578063a6f9dae114610755578063a8bd9c3214610776578063a9059cbb1461078e578063ac0496e1146107b2578063aec651fb146107d3578063bd9b6d86146107fd578063be60988e14610812578063c0e1e2721461092c578063d03e102114610955578063e4e663a91461096a575b34156101ea57600080fd5b005b3480156101f857600080fd5b50610201610a96565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028257600080fd5b5061028e600435610acd565b60408051998a5260208a019890985263ffffffff968716898901529486166060890152929094166080870152600160a060020a031660a086015291151560c085015260e084019190915261010083015251908190036101200190f35b3480156102f657600080fd5b506101ea600160a060020a0360043516602435610c7e565b34801561031a57600080fd5b50610323610cd9565b604080519115158252519081900360200190f35b34801561034357600080fd5b506101ea63ffffffff60043516610cdf565b34801561036157600080fd5b5061037963ffffffff60043581169060243516610e92565b6040805192835263ffffffff90911660208301528051918290030190f35b3480156103a357600080fd5b506101ea600160a060020a0360043516610ebc565b3480156103c457600080fd5b506103cd610ef4565b60408051918252519081900360200190f35b3480156103eb57600080fd5b506103f7600435610efa565b60408051600160a060020a039092168252519081900360200190f35b34801561041f57600080fd5b506101ea600160a060020a0360043581169060243516604435610f15565b34801561044957600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101ea958335953695604494919390910191908190840183828082843750949750610f4f9650505050505050565b3480156104a757600080fd5b506101ea63ffffffff60043516611240565b3480156104c557600080fd5b506101ea6112bb565b3480156104da57600080fd5b506104e3611392565b6040805163ffffffff9092168252519081900360200190f35b34801561050857600080fd5b506101ea600435602435611396565b34801561052357600080fd5b50610323600160a060020a03600435166113e2565b34801561054457600080fd5b506103cd6113f7565b34801561055957600080fd5b506103cd6113fd565b34801561056e57600080fd5b506101ea63ffffffff600435166024351515611403565b34801561059157600080fd5b506101ea600160a060020a036004351661149d565b3480156105b257600080fd5b506103f76004356114d6565b3480156105ca57600080fd5b506101ea600160a060020a03600435166114ff565b3480156105eb57600080fd5b506103cd600160a060020a036004351661153a565b34801561060c57600080fd5b506101ea63ffffffff60043581169060243516611555565b6101ea63ffffffff60043581169060243516611727565b34801561064757600080fd5b506101ea63ffffffff60043516611a40565b34801561066557600080fd5b506101ea60043563ffffffff60243516611aae565b34801561068657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101ea9436949293602493928401919081908401838280828437509497505063ffffffff853581169650602086013581169560408101358216955060608101358216945060808101358216935060a00135169050611e57565b34801561070d57600080fd5b50610201600160a060020a036004351663ffffffff602435166121ed565b34801561073757600080fd5b506103f76122ca565b34801561074c57600080fd5b506102016122d9565b34801561076157600080fd5b506101ea600160a060020a0360043516612310565b34801561078257600080fd5b506103f7600435612349565b34801561079a57600080fd5b506101ea600160a060020a0360043516602435612364565b3480156107be57600080fd5b506101ea600160a060020a0360043516612399565b3480156107df57600080fd5b50610201600160a060020a036004351663ffffffff602435166123d2565b34801561080957600080fd5b506101ea6124c0565b34801561081e57600080fd5b5061083063ffffffff600435166124fb565b6040805163ffffffff808f1660208301528d8116928201929092528b821660608201528a8216608082015289821660a082015288821660c082015287821660e08201529086166101008201526101208101859052610140810184905280610160810184600481111561089e57fe5b60ff1681526020018315151515815260200182810382528f818151815260200191508051906020019080838360005b838110156108e55781810151838201526020016108cd565b50505050905090810190601f1680156109125780820380516001836020036101000a031916815260200191505b509e50505050505050505050505050505060405180910390f35b6101ea63ffffffff60043581169060243581169060443516600160a060020a03606435166126fd565b34801561096157600080fd5b506103cd612d16565b34801561097657600080fd5b5061097f612d1c565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156109f65781810151838201526020016109de565b50505050905090810190601f168015610a235780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b60408051808201909152600f81527f546f74616c47616d654f7261636c650000000000000000000000000000000000602082015281565b60008181526001602081905260408220805481830154909392839283928392839283928392839291908390819060ff6c0100000000000000000000000085041614610b19576000610b1c565b60015b96506040839060020a900463ffffffff1698506020839060020a900463ffffffff169a508263ffffffff169950600e60008a63ffffffff1663ffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff1681526020019081526020016000206000015495508d945060009b50600b8963ffffffff16815481101515610ba757fe5b90600052602060002090600502019150816002015490508060001415610bd357610bd089612ea4565b90505b600182015463ffffffff8c811660c060020a909204161415610c2f5763ffffffff808a166000908152600e60209081526040808320600187015460c060020a90049094168352929052205484548202811515610c2b57fe5b049b505b60048281015460ff1681811115610c4257fe5b1415610c4d5783549b505b50505060009a8b5250600260205260409099205497999698959794969395600160a060020a03909516949193909250565b610c883382612f25565b1515610c9357600080fd5b610c9d8183612f45565b6040518190600160a060020a0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a45050565b60015b90565b6000600b8263ffffffff16815481101515610cf657fe5b600091825260209091206005909102019050600160048083015460ff1690811115610d1d57fe5b14610d2757600080fd5b600854600160a060020a0316331480610d4f57503360009081526009602052604090205460ff165b80610d8957506001810154610d799063ffffffff608060020a90910481169062093a8090612f7316565b610d81611392565b63ffffffff16115b1515610d9457600080fd5b6004818101805460ff191690911790556040805163ffffffff8416918101919091526060808252600d908201527f43616e63656c4c6f747465727900000000000000000000000000000000000000608082015260a0602082018181528354600260018216156101000260001901909116049183018290526000805160206144b18339815191529284928692829160c083019086908015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b505094505050505060405180910390a1610e8e82612f9a565b5050565b600e6020908152600092835260408084209091529082529020805460019091015463ffffffff1682565b600854600160a060020a03163314610ed357600080fd5b600160a060020a03166000908152600960205260409020805460ff19169055565b60005481565b600260205260009081526040902054600160a060020a031681565b610f1f33826130bd565b1515610f2a57600080fd5b610f348382612f25565b1515610f3f57600080fd5b610f4a8383836130dd565b505050565b60008060006060610f5e6131a3565b600160a060020a03163314610f7257600080fd5b6000868152600f602052604090205463ffffffff169350831515610f9557600080fd5b600b805463ffffffff8616908110610fa957fe5b600091825260209091206005909102019250600160048085015460ff1690811115610fd057fe5b14610fda57600080fd5b6001830154608060020a900463ffffffff16610ff4611392565b63ffffffff161161100457600080fd5b61100f856000613398565b60408051808201909152600881527f63616c6c6261636b0000000000000000000000000000000000000000000000006020820152909250905063ffffffff8216151561108b575060408051808201909152601981527f63616c6c6261636b5f726573756c745f6e6f745f666f756e640000000000000060208201525b600183015463ffffffff90811690831611156110db57505060408051808201909152601581527f63616c6c6261636b5f726573756c745f6c696d6974000000000000000000000060208201526000905b6000805160206144b18339815191528184600001846040518080602001806020018463ffffffff168152602001838103835286818151815260200191508051906020019080838360005b8381101561113d578181015183820152602001611125565b50505050905090810190601f16801561116a5780820380516001836020036101000a031916815260200191505b508381038252855460026000196101006001841615020190911604808252602090910190869080156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b50509550505050505060405180910390a163ffffffff821615611238576001830180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff8516021790556112388461350a565b505050505050565b600854600160a060020a031633148061126857503360009081526009602052604090205460ff165b151561127357600080fd5b600d805463ffffffff909216740100000000000000000000000000000000000000000277ffffffff000000000000000000000000000000000000000019909216919091179055565b600854600090600160a060020a031633146112d557600080fd5b600a546000106112e457600080fd5b50600a80546000918290556008546040519192600160a060020a039091169183156108fc0291849190818181858888f1935050505015801561132a573d6000803e3d6000fd5b506040805180820183905260608082526008908201527f5749544844524157000000000000000000000000000000000000000000000000608082015260a06020820181905260009082015290516000805160206144b18339815191529181900360e00190a150565b4290565b600854600160a060020a03163314806113be57503360009081526009602052604090205460ff165b15156113c957600080fd5b60118290556010819055610e8e633b9aca0083026136c1565b60096020526000908152604090205460ff1681565b60105481565b600a5481565b600854600090600160a060020a031633148061142e57503360009081526009602052604090205460ff165b151561143957600080fd5b600b805463ffffffff851690811061144d57fe5b906000526020600020906005020190508115158160040160019054906101000a900460ff1615151415151561148157600080fd5b60040180549115156101000261ff001990921691909117905550565b600854600160a060020a031633146114b457600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600081815260026020526040902054600160a060020a03168015156114fa57600080fd5b919050565b600854600160a060020a0316331461151657600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600160a060020a031660009081526003602052604090205490565b600854600090600160a060020a031633148061158057503360009081526009602052604090205460ff165b151561158b57600080fd5b600b805463ffffffff851690811061159f57fe5b600091825260209091206005909102019050600160048083015460ff16908111156115c657fe5b146115d057600080fd5b600181015463ffffffff90811690831611156115eb57600080fd5b63ffffffff821615156115fd57600080fd5b600181810180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff86811682029290921792839055604080519190930490911691810182905260608082526014908201527f5265736f6c76654c6f7474657279427948616e64000000000000000000000000608082015260a0602082018181528554600261010096821615969096026000190116949094049082018190526000805160206144b1833981519152938593929182919060c08301908690801561170e5780601f106116e35761010080835404028352916020019161170e565b820191906000526020600020905b8154815290600101906020018083116116f157829003601f168201915b505094505050505060405180910390a1610f4a8361350a565b600854600090819060609082908190600160a060020a031633148061175b57503360009081526009602052604090205460ff165b151561176657600080fd5b600b805463ffffffff891690811061177a57fe5b906000526020600020906005020194506117cb6040805190810160405280600381526020017f55524c00000000000000000000000000000000000000000000000000000000008152506010546138b0565b935083856003015434011115156117e157600080fd5b600385018054340185900390556040805163ffffffff88169181019190915260608082526018908201527f5265736f6c76654c6f747465727942794f7261636c697a650000000000000000608082015260a0602082018181528754600260001961010060018416150201909116049183018290526000805160206144b18339815191529288928a92829160c0830190869080156118bf5780601f10611894576101008083540402835291602001916118bf565b820191906000526020600020905b8154815290600101906020018083116118a257829003601f168201915b505094505050505060405180910390a1611977606060405190810160405280602681526020017f6a736f6e2868747470733a2f2f746f74616c67616d652e696f2f6170692f763281526020017f2f67616d652f000000000000000000000000000000000000000000000000000081525061193e8963ffffffff16613b21565b60408051808201909152601481527f2f726573756c742e6a736f6e292e726573756c740000000000000000000000006020820152613c14565b6001860154909350608060020a900463ffffffff16611994611392565b63ffffffff1610156119c457856119a9611392565b6001870154608060020a900463ffffffff16030191506119c8565b8591505b611a118263ffffffff166040805190810160405280600381526020017f55524c000000000000000000000000000000000000000000000000000000000081525085601054613de3565b6000908152600f60205260409020805463ffffffff191663ffffffff9890981697909717909655505050505050565b600854600160a060020a0316331480611a6857503360009081526009602052604090205460ff165b1515611a7357600080fd5b600d805463ffffffff90921660c060020a027bffffffff00000000000000000000000000000000000000000000000019909216919091179055565b6000828152600160208190526040822080820154909290918190819081908190819060ff6c0100000000000000000000000089041614611aef576000611af2565b60015b600b805491975063ffffffff680100000000000000008a04811697506401000000008a041695509086908110611b2457fe5b600091825260209091206005909102019250600360048085015460ff1690811115611b4b57fe5b1480611b67575060048381015460ff1681811115611b6557fe5b145b1515611b7257600080fd5b60008a815260026020526040902054600160a060020a03163314611b9557600080fd5b8515611ba057600080fd5b600183015463ffffffff85811660c060020a909204161480611bd2575060048381015460ff1681811115611bd057fe5b145b1515611bdd57600080fd5b6004838101546000935060ff1681811115611bf457fe5b1415611bff57875491505b600360048085015460ff1690811115611c1457fe5b1415611d735763ffffffff8086166000908152600e60209081526040808320600188015460c060020a9004909416835292905220548854600285015402811515611c5a57fe5b600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8e1660048201529051939092049450600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b505050506040513d6020811015611cf457600080fd5b50519050600160a060020a03811615611d7357600160a060020a0381166108fc611d2584606463ffffffff6141e916565b6040518115909202916000818181858888f19350505050158015611d4d573d6000803e3d6000fd5b50611d706064611d6484606363ffffffff61422316565b9063ffffffff6141e916565b91505b6c01000000000000000000000000969096016001888101829055604051919790965090339083156108fc029084906000818181858888f19350505050158015611dc0573d6000803e3d6000fd5b506040805133602082015263ffffffff80881682840152808d1660608301528616608082015260a0810184905260c08082526006908201527f52656465656d000000000000000000000000000000000000000000000000000060e082015290517f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d918190036101000190a150505050505050505050565b611e5f61439d565b600854600090600160a060020a0316331480611e8a57503360009081526009602052604090205460ff165b1515611e9557600080fd5b8851600210611ea357600080fd5b600163ffffffff881611611eb657600080fd5b600063ffffffff841611611ec957600080fd5b611ed1611392565b63ffffffff168863ffffffff16111515611eea57600080fd5b88825263ffffffff878116602084015288811660a08401528681166040840152831660c0830152600161014083018190525063ffffffff808616606084015284166080830152600b8054600181810180845560009390935284518051919392869260059091027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90191611f8291839160200190614401565b5060208201516001828101805460408601516060870151608088015160a089015160c08a015160e08b015163ffffffff1990961663ffffffff998a161767ffffffff000000001916640100000000958a1695909502949094176bffffffff000000000000000019166801000000000000000093891693909302929092176fffffffff00000000000000000000000019166c01000000000000000000000000918816919091021773ffffffff000000000000000000000000000000001916608060020a918716919091021777ffffffff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000091861691909102177bffffffff000000000000000000000000000000000000000000000000191660c060020a94909116939093029290921790915561010083015160028301556101208301516003830155610140830151600480840180549293909260ff19169184908111156120ef57fe5b02179055506101608201518160040160016101000a81548160ff02191690831515021790555050500390506000805160206144b18339815191528982604051808060200180602001848152602001838103835260078152602001807f41646447616d6500000000000000000000000000000000000000000000000000815250602001838103825285818151815260200191508051906020019080838360005b838110156121a657818101518382015260200161218e565b50505050905090810190601f1680156121d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050505050505050565b6040805160208101909152600080825280600160a060020a038516151561221357600080fd5b505060008054600019015b600081106122c257600054811115612235576122c2565b600081815260026020526040902054600160a060020a03868116911614156122b9576122868360408051908101604052806001815260200160fa60020a600b0281525061228184613b21565b613c14565b925060019091019063ffffffff8416158015906122af57508363ffffffff168263ffffffff1610155b156122b9576122c2565b6000190161221e565b505092915050565b600854600160a060020a031681565b60408051808201909152600481527f5454474f00000000000000000000000000000000000000000000000000000000602082015281565b600854600160a060020a0316331461232757600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b600460205260009081526040902054600160a060020a031681565b600160a060020a038216151561237957600080fd5b6123833382612f25565b151561238e57600080fd5b610e8e3383836130dd565b600854600160a060020a031633146123b057600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b6040805160208101909152600080825280808080600160a060020a03881615156123fb57600080fd5b6000945060016000540393505b600084106124b55760005484111561241f576124b5565b600084815260026020526040902054600160a060020a03898116911614156124a95750505060008181526001602081905260409091209081015463ffffffff68010000000000000000820481169087168114156124a9576124a08660408051908101604052806001815260200160fa60020a600b0281525061228187613b21565b95506001909401935b60001990930192612408565b505050505092915050565b600754600160a060020a031633146124d757600080fd5b60075460088054600160a060020a031916600160a060020a03909216919091179055565b60606000806000806000806000806000806000806000600b8f63ffffffff1681548110151561252657fe5b60009182526020918290206005919091020180546040805160026001841615610100026000190190931692909204601f8101859004850283018501909152808252919350918391908301828280156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b50505050509d508060010160009054906101000a900463ffffffff169c508060010160109054906101000a900463ffffffff169b508060010160049054906101000a900463ffffffff169a508060010160089054906101000a900463ffffffff16995080600101600c9054906101000a900463ffffffff1698508060010160149054906101000a900463ffffffff1697508060010160189054906101000a900463ffffffff1696506126708f614247565b955080600201549450846000141561268e5761268b8f612ea4565b94505b6003810154600482015490945060ff16925060018360048111156126ae57fe5b1480156126cd57508b63ffffffff166126c5611392565b63ffffffff16115b156126d757600292505b8060040160019054906101000a900460ff1691505091939597999b9d90929496989a9c50565b600080600080600080600061271061447f565b6000600b8d63ffffffff1681548110151561272757fe5b60009182526020909120600590910201985060016004808b015460ff169081111561274e57fe5b1461275857600080fd5b6001890154608060020a900463ffffffff16612772611392565b63ffffffff161061278257600080fd5b60008b63ffffffff161180156127a65750600189015463ffffffff908116908c1611155b15156127b157600080fd5b600160a060020a038a163314156127c757600080fd5b6004890154610100900460ff16156127de57600080fd5b600189015474010000000000000000000000000000000000000000900463ffffffff1666038d7ea4c680000266ffffffffffffff1634101561281f57600080fd5b600d5434985061285290899063ffffffff7401000000000000000000000000000000000000000090910481169061422316565b9650683635c9adc5dea0000087111561287257683635c9adc5dea0000096505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018a90529051600160a060020a03909216916332c0fba5916064808201926020929091908290030181600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d602081101561290f57600080fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8f1660048201529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505050506040513d60208110156129a757600080fd5b50519550600160a060020a03861615612a9b57600d546129d990899063ffffffff60c060020a90910481169061422316565b9450683635c9adc5dea000008511156129f957683635c9adc5dea0000094505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03898116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b505050506040513d6020811015612a9857600080fd5b50505b612ab16064611d648a600463ffffffff61422316565b9350612ac3888563ffffffff6142c716565b9750600160a060020a038a1615612b7657600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038d8116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612b4957600080fd5b505af1158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50505b6003890154612b8b908563ffffffff612f7316565b60038a015550505063ffffffff808b166000818152600e602090815260408083208d861680855290835281842080548c01815560019081018054808916830190981663ffffffff1990981697909717909655815180830183528b8152680100000000000000009095026401000000009091020142016fffffffffffffffffffffffffffffffff81168584019081528454808801865580865293879052918420855181559151919095015590612c419033836130dd565b7f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d338e838e8c604051808060200187600160a060020a0316600160a060020a031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001838152602001828103825260038152602001807f4275790000000000000000000000000000000000000000000000000000000000815250602001965050505050505060405180910390a150505050505050505050505050565b60115481565b600b546040805160208181018352600080835283519182019093528281528291908280612d47611392565b9150600090505b8663ffffffff168163ffffffff161015612e9b576001600b805463ffffffff8416908110612d7857fe5b60009182526020909120600460059092020181015460ff1690811115612d9a57fe5b14612da457612e93565b600b805463ffffffff8316908110612db857fe5b600091825260209091206001600590920201015463ffffffff608060020a90910481169083161015612e1c5760408051808201909152600180825260fa60020a600b02602083015290960195612e1990859061228163ffffffff8516613b21565b93505b600b805463ffffffff8316908110612e3057fe5b600091825260209091206001600590920201015463ffffffff608060020a909104811690831610612e935760408051808201909152600180825260fa60020a600b02602083015290950194612e9090849061228163ffffffff8516613b21565b92505b600101612d4e565b50509091929394565b600080600080600b8563ffffffff16815481101515612ebf57fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e60209081526040808320938516835292905220549190910190600101612ed8565b509392505050565b600090815260026020526040902054600160a060020a0391821691161490565b6000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828201838110801590612f885750828110155b1515612f9357600080fd5b9392505050565b6000600b8263ffffffff16815481101515612fb157fe5b90600052602060002090600502019050600081600301541115610e8e57600381018054600a80549091019055546040805190810182905260608082526007908201527f54616b6546656500000000000000000000000000000000000000000000000000608082015260a0602082018181528454600260001961010060018416150201909116049183018290526000805160206144b183398151915293859390929091829160c0830190869080156130a95780601f1061307e576101008083540402835291602001916130a9565b820191906000526020600020905b81548152906001019060200180831161308c57829003601f168201915b505094505050505060405180910390a15050565b600090815260046020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260036020908152604080832080546001019055858352600290915290208054600160a060020a0319169091179055831615610f4a578082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600160a060020a03831660009081526003602090815260408083208054600019019055838352600490915290208054600160a060020a0319169055505050565b600554600090600160a060020a031615806131d057506005546131ce90600160a060020a03166142dc565b155b156131e1576131df60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b505050506040513d602081101561325e57600080fd5b5051600654600160a060020a0390811691161461331457600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156132c857600080fd5b505af11580156132dc573d6000803e3d6000fd5b505050506040513d60208110156132f257600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600660009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561336757600080fd5b505af115801561337b573d6000803e3d6000fd5b505050506040513d602081101561339157600080fd5b5051905090565b6000828180805b83518110156134ed5783517f3000000000000000000000000000000000000000000000000000000000000000908590839081106133d857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161015801561344e575083517f39000000000000000000000000000000000000000000000000000000000000009085908390811061342e57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b156134a757811561346d57851515613465576134ed565b600019909501945b600a830292506030848281518110151561348357fe5b90602001015160f860020a900460f860020a0260f860020a900403830192506134e5565b83818151811015156134b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a0214156134e557600191505b60010161339f565b60008611156134ff5785600a0a830292505b509095945050505050565b6000600b8263ffffffff1681548110151561352157fe5b600091825260209091206004600590920201908101805460ff19166003179055905061354c82612ea4565b600282015563ffffffff8083166000908152600e6020908152604080832060018087015460c060020a900486168552925290912001541615156136b8576003810154600282015401156135ca576135c681600301546135ba8360020154600a54612f7390919063ffffffff16565b9063ffffffff612f7316565b600a555b6003810154600280830154604080519190930192810183905260608082526009908201527f4e4f424f445957494e0000000000000000000000000000000000000000000000608082015260a06020820181815285546000196101006001831615020116939093049082018190526000805160206144b183398151915293859390929182919060c0830190869080156136a35780601f10613678576101008083540402835291602001916136a3565b820191906000526020600020905b81548152906001019060200180831161368657829003601f168201915b505094505050505060405180910390a1610e8e565b610e8e82612f9a565b600554600160a060020a031615806136eb57506005546136e990600160a060020a03166142dc565b155b156136fc576136fa60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561374f57600080fd5b505af1158015613763573d6000803e3d6000fd5b505050506040513d602081101561377957600080fd5b5051600654600160a060020a0390811691161461382f57600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137e357600080fd5b505af11580156137f7573d6000803e3d6000fd5b505050506040513d602081101561380d57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517fca6ad1e4000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163ca6ad1e49160248082019260009290919082900301818387803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b5050505050565b600554600090600160a060020a031615806138dd57506005546138db90600160a060020a03166142dc565b155b156138ee576138ec60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b505050506040513d602081101561396b57600080fd5b5051600654600160a060020a03908116911614613a2157600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810185905260048101918252855160448201528551600160a060020a0390931692632ef3accc9287928792829160640190602086019080838360005b83811015613aa1578181015183820152602001613a89565b50505050905090810190601f168015613ace5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050506040513d6020811015613b1857600080fd5b50519392505050565b60606000808281851515613b6a5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450613c0b565b8593505b8315613b8557600190920191600a84049350613b6e565b826040519080825280601f01601f191660200182016040528015613bb3578160200160208202803883390190505b5091505060001982015b8515613c0757815160001982019160f860020a6030600a8a060102918491908110613be457fe5b906020010190600160f860020a031916908160001a905350600a86049550613bbd565b8194505b50505050919050565b82516060908490849084908490600090819083901515613c685784516040519080825280601f01601f191660200182016040528015613c5d578160200160208202803883390190505b509350839050613d6f565b84518651885101016040519080825280601f01601f191660200182016040528015613c9d578160200160208202803883390190505b509350839050600091505b8651821015613d09578682815181101515613cbf57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613ce657fe5b906020010190600160f860020a031916908160001a905350600190910190613ca8565b600091505b8551821015613d6f578582815181101515613d2557fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613d4c57fe5b906020010190600160f860020a031916908160001a905350600190910190613d0e565b600091505b8451821015613dd5578482815181101515613d8b57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613db257fe5b906020010190600160f860020a031916908160001a905350600190910190613d74565b9a9950505050505050505050565b6005546000908190600160a060020a03161580613e125750600554613e1090600160a060020a03166142dc565b155b15613e2357613e2160006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613e7657600080fd5b505af1158015613e8a573d6000803e3d6000fd5b505050506040513d6020811015613ea057600080fd5b5051600654600160a060020a03908116911614613f5657600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613f0a57600080fd5b505af1158015613f1e573d6000803e3d6000fd5b505050506040513d6020811015613f3457600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810186905260048101918252875160448201528751600160a060020a0390931692632ef3accc9289928892829160640190602086019080838360005b83811015613fd6578181015183820152602001613fbe565b50505050905090810190601f1680156140035780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b505050506040513d602081101561404d57600080fd5b50519050670de0b6b3a76400003a84020181111561406e57600091506141e0565b6006546040517fc51be90f0000000000000000000000000000000000000000000000000000000081526004810188815260648201869052608060248301908152885160848401528851600160a060020a039094169363c51be90f9386938c938c938c938c939291604482019160a40190602088019080838360005b838110156141015781810151838201526020016140e9565b50505050905090810190601f16801561412e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015614161578181015183820152602001614149565b50505050905090810190601f16801561418e5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b50505050506040513d60208110156141db57600080fd5b505191505b50949350505050565b6000808083116141f857600080fd5b828481151561420357fe5b049050828481151561421157fe5b068184020184141515612f9357600080fd5b6000828202831580612f88575082848281151561423c57fe5b0414612f9357600080fd5b600080600080600b8563ffffffff1681548110151561426257fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e602090815260408083208585168452909152902060019081015490911692909201910161427b565b6000828211156142d657600080fd5b50900390565b3b90565b60006142ea6142f0565b92915050565b600080614310731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed6142dc565b1115614344575060058054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610cdc565b600061436373c03a2615d5efaf5f49f60b7bb6583eaec212fdf16142dc565b1115614397575060058054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610cdc565b50600090565b6040805161018081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052906101408201908152600060209091015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061444257805160ff191683800117855561446f565b8280016001018555821561446f579182015b8281111561446f578251825591602001919060010190614454565b5061447b929150614496565b5090565b604080518082019091526000808252602082015290565b610cdc91905b8082111561447b576000815560010161449c5600d7fd1f721dc8644a44be50ee5bce1d6b7ac2ffd81759add00d58b2efc0e9f050a165627a7a72305820d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f350029

Deployed Bytecode

0x6080604052600436106101df5763ffffffff60e060020a60003504166306fdde0381146101ec578063087205f014610276578063095ea7b3146102ea5780631051db341461030e57806311ac20c0146103375780631209a849146103555780631785f53c1461039757806318160ddd146103b85780631d36e06c146103df57806323b872dd1461041357806327dc297e1461043d5780632ece07c31461049b5780633ccfd60b146104b95780633fae1928146104ce57806340adf94e146104fc578063429b62e5146105175780634eb8ffb4146105385780635387a2331461054d57806356f99fcb146105625780636336ac19146105855780636352211e146105a657806370480275146105be57806370a08231146105df57806372b81b1c1461060057806373f1e6d7146106245780637461dbff1461063b57806377a9e15214610659578063874d73a71461067a5780638cc57368146107015780638da5cb5b1461072b57806395d89b4114610740578063a6f9dae114610755578063a8bd9c3214610776578063a9059cbb1461078e578063ac0496e1146107b2578063aec651fb146107d3578063bd9b6d86146107fd578063be60988e14610812578063c0e1e2721461092c578063d03e102114610955578063e4e663a91461096a575b34156101ea57600080fd5b005b3480156101f857600080fd5b50610201610a96565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028257600080fd5b5061028e600435610acd565b60408051998a5260208a019890985263ffffffff968716898901529486166060890152929094166080870152600160a060020a031660a086015291151560c085015260e084019190915261010083015251908190036101200190f35b3480156102f657600080fd5b506101ea600160a060020a0360043516602435610c7e565b34801561031a57600080fd5b50610323610cd9565b604080519115158252519081900360200190f35b34801561034357600080fd5b506101ea63ffffffff60043516610cdf565b34801561036157600080fd5b5061037963ffffffff60043581169060243516610e92565b6040805192835263ffffffff90911660208301528051918290030190f35b3480156103a357600080fd5b506101ea600160a060020a0360043516610ebc565b3480156103c457600080fd5b506103cd610ef4565b60408051918252519081900360200190f35b3480156103eb57600080fd5b506103f7600435610efa565b60408051600160a060020a039092168252519081900360200190f35b34801561041f57600080fd5b506101ea600160a060020a0360043581169060243516604435610f15565b34801561044957600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101ea958335953695604494919390910191908190840183828082843750949750610f4f9650505050505050565b3480156104a757600080fd5b506101ea63ffffffff60043516611240565b3480156104c557600080fd5b506101ea6112bb565b3480156104da57600080fd5b506104e3611392565b6040805163ffffffff9092168252519081900360200190f35b34801561050857600080fd5b506101ea600435602435611396565b34801561052357600080fd5b50610323600160a060020a03600435166113e2565b34801561054457600080fd5b506103cd6113f7565b34801561055957600080fd5b506103cd6113fd565b34801561056e57600080fd5b506101ea63ffffffff600435166024351515611403565b34801561059157600080fd5b506101ea600160a060020a036004351661149d565b3480156105b257600080fd5b506103f76004356114d6565b3480156105ca57600080fd5b506101ea600160a060020a03600435166114ff565b3480156105eb57600080fd5b506103cd600160a060020a036004351661153a565b34801561060c57600080fd5b506101ea63ffffffff60043581169060243516611555565b6101ea63ffffffff60043581169060243516611727565b34801561064757600080fd5b506101ea63ffffffff60043516611a40565b34801561066557600080fd5b506101ea60043563ffffffff60243516611aae565b34801561068657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101ea9436949293602493928401919081908401838280828437509497505063ffffffff853581169650602086013581169560408101358216955060608101358216945060808101358216935060a00135169050611e57565b34801561070d57600080fd5b50610201600160a060020a036004351663ffffffff602435166121ed565b34801561073757600080fd5b506103f76122ca565b34801561074c57600080fd5b506102016122d9565b34801561076157600080fd5b506101ea600160a060020a0360043516612310565b34801561078257600080fd5b506103f7600435612349565b34801561079a57600080fd5b506101ea600160a060020a0360043516602435612364565b3480156107be57600080fd5b506101ea600160a060020a0360043516612399565b3480156107df57600080fd5b50610201600160a060020a036004351663ffffffff602435166123d2565b34801561080957600080fd5b506101ea6124c0565b34801561081e57600080fd5b5061083063ffffffff600435166124fb565b6040805163ffffffff808f1660208301528d8116928201929092528b821660608201528a8216608082015289821660a082015288821660c082015287821660e08201529086166101008201526101208101859052610140810184905280610160810184600481111561089e57fe5b60ff1681526020018315151515815260200182810382528f818151815260200191508051906020019080838360005b838110156108e55781810151838201526020016108cd565b50505050905090810190601f1680156109125780820380516001836020036101000a031916815260200191505b509e50505050505050505050505050505060405180910390f35b6101ea63ffffffff60043581169060243581169060443516600160a060020a03606435166126fd565b34801561096157600080fd5b506103cd612d16565b34801561097657600080fd5b5061097f612d1c565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156109f65781810151838201526020016109de565b50505050905090810190601f168015610a235780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b60408051808201909152600f81527f546f74616c47616d654f7261636c650000000000000000000000000000000000602082015281565b60008181526001602081905260408220805481830154909392839283928392839283928392839291908390819060ff6c0100000000000000000000000085041614610b19576000610b1c565b60015b96506040839060020a900463ffffffff1698506020839060020a900463ffffffff169a508263ffffffff169950600e60008a63ffffffff1663ffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff1681526020019081526020016000206000015495508d945060009b50600b8963ffffffff16815481101515610ba757fe5b90600052602060002090600502019150816002015490508060001415610bd357610bd089612ea4565b90505b600182015463ffffffff8c811660c060020a909204161415610c2f5763ffffffff808a166000908152600e60209081526040808320600187015460c060020a90049094168352929052205484548202811515610c2b57fe5b049b505b60048281015460ff1681811115610c4257fe5b1415610c4d5783549b505b50505060009a8b5250600260205260409099205497999698959794969395600160a060020a03909516949193909250565b610c883382612f25565b1515610c9357600080fd5b610c9d8183612f45565b6040518190600160a060020a0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a45050565b60015b90565b6000600b8263ffffffff16815481101515610cf657fe5b600091825260209091206005909102019050600160048083015460ff1690811115610d1d57fe5b14610d2757600080fd5b600854600160a060020a0316331480610d4f57503360009081526009602052604090205460ff165b80610d8957506001810154610d799063ffffffff608060020a90910481169062093a8090612f7316565b610d81611392565b63ffffffff16115b1515610d9457600080fd5b6004818101805460ff191690911790556040805163ffffffff8416918101919091526060808252600d908201527f43616e63656c4c6f747465727900000000000000000000000000000000000000608082015260a0602082018181528354600260018216156101000260001901909116049183018290526000805160206144b18339815191529284928692829160c083019086908015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b505094505050505060405180910390a1610e8e82612f9a565b5050565b600e6020908152600092835260408084209091529082529020805460019091015463ffffffff1682565b600854600160a060020a03163314610ed357600080fd5b600160a060020a03166000908152600960205260409020805460ff19169055565b60005481565b600260205260009081526040902054600160a060020a031681565b610f1f33826130bd565b1515610f2a57600080fd5b610f348382612f25565b1515610f3f57600080fd5b610f4a8383836130dd565b505050565b60008060006060610f5e6131a3565b600160a060020a03163314610f7257600080fd5b6000868152600f602052604090205463ffffffff169350831515610f9557600080fd5b600b805463ffffffff8616908110610fa957fe5b600091825260209091206005909102019250600160048085015460ff1690811115610fd057fe5b14610fda57600080fd5b6001830154608060020a900463ffffffff16610ff4611392565b63ffffffff161161100457600080fd5b61100f856000613398565b60408051808201909152600881527f63616c6c6261636b0000000000000000000000000000000000000000000000006020820152909250905063ffffffff8216151561108b575060408051808201909152601981527f63616c6c6261636b5f726573756c745f6e6f745f666f756e640000000000000060208201525b600183015463ffffffff90811690831611156110db57505060408051808201909152601581527f63616c6c6261636b5f726573756c745f6c696d6974000000000000000000000060208201526000905b6000805160206144b18339815191528184600001846040518080602001806020018463ffffffff168152602001838103835286818151815260200191508051906020019080838360005b8381101561113d578181015183820152602001611125565b50505050905090810190601f16801561116a5780820380516001836020036101000a031916815260200191505b508381038252855460026000196101006001841615020190911604808252602090910190869080156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b50509550505050505060405180910390a163ffffffff821615611238576001830180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff8516021790556112388461350a565b505050505050565b600854600160a060020a031633148061126857503360009081526009602052604090205460ff165b151561127357600080fd5b600d805463ffffffff909216740100000000000000000000000000000000000000000277ffffffff000000000000000000000000000000000000000019909216919091179055565b600854600090600160a060020a031633146112d557600080fd5b600a546000106112e457600080fd5b50600a80546000918290556008546040519192600160a060020a039091169183156108fc0291849190818181858888f1935050505015801561132a573d6000803e3d6000fd5b506040805180820183905260608082526008908201527f5749544844524157000000000000000000000000000000000000000000000000608082015260a06020820181905260009082015290516000805160206144b18339815191529181900360e00190a150565b4290565b600854600160a060020a03163314806113be57503360009081526009602052604090205460ff165b15156113c957600080fd5b60118290556010819055610e8e633b9aca0083026136c1565b60096020526000908152604090205460ff1681565b60105481565b600a5481565b600854600090600160a060020a031633148061142e57503360009081526009602052604090205460ff165b151561143957600080fd5b600b805463ffffffff851690811061144d57fe5b906000526020600020906005020190508115158160040160019054906101000a900460ff1615151415151561148157600080fd5b60040180549115156101000261ff001990921691909117905550565b600854600160a060020a031633146114b457600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600081815260026020526040902054600160a060020a03168015156114fa57600080fd5b919050565b600854600160a060020a0316331461151657600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600160a060020a031660009081526003602052604090205490565b600854600090600160a060020a031633148061158057503360009081526009602052604090205460ff165b151561158b57600080fd5b600b805463ffffffff851690811061159f57fe5b600091825260209091206005909102019050600160048083015460ff16908111156115c657fe5b146115d057600080fd5b600181015463ffffffff90811690831611156115eb57600080fd5b63ffffffff821615156115fd57600080fd5b600181810180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff86811682029290921792839055604080519190930490911691810182905260608082526014908201527f5265736f6c76654c6f7474657279427948616e64000000000000000000000000608082015260a0602082018181528554600261010096821615969096026000190116949094049082018190526000805160206144b1833981519152938593929182919060c08301908690801561170e5780601f106116e35761010080835404028352916020019161170e565b820191906000526020600020905b8154815290600101906020018083116116f157829003601f168201915b505094505050505060405180910390a1610f4a8361350a565b600854600090819060609082908190600160a060020a031633148061175b57503360009081526009602052604090205460ff165b151561176657600080fd5b600b805463ffffffff891690811061177a57fe5b906000526020600020906005020194506117cb6040805190810160405280600381526020017f55524c00000000000000000000000000000000000000000000000000000000008152506010546138b0565b935083856003015434011115156117e157600080fd5b600385018054340185900390556040805163ffffffff88169181019190915260608082526018908201527f5265736f6c76654c6f747465727942794f7261636c697a650000000000000000608082015260a0602082018181528754600260001961010060018416150201909116049183018290526000805160206144b18339815191529288928a92829160c0830190869080156118bf5780601f10611894576101008083540402835291602001916118bf565b820191906000526020600020905b8154815290600101906020018083116118a257829003601f168201915b505094505050505060405180910390a1611977606060405190810160405280602681526020017f6a736f6e2868747470733a2f2f746f74616c67616d652e696f2f6170692f763281526020017f2f67616d652f000000000000000000000000000000000000000000000000000081525061193e8963ffffffff16613b21565b60408051808201909152601481527f2f726573756c742e6a736f6e292e726573756c740000000000000000000000006020820152613c14565b6001860154909350608060020a900463ffffffff16611994611392565b63ffffffff1610156119c457856119a9611392565b6001870154608060020a900463ffffffff16030191506119c8565b8591505b611a118263ffffffff166040805190810160405280600381526020017f55524c000000000000000000000000000000000000000000000000000000000081525085601054613de3565b6000908152600f60205260409020805463ffffffff191663ffffffff9890981697909717909655505050505050565b600854600160a060020a0316331480611a6857503360009081526009602052604090205460ff165b1515611a7357600080fd5b600d805463ffffffff90921660c060020a027bffffffff00000000000000000000000000000000000000000000000019909216919091179055565b6000828152600160208190526040822080820154909290918190819081908190819060ff6c0100000000000000000000000089041614611aef576000611af2565b60015b600b805491975063ffffffff680100000000000000008a04811697506401000000008a041695509086908110611b2457fe5b600091825260209091206005909102019250600360048085015460ff1690811115611b4b57fe5b1480611b67575060048381015460ff1681811115611b6557fe5b145b1515611b7257600080fd5b60008a815260026020526040902054600160a060020a03163314611b9557600080fd5b8515611ba057600080fd5b600183015463ffffffff85811660c060020a909204161480611bd2575060048381015460ff1681811115611bd057fe5b145b1515611bdd57600080fd5b6004838101546000935060ff1681811115611bf457fe5b1415611bff57875491505b600360048085015460ff1690811115611c1457fe5b1415611d735763ffffffff8086166000908152600e60209081526040808320600188015460c060020a9004909416835292905220548854600285015402811515611c5a57fe5b600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8e1660048201529051939092049450600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b505050506040513d6020811015611cf457600080fd5b50519050600160a060020a03811615611d7357600160a060020a0381166108fc611d2584606463ffffffff6141e916565b6040518115909202916000818181858888f19350505050158015611d4d573d6000803e3d6000fd5b50611d706064611d6484606363ffffffff61422316565b9063ffffffff6141e916565b91505b6c01000000000000000000000000969096016001888101829055604051919790965090339083156108fc029084906000818181858888f19350505050158015611dc0573d6000803e3d6000fd5b506040805133602082015263ffffffff80881682840152808d1660608301528616608082015260a0810184905260c08082526006908201527f52656465656d000000000000000000000000000000000000000000000000000060e082015290517f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d918190036101000190a150505050505050505050565b611e5f61439d565b600854600090600160a060020a0316331480611e8a57503360009081526009602052604090205460ff165b1515611e9557600080fd5b8851600210611ea357600080fd5b600163ffffffff881611611eb657600080fd5b600063ffffffff841611611ec957600080fd5b611ed1611392565b63ffffffff168863ffffffff16111515611eea57600080fd5b88825263ffffffff878116602084015288811660a08401528681166040840152831660c0830152600161014083018190525063ffffffff808616606084015284166080830152600b8054600181810180845560009390935284518051919392869260059091027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90191611f8291839160200190614401565b5060208201516001828101805460408601516060870151608088015160a089015160c08a015160e08b015163ffffffff1990961663ffffffff998a161767ffffffff000000001916640100000000958a1695909502949094176bffffffff000000000000000019166801000000000000000093891693909302929092176fffffffff00000000000000000000000019166c01000000000000000000000000918816919091021773ffffffff000000000000000000000000000000001916608060020a918716919091021777ffffffff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000091861691909102177bffffffff000000000000000000000000000000000000000000000000191660c060020a94909116939093029290921790915561010083015160028301556101208301516003830155610140830151600480840180549293909260ff19169184908111156120ef57fe5b02179055506101608201518160040160016101000a81548160ff02191690831515021790555050500390506000805160206144b18339815191528982604051808060200180602001848152602001838103835260078152602001807f41646447616d6500000000000000000000000000000000000000000000000000815250602001838103825285818151815260200191508051906020019080838360005b838110156121a657818101518382015260200161218e565b50505050905090810190601f1680156121d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050505050505050565b6040805160208101909152600080825280600160a060020a038516151561221357600080fd5b505060008054600019015b600081106122c257600054811115612235576122c2565b600081815260026020526040902054600160a060020a03868116911614156122b9576122868360408051908101604052806001815260200160fa60020a600b0281525061228184613b21565b613c14565b925060019091019063ffffffff8416158015906122af57508363ffffffff168263ffffffff1610155b156122b9576122c2565b6000190161221e565b505092915050565b600854600160a060020a031681565b60408051808201909152600481527f5454474f00000000000000000000000000000000000000000000000000000000602082015281565b600854600160a060020a0316331461232757600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b600460205260009081526040902054600160a060020a031681565b600160a060020a038216151561237957600080fd5b6123833382612f25565b151561238e57600080fd5b610e8e3383836130dd565b600854600160a060020a031633146123b057600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b6040805160208101909152600080825280808080600160a060020a03881615156123fb57600080fd5b6000945060016000540393505b600084106124b55760005484111561241f576124b5565b600084815260026020526040902054600160a060020a03898116911614156124a95750505060008181526001602081905260409091209081015463ffffffff68010000000000000000820481169087168114156124a9576124a08660408051908101604052806001815260200160fa60020a600b0281525061228187613b21565b95506001909401935b60001990930192612408565b505050505092915050565b600754600160a060020a031633146124d757600080fd5b60075460088054600160a060020a031916600160a060020a03909216919091179055565b60606000806000806000806000806000806000806000600b8f63ffffffff1681548110151561252657fe5b60009182526020918290206005919091020180546040805160026001841615610100026000190190931692909204601f8101859004850283018501909152808252919350918391908301828280156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b50505050509d508060010160009054906101000a900463ffffffff169c508060010160109054906101000a900463ffffffff169b508060010160049054906101000a900463ffffffff169a508060010160089054906101000a900463ffffffff16995080600101600c9054906101000a900463ffffffff1698508060010160149054906101000a900463ffffffff1697508060010160189054906101000a900463ffffffff1696506126708f614247565b955080600201549450846000141561268e5761268b8f612ea4565b94505b6003810154600482015490945060ff16925060018360048111156126ae57fe5b1480156126cd57508b63ffffffff166126c5611392565b63ffffffff16115b156126d757600292505b8060040160019054906101000a900460ff1691505091939597999b9d90929496989a9c50565b600080600080600080600061271061447f565b6000600b8d63ffffffff1681548110151561272757fe5b60009182526020909120600590910201985060016004808b015460ff169081111561274e57fe5b1461275857600080fd5b6001890154608060020a900463ffffffff16612772611392565b63ffffffff161061278257600080fd5b60008b63ffffffff161180156127a65750600189015463ffffffff908116908c1611155b15156127b157600080fd5b600160a060020a038a163314156127c757600080fd5b6004890154610100900460ff16156127de57600080fd5b600189015474010000000000000000000000000000000000000000900463ffffffff1666038d7ea4c680000266ffffffffffffff1634101561281f57600080fd5b600d5434985061285290899063ffffffff7401000000000000000000000000000000000000000090910481169061422316565b9650683635c9adc5dea0000087111561287257683635c9adc5dea0000096505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018a90529051600160a060020a03909216916332c0fba5916064808201926020929091908290030181600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d602081101561290f57600080fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8f1660048201529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505050506040513d60208110156129a757600080fd5b50519550600160a060020a03861615612a9b57600d546129d990899063ffffffff60c060020a90910481169061422316565b9450683635c9adc5dea000008511156129f957683635c9adc5dea0000094505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03898116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b505050506040513d6020811015612a9857600080fd5b50505b612ab16064611d648a600463ffffffff61422316565b9350612ac3888563ffffffff6142c716565b9750600160a060020a038a1615612b7657600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038d8116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612b4957600080fd5b505af1158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50505b6003890154612b8b908563ffffffff612f7316565b60038a015550505063ffffffff808b166000818152600e602090815260408083208d861680855290835281842080548c01815560019081018054808916830190981663ffffffff1990981697909717909655815180830183528b8152680100000000000000009095026401000000009091020142016fffffffffffffffffffffffffffffffff81168584019081528454808801865580865293879052918420855181559151919095015590612c419033836130dd565b7f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d338e838e8c604051808060200187600160a060020a0316600160a060020a031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001838152602001828103825260038152602001807f4275790000000000000000000000000000000000000000000000000000000000815250602001965050505050505060405180910390a150505050505050505050505050565b60115481565b600b546040805160208181018352600080835283519182019093528281528291908280612d47611392565b9150600090505b8663ffffffff168163ffffffff161015612e9b576001600b805463ffffffff8416908110612d7857fe5b60009182526020909120600460059092020181015460ff1690811115612d9a57fe5b14612da457612e93565b600b805463ffffffff8316908110612db857fe5b600091825260209091206001600590920201015463ffffffff608060020a90910481169083161015612e1c5760408051808201909152600180825260fa60020a600b02602083015290960195612e1990859061228163ffffffff8516613b21565b93505b600b805463ffffffff8316908110612e3057fe5b600091825260209091206001600590920201015463ffffffff608060020a909104811690831610612e935760408051808201909152600180825260fa60020a600b02602083015290950194612e9090849061228163ffffffff8516613b21565b92505b600101612d4e565b50509091929394565b600080600080600b8563ffffffff16815481101515612ebf57fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e60209081526040808320938516835292905220549190910190600101612ed8565b509392505050565b600090815260026020526040902054600160a060020a0391821691161490565b6000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828201838110801590612f885750828110155b1515612f9357600080fd5b9392505050565b6000600b8263ffffffff16815481101515612fb157fe5b90600052602060002090600502019050600081600301541115610e8e57600381018054600a80549091019055546040805190810182905260608082526007908201527f54616b6546656500000000000000000000000000000000000000000000000000608082015260a0602082018181528454600260001961010060018416150201909116049183018290526000805160206144b183398151915293859390929091829160c0830190869080156130a95780601f1061307e576101008083540402835291602001916130a9565b820191906000526020600020905b81548152906001019060200180831161308c57829003601f168201915b505094505050505060405180910390a15050565b600090815260046020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260036020908152604080832080546001019055858352600290915290208054600160a060020a0319169091179055831615610f4a578082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600160a060020a03831660009081526003602090815260408083208054600019019055838352600490915290208054600160a060020a0319169055505050565b600554600090600160a060020a031615806131d057506005546131ce90600160a060020a03166142dc565b155b156131e1576131df60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b505050506040513d602081101561325e57600080fd5b5051600654600160a060020a0390811691161461331457600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156132c857600080fd5b505af11580156132dc573d6000803e3d6000fd5b505050506040513d60208110156132f257600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600660009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561336757600080fd5b505af115801561337b573d6000803e3d6000fd5b505050506040513d602081101561339157600080fd5b5051905090565b6000828180805b83518110156134ed5783517f3000000000000000000000000000000000000000000000000000000000000000908590839081106133d857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161015801561344e575083517f39000000000000000000000000000000000000000000000000000000000000009085908390811061342e57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b156134a757811561346d57851515613465576134ed565b600019909501945b600a830292506030848281518110151561348357fe5b90602001015160f860020a900460f860020a0260f860020a900403830192506134e5565b83818151811015156134b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a0214156134e557600191505b60010161339f565b60008611156134ff5785600a0a830292505b509095945050505050565b6000600b8263ffffffff1681548110151561352157fe5b600091825260209091206004600590920201908101805460ff19166003179055905061354c82612ea4565b600282015563ffffffff8083166000908152600e6020908152604080832060018087015460c060020a900486168552925290912001541615156136b8576003810154600282015401156135ca576135c681600301546135ba8360020154600a54612f7390919063ffffffff16565b9063ffffffff612f7316565b600a555b6003810154600280830154604080519190930192810183905260608082526009908201527f4e4f424f445957494e0000000000000000000000000000000000000000000000608082015260a06020820181815285546000196101006001831615020116939093049082018190526000805160206144b183398151915293859390929182919060c0830190869080156136a35780601f10613678576101008083540402835291602001916136a3565b820191906000526020600020905b81548152906001019060200180831161368657829003601f168201915b505094505050505060405180910390a1610e8e565b610e8e82612f9a565b600554600160a060020a031615806136eb57506005546136e990600160a060020a03166142dc565b155b156136fc576136fa60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561374f57600080fd5b505af1158015613763573d6000803e3d6000fd5b505050506040513d602081101561377957600080fd5b5051600654600160a060020a0390811691161461382f57600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137e357600080fd5b505af11580156137f7573d6000803e3d6000fd5b505050506040513d602081101561380d57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517fca6ad1e4000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163ca6ad1e49160248082019260009290919082900301818387803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b5050505050565b600554600090600160a060020a031615806138dd57506005546138db90600160a060020a03166142dc565b155b156138ee576138ec60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b505050506040513d602081101561396b57600080fd5b5051600654600160a060020a03908116911614613a2157600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810185905260048101918252855160448201528551600160a060020a0390931692632ef3accc9287928792829160640190602086019080838360005b83811015613aa1578181015183820152602001613a89565b50505050905090810190601f168015613ace5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050506040513d6020811015613b1857600080fd5b50519392505050565b60606000808281851515613b6a5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450613c0b565b8593505b8315613b8557600190920191600a84049350613b6e565b826040519080825280601f01601f191660200182016040528015613bb3578160200160208202803883390190505b5091505060001982015b8515613c0757815160001982019160f860020a6030600a8a060102918491908110613be457fe5b906020010190600160f860020a031916908160001a905350600a86049550613bbd565b8194505b50505050919050565b82516060908490849084908490600090819083901515613c685784516040519080825280601f01601f191660200182016040528015613c5d578160200160208202803883390190505b509350839050613d6f565b84518651885101016040519080825280601f01601f191660200182016040528015613c9d578160200160208202803883390190505b509350839050600091505b8651821015613d09578682815181101515613cbf57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613ce657fe5b906020010190600160f860020a031916908160001a905350600190910190613ca8565b600091505b8551821015613d6f578582815181101515613d2557fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613d4c57fe5b906020010190600160f860020a031916908160001a905350600190910190613d0e565b600091505b8451821015613dd5578482815181101515613d8b57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613db257fe5b906020010190600160f860020a031916908160001a905350600190910190613d74565b9a9950505050505050505050565b6005546000908190600160a060020a03161580613e125750600554613e1090600160a060020a03166142dc565b155b15613e2357613e2160006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613e7657600080fd5b505af1158015613e8a573d6000803e3d6000fd5b505050506040513d6020811015613ea057600080fd5b5051600654600160a060020a03908116911614613f5657600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613f0a57600080fd5b505af1158015613f1e573d6000803e3d6000fd5b505050506040513d6020811015613f3457600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810186905260048101918252875160448201528751600160a060020a0390931692632ef3accc9289928892829160640190602086019080838360005b83811015613fd6578181015183820152602001613fbe565b50505050905090810190601f1680156140035780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b505050506040513d602081101561404d57600080fd5b50519050670de0b6b3a76400003a84020181111561406e57600091506141e0565b6006546040517fc51be90f0000000000000000000000000000000000000000000000000000000081526004810188815260648201869052608060248301908152885160848401528851600160a060020a039094169363c51be90f9386938c938c938c938c939291604482019160a40190602088019080838360005b838110156141015781810151838201526020016140e9565b50505050905090810190601f16801561412e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015614161578181015183820152602001614149565b50505050905090810190601f16801561418e5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b50505050506040513d60208110156141db57600080fd5b505191505b50949350505050565b6000808083116141f857600080fd5b828481151561420357fe5b049050828481151561421157fe5b068184020184141515612f9357600080fd5b6000828202831580612f88575082848281151561423c57fe5b0414612f9357600080fd5b600080600080600b8563ffffffff1681548110151561426257fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e602090815260408083208585168452909152902060019081015490911692909201910161427b565b6000828211156142d657600080fd5b50900390565b3b90565b60006142ea6142f0565b92915050565b600080614310731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed6142dc565b1115614344575060058054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610cdc565b600061436373c03a2615d5efaf5f49f60b7bb6583eaec212fdf16142dc565b1115614397575060058054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610cdc565b50600090565b6040805161018081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052906101408201908152600060209091015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061444257805160ff191683800117855561446f565b8280016001018555821561446f579182015b8281111561446f578251825591602001919060010190614454565b5061447b929150614496565b5090565b604080518082019091526000808252602082015290565b610cdc91905b8082111561447b576000815560010161449c5600d7fd1f721dc8644a44be50ee5bce1d6b7ac2ffd81759add00d58b2efc0e9f050a165627a7a72305820d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f350029

Swarm Source

bzzr://d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f35

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.