ETH Price: $4,043.65 (+3.76%)

Contract

0xe1F338E069F202F2113d32C8a5D1046D83c92Ca4
 

Overview

ETH Balance

3.110032787276957556 ETH

Eth Value

$12,575.88 (@ $4,043.65/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw203545122024-07-21 11:07:59148 days ago1721560079IN
WorldFomo
0 ETH0.000218973.006339
Withdraw202785652024-07-10 20:43:47158 days ago1720644227IN
WorldFomo
0 ETH0.000413165.85230302
Withdraw149455642022-06-11 17:44:32919 days ago1654969472IN
WorldFomo
0 ETH0.0020269536.88789605
Withdraw77601312019-05-14 18:41:512042 days ago1557859311IN
WorldFomo
0 ETH0.0002860810
Withdraw77589222019-05-14 14:13:462043 days ago1557843226IN
WorldFomo
0 ETH0.0002860810
Withdraw77588852019-05-14 14:05:062043 days ago1557842706IN
WorldFomo
0 ETH0.0003255510
Buy Xid77582822019-05-14 11:40:352043 days ago1557834035IN
WorldFomo
0.03 ETH0.0019685910
Buy Xaddr77554302019-05-14 1:14:282043 days ago1557796468IN
WorldFomo
0.001 ETH0.000729855
Buy Xid77554282019-05-14 1:14:222043 days ago1557796462IN
WorldFomo
0.001 ETH0.003323658
Activate77554282019-05-14 1:14:222043 days ago1557796462IN
WorldFomo
0 ETH0.000021931
Withdraw71094572019-01-22 15:33:202155 days ago1548171200IN
WorldFomo
0 ETH0.000171646
Buy Xaddr64544822018-10-04 22:51:302264 days ago1538693490IN
WorldFomo
0.00029121 ETH0.000218641
Withdraw64483792018-10-03 23:08:112265 days ago1538608091IN
WorldFomo
0 ETH0.000312775
Withdraw62803072018-09-06 4:42:422293 days ago1536208962IN
WorldFomo
0 ETH0.000250224
Withdraw62254732018-08-27 22:50:332302 days ago1535410233IN
WorldFomo
0 ETH0.000312775
Withdraw62178422018-08-26 16:05:442304 days ago1535299544IN
WorldFomo
0 ETH0.0004755510
Withdraw62010262018-08-23 20:10:532306 days ago1535055053IN
WorldFomo
0 ETH0.000215113.47
Withdraw62010192018-08-23 20:09:122306 days ago1535054952IN
WorldFomo
0 ETH0.000740563.9
Buy Xname61987022018-08-23 10:28:302307 days ago1535020110IN
WorldFomo
0.000075 ETH0.002846710
Re Load Xname61986932018-08-23 10:25:452307 days ago1535019945IN
WorldFomo
0 ETH0.000115245
Withdraw61848652018-08-21 2:33:172309 days ago1534818797IN
WorldFomo
0 ETH0.000250224
Withdraw61812422018-08-20 11:58:332310 days ago1534766313IN
WorldFomo
0 ETH0.000047551
Withdraw61679682018-08-18 6:05:092312 days ago1534572309IN
WorldFomo
0 ETH0.000125112
Withdraw61663692018-08-17 23:23:232312 days ago1534548203IN
WorldFomo
0 ETH0.000312775
Withdraw61286522018-08-11 14:10:312319 days ago1533996631IN
WorldFomo
0 ETH0.000190224
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
203545122024-07-21 11:07:59148 days ago1721560079
WorldFomo
0.21596078 ETH
202785652024-07-10 20:43:47158 days ago1720644227
WorldFomo
0.00841917 ETH
77588852019-05-14 14:05:062043 days ago1557842706
WorldFomo
0.03159023 ETH
77582822019-05-14 11:40:352043 days ago1557834035
WorldFomo
0.0000225 ETH
77554302019-05-14 1:14:282043 days ago1557796468
WorldFomo
0.00003 ETH
77554282019-05-14 1:14:222043 days ago1557796462
WorldFomo
0.00003 ETH
64483792018-10-03 23:08:112265 days ago1538608091
WorldFomo
0.00694177 ETH
62803072018-09-06 4:42:422293 days ago1536208962
WorldFomo
1.23724917 ETH
62254732018-08-27 22:50:332302 days ago1535410233
WorldFomo
0.01221891 ETH
62178422018-08-26 16:05:442304 days ago1535299544
WorldFomo
0.01328817 ETH
62010262018-08-23 20:10:532306 days ago1535055053
WorldFomo
0.00005639 ETH
62010192018-08-23 20:09:122306 days ago1535054952
WorldFomo
0.00002746 ETH
62010192018-08-23 20:09:122306 days ago1535054952
WorldFomo
0.00000123 ETH
61987022018-08-23 10:28:302307 days ago1535020110
WorldFomo
0.00000225 ETH
61848652018-08-21 2:33:172309 days ago1534818797
WorldFomo
0.00015793 ETH
61812422018-08-20 11:58:332310 days ago1534766313
WorldFomo
0.02712876 ETH
61679682018-08-18 6:05:092312 days ago1534572309
WorldFomo
0.00046322 ETH
61663692018-08-17 23:23:232312 days ago1534548203
WorldFomo
0.30953448 ETH
61286522018-08-11 14:10:312319 days ago1533996631
WorldFomo
0.00413163 ETH
61238812018-08-10 18:49:372319 days ago1533926977
WorldFomo
0.00231918 ETH
61044242018-08-07 12:05:512323 days ago1533643551
WorldFomo
0.43915251 ETH
61044182018-08-07 12:04:332323 days ago1533643473
WorldFomo
0.01305469 ETH
61044182018-08-07 12:04:332323 days ago1533643473
WorldFomo
0.00000114 ETH
61022722018-08-07 3:15:512323 days ago1533611751
WorldFomo
0.00000236 ETH
61002352018-08-06 18:57:422323 days ago1533581862
WorldFomo
0.00402175 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WorldFomo

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-07-25
*/

pragma solidity ^0.4.24;
/**
*                                        ,   ,
*                                        $,  $,     ,
*                                        "ss.$ss. .s'
*                                ,     .ss$$$$$$$$$$s,
*                                $. s$$$$$$$$$$$$$$`$$Ss
*                                "$$$$$$$$$$$$$$$$$$o$$$       ,
*                               s$$$$$$$$$$$$$$$$$$$$$$$$s,  ,s
*                              s$$$$$$$$$"$$$$$$""""$$$$$$"$$$$$,
*                              s$$$$$$$$$$s""$$$$ssssss"$$$$$$$$"
*                             s$$$$$$$$$$'         `"""ss"$"$s""
*                             s$$$$$$$$$$,              `"""""$  .s$$s
*                             s$$$$$$$$$$$$s,...               `s$$'  `
*                         `ssss$$$$$$$$$$$$$$$$$$$$####s.     .$$"$.   , s-
*                           `""""$$$$$$$$$$$$$$$$$$$$#####$$$$$$"     $.$'
* 祝你成功                        "$$$$$$$$$$$$$$$$$$$$$####s""     .$$$|
*   福    喜喜                        "$$$$$$$$$$$$$$$$$$$$$$$$##s    .$$" $
*                                   $$""$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"   `
*                                  $$"  "$"$$$$$$$$$$$$$$$$$$$$S""""'
*                             ,   ,"     '  $$$$$$$$$$$$$$$$####s
*                             $.          .s$$$$$$$$$$$$$$$$$####"
*                 ,           "$s.   ..ssS$$$$$$$$$$$$$$$$$$$####"
*                 $           .$$$S$$$$$$$$$$$$$$$$$$$$$$$$#####"
*                 Ss     ..sS$$$$$$$$$$$$$$$$$$$$$$$$$$$######""
*                  "$$sS$$$$$$$$$$$$$$$$$$$$$$$$$$$########"
*           ,      s$$$$$$$$$$$$$$$$$$$$$$$$#########""'
*           $    s$$$$$$$$$$$$$$$$$$$$$#######""'      s'         ,
*           $$..$$$$$$$$$$$$$$$$$$######"'       ....,$$....    ,$
*            "$$$$$$$$$$$$$$$######"' ,     .sS$$$$$$$$$$$$$$$$s$$
*              $$$$$$$$$$$$#####"     $, .s$$$$$$$$$$$$$$$$$$$$$$$$s.
*   )          $$$$$$$$$$$#####'      `$$$$$$$$$###########$$$$$$$$$$$.
*  ((          $$$$$$$$$$$#####       $$$$$$$$###"       "####$$$$$$$$$$
*  ) \         $$$$$$$$$$$$####.     $$$$$$###"             "###$$$$$$$$$   s'
* (   )        $$$$$$$$$$$$$####.   $$$$$###"                ####$$$$$$$$s$$'
* )  ( (       $$"$$$$$$$$$$$#####.$$$$$###'                .###$$$$$$$$$$"
* (  )  )   _,$"   $$$$$$$$$$$$######.$$##'                .###$$$$$$$$$$
* ) (  ( \.         "$$$$$$$$$$$$$#######,,,.          ..####$$$$$$$$$$$"
*(   )$ )  )        ,$$$$$$$$$$$$$$$$$$####################$$$$$$$$$$$"
*(   ($$  ( \     _sS"  `"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$S$$,
* )  )$$$s ) )  .      .   `$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"'  `$$
*  (   $$$Ss/  .$,    .$,,s$$$$$$##S$$$$$$$$$$$$$$$$$$$$$$$$S""        '
*    \)_$$$$$$$$$$$$$$$$$$$$$$$##"  $$        `$$.        `$$.
*        `"S$$$$$$$$$$$$$$$$$#"      $          `$          `$
*            `"""""""""""""'         '           '           '
*/
contract F3Devents {
    // 只要玩家注册了名字就会被解雇
    event onNewName
    (
        uint256 indexed playerID,
        address indexed playerAddress,
        bytes32 indexed playerName,
        bool isNewPlayer,
        uint256 affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 amountPaid,
        uint256 timeStamp
    );

    // 在购买或重装结束时解雇
    event onEndTx
    (
        uint256 compressedData,
        uint256 compressedIDs,
        bytes32 playerName,
        address playerAddress,
        uint256 ethIn,
        uint256 keysBought,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount,
        uint256 potAmount,
        uint256 airDropPot
    );

    // 只要有人退出就会被解雇
    event onWithdraw
    (
        uint256 indexed playerID,
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 timeStamp
    );

    // 每当撤军力量结束时,就会被解雇
    event onWithdrawAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // (fomo3d免费) 每当玩家尝试一轮又一轮的计时器时就会被解雇
    // 命中零,并导致结束回合
    event onBuyAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // (fomo3d免费) 每当玩家在圆形时间后尝试重新加载时就会触发
    // 命中零,并导致结束回合.
    event onReLoadAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // 每当联盟会员付款时就会被解雇
    event onAffiliatePayout
    (
        uint256 indexed affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 indexed roundID,
        uint256 indexed buyerID,
        uint256 amount,
        uint256 timeStamp
    );

    // 收到罐子掉期存款
    event onPotSwapDeposit
    (
        uint256 roundID,
        uint256 amountAddedToPot
    );
}

//==============================================================================
//   _ _  _ _|_ _ _  __|_   _ _ _|_    _   .
//  (_(_)| | | | (_|(_ |   _\(/_ | |_||_)  .
//====================================|=========================================

contract modularShort is F3Devents {}

contract WorldFomo is modularShort {
    using SafeMath for *;
    using NameFilter for string;
    using F3DKeysCalcShort for uint256;

    PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x6ed17ee485821cd47531f2e4c7b9ef8b48f2bab5);

//==============================================================================
//     _ _  _  |`. _     _ _ |_ | _  _  .
//    (_(_)| |~|~|(_||_|| (_||_)|(/__\  .  (游戏设置)
//=================_|===========================================================
    address private admin = msg.sender;
    string constant public name = "WorldFomo";
    string constant public symbol = "WF";
    uint256 private rndExtra_ = 15 seconds;     // 第一个ICO的长度
    uint256 private rndGap_ = 30 minutes;         // ICO阶段的长度,EOS设定为1年。
    uint256 constant private rndInit_ = 30 minutes;                // 圆计时器从此开始
    uint256 constant private rndInc_ = 10 seconds;              // 购买的每一把钥匙都会给计时器增加很多
    uint256 constant private rndMax_ = 12 hours;                // 圆形计时器的最大长度可以是
//==============================================================================
//     _| _ _|_ _    _ _ _|_    _   .
//    (_|(_| | (_|  _\(/_ | |_||_)  .  (用于存储更改的游戏信息的数据)
//=============================|================================================
    uint256 public airDropPot_;             // 获得空投的人赢得了这个锅的一部分
    uint256 public airDropTracker_ = 0;     // 每次“合格”tx发生时递增。用于确定获胜的空投
    uint256 public rID_;    // 已发生的轮次ID /总轮数
//****************
// 球员数据
//****************
    mapping (address => uint256) public pIDxAddr_;          // (addr => pID)按地址返回玩家ID
    mapping (bytes32 => uint256) public pIDxName_;          // (name => pID)按名称返回玩家ID
    mapping (uint256 => F3Ddatasets.Player) public plyr_;   // (pID => data) 球员数据
    mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_;    // (pID => rID => data) 玩家ID和轮次ID的玩家轮数据
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool)玩家拥有的名字列表。 (用于这样您可以在您拥有的任何名称中更改您的显示名称)
//****************
// 圆形数据
//****************
    mapping (uint256 => F3Ddatasets.Round) public round_;   // (rID => data) 圆形数据
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;      // (rID => tID => 数据)每个团队的eth,by round id和team id
//****************
// 团队收费数据
//****************
    mapping (uint256 => F3Ddatasets.TeamFee) public fees_;          // (team => fees) 按团队分配费用
    mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_;     // (team => fees) 锅分裂由团队分配
