Contract 0xdf203118a954c918b967a94e51f3570a2faba4ac

 

Contract Overview

Balance:
4.424077606299682344 Ether

EtherValue:
$648.84 (@ $146.66/ETH)
TxHash Block Age From To Value [TxFee]
0x2ebeb69eddede05cc828b761cff2fedf467a1f8b76165e1531a9462173b2181e72254034 days 19 hrs ago0xcd33c0ded1b580f3f8b907f6dfb52adb5fda54b8 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.16667 Ether0.001643688
0x8453acc08e1937eb6a3535ce3edda128646b043dd9da7f5578aeecb1f7ee3a4772119928 days 7 mins ago0x7cd84443027d2e19473c3657f167ada34417654f IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000950148
0x65d7f8f9df33b8767d5885192c2a7ff29b4ec69afb55279ec29472c805de37a072119688 days 14 mins ago0x7cd84443027d2e19473c3657f167ada34417654f IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000179493
0x0152cdc9ecb05df2602b91fdb8b2dec2327c58c64202ba8568d2787ecaa41ef872069299 days 4 hrs ago0x37d320fdf9e2e8760da089f66a9c50d45588e1a2 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.002852838
0x44556d13ecbae113a32dfc63e95cdb542e36df13dad82e93e28410b2edde408672069019 days 4 hrs ago0x37d320fdf9e2e8760da089f66a9c50d45588e1a2 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000268479
0x544078d31e69b3f60171d7141d9a2bcc2ca1a8e846c65592a7bc960b67fb4b76720338610 days 1 hr ago0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d7 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.16567 Ether0.005835226629
0xd0c4e6e98201feb9e8572f5c1b923ac54406a836fb97da643bd9e6231d09fa39719404512 days 47 mins ago0xdcce6ef64c01d91b23d7855b45b69cd4de96c1e6 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.16461 Ether0.00046022705
0x08d250541f36383c4e3d9275de8ae79d78be3fbf086324dbf293d9b3b1b3d9ca717968514 days 23 hrs ago0xcf0e9b4746cfb97bae329fe5f696969f6564566a IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0004784133
0xdb8429d25152351c66d071a00c04f6ae9b895d848d6ec4ef14d62d85f9bc31ad717967214 days 23 hrs ago0xcf0e9b4746cfb97bae329fe5f696969f6564566a IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00009011031
0x6b93cb997a7081da8943bcfa9431a25a0bfd5c3809797b70d3434c6026d4a541717513015 days 21 hrs ago0x9a62e0bbf219ac7533f7e498c87dd002bb8863ed IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000316716
0x019e8ae7e437f4a746fe95e4fc703fce723fe1ab346bd46bfc34fae938b0c468716323318 days 7 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000179324
0x3ebed5af81e69b6071a3fb6688e50c5a1bc87162c4c6b1412556580771cc5099715999918 days 23 hrs ago0x6c6a392f461a624643bb7fc0497564e517473e95 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.18352 Ether0.002089644
0x76b2750963492ab454a5eb4ccb61b6784189f867920d155128e279805a682d0e715761819 days 11 hrs ago0x37d320fdf9e2e8760da089f66a9c50d45588e1a2 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000299155
0x99815248655d9f525ee95d2cc6d1700ae81d2f1c83f9c34ea9e747e22ab13ef2715018820 days 23 hrs ago0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d7 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.16166 Ether0.001567233
0xffe812b0cea3225fca966aa5d5185bb7bc548ef6b6cd5774fcc683faf183baf5714940321 days 2 hrs ago0x6c6a392f461a624643bb7fc0497564e517473e95 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.2054 Ether0.006540765
0x7cb45f4b720330f3176c71206af67b6fbb8191186c0940faad409dfcbd6cdc36714915721 days 4 hrs ago0x123085670e817602041e58febb243abe01a9a825 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000950148
0xdafa2a5cbfc20610460dd8c2c9243fa3def7031ab64739fbfb77f7f1b7981eed714914721 days 4 hrs ago0x123085670e817602041e58febb243abe01a9a825 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000134493
0x396e9560d091d3989c6ac6031635377bd3b0260e91419ff15f187767824b07ea714610321 days 19 hrs ago0xac2b4b94eca37cb7c9cf7062fefb2792c5792731 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000950148
0x1542860656635b509660e48c37ee258b9bda164a23b3feef2240ea82b525595e714609321 days 19 hrs ago0xac2b4b94eca37cb7c9cf7062fefb2792c5792731 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000089662
0x8cd4f1d7598ad2d1c2b4cc8725ea76c5c6118445af923f9e04e699ffaf040fc7714608321 days 19 hrs ago0xac2b4b94eca37cb7c9cf7062fefb2792c5792731 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.2054 Ether0.000545176
0x1832c5ab445be03efb1052f7ff283ca620056e4555f06d401cb170bb308c0d86711850327 days 7 hrs ago0x6c6a392f461a624643bb7fc0497564e517473e95 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.2218 Ether0.006733506
0x6dcb7de080e66de229df9bbda428a277789d8d59bcb361b0e084871d8801b6db710878929 days 6 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000299155
0x406a3172f1e12dca370569aa5234a45d37f2a0a2f1a174944ebdb6875dba949d709415932 days 13 mins ago0x52af787439a82f36d6ef6b0da0f0e5ecce29ff90 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00063404
0x79d5972ec84cd087f8bd23605aaf552e7fb76c1cfec2ba6bab03b1ed59737c00709415032 days 17 mins ago0x52af787439a82f36d6ef6b0da0f0e5ecce29ff90 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.000089662
0xe61303a16f76fb8fbce8915d891f90c974325b4282f7790a53b935b15add22af709403732 days 44 mins ago0x86aa2ee5775757146b36f5161b1629c13b4a2b1c IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.15899 Ether0.0004601895
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x2ebeb69eddede05cc828b761cff2fedf467a1f8b76165e1531a9462173b2181e72254034 days 19 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xcd33c0ded1b580f3f8b907f6dfb52adb5fda54b80.00017 Ether
0x2ebeb69eddede05cc828b761cff2fedf467a1f8b76165e1531a9462173b2181e72254034 days 19 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.00666 Ether
0x2ebeb69eddede05cc828b761cff2fedf467a1f8b76165e1531a9462173b2181e72254034 days 19 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x38ec1b3fa23f0eaa12386a319e726c32b82e4aa60.138861 Ether
0xf901c5c6ade78aeda0e68a947e86026591fe2ee2e909069bc6af5d346f74cfb272186526 days 9 hrs ago0x6ddaaee7f5a3eb5a0dd30eafb70835f9f68db8d20xdf203118a954c918b967a94e51f3570a2faba4ac0.018800548523603806 Ether
0x8453acc08e1937eb6a3535ce3edda128646b043dd9da7f5578aeecb1f7ee3a4772119928 days 7 mins ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x7cd84443027d2e19473c3657f167ada34417654f0.006001118939245714 Ether
0x0152cdc9ecb05df2602b91fdb8b2dec2327c58c64202ba8568d2787ecaa41ef872069299 days 4 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x37d320fdf9e2e8760da089f66a9c50d45588e1a20.01468746965037825 Ether
0x544078d31e69b3f60171d7141d9a2bcc2ca1a8e846c65592a7bc960b67fb4b76720338610 days 1 hr ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d70.00017 Ether
0x544078d31e69b3f60171d7141d9a2bcc2ca1a8e846c65592a7bc960b67fb4b76720338610 days 1 hr ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.00662 Ether
0x544078d31e69b3f60171d7141d9a2bcc2ca1a8e846c65592a7bc960b67fb4b76720338610 days 1 hr ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x8214f1c750ad8e08d1cfb19077ad471222cb59f90.138027 Ether
0xd0c4e6e98201feb9e8572f5c1b923ac54406a836fb97da643bd9e6231d09fa39719404512 days 47 mins ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xdcce6ef64c01d91b23d7855b45b69cd4de96c1e60.000165555555555557 Ether
0xd0c4e6e98201feb9e8572f5c1b923ac54406a836fb97da643bd9e6231d09fa39719404512 days 47 mins ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.006577777777777777 Ether
0xd0c4e6e98201feb9e8572f5c1b923ac54406a836fb97da643bd9e6231d09fa39719404512 days 47 mins ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d70.137146666666666666 Ether
0xa1245ca145fe9066376e61385dc9589b5daef64478781a2181d24e57235ee0f7718729913 days 9 hrs ago0x6ddaaee7f5a3eb5a0dd30eafb70835f9f68db8d20xdf203118a954c918b967a94e51f3570a2faba4ac0.000931725 Ether
0x08d250541f36383c4e3d9275de8ae79d78be3fbf086324dbf293d9b3b1b3d9ca717968514 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xcf0e9b4746cfb97bae329fe5f696969f6564566a0.008282243346947661 Ether
0x6b93cb997a7081da8943bcfa9431a25a0bfd5c3809797b70d3434c6026d4a541717513015 days 21 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x9a62e0bbf219ac7533f7e498c87dd002bb8863ed0.011189784652398821 Ether
0xe10de4f84c63c4bd262b016f1b0847b208fc0bcd3f70e7a059273a05ba37c5ce716007518 days 22 hrs ago0x6ddaaee7f5a3eb5a0dd30eafb70835f9f68db8d20xdf203118a954c918b967a94e51f3570a2faba4ac0.018125226878625295 Ether
0x3ebed5af81e69b6071a3fb6688e50c5a1bc87162c4c6b1412556580771cc5099715999918 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x6c6a392f461a624643bb7fc0497564e517473e950.000186666666666667 Ether
0x3ebed5af81e69b6071a3fb6688e50c5a1bc87162c4c6b1412556580771cc5099715999918 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.007333333333333333 Ether
0x3ebed5af81e69b6071a3fb6688e50c5a1bc87162c4c6b1412556580771cc5099715999918 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x37d320fdf9e2e8760da089f66a9c50d45588e1a20.1529 Ether
0x99815248655d9f525ee95d2cc6d1700ae81d2f1c83f9c34ea9e747e22ab13ef2715018820 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d70.00016 Ether
0x99815248655d9f525ee95d2cc6d1700ae81d2f1c83f9c34ea9e747e22ab13ef2715018820 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.00646 Ether
0x99815248655d9f525ee95d2cc6d1700ae81d2f1c83f9c34ea9e747e22ab13ef2715018820 days 23 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x52af787439a82f36d6ef6b0da0f0e5ecce29ff900.134691 Ether
0xffe812b0cea3225fca966aa5d5185bb7bc548ef6b6cd5774fcc683faf183baf5714940321 days 2 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0x6c6a392f461a624643bb7fc0497564e517473e950.000208659074587062 Ether
0xffe812b0cea3225fca966aa5d5185bb7bc548ef6b6cd5774fcc683faf183baf5714940321 days 2 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.008207653637016517 Ether
0xffe812b0cea3225fca966aa5d5185bb7bc548ef6b6cd5774fcc683faf183baf5714940321 days 2 hrs ago0xdf203118a954c918b967a94e51f3570a2faba4ac0xfee91dc6d1cda924feb8703231da8a5e6dc9db480.171129578331794391 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: SuperCountriesEth
Compiler Version: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.24;