//==============================================================================
//     _ _  _  __|_ _    __|_ _  _  .
//    (_(_)| |_\ | | |_|(_ | (_)|   .  (合同部署时的初始数据设置)
//==============================================================================
    constructor()
        public
    {
        // 团队分配结构
        // 0 = europe
        // 1 = freeforall
        // 2 = china
        // 3 = americas

        // 团队分配百分比
        // (F3D, P3D) + (Pot , Referrals, Community)
            // 介绍人 / 社区奖励在数学上被设计为来自获胜者的底池份额.
        fees_[0] = F3Ddatasets.TeamFee(32,0);   //50% to pot, 15% to aff, 3% to com, 0% to pot swap, 0% to air drop pot
        fees_[1] = F3Ddatasets.TeamFee(45,0);   //37% to pot, 15% to aff, 3% to com, 0% to pot swap, 0% to air drop pot
        fees_[2] = F3Ddatasets.TeamFee(62,0);  //20% to pot, 15% to aff, 3% to com, 0% to pot swap, 0% to air drop pot
        fees_[3] = F3Ddatasets.TeamFee(47,0);   //35% to pot, 15% to aff, 3% to com, 0% to pot swap, 0% to air drop pot

        // 如何根据选择的球队分割最终的底池
        // (F3D, P3D)
        potSplit_[0] = F3Ddatasets.PotSplit(47,0);  //25% to winner, 25% to next round, 3% to com
        potSplit_[1] = F3Ddatasets.PotSplit(47,0);   //25% to winner, 25% to next round, 3% to com
        potSplit_[2] = F3Ddatasets.PotSplit(62,0);  //25% to winner, 10% to next round, 3% to com
        potSplit_[3] = F3Ddatasets.PotSplit(62,0);  //25% to winner, 10% to next round,3% to com
    }
//==============================================================================
//     _ _  _  _|. |`. _  _ _  .
//    | | |(_)(_||~|~|(/_| _\  .  (这些都是安全检查)
//==============================================================================
    /**
     * @dev 用于确保在激活之前没有人可以与合同互动.
     *
     */
    modifier isActivated() {
        require(activated_ == true, "its not ready yet.  check ?eta in discord");
        _;
    }

    /**
     * @dev 防止合同与fomo3d交互
     */
    modifier isHuman() {
        require(msg.sender == tx.origin, "sorry humans only - FOR REAL THIS TIME");
        _;
    }

    /**
     * @dev 设置传入tx的边界
     */
    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 100000000000000000000000, "no vitalik, no");
        _;
    }

//==============================================================================
//     _    |_ |. _   |`    _  __|_. _  _  _  .
//    |_)|_||_)||(_  ~|~|_|| |(_ | |(_)| |_\  .  (用这些来与合同互动)
//====|=========================================================================
    /**
     * @dev 紧急购买使用最后存储的会员ID和团队潜行
     */
    function()
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // 设置我们的tx事件数据并确定玩家是否是新手
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 买核心
        buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
    }

    /**
     * @dev 将所有传入的以太坊转换为键.
     * -functionhash- 0x8f38f309 (使用ID作为会员)
     * -functionhash- 0x98a0871d (使用联盟会员的地址)
     * -functionhash- 0xa65b37a1 (使用联盟会员的名称)
     * @param _affCode 获得联盟费用的玩家的ID /地址/名称
     * @param _team 什么球队是球员?
     */
    function buyXid(uint256 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // 设置我们的tx事件数据并确定玩家是否是新手
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == 0 || _affCode == _pID)
        {
            // 使用最后存储的联盟代码
            _affCode = plyr_[_pID].laff;

        // 如果提供联属代码并且它与先前存储的不同
        } else if (_affCode != plyr_[_pID].laff) {
            // 更新最后一个会员
            plyr_[_pID].laff = _affCode;
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 买核心
        buyCore(_pID, _affCode, _team, _eventData_);
    }

    function buyXaddr(address _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // 设置我们的tx事件数据并确定玩家是否是新手
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        uint256 _affID;
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // 使用最后存储的联盟代码
            _affID = plyr_[_pID].laff;

        // 如果是联盟代码
        } else {
            // 从aff Code获取会员ID
            _affID = pIDxAddr_[_affCode];

            // 如果affID与先前存储的不同
            if (_affID != plyr_[_pID].laff)
            {
                // 更新最后一个会员
                plyr_[_pID].laff = _affID;
            }
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 买核心
        buyCore(_pID, _affID, _team, _eventData_);
    }

    function buyXname(bytes32 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // 设置我们的tx事件数据并确定玩家是否是新手
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        uint256 _affID;
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // 使用最后存储的联盟代码
            _affID = plyr_[_pID].laff;

        // 如果是联盟代码
        } else {
            // 从aff Code获取会员ID
            _affID = pIDxName_[_affCode];

            // 如果affID与先前存储的不同
            if (_affID != plyr_[_pID].laff)
            {
                // 更新最后一个会员
                plyr_[_pID].laff = _affID;
            }
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 买核心
        buyCore(_pID, _affID, _team, _eventData_);
    }

    /**
     * @dev 基本上与买相同,但不是你发送以太
     * 从您的钱包中,它使用您未提取的收入.
     * -functionhash- 0x349cdcac (使用ID作为会员)
     * -functionhash- 0x82bfc739 (使用联盟会员的地址)
     * -functionhash- 0x079ce327 (使用联盟会员的名称)
     * @param _affCode 获得联盟费用的玩家的ID /地址/名称
     * @param _team 球员在哪支球队?
     * @param _eth 使用的收入金额(余额退回基金库)
     */
    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // 设置我们的tx事件数据
        F3Ddatasets.EventReturns memory _eventData_;

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == 0 || _affCode == _pID)
        {
            // 使用最后存储的联盟代码
            _affCode = plyr_[_pID].laff;

        // 如果提供联属代码并且它与先前存储的不同
        } else if (_affCode != plyr_[_pID].laff) {
            // 更新最后一个会员
            plyr_[_pID].laff = _affCode;
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 重装核心
        reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
    }

    function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // 设置我们的tx事件数据
        F3Ddatasets.EventReturns memory _eventData_;

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        uint256 _affID;
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // 使用最后存储的联盟代码
            _affID = plyr_[_pID].laff;

        // 如果是联盟代码
        } else {
            // 从aff Code获取会员ID
            _affID = pIDxAddr_[_affCode];

            // 如果affID与先前存储的不同
            if (_affID != plyr_[_pID].laff)
            {
                // 更新最后一个会员
                plyr_[_pID].laff = _affID;
            }
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 重装核心
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }

    function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // 设置我们的tx事件数据
        F3Ddatasets.EventReturns memory _eventData_;

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 管理会员残差
        uint256 _affID;
        // 如果没有给出联盟代码或者玩家试图使用他们自己的代码
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // 使用最后存储的联盟代码
            _affID = plyr_[_pID].laff;

        // 如果是联盟代码
        } else {
            // 从aff Code获取会员ID
            _affID = pIDxName_[_affCode];

            // 如果affID与先前存储的不同
            if (_affID != plyr_[_pID].laff)
            {
                // 更新最后一个会员
                plyr_[_pID].laff = _affID;
            }
        }

        // 验证是否选择了有效的团队
        _team = verifyTeam(_team);

        // 重装核心
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }

    /**
     * @dev 撤回所有收入.
     * -functionhash- 0x3ccfd60b
     */
    function withdraw()
        isActivated()
        isHuman()
        public
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        // 获取玩家ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // 为玩家eth设置temp var
        uint256 _eth;

        // 检查圆是否已经结束并且还没有人绕圈结束
        if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // 设置我们的tx事件数据
            F3Ddatasets.EventReturns memory _eventData_;

            // 圆形结束(分配锅)
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);

            // 得到他们的收入
            _eth = withdrawEarnings(_pID);

            // 给钱
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);

            // 构建事件数据
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

            // 火灾撤回和分发事件
            emit F3Devents.onWithdrawAndDistribute
            (
                msg.sender,
                plyr_[_pID].name,
                _eth,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.P3DAmount,
                _eventData_.genAmount
            );

        // 在任何其他情况下
        } else {
            // 得到他们的收入
            _eth = withdrawEarnings(_pID);

            // 给钱
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);

            // 消防事件
            emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
        }
    }

    /**
     * @dev 使用这些来注册名称。它们只是将注册请求发送给PlayerBook合同的包装器。所以在这里注册与在那里注册是一样的。
     * UI将始终显示您注册的姓氏,但您仍将拥有所有以前注册的名称以用作会员链接。
     * - 必须支付注册费
     * - 名称必须是唯一的
     * - 名称将转换为小写
     * - 名称不能以空格开头或结尾
     * - 连续不能超过1个空格
     * - 不能只是数字
     * - 不能以0x开头
     * - name必须至少为1个字符
     * - 最大长度为32个字符
     * - 允许的字符:a-z,0-9和空格
     * -functionhash- 0x921dec21 (使用ID作为会员)
     * -functionhash- 0x3ddd4698 (使用联盟会员的地址)
     * -functionhash- 0x685ffd83 (使用联盟会员的名称)
     * @param _nameString 球员想要的名字
     * @param _affCode 会员ID,地址或推荐您的人的姓名
     * @param _all 如果您希望将信息推送到所有游戏,则设置为true
     * (这可能会耗费大量气体)
     */
    function registerNameXID(string _nameString, uint256 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // 火灾事件
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXaddr(string _nameString, address _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // 火灾事件
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXname(string _nameString, bytes32 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // 火灾事件
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }
//==============================================================================
//     _  _ _|__|_ _  _ _  .
//    (_|(/_ |  | (/_| _\  . (用于UI和查看etherscan上的东西)
//=====_|=======================================================================
    /**
     * @dev 退货价格买家将支付下一个个人钥匙.
     * -functionhash- 0x018a25e8
     * @return 购买下一个钥匙的价格(以wei格式)
     */
    function getBuyPrice()
        public
        view
        returns(uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        // 我们是一个回合?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
        else // rounds over.  need price for new round
            return ( 75000000000000 ); // init
    }

    /**
     * @dev 返回剩余时间。不要垃圾邮件,你可以从你的节点提供商那里得到你自己
     * -functionhash- 0xc7e284b8
     * @return 时间在几秒钟内
     */
    function getTimeLeft()
        public
        view
        returns(uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        if (_now < round_[_rID].end)
            if (_now > round_[_rID].strt + rndGap_)
                return( (round_[_rID].end).sub(_now) );
            else
                return( (round_[_rID].strt + rndGap_).sub(_now) );
        else
            return(0);
    }

    /**
     * @dev 每个金库返回玩家收入
     * -functionhash- 0x63066434
     * @return 赢得金库
     * @return 一般金库
     * @return 会员保险库
     */
    function getPlayerVaults(uint256 _pID)
        public
        view
        returns(uint256 ,uint256, uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 如果圆结束了但圆形结束尚未运行(因此合同没有分配奖金)
        if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // 如果球员是胜利者
            if (round_[_rID].plyr == _pID)
            {
                return
                (
                    (plyr_[_pID].win).add( ((round_[_rID].pot).mul(25)) / 100 ),
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)   ),
                    plyr_[_pID].aff
                );
            // 如果玩家不是赢家
            } else {
                return
                (
                    plyr_[_pID].win,
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)  ),
                    plyr_[_pID].aff
                );
            }

        // 如果圆形仍在继续,或圆形已经结束并且圆形结束已经运行
        } else {
            return
            (
                plyr_[_pID].win,
                (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
                plyr_[_pID].aff
            );
        }
    }

    /**
     * 坚固不喜欢堆栈限制。这让我们避免那种仇恨
     */
    function getPlayerVaultsHelper(uint256 _pID, uint256 _rID)
        private
        view
        returns(uint256)
    {
        return(  ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000)  );
    }

    /**
     * @dev 返回前端所需的所有当前轮次信息
     * -functionhash- 0x747dff42
     * @return 在ICO阶段投资的eth
     * @return 圆的身份
     * @return 圆的总钥匙
     * @return 时间到了
     * @return 时间开始了
     * @return 目前的锅
     * @return 领先的当前球队ID和球员ID
     * @return 领先地址的当前玩家
     * @return 引导名称中的当前玩家
     * @return 鲸鱼为了圆形
     * @return b耳朵为圆形
     * @return 为了回合而进行的
     * @return 公牛队参加比赛
     * @return 空投跟踪器#&airdrop pot
     */
    function getCurrentRoundInfo()
        public
        view
        returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        return
        (
            round_[_rID].ico,               //0
            _rID,                           //1
            round_[_rID].keys,              //2
            round_[_rID].end,               //3
            round_[_rID].strt,              //4
            round_[_rID].pot,               //5
            (round_[_rID].team + (round_[_rID].plyr * 10)),     //6
            plyr_[round_[_rID].plyr].addr,  //7
            plyr_[round_[_rID].plyr].name,  //8
            rndTmEth_[_rID][0],             //9
            rndTmEth_[_rID][1],             //10
            rndTmEth_[_rID][2],             //11
            rndTmEth_[_rID][3],             //12
            airDropTracker_ + (airDropPot_ * 1000)              //13
        );
    }

    /**
     * @dev 根据地址返回玩家信息。如果没有给出地址,它会
     * use msg.sender
     * -functionhash- 0xee0b5d8b
     * @param _addr 您要查找的播放器的地址
     * @return 玩家ID
     * @return 参赛者姓名
     * @return 密钥拥有(当前轮次)
     * @return 赢得金库
     * @return 一般金库
     * @return 会员保险库
     * @return 球员圆的eth
     */
    function getPlayerInfoByAddress(address _addr)
        public
        view
        returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        if (_addr == address(0))
        {
            _addr == msg.sender;
        }
        uint256 _pID = pIDxAddr_[_addr];

        return
        (
            _pID,                               //0
            plyr_[_pID].name,                   //1
            plyrRnds_[_pID][_rID].keys,         //2
            plyr_[_pID].win,                    //3
            (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),       //4
            plyr_[_pID].aff,                    //5
            plyrRnds_[_pID][_rID].eth           //6
        );
    }

//==============================================================================
//     _ _  _ _   | _  _ . _  .
//    (_(_)| (/_  |(_)(_||(_  . (这+工具+计算+模块=我们的软件引擎)
//=====================_|=======================================================
    /**
     * @dev 每当执行买单时,逻辑就会运行。决定如何处理
     * 传入的道德取决于我们是否处于活跃轮次
     */
    function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        // 如果圆形是活跃的

        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
        {
            // 致电核心
            core(_rID, _pID, msg.value, _affID, _team, _eventData_);

        // 如果圆形不活跃
        } else {
            // 检查是否需要运行结束轮次
            if (_now > round_[_rID].end && round_[_rID].ended == false)
            {
                // 结束回合(分配锅)并开始新一轮
                round_[_rID].ended = true;
                _eventData_ = endRound(_eventData_);

                // 构建事件数据
                _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
                _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

                // 火买和分发事件
                emit F3Devents.onBuyAndDistribute
                (
                    msg.sender,
                    plyr_[_pID].name,
                    msg.value,
                    _eventData_.compressedData,
                    _eventData_.compressedIDs,
                    _eventData_.winnerAddr,
                    _eventData_.winnerName,
                    _eventData_.amountWon,
                    _eventData_.newPot,
                    _eventData_.P3DAmount,
                    _eventData_.genAmount
                );
            }

            // 将eth放入球员保险库中
            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }

    /**
     * @dev 每当执行重新加载订单时,逻辑就会运行。决定如何处理
     * 传入的道德取决于我们是否处于活跃轮次
     */
    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        // 如果圆形是活跃的
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
        {
            // 从所有金库中获取收益并将未使用的金额归还给gen保险库
            // 因为我们使用自定义safemath库。如果玩家,这将抛出
            // 他们试图花更多的时间。
            plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);

            // 致电核心
            core(_rID, _pID, _eth, _affID, _team, _eventData_);

        // 如果round不活动并且需要运行end round
        } else if (_now > round_[_rID].end && round_[_rID].ended == false) {
            // end the round (distributes pot) & start new round
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);

            // 构建事件数据
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

            // 火买和分发事件
            emit F3Devents.onReLoadAndDistribute
            (
                msg.sender,
                plyr_[_pID].name,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.P3DAmount,
                _eventData_.genAmount
            );
        }
    }

    /**
     * @dev 这是在回合生效期间发生的任何购买/重新加载的核心逻辑
     */
    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // 如果玩家是新手
        if (plyrRnds_[_pID][_rID].keys == 0)
            _eventData_ = managePlayer(_pID, _eventData_);

        // 早期的道路限制器
        if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000)
        {
            uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
            uint256 _refund = _eth.sub(_availableLimit);
            plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
            _eth = _availableLimit;
        }

        // 如果留下的eth大于min eth允许(抱歉没有口袋棉绒)
        if (_eth > 1000000000)
        {

            // 铸造新钥匙
            uint256 _keys = (round_[_rID].eth).keysRec(_eth);

            // 如果他们至少买了一把钥匙
            if (_keys >= 1000000000000000000)
            {
            updateTimer(_keys, _rID);

            // 树立新的领导者
            if (round_[_rID].plyr != _pID)
                round_[_rID].plyr = _pID;
            if (round_[_rID].team != _team)
                round_[_rID].team = _team;

            // 将新的领导者布尔设为真
            _eventData_.compressedData = _eventData_.compressedData + 100;
        }


            // 存储空投跟踪器编号(自上次空投以来的购买次数)
            _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000);

            // 更新播放器
            plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
            plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);

            // 更新回合
            round_[_rID].keys = _keys.add(round_[_rID].keys);
            round_[_rID].eth = _eth.add(round_[_rID].eth);
            rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]);

            // 分配道德
            _eventData_ = distributeExternal(_rID, _eth, _team, _eventData_);
            _eventData_ = distributeInternal(_rID, _pID, _eth, _affID, _team, _keys, _eventData_);

            // 调用end tx函数来触发结束tx事件。
            endTx(_pID, _team, _eth, _keys, _eventData_);
        }
    }
//==============================================================================
//     _ _ | _   | _ _|_ _  _ _  .
//    (_(_||(_|_||(_| | (_)| _\  .
//==============================================================================
    /**
     * @dev 计算未屏蔽的收入(只计算,不更新掩码)k)
     * @return earnings in wei format
     */
    function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast)
        private
        view
        returns(uint256)
    {
        return(  (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask)  );
    }

    /**
     * @dev 返回给出一定数量eth的密钥数量.
     * -functionhash- 0xce89c80c
     * @param _rID round ID you want price for
     * @param _eth amount of eth sent in
     * @return keys received
     */
    function calcKeysReceived(uint256 _rID, uint256 _eth)
        public
        view
        returns(uint256)
    {
        // 抓住时间
        uint256 _now = now;

        // 我们是一个回合?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].eth).keysRec(_eth) );
        else // 转过来。需要新一轮的钥匙
            return ( (_eth).keys() );
    }

    /**
     * @dev 返回X键的当前eth价格。
     * -functionhash- 0xcf808000
     * @param _keys 所需的键数(18位十进制格式)
     * @return 需要发送的eth数量
     */
    function iWantXKeys(uint256 _keys)
        public
        view
        returns(uint256)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住时间
        uint256 _now = now;

        // 我们是一个回合?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
        else // rounds over.  need price for new round
            return ( (_keys).eth() );
    }