/*
                                                                                                             

███████╗██╗   ██╗██████╗ ███████╗██████╗                                    
██╔════╝██║   ██║██╔══██╗██╔════╝██╔══██╗                                   
███████╗██║   ██║██████╔╝█████╗  ██████╔╝                                   
╚════██║██║   ██║██╔═══╝ ██╔══╝  ██╔══██╗                                   
███████║╚██████╔╝██║     ███████╗██║  ██║                                   
╚══════╝ ╚═════╝ ╚═╝     ╚══════╝╚═╝  ╚═╝                                   
                                                                            
     ██████╗ ██████╗ ██╗   ██╗███╗   ██╗████████╗██████╗ ██╗███████╗███████╗
    ██╔════╝██╔═══██╗██║   ██║████╗  ██║╚══██╔══╝██╔══██╗██║██╔════╝██╔════╝
    ██║     ██║   ██║██║   ██║██╔██╗ ██║   ██║   ██████╔╝██║█████╗  ███████╗
    ██║     ██║   ██║██║   ██║██║╚██╗██║   ██║   ██╔══██╗██║██╔══╝  ╚════██║
    ╚██████╗╚██████╔╝╚██████╔╝██║ ╚████║   ██║   ██║  ██║██║███████╗███████║
     ╚═════╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝╚══════╝╚══════╝
                                                                           

© 2018 SuperCountries

所有权 - 4CE434B6058EC7C24889EC2512734B5DBA26E39891C09DF50C3CE3191CE9C51E

Xuxuxu - LB - Xufo
																										   
*/



library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}