//==============================================================================
//    _|_ _  _ | _  .
//     | (_)(_)|_\  .
//==============================================================================
    /**
     * @dev 从姓名合同中接收姓名/球员信息
     */
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if (pIDxAddr_[_addr] != _pID)
            pIDxAddr_[_addr] = _pID;
        if (pIDxName_[_name] != _pID)
            pIDxName_[_name] = _pID;
        if (plyr_[_pID].addr != _addr)
            plyr_[_pID].addr = _addr;
        if (plyr_[_pID].name != _name)
            plyr_[_pID].name = _name;
        if (plyr_[_pID].laff != _laff)
            plyr_[_pID].laff = _laff;
        if (plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }

    /**
     * @dev 接收整个玩家名单
     */
    function receivePlayerNameList(uint256 _pID, bytes32 _name)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if(plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }

    /**
     * @dev 获得现有或注册新的pID。当玩家可能是新手时使用此功能
     * @return pID
     */
    function determinePID(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        uint256 _pID = pIDxAddr_[msg.sender];
        // 如果玩家是这个版本的worldfomo的新手
        if (_pID == 0)
        {
            // 从玩家姓名合同中获取他们的玩家ID,姓名和最后一个身份证
            _pID = PlayerBook.getPlayerID(msg.sender);
            bytes32 _name = PlayerBook.getPlayerName(_pID);
            uint256 _laff = PlayerBook.getPlayerLAff(_pID);

            // 设置玩家帐户
            pIDxAddr_[msg.sender] = _pID;
            plyr_[_pID].addr = msg.sender;

            if (_name != "")
            {
                pIDxName_[_name] = _pID;
                plyr_[_pID].name = _name;
                plyrNames_[_pID][_name] = true;
            }

            if (_laff != 0 && _laff != _pID)
                plyr_[_pID].laff = _laff;

            // 将新玩家bool设置为true
            _eventData_.compressedData = _eventData_.compressedData + 1;
        }
        return (_eventData_);
    }

    /**
     * @dev 检查以确保用户选择了一个有效的团队。如果没有设置团队
     * 默认(中国)
     */
    function verifyTeam(uint256 _team)
        private
        pure
        returns (uint256)
    {
        if (_team < 0 || _team > 3)
            return(2);
        else
            return(_team);
    }

    /**
     * @dev 决定是否需要运行圆形结束并开始新一轮。而如果
     * 需要移动之前玩过的球员未经掩盖的收入
     */
    function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // 如果玩家已经玩过上一轮,则移动他们未经掩盖的收益
        // 从那一轮到生成金库。
        if (plyr_[_pID].lrnd != 0)
            updateGenVault(_pID, plyr_[_pID].lrnd);

        // 更新玩家的最后一轮比赛
        plyr_[_pID].lrnd = rID_;

        // 将连接的圆形bool设置为true
        _eventData_.compressedData = _eventData_.compressedData + 10;

        return(_eventData_);
    }

    /**
     * @dev 结束这一轮。管理支付赢家/拆分锅
     */
    function endRound(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // 设置本地rID
        uint256 _rID = rID_;

        // 抓住我们的获胜球员和球队ID
        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;

        // 抓住我们的锅量
        uint256 _pot = round_[_rID].pot;

        // 计算我们的赢家份额,社区奖励,发行份额,
        // 份额,以及为下一个底池保留的金额
        uint256 _win = (_pot.mul(25)) / 100;
        uint256 _com = (_pot.mul(3)) / 100;
        uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
        uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100;
        uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d);

        // k计算圆形面罩的ppt
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000);
        if (_dust > 0)
        {
            _gen = _gen.sub(_dust);
            _res = _res.add(_dust);
        }

        // 支付我们的赢家
        plyr_[_winPID].win = _win.add(plyr_[_winPID].win);

        // 社区奖励

        admin.transfer(_com);

        // 将gen部分分配给密钥持有者
        round_[_rID].mask = _ppt.add(round_[_rID].mask);

        // 准备事件数据
        _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000);
        _eventData_.winnerAddr = plyr_[_winPID].addr;
        _eventData_.winnerName = plyr_[_winPID].name;
        _eventData_.amountWon = _win;
        _eventData_.genAmount = _gen;
        _eventData_.P3DAmount = _p3d;
        _eventData_.newPot = _res;

        // 下一轮开始
        rID_++;
        _rID++;
        round_[_rID].strt = now;
        round_[_rID].end = now.add(rndInit_).add(rndGap_);
        round_[_rID].pot = _res;

        return(_eventData_);
    }

    /**
     * @dev moves any unmasked earnings to gen vault.  updates earnings mask
     */
    function updateGenVault(uint256 _pID, uint256 _rIDlast)
        private
    {
        uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
        if (_earnings > 0)
        {
            // 放入gen库
            plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);
            // 通过更新面具将收入归零
            plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);
        }
    }

    /**
     * @dev 根据购买的全部密钥数量更新圆形计时器。
     */
    function updateTimer(uint256 _keys, uint256 _rID)
        private
    {
        // 抓住时间
        uint256 _now = now;

        // 根据购买的钥匙数计算时间
        uint256 _newTime;
        if (_now > round_[_rID].end && round_[_rID].plyr == 0)
            _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now);
        else
            _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end);

        // 比较max并设置新的结束时间
        if (_newTime < (rndMax_).add(_now))
            round_[_rID].end = _newTime;
        else
            round_[_rID].end = rndMax_.add(_now);
    }

    /**
     * @dev 生成0-99之间的随机数并检查是否存在
     * 导致空投获胜
     * @return 我们有赢家吗?我们有赢家吗?
     */
    function airdrop()
        private
        view
        returns(bool)
    {
        uint256 seed = uint256(keccak256(abi.encodePacked(

            (block.timestamp).add
            (block.difficulty).add
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add
            (block.gaslimit).add
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add
            (block.number)

        )));
        if((seed - ((seed / 1000) * 1000)) < airDropTracker_)
            return(true);
        else
            return(false);
    }

    /**
     * @dev 根据对com,aff和p3d的费用分配eth
     */
    function distributeExternal(uint256 _rID, uint256 _eth, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // 支付3%的社区奖励
        uint256 _com = (_eth.mul(3)) / 100;
        uint256 _p3d;
        if (!address(admin).call.value(_com)())
        {
            _p3d = _com;
            _com = 0;
        }


        // 支付p3d
        _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100));
        if (_p3d > 0)
        {
            round_[_rID].pot = round_[_rID].pot.add(_p3d);

            // 设置事件数据
            _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount);
        }

        return(_eventData_);
    }

    function potSwap()
        external
        payable
    {
        // 设置本地rID
        uint256 _rID = rID_ + 1;

        round_[_rID].pot = round_[_rID].pot.add(msg.value);
        emit F3Devents.onPotSwapDeposit(_rID, msg.value);
    }

    /**
     * @dev 根据对gen和pot的费用分配eth
     */
    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // 计算gen份额
        uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;

        // distribute share to affiliate 15%
        uint256 _aff = (_eth.mul(15)) / 100;

        // 更新道德平衡 (eth = eth - (com share + pot swap share + aff share))
        _eth = _eth.sub(((_eth.mul(18)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100));

        // 计算锅
        uint256 _pot = _eth.sub(_gen);

        // decide what to do with affiliate share of fees
        // affiliate must not be self, and must have a name registered
        if (_affID != _pID && plyr_[_affID].name != '') {
            plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
            emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now);
        } else {
            _gen = _gen.add(_aff);
        }

        // 分配gen份额(这就是updateMasks()所做的)并进行调整
        // 灰尘平衡。
        uint256 _dust = updateMasks(_rID, _pID, _gen, _keys);
        if (_dust > 0)
            _gen = _gen.sub(_dust);

        // 添加eth到pot
        round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot);

        // 设置事件数据
        _eventData_.genAmount = _gen.add(_eventData_.genAmount);
        _eventData_.potAmount = _pot;

        return(_eventData_);
    }

    /**
     * @dev 购买钥匙时更新圆形和玩家的面具
     * @return 灰尘遗留下来
     */
    function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys)
        private
        returns(uint256)
    {
        /* 掩盖笔记
            收入面具对人们来说是一个棘手的事情。
            这里要理解的基本内容。将有一个全球性的
            跟踪器基于每轮的每股利润,增加
            相关比例增加份额。

            玩家将有一个额外的面具基本上说“基于
            在回合面具,我的股票,以及我已经撤回了多少,
            还欠我多少钱呢?“
        */

        // 基于此购买的每个键和圆形面具的钙利润:(灰尘进入锅)
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        round_[_rID].mask = _ppt.add(round_[_rID].mask);

        // 计算玩家从他们自己购买的收入(仅基于钥匙
        // 他们刚刚买了)。并更新玩家收入掩
        uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000);
        plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask);

        // 计算并返回灰尘
        return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)));
    }

    /**
     * @dev 加上未公开的收入和保险金收入,将它们全部设为0
     * @return wei格式的收益
     */
    function withdrawEarnings(uint256 _pID)
        private
        returns(uint256)
    {
        // 更新gen保险库
        updateGenVault(_pID, plyr_[_pID].lrnd);

        // 来自金库
        uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff);
        if (_earnings > 0)
        {
            plyr_[_pID].win = 0;
            plyr_[_pID].gen = 0;
            plyr_[_pID].aff = 0;
        }

        return(_earnings);
    }

    /**
     * @dev 准备压缩数据并触发事件以进行购买或重新加载tx
     */
    function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);

        emit F3Devents.onEndTx
        (
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.P3DAmount,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }
//==============================================================================
//    (~ _  _    _._|_    .
//    _)(/_(_|_|| | | \/  .
//====================/=========================================================
    /** 合同部署后,它将被停用。这是一次
     * 使用将激活合同的功能。我们这样做是开发者
     * 有时间在网络端设置                           **/
    bool public activated_ = false;
    function activate()
        public
    {
        // 只有团队才能激活
        require(msg.sender == admin, "only admin can activate");


        // 只能跑一次
        require(activated_ == false, "FOMO Free already activated");

        // 激活合同
        activated_ = true;

        // 让我们开始第一轮
        rID_ = 1;
            round_[1].strt = now + rndExtra_ - rndGap_;
            round_[1].end = now + rndInit_ + rndExtra_;
    }
}

//==============================================================================
//   __|_ _    __|_ _  .
//  _\ | | |_|(_ | _\  .
//==============================================================================
library F3Ddatasets {
    //压缩数据密钥
    // [76-33][32][31][30][29][28-18][17][16-6][5-3][2][1][0]
        // 0 - new player (bool)
        // 1 - joined round (bool)
        // 2 - new  leader (bool)
        // 3-5 - air drop tracker (uint 0-999)
        // 6-16 - round end time
        // 17 - winnerTeam
        // 18 - 28 timestamp
        // 29 - team
        // 30 - 0 = reinvest (round), 1 = buy (round), 2 = buy (ico), 3 = reinvest (ico)
        // 31 - airdrop happened bool
        // 32 - airdrop tier
        // 33 - airdrop amount won
    //压缩的ID密钥
    // [77-52][51-26][25-0]
        // 0-25 - pID
        // 26-51 - winPID
        // 52-77 - rID
    struct EventReturns {
        uint256 compressedData;
        uint256 compressedIDs;
        address winnerAddr;         // 获胜者地址
        bytes32 winnerName;         // 获胜者地址
        uint256 amountWon;          // 金额赢了
        uint256 newPot;             // 在新锅中的数量
        uint256 P3DAmount;          // 金额分配给p3d
        uint256 genAmount;          // 金额分配给gen
        uint256 potAmount;          // 加入锅中的量
    }
    struct Player {
        address addr;   // 球员地址
        bytes32 name;   // 参赛者姓名
        uint256 win;    // 赢得金库
        uint256 gen;    // 一般金库
        uint256 aff;    // 会员保险库
        uint256 lrnd;   // 上一轮比赛
        uint256 laff;   // 使用的最后一个会员ID
    }
    struct PlayerRounds {
        uint256 eth;    // 玩家加入回合(用于eth限制器)
        uint256 keys;   // 按键
        uint256 mask;   // 运动员面具
        uint256 ico;    // ICO阶段投资
    }
    struct Round {
        uint256 plyr;   // 领先的玩家的pID
        uint256 team;   // 领导团队的tID
        uint256 end;    // 时间结束/结束
        bool ended;     // 已经运行了圆端函数
        uint256 strt;   // 时间开始了
        uint256 keys;   // 按键
        uint256 eth;    // 总人口
        uint256 pot;    // 罐装(在回合期间)/最终金额支付给获胜者(在回合结束后)
        uint256 mask;   // 全球面具
        uint256 ico;    // 在ICO阶段发送的总eth
        uint256 icoGen; // ICO阶段的gen eth总量
        uint256 icoAvg; // ICO阶段的平均关键价格
    }
    struct TeamFee {
        uint256 gen;    // 支付给本轮关键持有人的购买百分比
        uint256 p3d;    // 支付给p3d持有人的购买百分比
    }
    struct PotSplit {
        uint256 gen;    // 支付给本轮关键持有人的底池百分比
        uint256 p3d;    // 付给p3d持有者的锅的百分比
    }
}

//==============================================================================
//  |  _      _ _ | _  .
//  |<(/_\/  (_(_||(_  .
//=======/======================================================================
library F3DKeysCalcShort {
    using SafeMath for *;
    /**
     * @dev 计算给定X eth时收到的密钥数
     * @param _curEth 合同中的当前eth数量
     * @param _newEth eth被用掉了
     * @return 购买的机票数量
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }

    /**
     * @dev 计算出售X键时收到的eth数量
     * @param _curKeys 当前存在的密钥数量
     * @param _sellKeys 您希望出售的钥匙数量
     * @return 收到的eth数量
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev 计算给定一定数量的eth会存在多少个密钥
     * @param _eth 合同中的道德
     * @return 将存在的密钥数
     */
    function keys(uint256 _eth)
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }

    /**
     * @dev 在给定一些密钥的情况下计算合同中的eth数量
     * @param _keys “契约”中的键数
     * @return 存在的道德
     */
    function eth(uint256 _keys)
        internal
        pure
        returns(uint256)
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

//==============================================================================
//  . _ _|_ _  _ |` _  _ _  _  .
//  || | | (/_| ~|~(_|(_(/__\  .
//==============================================================================

interface PlayerBookInterface {
    function getPlayerID(address _addr) external returns (uint256);
    function getPlayerName(uint256 _pID) external view returns (bytes32);
    function getPlayerLAff(uint256 _pID) external view returns (uint256);
    function getPlayerAddr(uint256 _pID) external view returns (address);
    function getNameFee() external view returns (uint256);
    function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256);
}


library NameFilter {
    /**
     * @dev 过滤名称字符串
     * -将大写转换为小写.
     * -确保它不以空格开始/结束
     * -确保它不包含连续的多个空格
     * -不能只是数字
     * -不能以0x开头
     * -将字符限制为A-Z,a-z,0-9和空格。
     * @return 以字节32格式重新处理的字符串
     */
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;

        //对不起限于32个字符
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // 确保它不以空格开头或以空格结尾
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // 确保前两个字符不是0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }

        // 创建一个bool来跟踪我们是否有非数字字符
        bool _hasNonNumber;

        // 转换和检查
        for (uint256 i = 0; i < _length; i++)
        {
            // 如果它的大写A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // 转换为小写a-z
                _temp[i] = byte(uint(_temp[i]) + 32);

                // 我们有一个非数字
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // 要求角色是一个空间
                    _temp[i] == 0x20 ||
                    // 或小写a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // 或0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // 确保连续两行不是空格
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");

                // 看看我们是否有一个数字以外的字符
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;
            }
        }

        require(_hasNonNumber == true, "string cannot be only numbers");

        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

/**
 * @title SafeMath v0.1.9
 * @dev 带有安全检查的数学运算会引发错误
 * - 添加 sqrt
 * - 添加 sq
 * - 添加 pwr
 * - 将断言更改为需要带有错误日志输出
 * - 删除div,它没用
 */
library SafeMath {

    /**
    * @dev 将两个数字相乘,抛出溢出。
    */
    function mul(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

    /**
    * @dev 减去两个数字,在溢出时抛出(即,如果减数大于减数)。
    */
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    /**
    * @dev 添加两个数字,溢出时抛出。
    */
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }

    /**
     * @dev 给出给定x的平方根.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y)
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }

    /**
     * @dev 给广场。将x乘以x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }

    /**
     * @dev x到y的力量
     */
    function pwr(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropTracker_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_","outputs":[{"name":"plyr","type":"uint256"},{"name":"team","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"strt","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"eth","type":"uint256"},{"name":"pot","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"},{"name":"icoGen","type":"uint256"},{"name":"icoAvg","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_laff","type":"uint256"}],"name":"receivePlayerInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"rndTmEth_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerVaults","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrRnds_","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rID","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"calcKeysReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"uint256"}],"name":"iWantXKeys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPot_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"win","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"lrnd","type":"uint256"},{"name":"laff","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"potSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerInfoByAddress","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","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":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"keysBought","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"},{"indexed":false,"name":"potAmount","type":"uint256"},{"indexed":false,"name":"airDropPot","type":"uint256"}],"name":"onEndTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onWithdrawAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onBuyAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amountAddedToPot","type":"uint256"}],"name":"onPotSwapDeposit","type":"event"}]

608060405260008054600160a060020a03191633178155600f6001819055610708600255600491909155805460ff1916905534801561003d57600080fd5b5060408051808201825260208082526000818301818152818052600d80845293517f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55517f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5583518085018552602d8152808301828152600180845285855291517ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c555517ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c65584518086018652603e808252818501848152600280865287875292517f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24955517f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24a5586518088018852602f808252818701868152600380885298885291517f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e25590517f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e35587518089018952818152808701868152868052600e80895291517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c55517fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d558851808a018a5291825281870186815294865280875290517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582075592517fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be9582085586518088018852818152808601858152928552838652517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f04815590517f9adb202b1492743bc00c81d33cdc6423fa8c79109027eb6a845391e8fc1f0482558551808701909652855284830182815293909152905290517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814455517fe0283e559c29e31ee7f56467acc9dd307779c843a883aeeb3bf5c6128c90814555614e568061034c6000396000f3006080604052600436106101c15763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036d57806306fdde0314610394578063079ce3271461041e5780630f15f4c01461043e57806310f01eba1461045357806311a09ae71461047457806324c33d33146104895780632660316e146105005780632ce219991461052f5780632e19ebdc14610560578063349cdcac146105785780633ccfd60b146105965780633ddd4698146105ab57806349cc635d146106075780635893d48114610631578063624ae5c01461064c5780636306643414610661578063685ffd8314610697578063747dff42146106ea57806382bfc739146107755780638f38f3091461079c5780638f7140ea146107aa578063921dec21146107c557806395d89b411461081857806398a0871d1461082d578063a2bccae914610844578063a65b37a114610885578063c519500e14610893578063c7e284b8146108ab578063ce89c80c146108c0578063cf808000146108db578063d53b2679146108f3578063d87574e014610908578063de7874f31461091d578063ed78cf4a14610977578063ee0b5d8b1461097f575b6101c9614d31565b600f5460009060ff16151560011461022d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214610284576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156102dc576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561032c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b610335836109d8565b33600090815260066020818152604080842054808552600890925290922001549194509250610368908390600286610c8c565b505050005b34801561037957600080fd5b50610382610ec6565b60408051918252519081900360200190f35b3480156103a057600080fd5b506103a9610f8b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e35781810151838201526020016103cb565b50505050905090810190601f1680156104105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042a57600080fd5b5061043c600435602435604435610fc2565b005b34801561044a57600080fd5b5061043c6111dc565b34801561045f57600080fd5b50610382600160a060020a036004351661130f565b34801561048057600080fd5b50610382611321565b34801561049557600080fd5b506104a1600435611327565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561050c57600080fd5b5061051b60043560243561138a565b604080519115158252519081900360200190f35b34801561053b57600080fd5b506105476004356113aa565b6040805192835260208301919091528051918290030190f35b34801561056c57600080fd5b506103826004356113c3565b34801561058457600080fd5b5061043c6004356024356044356113d5565b3480156105a257600080fd5b5061043c6115c1565b6040805160206004803580820135601f810184900484028501840190955284845261043c94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611950565b34801561061357600080fd5b5061043c600435600160a060020a0360243516604435606435611b17565b34801561063d57600080fd5b50610382600435602435611d08565b34801561065857600080fd5b50610382611d25565b34801561066d57600080fd5b50610679600435611d2b565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f810184900484028501840190955284845261043c943694929360249392840191908190840183828082843750949750508435955050505050602001351515611ed1565b3480156106f657600080fd5b506106ff611fc1565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561078157600080fd5b5061043c600160a060020a03600435166024356044356121bf565b61043c6004356024356123c9565b3480156107b657600080fd5b5061043c6004356024356125c0565b6040805160206004803580820135601f810184900484028501840190955284845261043c94369492936024939284019190819084018382808284375094975050843595505050505060200135151561269d565b34801561082457600080fd5b506103a961278d565b61043c600160a060020a03600435166024356127c4565b34801561085057600080fd5b5061085f6004356024356129e9565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043c600435602435612a1b565b34801561089f57600080fd5b50610547600435612c28565b3480156108b757600080fd5b50610382612c41565b3480156108cc57600080fd5b50610382600435602435612cd0565b3480156108e757600080fd5b50610382600435612d78565b3480156108ff57600080fd5b5061051b612e2a565b34801561091457600080fd5b50610382612e33565b34801561092957600080fd5b50610935600435612e39565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61043c612e80565b34801561098b57600080fd5b506109a0600160a060020a0360043516612efd565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109e0614d31565b336000908152600660205260408120549080821515610c8357604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59163e56556a99160248083019260209291908290030181600087803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b505050506040513d6020811015610a8f57600080fd5b5051604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018390529051919450736ed17ee485821cd47531f2e4c7b9ef8b48f2bab5916382e37b2c916024808201926020929091908290030181600087803b158015610b0257600080fd5b505af1158015610b16573d6000803e3d6000fd5b505050506040513d6020811015610b2c57600080fd5b5051604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018690529051919350736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59163e3c08adf916024808201926020929091908290030181600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505050506040513d6020811015610bc957600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c52576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c615750828114155b15610c7b5760008381526008602052604090206006018190555b845160010185525b50929392505050565b6005546002546000828152600b602052604090206004015442910181118015610cf757506000828152600b602052604090206002015481111580610cf757506000828152600b602052604090206002015481118015610cf757506000828152600b6020526040902054155b15610d0f57610d0a828734888888612fd2565b610ebe565b6000828152600b602052604090206002015481118015610d4157506000828152600b602052604090206003015460ff16155b15610e89576000828152600b60205260409020600301805460ff19166001179055610d6b836132df565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610eab903463ffffffff6136a216565b6000878152600860205260409020600301555b505050505050565b6005546002546000828152600b602052604081206004015490929142910181118015610f3457506000828152600b602052604090206002015481111580610f3457506000828152600b602052604090206002015481118015610f3457506000828152600b6020526040902054155b15610f7c576000828152600b6020526040902060050154610f7590670de0b6b3a764000090610f69908263ffffffff6136a216565b9063ffffffff61370316565b9250610f86565b6544364c5bb00092505b505090565b60408051808201909152600981527f576f726c64466f6d6f0000000000000000000000000000000000000000000000602082015281565b610fca614d31565b600f54600090819060ff161515600114611030576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611087576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b83633b9aca008110156110df576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561112f576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b33600090815260066020526040902054925086158061115e575060008381526008602052604090206001015487145b1561117c5760008381526008602052604090206006015491506111bb565b60008781526007602090815260408083205486845260089092529091206006015490925082146111bb5760008381526008602052604090206006018290555b6111c486613730565b95506111d38383888888613755565b50505050505050565b600054600160a060020a0316331461123e576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b600f5460ff1615611299576040805160e560020a62461bcd02815260206004820152601b60248201527f464f4d4f204672656520616c7265616479206163746976617465640000000000604482015290519081900360640190fd5b600f805460ff1916600190811790915560058190556002548154600092909252600b602052429091019081037f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d355610708017f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155565b60066020526000908152604090205481565b60045481565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969860ff90961697949693959294919390928c565b600a60209081526000928352604080842090915290825290205460ff1681565b600d602052600090815260409020805460019091015482565b60076020526000908152604090205481565b6113dd614d31565b600f5460009060ff161515600114611441576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611498576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b82633b9aca008110156114f0576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611540576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b33600090815260066020526040902054915085158061155e57508186145b1561157c5760008281526008602052604090206006015495506115a9565b60008281526008602052604090206006015486146115a95760008281526008602052604090206006018690555b6115b285613730565b9450610ebe8287878787613755565b6000806000806115cf614d31565b600f5460ff161515600114611630576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611687576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b60055433600090815260066020908152604080832054848452600b909252909120600201549196504295509350841180156116d457506000858152600b602052604090206003015460ff16155b80156116ed57506000858152600b602052604090205415155b15611893576000858152600b60205260409020600301805460ff19166001179055611717816132df565b905061172283613971565b9150600082111561177357600083815260086020526040808220549051600160a060020a039091169184156108fc02918591818181858888f19350505050158015611771573d6000803e3d6000fd5b505b83670de0b6b3a764000002816000015101816000018181525050828160200151018160200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc33600860008681526020019081526020016000206001015484846000015185602001518660400151876060015188608001518960a001518a60c001518b60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611949565b61189c83613971565b915060008211156118ed57600083815260086020526040808220549051600160a060020a039091169184156108fc02918591818181858888f193505050501580156118eb573d6000803e3d6000fd5b505b6000838152600860209081526040918290206001015482513381529182015280820184905260608101869052905184917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b5050505050565b600080808080803332146119ae576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b6119b7896139f8565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038c1660448301528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263aa4d490b9288926084808201939182900301818588803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b50505050506040513d6040811015611a7357600080fd5b508051602091820151600160a060020a0380891660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018a90524260a0870152915193975091955093508892909184917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a4505050505050505050565b33736ed17ee485821cd47531f2e4c7b9ef8b48f2bab514611ba8576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600660205260409020548414611be357600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611c0a5760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611c60576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611c8d5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611cba5760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611d02576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600c60209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600b60205260408120600201549091829182919042118015611d6757506000818152600b602052604090206003015460ff16155b8015611d8057506000818152600b602052604090205415155b15611ea1576000818152600b6020526040902054851415611e65576000818152600b6020526040902060070154611dee90606490611dc590601963ffffffff61420b16565b811515611dce57fe5b60008881526008602052604090206002015491900463ffffffff6136a216565b6000868152600960209081526040808320858452909152902060020154611e4790611e2990611e1d8986614282565b9063ffffffff61435016565b6000888152600860205260409020600301549063ffffffff6136a216565b60008781526008602052604090206004015491955093509150611ec9565b600085815260086020908152604080832060029081015460098452828520868652909352922090910154611e4790611e2990611e1d8986614282565b60008581526008602052604090206002810154600590910154611e4790611e299088906143b0565b509193909250565b60008080808080333214611f2f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b611f38896139f8565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018c90528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263745ea0c19288926084808201939182900301818588803b158015611a4857600080fd5b60008060008060008060008060008060008060008060006005549050600b60008281526020019081526020016000206009015481600b600084815260200190815260200160002060050154600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060040154600b600087815260200190815260200160002060070154600b600088815260200190815260200160002060000154600a02600b6000898152602001908152602001600020600101540160086000600b60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600b60008c815260200190815260200160002060000154815260200190815260200160002060010154600c60008b8152602001908152602001600020600080815260200190815260200160002054600c60008c815260200190815260200160002060006001815260200190815260200160002054600c60008d815260200190815260200160002060006002815260200190815260200160002054600c60008e8152602001908152602001600020600060038152602001908152602001600020546003546103e802600454019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b6121c7614d31565b600f54600090819060ff16151560011461222d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612284576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b83633b9aca008110156122dc576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561232c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b336000908152600660205260409020549250600160a060020a038716158061235c5750600160a060020a03871633145b1561237a5760008381526008602052604090206006015491506111bb565b600160a060020a0387166000908152600660208181526040808420548785526008909252909220015490925082146111bb5760008381526008602052604090206006018290556111c486613730565b6123d1614d31565b600f5460009060ff161515600114612435576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b33321461248c576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156124e4576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612534576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b61253d836109d8565b33600090815260066020526040902054909350915084158061255e57508185145b1561257c5760008281526008602052604090206006015494506125a9565b60008281526008602052604090206006015485146125a95760008281526008602052604090206006018590555b6125b284613730565b935061194982868686610c8c565b33736ed17ee485821cd47531f2e4c7b9ef8b48f2bab514612651576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600a6020908152604080832084845290915290205460ff161515612699576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b600080808080803332146126fb576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b612704896139f8565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018c90528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263c0942dfd9288926084808201939182900301818588803b158015611a4857600080fd5b60408051808201909152600281527f5746000000000000000000000000000000000000000000000000000000000000602082015281565b6127cc614d31565b600f54600090819060ff161515600114612832576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612889576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156128e1576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612931576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b61293a846109d8565b336000908152600660205260409020549094509250600160a060020a038616158061296d5750600160a060020a03861633145b1561298b5760008381526008602052604090206006015491506129d2565b600160a060020a0386166000908152600660208181526040808420548785526008909252909220015490925082146129d25760008381526008602052604090206006018290555b6129db85613730565b9450610ebe83838787610c8c565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612a23614d31565b600f54600090819060ff161515600114612a89576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612ae0576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca00811015612b38576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612b88576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b612b91846109d8565b336000908152600660205260409020549094509250851580612bc3575060008381526008602052604090206001015486145b15612be15760008381526008602052604090206006015491506129d2565b60008681526007602090815260408083205486845260089092529091206006015490925082146129d25760008381526008602052604090206006018290556129db85613730565b600e602052600090815260409020805460019091015482565b6005546000818152600b60205260408120600201549091904290811015612cc7576002546000838152600b602052604090206004015401811115612ca1576000828152600b6020526040902060020154610f75908263ffffffff61435016565b6002546000838152600b6020526040902060040154610f7591018263ffffffff61435016565b60009250610f86565b6002546000838152600b6020526040812060040154909142910181118015612d3a57506000848152600b602052604090206002015481111580612d3a57506000848152600b602052604090206002015481118015612d3a57506000848152600b6020526040902054155b15612d68576000848152600b6020526040902060060154612d61908463ffffffff61440d16565b9150612d71565b612d618361442e565b5092915050565b6005546002546000828152600b602052604081206004015490929142910181118015612de657506000828152600b602052604090206002015481111580612de657506000828152600b602052604090206002015481118015612de657506000828152600b6020526040902054155b15612e1a576000828152600b6020526040902060050154612e13908590610f69908263ffffffff6136a216565b9250612e23565b612e13846144a6565b5050919050565b600f5460ff1681565b60035481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600b6020526040902060070154612ea8903463ffffffff6136a216565b6000828152600b6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600554915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612f9390612f759086906143b0565b6000878152600860205260409020600301549063ffffffff6136a216565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b6000858152600960209081526040808320898452909152812060010154819081901515613006576130038885614513565b93505b6000898152600b602052604090206006015468056bc75e2d63100000118015613060575060008881526009602090815260408083208c8452909152902054670de0b6b3a76400009061305e908963ffffffff6136a216565b115b156130e75760008881526009602090815260408083208c845290915290205461309890670de0b6b3a76400009063ffffffff61435016565b92506130aa878463ffffffff61435016565b6000898152600860205260409020600301549092506130cf908363ffffffff6136a216565b60008981526008602052604090206003015591955085915b633b9aca008711156132d4576000898152600b6020526040902060060154613115908863ffffffff61440d16565b9050670de0b6b3a7640000811061318c57613130818a614572565b6000898152600b60205260409020548814613157576000898152600b602052604090208890555b6000898152600b60205260409020600101548514613184576000898152600b602052604090206001018590555b835160640184525b60045484516103e890910201845260008881526009602090815260408083208c84529091529020600101546131c890829063ffffffff6136a216565b60008981526009602090815260408083208d845290915290206001810191909155546131f59088906136a2565b60008981526009602090815260408083208d8452825280832093909355600b9052206005015461322c90829063ffffffff6136a216565b60008a8152600b6020526040902060058101919091556006015461325790889063ffffffff6136a216565b60008a8152600b6020908152604080832060060193909355600c81528282208883529052205461328e90889063ffffffff6136a216565b60008a8152600c602090815260408083208984529091529020556132b48988878761464e565b93506132c58989898989868a61474e565b93506132d48886898488614994565b505050505050505050565b6132e7614d31565b6005546000818152600b60205260408120805460018201546007909201549092808080808080606461332089601963ffffffff61420b16565b81151561332957fe5b049650606461333f89600363ffffffff61420b16565b81151561334857fe5b60008b8152600e60205260409020549190049650606490613370908a9063ffffffff61420b16565b81151561337957fe5b60008b8152600e602052604090206001015491900495506064906133a4908a9063ffffffff61420b16565b8115156133ad57fe5b0493506133c884611e1d87818a818e8e63ffffffff61435016565b60008c8152600b60205260409020600501549093506133f586670de0b6b3a764000063ffffffff61420b16565b8115156133fe57fe5b60008d8152600b6020526040902060050154919004925061344c90670de0b6b3a76400009061343490859063ffffffff61420b16565b81151561343d57fe5b8791900463ffffffff61435016565b9050600081111561347c57613467858263ffffffff61435016565b9450613479838263ffffffff6136a216565b92505b60008a81526008602052604090206002015461349f90889063ffffffff6136a216565b60008b8152600860205260408082206002019290925580549151600160a060020a039092169188156108fc0291899190818181858888f193505050501580156134ec573d6000803e3d6000fd5b5060008b8152600b602052604090206008015461351090839063ffffffff6136a216565b600b60008d815260200190815260200160002060080181905550600b60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506005600081548092919060010191905055508a806001019b505042600b60008d815260200190815260200160002060040181905550613673600254613667610708426136a290919063ffffffff16565b9063ffffffff6136a216565b60008c8152600b6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b818101828110156136fd576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600061372961372061371b858563ffffffff61435016565b6144a6565b611e1d856144a6565b9392505050565b6000808210806137405750600382115b1561374d57506002613750565b50805b919050565b6005546002546000828152600b6020526040902060040154429101811180156137c057506000828152600b6020526040902060020154811115806137c057506000828152600b6020526040902060020154811180156137c057506000828152600b6020526040902054155b156137f7576137d284611e1d89613971565b6000888152600860205260409020600301556137f2828886898988612fd2565b6111d3565b6000828152600b60205260409020600201548111801561382957506000828152600b602052604090206003015460ff16155b156111d3576000828152600b60205260409020600301805460ff19166001179055613853836132df565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600860205260408120600501548190613990908490614b02565b6000838152600860205260409020600481015460038201546002909201546139c292613667919063ffffffff6136a216565b905060008111156139ee5760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613a135750600084115b1515613a8f576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613a9e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613b0557508460018503815181101515613add57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613b81576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613b9057fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613cd357846001815181101515613bca57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613c47576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613c5657fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613cd3576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156141a35784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613d1057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613d84575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613d6557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613df1578482815181101515613d9757fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613dc857fe5b906020010190600160f860020a031916908160001a905350821515613dec57600192505b614198565b8482815181101515613dff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613ecf575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613e5b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613ecf575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613eb057fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613f79575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613f0557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613f79575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613f5a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613ff5576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561400357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156140e257848260010181518110151561403f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156140e2576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8215801561418e575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061411b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916108061418e575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061416f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561419857600192505b600190910190613cd8565b6001831515146141fd576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600082151561421c575060006136fd565b5081810281838281151561422c57fe5b04146136fd576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60008281526009602090815260408083208484528252808320600190810154600b8085528386206005810154938101548752600e8652938620548787529452600790920154670de0b6b3a76400009361433f939261433392909161430a9187916064916142f49163ffffffff61420b16565b8115156142fd57fe5b049063ffffffff61420b16565b81151561431357fe5b6000888152600b602052604090206008015491900463ffffffff6136a216565b9063ffffffff61420b16565b81151561434857fe5b049392505050565b6000828211156143aa576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600b9093529083206008015461372992670de0b6b3a7640000916143f79161420b565b81151561440057fe5b049063ffffffff61435016565b600061372961441b8461442e565b611e1d61442e868663ffffffff6136a216565b60006309502f906144966d03b2a1d15167e7c5699bfde00000611e1d6144917a0dac7055469777a6122ee4310dd6c14410500f29048400000000006136676b01027e72f1f12813088000006143338a670de0b6b3a764000063ffffffff61420b16565b614b99565b81151561449f57fe5b0492915050565b60006144b9670de0b6b3a7640000614bec565b61449660026144ec6144d986670de0b6b3a764000063ffffffff61420b16565b65886c8f6730709063ffffffff61420b16565b8115156144f557fe5b0461366761450286614bec565b6304a817c89063ffffffff61420b16565b61451b614d31565b6000838152600860205260409020600501541561454f5760008381526008602052604090206005015461454f908490614b02565b506005805460009384526008602052604090932001919091558051600a01815290565b6000818152600b6020526040812060020154429190821180156145a157506000838152600b6020526040902054155b156145c5576145be82613667600a670de0b6b3a7640000886142fd565b90506145f2565b6000838152600b60205260409020600201546145ef90613667600a670de0b6b3a7640000886142fd565b90505b61460461a8c08363ffffffff6136a216565b811015614624576000838152600b60205260409020600201819055611d02565b61463661a8c08363ffffffff6136a216565b6000848152600b602052604090206002015550505050565b614656614d31565b600080606461466c87600363ffffffff61420b16565b81151561467557fe5b60008054604051939092049450600160a060020a0390911691849181818185875af19250505015156146a657506000905b6000858152600d60205260409020600101546146e8906064906146d090899063ffffffff61420b16565b8115156146d957fe5b8391900463ffffffff6136a216565b90506000811115614743576000878152600b6020526040902060070154614715908263ffffffff6136a216565b6000888152600b602052604090206007015560c084015161473d90829063ffffffff6136a216565b60c08501525b509195945050505050565b614756614d31565b6000848152600d602052604081205481908190819060649061477f908c9063ffffffff61420b16565b81151561478857fe5b049350606461479e8b600f63ffffffff61420b16565b8115156147a757fe5b04925061481b61480e60646147db600d60008d8152602001908152602001600020600101548e61420b90919063ffffffff16565b8115156147e457fe5b0460646147f88e601263ffffffff61420b16565b81151561480157fe5b049063ffffffff6136a216565b8b9063ffffffff61435016565b995061482d8a8563ffffffff61435016565b91508a891415801561484f575060008981526008602052604090206001015415155b156148ef5760008981526008602052604090206004015461487790849063ffffffff6136a216565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614902565b6148ff848463ffffffff6136a216565b93505b61490e8c8c868a614bf8565b9050600081111561492c57614929848263ffffffff61435016565b93505b60008c8152600b602052604090206007015461495290613667848463ffffffff6136a216565b60008d8152600b602052604090206007015560e086015161497a90859063ffffffff6136a216565b60e087015250610100850152509198975050505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614b0e83836143b0565b90506000811115614b9457600083815260086020526040902060030154614b3c90829063ffffffff6136a216565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614b7690829063ffffffff6136a216565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614ba98460016136a2565b811515614bb257fe5b0490508291505b818110156139f2578091506002614bdb8285811515614bd457fe5b04836136a2565b811515614be457fe5b049050614bb9565b60006136fd828361420b565b6000848152600b602052604081206005015481908190614c2686670de0b6b3a764000063ffffffff61420b16565b811515614c2f57fe5b6000898152600b60205260409020600801549190049250614c5790839063ffffffff6136a216565b6000888152600b6020526040902060080155670de0b6b3a7640000614c82838663ffffffff61420b16565b811515614c8b57fe5b60008881526009602090815260408083208c8452825280832060020154600b90925290912060080154929091049250614cde91613667908490670de0b6b3a7640000906143f7908a63ffffffff61420b16565b60008781526009602090815260408083208b8452825280832060020193909355600b90522060050154614d2690670de0b6b3a76400009061343490859063ffffffff61420b16565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79202d20464f52205245414c20544849706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000a165627a7a723058200c216b1463a1e61efe8c5815d68997bc70ee3fb88341cc71bcc2502819a6316e0029

Deployed Bytecode

0x6080604052600436106101c15763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036d57806306fdde0314610394578063079ce3271461041e5780630f15f4c01461043e57806310f01eba1461045357806311a09ae71461047457806324c33d33146104895780632660316e146105005780632ce219991461052f5780632e19ebdc14610560578063349cdcac146105785780633ccfd60b146105965780633ddd4698146105ab57806349cc635d146106075780635893d48114610631578063624ae5c01461064c5780636306643414610661578063685ffd8314610697578063747dff42146106ea57806382bfc739146107755780638f38f3091461079c5780638f7140ea146107aa578063921dec21146107c557806395d89b411461081857806398a0871d1461082d578063a2bccae914610844578063a65b37a114610885578063c519500e14610893578063c7e284b8146108ab578063ce89c80c146108c0578063cf808000146108db578063d53b2679146108f3578063d87574e014610908578063de7874f31461091d578063ed78cf4a14610977578063ee0b5d8b1461097f575b6101c9614d31565b600f5460009060ff16151560011461022d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214610284576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156102dc576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561032c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b610335836109d8565b33600090815260066020818152604080842054808552600890925290922001549194509250610368908390600286610c8c565b505050005b34801561037957600080fd5b50610382610ec6565b60408051918252519081900360200190f35b3480156103a057600080fd5b506103a9610f8b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e35781810151838201526020016103cb565b50505050905090810190601f1680156104105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042a57600080fd5b5061043c600435602435604435610fc2565b005b34801561044a57600080fd5b5061043c6111dc565b34801561045f57600080fd5b50610382600160a060020a036004351661130f565b34801561048057600080fd5b50610382611321565b34801561049557600080fd5b506104a1600435611327565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561050c57600080fd5b5061051b60043560243561138a565b604080519115158252519081900360200190f35b34801561053b57600080fd5b506105476004356113aa565b6040805192835260208301919091528051918290030190f35b34801561056c57600080fd5b506103826004356113c3565b34801561058457600080fd5b5061043c6004356024356044356113d5565b3480156105a257600080fd5b5061043c6115c1565b6040805160206004803580820135601f810184900484028501840190955284845261043c94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611950565b34801561061357600080fd5b5061043c600435600160a060020a0360243516604435606435611b17565b34801561063d57600080fd5b50610382600435602435611d08565b34801561065857600080fd5b50610382611d25565b34801561066d57600080fd5b50610679600435611d2b565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f810184900484028501840190955284845261043c943694929360249392840191908190840183828082843750949750508435955050505050602001351515611ed1565b3480156106f657600080fd5b506106ff611fc1565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561078157600080fd5b5061043c600160a060020a03600435166024356044356121bf565b61043c6004356024356123c9565b3480156107b657600080fd5b5061043c6004356024356125c0565b6040805160206004803580820135601f810184900484028501840190955284845261043c94369492936024939284019190819084018382808284375094975050843595505050505060200135151561269d565b34801561082457600080fd5b506103a961278d565b61043c600160a060020a03600435166024356127c4565b34801561085057600080fd5b5061085f6004356024356129e9565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043c600435602435612a1b565b34801561089f57600080fd5b50610547600435612c28565b3480156108b757600080fd5b50610382612c41565b3480156108cc57600080fd5b50610382600435602435612cd0565b3480156108e757600080fd5b50610382600435612d78565b3480156108ff57600080fd5b5061051b612e2a565b34801561091457600080fd5b50610382612e33565b34801561092957600080fd5b50610935600435612e39565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b61043c612e80565b34801561098b57600080fd5b506109a0600160a060020a0360043516612efd565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109e0614d31565b336000908152600660205260408120549080821515610c8357604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59163e56556a99160248083019260209291908290030181600087803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b505050506040513d6020811015610a8f57600080fd5b5051604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018390529051919450736ed17ee485821cd47531f2e4c7b9ef8b48f2bab5916382e37b2c916024808201926020929091908290030181600087803b158015610b0257600080fd5b505af1158015610b16573d6000803e3d6000fd5b505050506040513d6020811015610b2c57600080fd5b5051604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018690529051919350736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59163e3c08adf916024808201926020929091908290030181600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505050506040513d6020811015610bc957600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c52576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c615750828114155b15610c7b5760008381526008602052604090206006018190555b845160010185525b50929392505050565b6005546002546000828152600b602052604090206004015442910181118015610cf757506000828152600b602052604090206002015481111580610cf757506000828152600b602052604090206002015481118015610cf757506000828152600b6020526040902054155b15610d0f57610d0a828734888888612fd2565b610ebe565b6000828152600b602052604090206002015481118015610d4157506000828152600b602052604090206003015460ff16155b15610e89576000828152600b60205260409020600301805460ff19166001179055610d6b836132df565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610eab903463ffffffff6136a216565b6000878152600860205260409020600301555b505050505050565b6005546002546000828152600b602052604081206004015490929142910181118015610f3457506000828152600b602052604090206002015481111580610f3457506000828152600b602052604090206002015481118015610f3457506000828152600b6020526040902054155b15610f7c576000828152600b6020526040902060050154610f7590670de0b6b3a764000090610f69908263ffffffff6136a216565b9063ffffffff61370316565b9250610f86565b6544364c5bb00092505b505090565b60408051808201909152600981527f576f726c64466f6d6f0000000000000000000000000000000000000000000000602082015281565b610fca614d31565b600f54600090819060ff161515600114611030576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611087576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b83633b9aca008110156110df576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561112f576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b33600090815260066020526040902054925086158061115e575060008381526008602052604090206001015487145b1561117c5760008381526008602052604090206006015491506111bb565b60008781526007602090815260408083205486845260089092529091206006015490925082146111bb5760008381526008602052604090206006018290555b6111c486613730565b95506111d38383888888613755565b50505050505050565b600054600160a060020a0316331461123e576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b600f5460ff1615611299576040805160e560020a62461bcd02815260206004820152601b60248201527f464f4d4f204672656520616c7265616479206163746976617465640000000000604482015290519081900360640190fd5b600f805460ff1916600190811790915560058190556002548154600092909252600b602052429091019081037f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d355610708017f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155565b60066020526000908152604090205481565b60045481565b600b60208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b01549a909b0154989a9799969860ff90961697949693959294919390928c565b600a60209081526000928352604080842090915290825290205460ff1681565b600d602052600090815260409020805460019091015482565b60076020526000908152604090205481565b6113dd614d31565b600f5460009060ff161515600114611441576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611498576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b82633b9aca008110156114f0576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611540576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b33600090815260066020526040902054915085158061155e57508186145b1561157c5760008281526008602052604090206006015495506115a9565b60008281526008602052604090206006015486146115a95760008281526008602052604090206006018690555b6115b285613730565b9450610ebe8287878787613755565b6000806000806115cf614d31565b600f5460ff161515600114611630576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214611687576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b60055433600090815260066020908152604080832054848452600b909252909120600201549196504295509350841180156116d457506000858152600b602052604090206003015460ff16155b80156116ed57506000858152600b602052604090205415155b15611893576000858152600b60205260409020600301805460ff19166001179055611717816132df565b905061172283613971565b9150600082111561177357600083815260086020526040808220549051600160a060020a039091169184156108fc02918591818181858888f19350505050158015611771573d6000803e3d6000fd5b505b83670de0b6b3a764000002816000015101816000018181525050828160200151018160200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc33600860008681526020019081526020016000206001015484846000015185602001518660400151876060015188608001518960a001518a60c001518b60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611949565b61189c83613971565b915060008211156118ed57600083815260086020526040808220549051600160a060020a039091169184156108fc02918591818181858888f193505050501580156118eb573d6000803e3d6000fd5b505b6000838152600860209081526040918290206001015482513381529182015280820184905260608101869052905184917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b5050505050565b600080808080803332146119ae576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b6119b7896139f8565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038c1660448301528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263aa4d490b9288926084808201939182900301818588803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b50505050506040513d6040811015611a7357600080fd5b508051602091820151600160a060020a0380891660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018a90524260a0870152915193975091955093508892909184917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a4505050505050505050565b33736ed17ee485821cd47531f2e4c7b9ef8b48f2bab514611ba8576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600660205260409020548414611be357600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611c0a5760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611c60576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611c8d5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611cba5760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611d02576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600c60209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600b60205260408120600201549091829182919042118015611d6757506000818152600b602052604090206003015460ff16155b8015611d8057506000818152600b602052604090205415155b15611ea1576000818152600b6020526040902054851415611e65576000818152600b6020526040902060070154611dee90606490611dc590601963ffffffff61420b16565b811515611dce57fe5b60008881526008602052604090206002015491900463ffffffff6136a216565b6000868152600960209081526040808320858452909152902060020154611e4790611e2990611e1d8986614282565b9063ffffffff61435016565b6000888152600860205260409020600301549063ffffffff6136a216565b60008781526008602052604090206004015491955093509150611ec9565b600085815260086020908152604080832060029081015460098452828520868652909352922090910154611e4790611e2990611e1d8986614282565b60008581526008602052604090206002810154600590910154611e4790611e299088906143b0565b509193909250565b60008080808080333214611f2f576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b611f38896139f8565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018c90528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263745ea0c19288926084808201939182900301818588803b158015611a4857600080fd5b60008060008060008060008060008060008060008060006005549050600b60008281526020019081526020016000206009015481600b600084815260200190815260200160002060050154600b600085815260200190815260200160002060020154600b600086815260200190815260200160002060040154600b600087815260200190815260200160002060070154600b600088815260200190815260200160002060000154600a02600b6000898152602001908152602001600020600101540160086000600b60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600b60008c815260200190815260200160002060000154815260200190815260200160002060010154600c60008b8152602001908152602001600020600080815260200190815260200160002054600c60008c815260200190815260200160002060006001815260200190815260200160002054600c60008d815260200190815260200160002060006002815260200190815260200160002054600c60008e8152602001908152602001600020600060038152602001908152602001600020546003546103e802600454019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b6121c7614d31565b600f54600090819060ff16151560011461222d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612284576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b83633b9aca008110156122dc576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561232c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b336000908152600660205260409020549250600160a060020a038716158061235c5750600160a060020a03871633145b1561237a5760008381526008602052604090206006015491506111bb565b600160a060020a0387166000908152600660208181526040808420548785526008909252909220015490925082146111bb5760008381526008602052604090206006018290556111c486613730565b6123d1614d31565b600f5460009060ff161515600114612435576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b33321461248c576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156124e4576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612534576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b61253d836109d8565b33600090815260066020526040902054909350915084158061255e57508185145b1561257c5760008281526008602052604090206006015494506125a9565b60008281526008602052604090206006015485146125a95760008281526008602052604090206006018590555b6125b284613730565b935061194982868686610c8c565b33736ed17ee485821cd47531f2e4c7b9ef8b48f2bab514612651576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600a6020908152604080832084845290915290205460ff161515612699576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b600080808080803332146126fb576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b612704896139f8565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018c90528a1515606483015282519399509750349650736ed17ee485821cd47531f2e4c7b9ef8b48f2bab59263c0942dfd9288926084808201939182900301818588803b158015611a4857600080fd5b60408051808201909152600281527f5746000000000000000000000000000000000000000000000000000000000000602082015281565b6127cc614d31565b600f54600090819060ff161515600114612832576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612889576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca008110156128e1576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612931576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b61293a846109d8565b336000908152600660205260409020549094509250600160a060020a038616158061296d5750600160a060020a03861633145b1561298b5760008381526008602052604090206006015491506129d2565b600160a060020a0386166000908152600660208181526040808420548785526008909252909220015490925082146129d25760008381526008602052604090206006018290555b6129db85613730565b9450610ebe83838787610c8c565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612a23614d31565b600f54600090819060ff161515600114612a89576040805160e560020a62461bcd0281526020600482015260296024820152600080516020614deb8339815191526044820152600080516020614d8b833981519152606482015290519081900360840190fd5b333214612ae0576040805160e560020a62461bcd0281526020600482015260266024820152600080516020614dab833981519152604482015260d060020a65532054494d4502606482015290519081900360840190fd5b34633b9aca00811015612b38576040805160e560020a62461bcd0281526020600482015260216024820152600080516020614dcb833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612b88576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614e0b833981519152604482015290519081900360640190fd5b612b91846109d8565b336000908152600660205260409020549094509250851580612bc3575060008381526008602052604090206001015486145b15612be15760008381526008602052604090206006015491506129d2565b60008681526007602090815260408083205486845260089092529091206006015490925082146129d25760008381526008602052604090206006018290556129db85613730565b600e602052600090815260409020805460019091015482565b6005546000818152600b60205260408120600201549091904290811015612cc7576002546000838152600b602052604090206004015401811115612ca1576000828152600b6020526040902060020154610f75908263ffffffff61435016565b6002546000838152600b6020526040902060040154610f7591018263ffffffff61435016565b60009250610f86565b6002546000838152600b6020526040812060040154909142910181118015612d3a57506000848152600b602052604090206002015481111580612d3a57506000848152600b602052604090206002015481118015612d3a57506000848152600b6020526040902054155b15612d68576000848152600b6020526040902060060154612d61908463ffffffff61440d16565b9150612d71565b612d618361442e565b5092915050565b6005546002546000828152600b602052604081206004015490929142910181118015612de657506000828152600b602052604090206002015481111580612de657506000828152600b602052604090206002015481118015612de657506000828152600b6020526040902054155b15612e1a576000828152600b6020526040902060050154612e13908590610f69908263ffffffff6136a216565b9250612e23565b612e13846144a6565b5050919050565b600f5460ff1681565b60035481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600b6020526040902060070154612ea8903463ffffffff6136a216565b6000828152600b6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600554915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612f9390612f759086906143b0565b6000878152600860205260409020600301549063ffffffff6136a216565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b6000858152600960209081526040808320898452909152812060010154819081901515613006576130038885614513565b93505b6000898152600b602052604090206006015468056bc75e2d63100000118015613060575060008881526009602090815260408083208c8452909152902054670de0b6b3a76400009061305e908963ffffffff6136a216565b115b156130e75760008881526009602090815260408083208c845290915290205461309890670de0b6b3a76400009063ffffffff61435016565b92506130aa878463ffffffff61435016565b6000898152600860205260409020600301549092506130cf908363ffffffff6136a216565b60008981526008602052604090206003015591955085915b633b9aca008711156132d4576000898152600b6020526040902060060154613115908863ffffffff61440d16565b9050670de0b6b3a7640000811061318c57613130818a614572565b6000898152600b60205260409020548814613157576000898152600b602052604090208890555b6000898152600b60205260409020600101548514613184576000898152600b602052604090206001018590555b835160640184525b60045484516103e890910201845260008881526009602090815260408083208c84529091529020600101546131c890829063ffffffff6136a216565b60008981526009602090815260408083208d845290915290206001810191909155546131f59088906136a2565b60008981526009602090815260408083208d8452825280832093909355600b9052206005015461322c90829063ffffffff6136a216565b60008a8152600b6020526040902060058101919091556006015461325790889063ffffffff6136a216565b60008a8152600b6020908152604080832060060193909355600c81528282208883529052205461328e90889063ffffffff6136a216565b60008a8152600c602090815260408083208984529091529020556132b48988878761464e565b93506132c58989898989868a61474e565b93506132d48886898488614994565b505050505050505050565b6132e7614d31565b6005546000818152600b60205260408120805460018201546007909201549092808080808080606461332089601963ffffffff61420b16565b81151561332957fe5b049650606461333f89600363ffffffff61420b16565b81151561334857fe5b60008b8152600e60205260409020549190049650606490613370908a9063ffffffff61420b16565b81151561337957fe5b60008b8152600e602052604090206001015491900495506064906133a4908a9063ffffffff61420b16565b8115156133ad57fe5b0493506133c884611e1d87818a818e8e63ffffffff61435016565b60008c8152600b60205260409020600501549093506133f586670de0b6b3a764000063ffffffff61420b16565b8115156133fe57fe5b60008d8152600b6020526040902060050154919004925061344c90670de0b6b3a76400009061343490859063ffffffff61420b16565b81151561343d57fe5b8791900463ffffffff61435016565b9050600081111561347c57613467858263ffffffff61435016565b9450613479838263ffffffff6136a216565b92505b60008a81526008602052604090206002015461349f90889063ffffffff6136a216565b60008b8152600860205260408082206002019290925580549151600160a060020a039092169188156108fc0291899190818181858888f193505050501580156134ec573d6000803e3d6000fd5b5060008b8152600b602052604090206008015461351090839063ffffffff6136a216565b600b60008d815260200190815260200160002060080181905550600b60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e0018181525050838d60c0018181525050828d60a00181815250506005600081548092919060010191905055508a806001019b505042600b60008d815260200190815260200160002060040181905550613673600254613667610708426136a290919063ffffffff16565b9063ffffffff6136a216565b60008c8152600b6020526040902060028101919091556007018390558c9b505050505050505050505050919050565b818101828110156136fd576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600061372961372061371b858563ffffffff61435016565b6144a6565b611e1d856144a6565b9392505050565b6000808210806137405750600382115b1561374d57506002613750565b50805b919050565b6005546002546000828152600b6020526040902060040154429101811180156137c057506000828152600b6020526040902060020154811115806137c057506000828152600b6020526040902060020154811180156137c057506000828152600b6020526040902054155b156137f7576137d284611e1d89613971565b6000888152600860205260409020600301556137f2828886898988612fd2565b6111d3565b6000828152600b60205260409020600201548111801561382957506000828152600b602052604090206003015460ff16155b156111d3576000828152600b60205260409020600301805460ff19166001179055613853836132df565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600860205260408120600501548190613990908490614b02565b6000838152600860205260409020600481015460038201546002909201546139c292613667919063ffffffff6136a216565b905060008111156139ee5760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b8051600090829082808060208411801590613a135750600084115b1515613a8f576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613a9e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613b0557508460018503815181101515613add57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613b81576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613b9057fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613cd357846001815181101515613bca57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613c47576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613c5657fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613cd3576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156141a35784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613d1057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613d84575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613d6557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613df1578482815181101515613d9757fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613dc857fe5b906020010190600160f860020a031916908160001a905350821515613dec57600192505b614198565b8482815181101515613dff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613ecf575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613e5b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613ecf575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613eb057fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613f79575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613f0557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613f79575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613f5a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613ff5576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561400357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156140e257848260010181518110151561403f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141515156140e2576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8215801561418e575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061411b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916108061418e575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061416f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561419857600192505b600190910190613cd8565b6001831515146141fd576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600082151561421c575060006136fd565b5081810281838281151561422c57fe5b04146136fd576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60008281526009602090815260408083208484528252808320600190810154600b8085528386206005810154938101548752600e8652938620548787529452600790920154670de0b6b3a76400009361433f939261433392909161430a9187916064916142f49163ffffffff61420b16565b8115156142fd57fe5b049063ffffffff61420b16565b81151561431357fe5b6000888152600b602052604090206008015491900463ffffffff6136a216565b9063ffffffff61420b16565b81151561434857fe5b049392505050565b6000828211156143aa576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600b9093529083206008015461372992670de0b6b3a7640000916143f79161420b565b81151561440057fe5b049063ffffffff61435016565b600061372961441b8461442e565b611e1d61442e868663ffffffff6136a216565b60006309502f906144966d03b2a1d15167e7c5699bfde00000611e1d6144917a0dac7055469777a6122ee4310dd6c14410500f29048400000000006136676b01027e72f1f12813088000006143338a670de0b6b3a764000063ffffffff61420b16565b614b99565b81151561449f57fe5b0492915050565b60006144b9670de0b6b3a7640000614bec565b61449660026144ec6144d986670de0b6b3a764000063ffffffff61420b16565b65886c8f6730709063ffffffff61420b16565b8115156144f557fe5b0461366761450286614bec565b6304a817c89063ffffffff61420b16565b61451b614d31565b6000838152600860205260409020600501541561454f5760008381526008602052604090206005015461454f908490614b02565b506005805460009384526008602052604090932001919091558051600a01815290565b6000818152600b6020526040812060020154429190821180156145a157506000838152600b6020526040902054155b156145c5576145be82613667600a670de0b6b3a7640000886142fd565b90506145f2565b6000838152600b60205260409020600201546145ef90613667600a670de0b6b3a7640000886142fd565b90505b61460461a8c08363ffffffff6136a216565b811015614624576000838152600b60205260409020600201819055611d02565b61463661a8c08363ffffffff6136a216565b6000848152600b602052604090206002015550505050565b614656614d31565b600080606461466c87600363ffffffff61420b16565b81151561467557fe5b60008054604051939092049450600160a060020a0390911691849181818185875af19250505015156146a657506000905b6000858152600d60205260409020600101546146e8906064906146d090899063ffffffff61420b16565b8115156146d957fe5b8391900463ffffffff6136a216565b90506000811115614743576000878152600b6020526040902060070154614715908263ffffffff6136a216565b6000888152600b602052604090206007015560c084015161473d90829063ffffffff6136a216565b60c08501525b509195945050505050565b614756614d31565b6000848152600d602052604081205481908190819060649061477f908c9063ffffffff61420b16565b81151561478857fe5b049350606461479e8b600f63ffffffff61420b16565b8115156147a757fe5b04925061481b61480e60646147db600d60008d8152602001908152602001600020600101548e61420b90919063ffffffff16565b8115156147e457fe5b0460646147f88e601263ffffffff61420b16565b81151561480157fe5b049063ffffffff6136a216565b8b9063ffffffff61435016565b995061482d8a8563ffffffff61435016565b91508a891415801561484f575060008981526008602052604090206001015415155b156148ef5760008981526008602052604090206004015461487790849063ffffffff6136a216565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614902565b6148ff848463ffffffff6136a216565b93505b61490e8c8c868a614bf8565b9050600081111561492c57614929848263ffffffff61435016565b93505b60008c8152600b602052604090206007015461495290613667848463ffffffff6136a216565b60008d8152600b602052604090206007015560e086015161497a90859063ffffffff6136a216565b60e087015250610100850152509198975050505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614b0e83836143b0565b90506000811115614b9457600083815260086020526040902060030154614b3c90829063ffffffff6136a216565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614b7690829063ffffffff6136a216565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614ba98460016136a2565b811515614bb257fe5b0490508291505b818110156139f2578091506002614bdb8285811515614bd457fe5b04836136a2565b811515614be457fe5b049050614bb9565b60006136fd828361420b565b6000848152600b602052604081206005015481908190614c2686670de0b6b3a764000063ffffffff61420b16565b811515614c2f57fe5b6000898152600b60205260409020600801549190049250614c5790839063ffffffff6136a216565b6000888152600b6020526040902060080155670de0b6b3a7640000614c82838663ffffffff61420b16565b811515614c8b57fe5b60008881526009602090815260408083208c8452825280832060020154600b90925290912060080154929091049250614cde91613667908490670de0b6b3a7640000906143f7908a63ffffffff61420b16565b60008781526009602090815260408083208b8452825280832060020193909355600b90522060050154614d2690670de0b6b3a76400009061343490859063ffffffff61420b16565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79202d20464f52205245414c20544849706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000a165627a7a723058200c216b1463a1e61efe8c5815d68997bc70ee3fb88341cc71bcc2502819a6316e0029

Swarm Source

bzzr://0c216b1463a1e61efe8c5815d68997bc70ee3fb88341cc71bcc2502819a6316e

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.