contract SuperCountriesEth {
  using SafeMath for uint256;

 
////////////////////////////
/// 	CONSTRUCTOR		 ///	
////////////////////////////
   
	constructor () public {
    owner = msg.sender;
	}
	
	address public owner;  

  
  /**
   * @dev Throws if called by any account other than the owner.
   */
	modifier onlyOwner() {
		require(owner == msg.sender);
		_;
	}


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
	function transferOwnership(address newOwner) public onlyOwner {
		require(newOwner != address(0));
		emit OwnershipTransferred(owner, newOwner);
		owner = newOwner;
	}

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

 
 


////////////////////////
/// 	EVENTS		 ///	
////////////////////////
  
  event Bought (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Sold (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
  
  event SetReferrerEvent(address indexed referral, address indexed referrer);
  event PayReferrerEvent(address indexed oldOwner, address indexed referrer1, address indexed referrer2, uint256 referralPart);
  
  event BonusConstant(uint256 bonusToDispatch_, uint256 bonusDispatched_, uint256 notYetDispatched_, uint256 indexed _itemSoldId_, uint256 kBonus, uint256 indexed countryScore);
  event BonusDispatch(uint256 bonusToGet_, uint256 indexed playerScoreForThisCountry_, address indexed player_, uint256 pendingBalanceTotal_, uint256 indexed _itemSoldId);
  event DivsDispatch(uint256 dividendsCut_, uint256 dividendsScore, uint256 indexed _itemId, uint256 price, uint256 worldScore_);
  event newRichest(address indexed richest_, uint256 richestScore_, uint256 indexed blocktimestamp_, uint256 indexed blocknumber_);
  
  event Withdrawal(address indexed playerAddress, uint256 indexed ethereumWithdrawn, uint256 indexed potVersion_);
  event ConfirmWithdraw(address indexed playerAddress, uint256 refbonus_, uint256 divs_, uint256 totalPending_, uint256 playerSc_, uint256 _handicap_);
  event ConfirmPotWithdraw(uint256 contractBalance, address indexed richest_, uint256 richestBalance_, address indexed lastBuyer_, uint256 lastBalance_, uint256 indexed potVersion);
  event PotWithdrawConstant(uint256 indexed blocktimestamp_, uint256 indexed timestamplimit_, uint256 dividendsScore_, uint256 indexed potVersion, uint256 lastWithdrawPotVersion_);
  event WithdrawOwner(uint256 indexed potVersion, uint256 indexed lastWithdrawPotVersion_, uint256 indexed balance_);

 
 


///////////////////////////////////////////
/// 	VARIABLES, MAPPINGS, STRUCTS 	///	
///////////////////////////////////////////
  
  bool private erc721Enabled = false;

  /// Price increase limits
  uint256 private increaseLimit1 = 0.04 ether;
  uint256 private increaseLimit2 = 0.6 ether;
  uint256 private increaseLimit3 = 2.5 ether;
  uint256 private increaseLimit4 = 7.0 ether;

  /// All countries
  uint256[] private listedItems;
  mapping (uint256 => address) private ownerOfItem;
  mapping (uint256 => uint256) private priceOfItem;
  mapping (uint256 => uint256) private previousPriceOfItem;
  mapping (uint256 => address) private approvedOfItem;
   
  
  /// Referrals and their referrers
  mapping(address => address) public referrerOf;
  
  /// Dividends and score
  uint256 private worldScore ; /// Worldscore = cumulated price of all owned countries + all spent ethers in this game
  mapping (address => uint256) private playerScore; /// For each player, the sum of each owned country + the sum of all spent ethers since the beginning of the game
  uint256 private dividendsScore ; /// Balance of dividends divided by the worldScore 
  mapping(uint256 => mapping(address => uint256)) private pendingBalance; /// Divs from referrals, bonus and dividends calculated after the playerScore change ; if the playerScore didn't change recently, there are some pending divs that can be calculated using dividendsScore and playerScore. The first mapping (uint256) is the jackpot version to use, the value goes up after each pot distribution and the previous pendingBalance are reseted.
  mapping(uint256 => mapping(address => uint256)) private handicap; /// a player cannot claim a % of all dividends but a % of the cumulated dividends after his join date, this is a handicap
  mapping(uint256 => mapping(address => uint256)) private balanceToWithdraw; /// A player cannot withdraw pending divs, he must request a withdraw first (pending divs move to balanceToWithdraw) then withdraw.	

  uint256 private potVersion = 1; /// Number of jackpots
  uint256 private lastWithdrawPotVersion = 1; /// Latest withdraw in the game (pot version)
  address private richestBuyer ; /// current player with the highest PlayerScore
  address private lastBuyer ; /// current latest buyer in the game
  uint256 private timestampLimit = 1528108990; /// after this timestamp, the richestBuyer and the lastBuyer will be allowed to withdraw 1/2 of the contract balance (1/4 each)
  
  struct CountryStruct {
		address[] itemToAddressArray; /// addresses that owned the same country	 
		uint256 priceHistory; /// cumulated price of the country
		uint256 startingPrice; /// starting price of the country
		}

  mapping (uint256 => CountryStruct) public countryStructs;
  
  mapping (uint256 => mapping(address => uint256)) private itemHistory; /// Store price history (cumulated) for each address for each country
  
  uint256 private HUGE = 1e13;
 
 
 


////////////////////////////////
/// 	USEFUL MODIFIER		 ///	
////////////////////////////////

	modifier onlyRealAddress() {
		require(msg.sender != address(0));
		_;
	}


	

	
////////////////////////////////
/// 	ERC721 PRIVILEGES	 ///	
////////////////////////////////

	modifier onlyERC721() {
		require(erc721Enabled);
		_;
	} 


  /**
   * @dev Unlocks ERC721 behaviour, allowing for trading on third party platforms.
   */	 
	function enableERC721 () onlyOwner() public {
		erc721Enabled = true;
	} 

  
 

 
///////////////////////////////////
///		LISTING NEW COUNTRIES 	///
///////////////////////////////////
	
	function listMultipleItems (uint256[] _itemIds, uint256 _price, address _owner) onlyOwner() external {
		for (uint256 i = 0; i < _itemIds.length; i++) {
			listItem(_itemIds[i], _price, _owner);
		}
	}

	
	function listItem (uint256 _itemId, uint256 _price, address _owner) onlyOwner() public {
		require(_price > 0);
		require(priceOfItem[_itemId] == 0);
		require(ownerOfItem[_itemId] == address(0));

		ownerOfItem[_itemId] = _owner;
		priceOfItem[_itemId] = _price;
		previousPriceOfItem[_itemId] = 0;
		listedItems.push(_itemId);
		newEntity(_itemId, _price);
	}

	
  /**
   * @dev Creates new Struct for a country each time a new country is listed.
   */	
	function newEntity(uint256 countryId, uint256 startPrice) private returns(bool success) {
		countryStructs[countryId].startingPrice = startPrice;
		return true;
	}

	
  /**
   * @dev Update the Struc each time a country is sold.
   * Push the newOwner, update the price history
   */	
	function updateEntity(uint256 countryId, address newOwner, uint256 priceUpdate) internal {
		countryStructs[countryId].priceHistory += priceUpdate;
		if (itemHistory[countryId][newOwner] == 0 ){
			countryStructs[countryId].itemToAddressArray.push(newOwner);
		}
	  }
 



 
///////////////////////
/// CALCULATE PRICE ///
///////////////////////

	function calculateNextPrice (uint256 _price) public view returns (uint256 _nextPrice) {
		if (_price < increaseLimit1) {
			return _price.mul(200).div(95);
		} else if (_price < increaseLimit2) {
			return _price.mul(160).div(96);
		} else if (_price < increaseLimit3) {
			return _price.mul(148).div(97);
		} else if (_price < increaseLimit4) {
			return _price.mul(136).div(97);
		} else {
			return _price.mul(124).div(98);
		}
	}

	function calculateDevCut (uint256 _price) public view returns (uint256 _devCut) {
		if (_price < increaseLimit1) {
			return _price.mul(5).div(100); // 5%
		} else if (_price < increaseLimit2) {
			return _price.mul(4).div(100); // 4%
		} else if (_price < increaseLimit4) {
			return _price.mul(3).div(100); // 3%
		} else {
			return _price.mul(2).div(100); // 2%
		}
	}
 



 
//////////////////////////////
/// BALANCES & WITHDRAWALS ///
//////////////////////////////

	function getBalance(address _playerAddress)
		public
		view
		returns(uint256 pendingRefBonus_, uint256 pendingFromScore_, uint256 totalPending_, uint256 balanceReadyToWithdraw_, uint256 playerScore_, uint256 handicap_, uint256 dividendsScore_)
		{
			uint256 refbonus = pendingBalance[potVersion][_playerAddress];
			uint256 playerSc = playerScore[_playerAddress];
			uint256 playerHandicap = handicap[potVersion][_playerAddress];
			uint256 divs = playerSc.mul(dividendsScore.sub(playerHandicap)).div(HUGE);
			uint256 totalPending = refbonus.add(divs);
			uint256 ready = balanceToWithdraw[potVersion][_playerAddress];
			return (refbonus, divs, totalPending, ready, playerSc, playerHandicap, dividendsScore);				
		}


		
	function getOldBalance(uint256 _potVersion, address _playerAddress)
		public
		view
		returns(uint256 oldPendingRefBonus_, uint256 oldHandicap_, uint256 oldReadyToWithdraw_)
		{
			uint256 oldRefBonus = pendingBalance[_potVersion][_playerAddress];
			uint256 oldPlayerHandicap = handicap[_potVersion][_playerAddress];
			uint256 oldReady = balanceToWithdraw[_potVersion][_playerAddress];
			return (oldRefBonus, oldPlayerHandicap, oldReady);				
		}
		
		
		
  /**
   * @dev First step to withdraw : players must confirm their pending Divs before withdrawing
   * this function sums the pending balances (pendingDividends and the pending divs from playerScore)
   * Then this sum moves to balanceReadyToWithdraw, the player can call the next function and withdraw divs
   */
	function confirmDividends() public onlyRealAddress {
		require(playerScore[msg.sender] > 0);/// the player exists
		require (dividendsScore >= handicap[potVersion][msg.sender]);
		require (dividendsScore >= 0);
		
		address _playerAddress = msg.sender;
		uint256 playerSc = playerScore[_playerAddress];
		uint256 handicap_ = handicap[potVersion][_playerAddress];
		
		uint256 refbonus = pendingBalance[potVersion][_playerAddress];
		uint256 divs = playerSc.mul(dividendsScore.sub(handicap_)).div(HUGE);
		uint256 totalPending = refbonus.add(divs);	
						
		/// Reset the values
		pendingBalance[potVersion][_playerAddress] = 0; /// Reset the pending balance
		handicap[potVersion][_playerAddress] = dividendsScore;
		
		/// Now the player is ready to withdraw ///
		balanceToWithdraw[potVersion][_playerAddress] += totalPending;
		
		// fire event
		emit ConfirmWithdraw(_playerAddress, refbonus, divs, totalPending, playerSc, handicap_);
		
	}


  /**
   * @dev Second step to withdraw : after confirming divs, players can withdraw divs to their wallet
   */	
	function withdraw() public onlyRealAddress {
		require(balanceOf(msg.sender) > 0);
		require(balanceToWithdraw[potVersion][msg.sender] > 0);
				
		address _playerAddress = msg.sender;
		
			if (lastWithdrawPotVersion != potVersion){
					lastWithdrawPotVersion = potVersion;
			}

        
        /// Add referrals earnings, bonus and divs
		uint256 divToTransfer = balanceToWithdraw[potVersion][_playerAddress];
		balanceToWithdraw[potVersion][_playerAddress] = 0;
		
        _playerAddress.transfer(divToTransfer);
		
        /// fire event
        emit Withdrawal(_playerAddress, divToTransfer, potVersion);
    }
	

	
  /**
   * @dev After 7 days without any buy, the richest user and the latest player will share the contract balance !
   */		
	function confirmDividendsFromPot() public {
		require(richestBuyer != address(0) && lastBuyer != address(0)) ;
		require(address(this).balance > 100000000);	/// mini 1e8 wei
		require(block.timestamp > timestampLimit);
		
		uint256 confirmation_TimeStamp = timestampLimit;
		potVersion ++;
		uint256 balance = address(this).balance;
		uint256 balanceQuarter = balance.div(4);
		dividendsScore = 0; /// reset dividends
		updateTimestampLimit(); /// Reset the timer, if no new buys, the richest and the last buyers will be able to withdraw the left quarter in a week or so
		balanceToWithdraw[potVersion][richestBuyer] = balanceQuarter;
		balanceToWithdraw[potVersion][lastBuyer] += balanceQuarter; /// if the richest = last, dividends cumulate
		
		
		// fire events
        emit ConfirmPotWithdraw(	
			 balance, 
			 richestBuyer, 
			 balanceToWithdraw[potVersion][richestBuyer],
			 lastBuyer,
			 balanceToWithdraw[potVersion][lastBuyer],
			 potVersion
		);
		
		emit PotWithdrawConstant(	
			 block.timestamp,
			 confirmation_TimeStamp,
			 dividendsScore,
			 potVersion,
			 lastWithdrawPotVersion
		);
		
	}


	
  /**
   * @dev If no new buys occur (dividendsScore = 0) and the richest and latest players don't withdraw their dividends after 3 jackpots, the game can be stuck forever
   * Prevent from jackpot vicious circle : same dividends are shared between latest and richest users again and again
   * If the richest and/or the latest player withdraw(s) at least once between 3 jackpots, it means the game is alive
   * Or if contract balance drops down to 1e8 wei (that means many successful jackpots and that a current withdrawal could cost too much gas for players)
   */	
	function withdrawAll() public onlyOwner {
		require((potVersion > lastWithdrawPotVersion.add(3) && dividendsScore == 0) || (address(this).balance < 100000001) );
		require (address(this).balance >0);
		
		potVersion ++;
		updateTimestampLimit();
		uint256 balance = address(this).balance;
		
		owner.transfer(balance);
		
        // fire event
        emit WithdrawOwner(potVersion, lastWithdrawPotVersion, balance);
    } 	

	
	
	
	
///////////////////////////////////////
/// REFERRERS - Setting and payment ///   
///////////////////////////////////////	

  /**
   * @dev Get the referrer of a player.
   * @param player The address of the player to get the referrer of.
   */
    function getReferrerOf(address player) public view returns (address) {
        return referrerOf[player];
    }

	
  /**
   * @dev Set a referrer.
   * @param newReferral The address to set the referrer for.
   * @param referrer The address of the referrer to set.
   * The referrer must own at least one country to keep his reflink active
   * Referrals got with an active link are forever, even if all the referrer's countries are sold
   */
    function setReferrer(address newReferral, address referrer) internal {
		if (getReferrerOf(newReferral) == address(0x0) && newReferral != referrer && balanceOf(referrer) > 0 && playerScore[newReferral] == 0) {
			
			/// Set the referrer, if no referrer has been set yet, and the player
			/// and referrer are not the same address.
				referrerOf[newReferral] = referrer;
        
			/// Emit event.
				emit SetReferrerEvent(newReferral, referrer);
		}
    }
	
	
	

  /**
   * @dev Dispatch the referrer bonus when a country is sold
   * @param referralDivToPay which dividends percentage will be dispatched to refererrs : 0 if no referrer, 2.5% if 1 referrer, 5% if 2
   */
	function payReferrer (address _oldOwner, uint256 _netProfit) internal returns (uint256 referralDivToPay) {
		address referrer_1 = referrerOf[_oldOwner];
		
		if (referrer_1 != 0x0) {
			referralDivToPay = _netProfit.mul(25).div(1000);
			pendingBalance[potVersion][referrer_1] += referralDivToPay;  /// 2.5% for the first referrer
			address referrer_2 = referrerOf[referrer_1];
				
				if (referrer_2 != 0x0) {
						pendingBalance[potVersion][referrer_2] += referralDivToPay;  /// 2.5% for the 2nd referrer
						referralDivToPay += referralDivToPay;
				}
		}
			
		emit PayReferrerEvent(_oldOwner, referrer_1, referrer_2, referralDivToPay);
		
		return referralDivToPay;
		
	}
	
	
	

	
///////////////////////////////////
/// INTERNAL FUNCTIONS WHEN BUY ///   
///////////////////////////////////	

  /**
   * @dev Dispatch dividends to former owners of a country
   */
	function bonusPreviousOwner(uint256 _itemSoldId, uint256 _paidPrice, uint256 _bonusToDispatch) private {
		require(_bonusToDispatch < (_paidPrice.mul(5).div(100)));
		require(countryStructs[_itemSoldId].priceHistory > 0);

		CountryStruct storage c = countryStructs[_itemSoldId];
		uint256 countryScore = c.priceHistory;
		uint256 kBonus = _bonusToDispatch.mul(HUGE).div(countryScore);
		uint256 bonusDispatched = 0;
		  
		for (uint256 i = 0; i < c.itemToAddressArray.length && bonusDispatched < _bonusToDispatch ; i++) {
			address listedBonusPlayer = c.itemToAddressArray[i];
			uint256 playerBonusScore = itemHistory[_itemSoldId][listedBonusPlayer];
			uint256 bonusToGet = playerBonusScore.mul(kBonus).div(HUGE);
				
				if (bonusDispatched.add(bonusToGet) <= _bonusToDispatch) {
					pendingBalance[potVersion][listedBonusPlayer] += bonusToGet;
					bonusDispatched += bonusToGet;
					
					emitInfo(bonusToGet, playerBonusScore, listedBonusPlayer, pendingBalance[potVersion][listedBonusPlayer], _itemSoldId);
				}
		}  
			
		emit BonusConstant(_bonusToDispatch, bonusDispatched, _bonusToDispatch.sub(bonusDispatched), _itemSoldId, kBonus, countryScore);
	}


	
	function emitInfo(uint256 dividendsToG_, uint256 playerSc_, address player_, uint256 divsBalance_, uint256 itemId_) private {
		emit BonusDispatch(dividendsToG_, playerSc_, player_, divsBalance_, itemId_);
  
	}

  

  /**
   * @dev we need to update the oldOwner and newOwner balances each time a country is sold, their handicap and playerscore will also change
   * Worldscore and dividendscore : we don't care, it will be updated later.
   * If accurate, set a new richest player
   */
	function updateScoreAndBalance(uint256 _paidPrice, uint256 _itemId, address _oldOwner, address _newOwner) internal {	
		uint256 _previousPaidPrice = previousPriceOfItem[_itemId];
		assert (_paidPrice > _previousPaidPrice);

		
		/// OLD OWNER ///
			uint256 scoreSubHandicap = dividendsScore.sub(handicap[potVersion][_oldOwner]);
			uint256 playerScore_ = playerScore[_oldOwner];
		
			/// If the old owner is the owner of this contract, we skip this part, the owner of the contract won't get dividends
				if (_oldOwner != owner && scoreSubHandicap >= 0 && playerScore_ > _previousPaidPrice) {
					pendingBalance[potVersion][_oldOwner] += playerScore_.mul(scoreSubHandicap).div(HUGE);
					playerScore[_oldOwner] -= _previousPaidPrice; ///for the oldOwner, the playerScore goes down the previous price
					handicap[potVersion][_oldOwner] = dividendsScore; /// and setting his handicap to dividendsScore after updating his balance
				}

				
		/// NEW OWNER ///
			scoreSubHandicap = dividendsScore.sub(handicap[potVersion][_newOwner]); /// Rewrite the var with the newOwner values
			playerScore_ = playerScore[_newOwner]; /// Rewrite the var playerScore with the newOwner PlayerScore
				
			/// If new player, his playerscore = 0, handicap = 0, so the pendingBalance math = 0
				if (scoreSubHandicap >= 0) {
					pendingBalance[potVersion][_newOwner] += playerScore_.mul(scoreSubHandicap).div(HUGE);
					playerScore[_newOwner] += _paidPrice.mul(2); ///for the newOwner, the playerScore goes up twice the value of the purchase price
					handicap[potVersion][_newOwner] = dividendsScore; /// and setting his handicap to dividendsScore after updating his balance
				}

				
		/// Change the richest user if this is the case...
				if (playerScore[_newOwner] > playerScore[richestBuyer]) {
					richestBuyer = _newOwner;
					
					emit newRichest(_newOwner, playerScore[_newOwner], block.timestamp, block.number);
				}		

				
		/// Change the last Buyer in any case
			lastBuyer = _newOwner;
		
	}
		

		

  /**
   * @dev Update the worldScore
   * After each buy, the worldscore increases : 2x current purchase price - 1x previousPrice
   */
	function updateWorldScore(uint256 _countryId, uint256 _price) internal	{
		worldScore += _price.mul(2).sub(previousPriceOfItem[_countryId]);
	}
		

		
  /**
   * @dev Update timestampLimit : the date on which the richest player and the last buyer will be able to share the contract balance (1/4 each)
   */ 
	function updateTimestampLimit() internal {
		timestampLimit = block.timestamp.add(604800).add(potVersion.mul(28800)); /// add 7 days + (pot version * X 8hrs)
	}


	
  /**
   * @dev Refund the buyer if excess
   */ 
	function excessRefund(address _newOwner, uint256 _price) internal {		
		uint256 excess = msg.value.sub(_price);
			if (excess > 0) {
				_newOwner.transfer(excess);
			}
	}	
	

	


///////////////////////////   
/// 	BUY A COUNTRY 	///
///////////////////////////
/*
     Buy a country directly from the contract for the calculated price
     which ensures that the owner gets a profit.  All countries that
     have been listed can be bought by this method. User funds are sent
     directly to the previous owner and are never stored in the contract.
*/
	
	function buy (uint256 _itemId, address referrerAddress) payable public onlyRealAddress {
		require(priceOf(_itemId) > 0);
		require(ownerOf(_itemId) != address(0));
		require(msg.value >= priceOf(_itemId));
		require(ownerOf(_itemId) != msg.sender);
		require(!isContract(msg.sender));
		require(msg.sender != owner);
		require(block.timestamp < timestampLimit || block.timestamp > timestampLimit.add(3600));
		
		
		address oldOwner = ownerOf(_itemId);
		address newOwner = msg.sender;
		uint256 price = priceOf(_itemId);

		
		
	
	////////////////////////
	/// Set the referrer ///
	////////////////////////
		
		setReferrer(newOwner, referrerAddress);
		
	

	
	///////////////////////////////////
	/// Update scores and timestamp ///
	///////////////////////////////////
		
		/// Dividends are dispatched among players accordingly to their "playerScore".
		/// The playerScore equals the sum of all their countries (owned now, paid price) + sum of all their previously owned countries 
		/// After each sell / buy, players that owned at least one country can claim dividends
		/// DIVS of a player = playerScore * DIVS to dispatch / worldScore
		/// If a player is a seller or a buyer, his playerScore will change, we need to adjust his parameters
		/// If a player is not a buyer / seller, his playerScore doesn't change, no need to adjust
			updateScoreAndBalance(price, _itemId, oldOwner, newOwner);
			
		/// worldScore change after each flip, we need to adjust
		/// To calculate the worldScore after a flip: add buy price x 2, subtract previous price
			updateWorldScore(_itemId, price);
		
		/// If 7 days with no buys, the richest player and the last buyer win the jackpot (1/2 of contract balance ; 1/4 each)
		/// Waiting time increases after each pot distribution
			updateTimestampLimit();
	


	
	///////////////////////
	/// Who earns what? ///
	///////////////////////	
	
		/// When a country flips, who earns how much?
		/// Devs : 2% to 5% of country price
		/// Seller's reward : current paidPrice - previousPrice - devsCut = net profit. The seller gets the previous Price + ca.65% of net Profit
		/// The referrers of the seller : % of netProfit from their referrals R+1 & R+2. If no referrers, all the referrers' cut goes to dividends to all players.
		/// All players, with or without a country now : dividends (% of netProfit)
		/// All previous owners of the flipped country : a special part of dividends called Bonus. If no previous buyer, all the bonus is also added up to dividends to all players.
			
		/// Calculate the devs cut
			uint256 devCut_ = calculateDevCut(price);
			
		/// Calculate the netProfit
			uint256 netProfit = price.sub(devCut_).sub(previousPriceOfItem[_itemId]);
		
		/// Calculate dividends cut from netProfit and what referrers left
			uint256 dividendsCut_ = netProfit.mul(30).div(100);
			
		/// Calculate the seller's reward
		/// Price sub the cuts : dev cut and 35% including referrer cut (5% max), 30% (25% if referrers) dividends (including 80% divs / 20% bonus max) and 5% (jackpot)
			uint256 oldOwnerReward = price.sub(devCut_).sub(netProfit.mul(35).div(100));

		/// Calculate the referrers cut and store the referrer's cut in the referrer's pending balance ///
		/// Update dividend's cut : 30% max ; 27,5% if 1 referrer ; 25% if 2 referrers
			uint256 refCut = payReferrer(oldOwner, netProfit);
			dividendsCut_ -= refCut;
		
	

	
	////////////////////////////////////////////////////////////
	///          Dispatch dividends to all players           ///
	/// Dispatch bonuses to previous owners of this country  ///
	////////////////////////////////////////////////////////////
		
		/// Dividends = 80% to all country owners (previous and current owners, no matter the country) + 20% bonus to previous owners of this country
		/// If no previous owners, 100% to all countries owners
	
		/// Are there previous owners for the current flipped country?
			if (price > countryStructs[_itemId].startingPrice && dividendsCut_ > 1000000 && worldScore > 0) {
				
				/// Yes, there are previous owners, they will get 20% of dividends of this country
					bonusPreviousOwner(_itemId, price, dividendsCut_.mul(20).div(100));
				
				/// So dividends for all the country owners are 100% - 20% = 80%
					dividendsCut_ = dividendsCut_.mul(80).div(100); 
			} 
	
				/// If else... nothing special to do, there are no previous owners, dividends remain 100%	
		
		/// Dispatch dividends to all country owners, no matter the country
		/// Note : to avoid floating numbers, we divide a constant called HUGE (1e13) by worldScore, of course we will multiply by HUGE when retrieving
			if (worldScore > 0) { /// worldScore must be greater than 0, the opposite is impossible and dividends are not calculated
				
				dividendsScore += HUGE.mul(dividendsCut_).div(worldScore);
			}
	

	
	////////////////////////////////////////////////
	/// Update the price history of the newOwner ///
	////////////////////////////////////////////////
	
		/// The newOwner is now known as an OWNER for this country
		/// We'll store his cumulated buy price for this country in a mapping
		/// Bonus : each time a country is flipped, players that previously owned this country get bonuses proportionally to the sum of their buys	
			updateEntity(_itemId, newOwner, price);
			itemHistory[_itemId][newOwner] += price;

	

	
	////////////////////////
	/// Update the price ///
	////////////////////////
	
		/// The price of purchase becomes the "previousPrice", and the "price" is the next price 
			previousPriceOfItem[_itemId] = price;
			priceOfItem[_itemId] = nextPriceOf(_itemId);
	

	
	/////////////////////////////////////////
	/// Transfer the reward to the seller ///
	/////////////////////////////////////////

		/// The seller's reward is transfered automatically to his wallet
		/// The dev cut is transfered automatically out the contract
		/// The other rewards (bonus, dividends, referrer's cut) will be stored in a pending balance
			oldOwner.transfer(oldOwnerReward);
			owner.transfer(devCut_);
			
		/// Transfer the token from oldOwner to newOwner
			_transfer(oldOwner, newOwner, _itemId);  	
	
		/// Emit the events
			emit Bought(_itemId, newOwner, price);
			emit Sold(_itemId, oldOwner, price);	
		
	

	
	///////////////////////////////////////////
	/// Transfer the excess to the newOwner ///
	///////////////////////////////////////////
	
		/// If the newOwner sent a higher price than the asked price, the excess is refunded
			excessRefund(newOwner, price);
		

	
	/// Send informations
		emit DivsDispatch(dividendsCut_, dividendsScore, _itemId, price, worldScore);		
		
/// END OF THE BUY FUNCTION ///
  
	}
  
 
  
//////////////////////////////
/// Practical informations ///
//////////////////////////////

	function itemHistoryOfPlayer(uint256 _itemId, address _owner) public view returns (uint256 _valueAddressOne) {
		return itemHistory[_itemId][_owner];
	}
  
  
	function implementsERC721() public view returns (bool _implements) {
		return erc721Enabled;
	}

	
	function name() public pure returns (string _name) {
		return "SuperCountries";
	}

	
	function symbol() public pure returns (string _symbol) {
		return "SUP";
	}

	
	function totalSupply() public view returns (uint256 _totalSupply) {
		return listedItems.length;
	}

	
	function balanceOf (address _owner) public view returns (uint256 _balance) {
		uint256 counter = 0;

			for (uint256 i = 0; i < listedItems.length; i++) {
				if (ownerOf(listedItems[i]) == _owner) {
					counter++;
				}
			}

		return counter;
	}


	function ownerOf (uint256 _itemId) public view returns (address _owner) {
		return ownerOfItem[_itemId];
	}

	
	function tokensOf (address _owner) public view returns (uint256[] _tokenIds) {
		uint256[] memory items = new uint256[](balanceOf(_owner));
		uint256 itemCounter = 0;
			
			for (uint256 i = 0; i < listedItems.length; i++) {
				if (ownerOf(listedItems[i]) == _owner) {
					items[itemCounter] = listedItems[i];
					itemCounter += 1;
				}
			}

		return items;
	}


	function tokenExists (uint256 _itemId) public view returns (bool _exists) {
		return priceOf(_itemId) > 0;
	}

	
	function approvedFor(uint256 _itemId) public view returns (address _approved) {
		return approvedOfItem[_itemId];
	}


	function approve(address _to, uint256 _itemId) onlyERC721() public {
		require(msg.sender != _to);
		require(tokenExists(_itemId));
		require(ownerOf(_itemId) == msg.sender);

		if (_to == 0) {
			if (approvedOfItem[_itemId] != 0) {
				delete approvedOfItem[_itemId];
				emit Approval(msg.sender, 0, _itemId);
			}
		}
		else {
			approvedOfItem[_itemId] = _to;
			emit Approval(msg.sender, _to, _itemId);
		}
	  }

	  
  /* Transferring a country to another owner will entitle the new owner the profits from `buy` */
	function transfer(address _to, uint256 _itemId) onlyERC721() public {
		require(msg.sender == ownerOf(_itemId));
		_transfer(msg.sender, _to, _itemId);
	}

	
	function transferFrom(address _from, address _to, uint256 _itemId) onlyERC721() public {
		require(approvedFor(_itemId) == msg.sender);
		_transfer(_from, _to, _itemId);
	}

	
	function _transfer(address _from, address _to, uint256 _itemId) internal {
		require(tokenExists(_itemId));
		require(ownerOf(_itemId) == _from);
		require(_to != address(0));
		require(_to != address(this));

		ownerOfItem[_itemId] = _to;
		approvedOfItem[_itemId] = 0;

		emit Transfer(_from, _to, _itemId);
	}


	
///////////////////////////	
/// READ ONLY FUNCTIONS ///
///////////////////////////

	function gameInfo() public view returns (address richestPlayer_, address lastBuyer_, uint256 thisBalance_, uint256 lastWithdrawPotVersion_, uint256 worldScore_, uint256 potVersion_,  uint256 timestampLimit_) {
		
		return (richestBuyer, lastBuyer, address(this).balance, lastWithdrawPotVersion, worldScore, potVersion, timestampLimit);
	}
	
	
	function priceOf(uint256 _itemId) public view returns (uint256 _price) {
		return priceOfItem[_itemId];
	}
	
	
	function nextPriceOf(uint256 _itemId) public view returns (uint256 _nextPrice) {
		return calculateNextPrice(priceOf(_itemId));
	}

	
	function allOf(uint256 _itemId) external view returns (address _owner, uint256 _price, uint256 previous_, uint256 _nextPrice) {
		return (ownerOf(_itemId), priceOf(_itemId), previousPriceOfItem[_itemId], nextPriceOf(_itemId));
	}


///  is Contract ///
	function isContract(address addr) internal view returns (bool) {
		uint size;
		assembly { size := extcodesize(addr) } // solium-disable-line
		return size > 0;
	}




////////////////////////
/// USEFUL FUNCTIONS ///
////////////////////////

  /** 
   * @dev Fallback function to accept all ether sent directly to the contract
   * Nothing is lost, it will raise the jackpot !
   */

    function() payable public
    {    }


}

Contract ABI
[{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"tokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"_implements","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"_approved","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"allOf","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"previous_","type":"uint256"},{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"confirmDividendsFromPot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"nextPriceOf","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateDevCut","outputs":[{"name":"_devCut","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableERC721","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"referrerAddress","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_potVersion","type":"uint256"},{"name":"_playerAddress","type":"address"}],"name":"getOldBalance","outputs":[{"name":"oldPendingRefBonus_","type":"uint256"},{"name":"oldHandicap_","type":"uint256"},{"name":"oldReadyToWithdraw_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"_owner","type":"address"}],"name":"itemHistoryOfPlayer","outputs":[{"name":"_valueAddressOne","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"confirmDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemIds","type":"uint256[]"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listMultipleItems","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"}],"name":"getReferrerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"countryStructs","outputs":[{"name":"priceHistory","type":"uint256"},{"name":"startingPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameInfo","outputs":[{"name":"richestPlayer_","type":"address"},{"name":"lastBuyer_","type":"address"},{"name":"thisBalance_","type":"uint256"},{"name":"lastWithdrawPotVersion_","type":"uint256"},{"name":"worldScore_","type":"uint256"},{"name":"potVersion_","type":"uint256"},{"name":"timestampLimit_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"getBalance","outputs":[{"name":"pendingRefBonus_","type":"uint256"},{"name":"pendingFromScore_","type":"uint256"},{"name":"totalPending_","type":"uint256"},{"name":"balanceReadyToWithdraw_","type":"uint256"},{"name":"playerScore_","type":"uint256"},{"name":"handicap_","type":"uint256"},{"name":"dividendsScore_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"referral","type":"address"},{"indexed":true,"name":"referrer","type":"address"}],"name":"SetReferrerEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"referrer1","type":"address"},{"indexed":true,"name":"referrer2","type":"address"},{"indexed":false,"name":"referralPart","type":"uint256"}],"name":"PayReferrerEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonusToDispatch_","type":"uint256"},{"indexed":false,"name":"bonusDispatched_","type":"uint256"},{"indexed":false,"name":"notYetDispatched_","type":"uint256"},{"indexed":true,"name":"_itemSoldId_","type":"uint256"},{"indexed":false,"name":"kBonus","type":"uint256"},{"indexed":true,"name":"countryScore","type":"uint256"}],"name":"BonusConstant","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonusToGet_","type":"uint256"},{"indexed":true,"name":"playerScoreForThisCountry_","type":"uint256"},{"indexed":true,"name":"player_","type":"address"},{"indexed":false,"name":"pendingBalanceTotal_","type":"uint256"},{"indexed":true,"name":"_itemSoldId","type":"uint256"}],"name":"BonusDispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"dividendsCut_","type":"uint256"},{"indexed":false,"name":"dividendsScore","type":"uint256"},{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"worldScore_","type":"uint256"}],"name":"DivsDispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"richest_","type":"address"},{"indexed":false,"name":"richestScore_","type":"uint256"},{"indexed":true,"name":"blocktimestamp_","type":"uint256"},{"indexed":true,"name":"blocknumber_","type":"uint256"}],"name":"newRichest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"ethereumWithdrawn","type":"uint256"},{"indexed":true,"name":"potVersion_","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"refbonus_","type":"uint256"},{"indexed":false,"name":"divs_","type":"uint256"},{"indexed":false,"name":"totalPending_","type":"uint256"},{"indexed":false,"name":"playerSc_","type":"uint256"},{"indexed":false,"name":"_handicap_","type":"uint256"}],"name":"ConfirmWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contractBalance","type":"uint256"},{"indexed":true,"name":"richest_","type":"address"},{"indexed":false,"name":"richestBalance_","type":"uint256"},{"indexed":true,"name":"lastBuyer_","type":"address"},{"indexed":false,"name":"lastBalance_","type":"uint256"},{"indexed":true,"name":"potVersion","type":"uint256"}],"name":"ConfirmPotWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"blocktimestamp_","type":"uint256"},{"indexed":true,"name":"timestamplimit_","type":"uint256"},{"indexed":false,"name":"dividendsScore_","type":"uint256"},{"indexed":true,"name":"potVersion","type":"uint256"},{"indexed":false,"name":"lastWithdrawPotVersion_","type":"uint256"}],"name":"PotWithdrawConstant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"potVersion","type":"uint256"},{"indexed":true,"name":"lastWithdrawPotVersion_","type":"uint256"},{"indexed":true,"name":"balance_","type":"uint256"}],"name":"WithdrawOwner","type":"event"}]

Contract Creation Code
608060405260008060146101000a81548160ff021916908315150217905550668e1bc9bf040000600155670853a0d2313c00006002556722b1c8c1227a0000600355676124fee993bc000060045560016011556001601255635b1517be6015556509184e72a00060185534801561007557600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061425c806100c56000396000f3006080604052600436106101ab576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062923f9e146101ad57806306fdde03146101f2578063095ea7b3146102825780631051db34146102cf57806318160ddd146102fe57806323b872dd146103295780632a6dd48f146103965780632e4f43bf146104035780633ccfd60b14610485578063418f14871461049c578063442edd03146104b35780635a3f26721461050a5780635ba9e48e146105a25780636352211e146105e3578063651212051461065057806370a082311461069157806371dc761e146106e85780637deb6025146106ff578063853828b61461073f5780638bda1540146107565780638da5cb5b146107c557806394bb7d641461081c57806395d89b411461087d578063a12077081461090d578063a9059cbb14610924578063b9186d7d14610971578063baddee6f146109b2578063bc7f25e414610a17578063cc2e2e8a14610a9a578063d21cacdf14610ae2578063db73bfce14610b65578063e08503ec14610c12578063f2fde38b14610c53578063f8b2cb4f14610c96575b005b3480156101b957600080fd5b506101d860048036038101908080359060200190929190505050610d17565b604051808215151515815260200191505060405180910390f35b3480156101fe57600080fd5b50610207610d2b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024757808201518184015260208101905061022c565b50505050905090810190601f1680156102745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028e57600080fd5b506102cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d68565b005b3480156102db57600080fd5b506102e4610fce565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b50610313610fe4565b6040518082815260200191505060405180910390f35b34801561033557600080fd5b50610394600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff1565b005b3480156103a257600080fd5b506103c16004803603810190808035906020019092919050505061105e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040f57600080fd5b5061042e6004803603810190808035906020019092919050505061109b565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561049157600080fd5b5061049a6110df565b005b3480156104a857600080fd5b506104b16112ef565b005b3480156104bf57600080fd5b506105086004803603810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611728565b005b34801561051657600080fd5b5061054b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561058e578082015181840152602081019050610573565b505050509050019250505060405180910390f35b3480156105ae57600080fd5b506105cd600480360381019080803590602001909291905050506119e1565b6040518082815260200191505060405180910390f35b3480156105ef57600080fd5b5061060e600480360381019080803590602001909291905050506119fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561065c57600080fd5b5061067b60048036038101908080359060200190929190505050611a38565b6040518082815260200191505060405180910390f35b34801561069d57600080fd5b506106d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b11565b6040518082815260200191505060405180910390f35b3480156106f457600080fd5b506106fd611ba0565b005b61073d60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c18565b005b34801561074b57600080fd5b506107546121ff565b005b34801561076257600080fd5b506107a160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123ac565b60405180848152602001838152602001828152602001935050505060405180910390f35b3480156107d157600080fd5b506107da6124c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082857600080fd5b5061086760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e6565b6040518082815260200191505060405180910390f35b34801561088957600080fd5b50610892612541565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091957600080fd5b5061092261257e565b005b34801561093057600080fd5b5061096f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061294e565b005b34801561097d57600080fd5b5061099c600480360381019080803590602001909291905050506129ba565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b50610a1560048036038101908080359060200190820180359060200191909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d7565b005b348015610a2357600080fd5b50610a58600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa657600080fd5b50610ac560048036038101908080359060200190929190505050612ae0565b604051808381526020018281526020019250505060405180910390f35b348015610aee57600080fd5b50610b23600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b04565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b7157600080fd5b50610b7a612b37565b604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610c1e57600080fd5b50610c3d60048036038101908080359060200190929190505050612bc3565b6040518082815260200191505060405180910390f35b348015610c5f57600080fd5b50610c94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd4565b005b348015610ca257600080fd5b50610cd7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e29565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b600080610d23836129ba565b119050919050565b60606040805190810160405280600e81526020017f5375706572436f756e7472696573000000000000000000000000000000000000815250905090565b600060149054906101000a900460ff161515610d8357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610dbe57600080fd5b610dc781610d17565b1515610dd257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16610df2826119fb565b73ffffffffffffffffffffffffffffffffffffffff16141515610e1457600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff161415610f125760006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f0d576009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560003373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b610fca565b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b60008060149054906101000a900460ff16905090565b6000600580549050905090565b600060149054906101000a900460ff16151561100c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1661102c8261105e565b73ffffffffffffffffffffffffffffffffffffffff1614151561104e57600080fd5b611059838383612ff8565b505050565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000806110aa856119fb565b6110b3866129ba565b60086000888152602001908152602001600020546110d0886119e1565b93509350935093509193509193565b600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561111e57600080fd5b600061112933611b11565b11151561113557600080fd5b600060106000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561119657600080fd5b3391506011546012541415156111b0576011546012819055505b60106000601154815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060106000601154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112a3573d6000803e3d6000fd5b50601154818373ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb60405160405180910390a45050565b60008060008073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156113a15750600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15156113ac57600080fd5b6305f5e1003073ffffffffffffffffffffffffffffffffffffffff16311115156113d557600080fd5b601554421115156113e557600080fd5b60155492506011600081548092919060010191905055503073ffffffffffffffffffffffffffffffffffffffff1631915061142a6004836131d490919063ffffffff16565b90506000600d8190555061143c6131ef565b806010600060115481526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806010600060115481526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550601154601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7d52b961c8da712caedc7332724540baef718e9ef738de74e08dafcdfb4d923b856010600060115481526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010600060115481526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405180848152602001838152602001828152602001935050505060405180910390a460115483427f47b47b8c7743492a3f458380fb4e05eea566f4535b9d8432c9b37bc12fc8a0d0600d54601254604051808381526020018281526020019250505060405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561178357600080fd5b60008211151561179257600080fd5b600060076000858152602001908152602001600020541415156117b457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561182257600080fd5b806006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160076000858152602001908152602001600020819055506000600860008581526020019081526020016000208190555060058390806001815401808255809150509060018203906000526020600020016000909192909190915055506118db8383613235565b50505050565b6060806000806118f085611b11565b60405190808252806020026020018201604052801561191e5781602001602082028038833980820191505090505b50925060009150600090505b6005805490508110156119d6578473ffffffffffffffffffffffffffffffffffffffff1661197060058381548110151561196057fe5b90600052602060002001546119fb565b73ffffffffffffffffffffffffffffffffffffffff1614156119c95760058181548110151561199b57fe5b906000526020600020015483838151811015156119b457fe5b90602001906020020181815250506001820191505b808060010191505061192a565b829350505050919050565b60006119f46119ef836129ba565b612bc3565b9050919050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600154821015611a7257611a6b6064611a5d60058561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b600254821015611aaa57611aa36064611a9560048561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b600454821015611ae257611adb6064611acd60038561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b611b096064611afb60028561325c90919063ffffffff16565b6131d490919063ffffffff16565b90505b919050565b6000806000809150600090505b600580549050811015611b96578373ffffffffffffffffffffffffffffffffffffffff16611b64600583815481101515611b5457fe5b90600052602060002001546119fb565b73ffffffffffffffffffffffffffffffffffffffff161415611b895781806001019250505b8080600101915050611b1e565b8192505050919050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611bfb57600080fd5b6001600060146101000a81548160ff021916908315150217905550565b600080600080600080600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515611c6057600080fd5b6000611c6b8b6129ba565b111515611c7757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16611c988b6119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151515611cbb57600080fd5b611cc48a6129ba565b3410151515611cd257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16611cf28b6119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151515611d1557600080fd5b611d1e33613297565b151515611d2a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515611d8657600080fd5b601554421080611dab5750611da8610e106015546132aa90919063ffffffff16565b42115b1515611db657600080fd5b611dbf8a6119fb565b9750339650611dcd8a6129ba565b9550611dd9878a6132c8565b611de5868b8a8a613479565b611def8a87613a9d565b611df76131ef565b611e0086611a38565b9450611e3a600860008c815260200190815260200160002054611e2c8789613ae990919063ffffffff16565b613ae990919063ffffffff16565b9350611e636064611e55601e8761325c90919063ffffffff16565b6131d490919063ffffffff16565b9250611eb0611e8f6064611e8160238861325c90919063ffffffff16565b6131d490919063ffffffff16565b611ea28789613ae990919063ffffffff16565b613ae990919063ffffffff16565b9150611ebc8885613b02565b90508083039250601660008b81526020019081526020016000206002015486118015611eea5750620f424083115b8015611ef857506000600b54115b15611f5857611f2e8a87611f296064611f1b60148961325c90919063ffffffff16565b6131d490919063ffffffff16565b613d83565b611f556064611f4760508661325c90919063ffffffff16565b6131d490919063ffffffff16565b92505b6000600b541115611f9c57611f8c600b54611f7e8560185461325c90919063ffffffff16565b6131d490919063ffffffff16565b600d600082825401925050819055505b611fa78a8888614067565b85601760008c815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555085600860008c8152602001908152602001600020819055506120268a6119e1565b600760008c8152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612083573d6000803e3d6000fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156120eb573d6000803e3d6000fd5b506120f788888c612ff8565b8673ffffffffffffffffffffffffffffffffffffffff168a7fd2728f908c7e0feb83c6278798370fcb86b62f236c9dbf1a3f541096c2159040886040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168a7f66f5cd880edf48cdde6c966e5da0784fcc4c5e85572b8b3b62c4357798d447d7886040518082815260200191505060405180910390a361219f8787614164565b897fc2d38df9d158fa63a4d22026daa0c1962b6e04743f50d7551dfdc0fe8b4d140484600d5489600b546040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561225c57600080fd5b61227260036012546132aa90919063ffffffff16565b60115411801561228457506000600d54145b806122a957506305f5e1013073ffffffffffffffffffffffffffffffffffffffff1631105b15156122b457600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff16311115156122da57600080fd5b6011600081548092919060010191905055506122f46131ef565b3073ffffffffffffffffffffffffffffffffffffffff163190506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612375573d6000803e3d6000fd5b50806012546011547f23852d00014f909bc66902f9565357935dbd78450e7e9a46b8caa5accbc8285160405160405180910390a450565b600080600080600080600e600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600f600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506010600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508282829550955095505050509250925092565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006017600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60606040805190810160405280600381526020017f5355500000000000000000000000000000000000000000000000000000000000815250905090565b600080600080600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156125c357600080fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561261157600080fd5b600f6000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d541015151561267457600080fd5b6000600d541015151561268657600080fd5b339550600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350600e6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506127b06018546127a261279387600d54613ae990919063ffffffff16565b8861325c90919063ffffffff16565b6131d490919063ffffffff16565b91506127c582846132aa90919063ffffffff16565b90506000600e6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d54600f6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060106000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508573ffffffffffffffffffffffffffffffffffffffff167f4324e1fbcfc75073846dc7188f546ae390ff4c589a22422c75df55c26ed59bdc8484848989604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a2505050505050565b600060149054906101000a900460ff16151561296957600080fd5b612972816119fb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129ab57600080fd5b6129b6338383612ff8565b5050565b600060076000838152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612a3457600080fd5b600090505b84849050811015612a7057612a638585838181101515612a5557fe5b905060200201358484611728565b8080600101915050612a39565b5050505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60166020528060005260406000206000915090508060010154908060020154905082565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1631601254600b54601154601554965096509650965096509650965090919293949596565b6000600154821015612bfd57612bf6605f612be860c88561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600254821015612c3557612c2e6060612c2060a08561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600354821015612c6d57612c666061612c5860948561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600454821015612ca557612c9e6061612c9060888561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b612ccc6062612cbe607c8561325c90919063ffffffff16565b6131d490919063ffffffff16565b90505b919050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612d2f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d6b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000806000806000600e6000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549550600c60008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600f6000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350612f64601854612f56612f4787600d54613ae990919063ffffffff16565b8861325c90919063ffffffff16565b6131d490919063ffffffff16565b9250612f7983876132aa90919063ffffffff16565b915060106000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858383838888600d549c509c509c509c509c509c509c50505050505050919395979092949650565b61300181610d17565b151561300c57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1661302c826119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151561304e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561308a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130c557600080fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082848115156131e257fe5b0490508091505092915050565b61322d61320961708060115461325c90919063ffffffff16565b61321f62093a80426132aa90919063ffffffff16565b6132aa90919063ffffffff16565b601581905550565b60008160166000858152602001908152602001600020600201819055506001905092915050565b60008060008414156132715760009150613290565b828402905082848281151561328257fe5b0414151561328c57fe5b8091505b5092915050565b600080823b905060008111915050919050565b60008082840190508381101515156132be57fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff166132e983612a77565b73ffffffffffffffffffffffffffffffffffffffff1614801561333857508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561334c5750600061334a82611b11565b115b801561339757506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156134755780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fb450fc051a97f4be9c19179858075d55dcd18451137b75b621aa642ebceadb3760405160405180910390a35b5050565b600080600060086000878152602001908152602001600020549250828711151561349f57fe5b613506600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54613ae990919063ffffffff16565b9150600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156135a8575060008210155b80156135b357508281115b156136e5576135df6018546135d1848461325c90919063ffffffff16565b6131d490919063ffffffff16565b600e6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550600d54600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61374c600f6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54613ae990919063ffffffff16565b9150600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821015156138da576137c16018546137b3848461325c90919063ffffffff16565b6131d490919063ffffffff16565b600e6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061383460028861325c90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600d54600f6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613a535783601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043428573ffffffffffffffffffffffffffffffffffffffff167f67cd21f46fbb7e468ddcd4e93dcf0fc228d9df2f5669959539eb8adb39cc0564600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a45b83601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b613ad66008600084815260200190815260200160002054613ac860028461325c90919063ffffffff16565b613ae990919063ffffffff16565b600b600082825401925050819055505050565b6000828211151515613af757fe5b818303905092915050565b6000806000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff16141515613cfc57613bb16103e8613ba360198761325c90919063ffffffff16565b6131d490919063ffffffff16565b925082600e6000601154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16141515613cfb5782600e6000601154815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082830192505b5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f79937abffcfdfa40d3f12bf61cd7a05b3cbd14369ebfe8a5a5a35d8d14b4d384866040518082815260200191505060405180910390a4829250505092915050565b600080600080600080600080613db66064613da860058d61325c90919063ffffffff16565b6131d490919063ffffffff16565b89101515613dc357600080fd5b6000601660008d815260200190815260200160002060010154111515613de857600080fd5b601660008c8152602001908152602001600020975087600101549650613e2b87613e1d6018548c61325c90919063ffffffff16565b6131d490919063ffffffff16565b955060009450600093505b876000018054905084108015613e4b57508885105b15613ff7578760000184815481101515613e6157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250601760008c815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150613f08601854613efa888561325c90919063ffffffff16565b6131d490919063ffffffff16565b905088613f1e82876132aa90919063ffffffff16565b111515613fea5780600e6000601154815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508085019450613fe9818385600e6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548f6141d1565b5b8380600101945050613e36565b868b7fceb4b13ccc641c5bc314f7f19734f73e88b54f41fb9651e44e59ffaabcf02cdd8b8861402f8a8f613ae990919063ffffffff16565b8b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050565b80601660008581526020019081526020016000206001016000828254019250508190555060006017600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561415f57601660008481526020019081526020016000206000018290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505050565b60006141798234613ae990919063ffffffff16565b905060008111156141cc578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156141ca573d6000803e3d6000fd5b505b505050565b808373ffffffffffffffffffffffffffffffffffffffff16857f4cda2925eea274e308d19b94cf807a899810844448d5959cbbdd21b2c5d64bdd8886604051808381526020018281526020019250505060405180910390a450505050505600a165627a7a72305820b191ed1a8bdcdc035763bb752add4a85ba678083b74d57e4430ece4780fc1f660029


   Swarm Source:
bzzr://b191ed1a8bdcdc035763bb752add4a85ba678083b74d57e4430ece4780fc1f66
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.