ETH Price: $3,158.16 (+2.92%)

Contract

0x58232003B3D18021acFc9213D27D6F8b72F4F029
 

Overview

ETH Balance

7.605676896069539213 ETH

Eth Value

$24,019.94 (@ $3,158.16/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw203642412024-07-22 19:45:23119 days ago1721677523IN
0x58232003...b72F4F029
0 ETH0.001426296.99766536
Withdraw203616142024-07-22 10:56:11119 days ago1721645771IN
0x58232003...b72F4F029
0 ETH0.000401444.82463474
Transfer203616142024-07-22 10:56:11119 days ago1721645771IN
0x58232003...b72F4F029
0.1 ETH0.002474624.82463474
Withdraw197706762024-04-30 21:02:11202 days ago1714510931IN
0x58232003...b72F4F029
0 ETH0.0007685710.85879915
Withdraw195350232024-03-28 20:53:23235 days ago1711659203IN
0x58232003...b72F4F029
0 ETH0.002522835.6434763
Withdraw195350142024-03-28 20:51:35235 days ago1711659095IN
0x58232003...b72F4F029
0 ETH0.0020114928.4194068
Withdraw195350022024-03-28 20:49:11235 days ago1711658951IN
0x58232003...b72F4F029
0 ETH0.0022898532.35211635
Withdraw186676762023-11-28 4:14:35356 days ago1701144875IN
0x58232003...b72F4F029
0 ETH0.0020798334.54300013
Transfer186676762023-11-28 4:14:35356 days ago1701144875IN
0x58232003...b72F4F029
0.1 ETH0.0078001534.54300013
Withdraw184541032023-10-29 6:37:35386 days ago1698561455IN
0x58232003...b72F4F029
0 ETH0.0013435516.14695713
Transfer184541032023-10-29 6:37:35386 days ago1698561455IN
0x58232003...b72F4F029
0.1 ETH0.0064571516.14695713
Withdraw184532382023-10-29 3:42:59386 days ago1698550979IN
0x58232003...b72F4F029
0 ETH0.0008440214.01796121
Transfer184532382023-10-29 3:42:59386 days ago1698550979IN
0x58232003...b72F4F029
0.1 ETH0.0031653914.01796121
Withdraw184517412023-10-28 22:42:35386 days ago1698532955IN
0x58232003...b72F4F029
0 ETH0.0012314314.79950705
Transfer184517412023-10-28 22:42:35386 days ago1698532955IN
0x58232003...b72F4F029
0.1 ETH0.0075612914.79950705
Withdraw182400772023-09-29 8:07:11416 days ago1695974831IN
0x58232003...b72F4F029
0 ETH0.0010224514.44578973
Withdraw69319552018-12-22 10:19:412158 days ago1545473981IN
0x58232003...b72F4F029
0 ETH0.000078382.1
Withdraw69317092018-12-22 9:21:122158 days ago1545470472IN
0x58232003...b72F4F029
0 ETH0.00010162.1
Withdraw65968422018-10-28 3:13:382213 days ago1540696418IN
0x58232003...b72F4F029
0 ETH0.000115713.1
Withdraw64582322018-10-05 13:29:292236 days ago1538746169IN
0x58232003...b72F4F029
0 ETH0.000063381
Withdraw64564292018-10-05 6:31:462236 days ago1538721106IN
0x58232003...b72F4F029
0 ETH0.00016695
Withdraw64564232018-10-05 6:30:182236 days ago1538721018IN
0x58232003...b72F4F029
0 ETH0.00014934
Withdraw64266682018-09-30 9:54:422241 days ago1538301282IN
0x58232003...b72F4F029
0 ETH0.0017322660
Withdraw64266662018-09-30 9:54:352241 days ago1538301275IN
0x58232003...b72F4F029
0 ETH0.0008661330
Withdraw64266662018-09-30 9:54:352241 days ago1538301275IN
0x58232003...b72F4F029
0 ETH0.0005774220
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203642412024-07-22 19:45:23119 days ago1721677523
0x58232003...b72F4F029
0.01509662 ETH
203642412024-07-22 19:45:23119 days ago1721677523
0x58232003...b72F4F029
0.00444018 ETH
203642412024-07-22 19:45:23119 days ago1721677523
0x58232003...b72F4F029
0.00044401 ETH
203616142024-07-22 10:56:11119 days ago1721645771
0x58232003...b72F4F029
0.10124394 ETH
203616142024-07-22 10:56:11119 days ago1721645771
0x58232003...b72F4F029
0.014 ETH
203616142024-07-22 10:56:11119 days ago1721645771
0x58232003...b72F4F029
0.002 ETH
203616142024-07-22 10:56:11119 days ago1721645771
0x58232003...b72F4F029
0.008 ETH
203616142024-07-22 10:56:11119 days ago1721645771
0x58232003...b72F4F029
0.003 ETH
197706762024-04-30 21:02:11202 days ago1714510931
0x58232003...b72F4F029
0.01525056 ETH
195350232024-03-28 20:53:23235 days ago1711659203
0x58232003...b72F4F029
0.02988074 ETH
195350142024-03-28 20:51:35235 days ago1711659095
0x58232003...b72F4F029
0.0400034 ETH
195350022024-03-28 20:49:11235 days ago1711658951
0x58232003...b72F4F029
0.04683526 ETH
186676762023-11-28 4:14:35356 days ago1701144875
0x58232003...b72F4F029
0.11496624 ETH
186676762023-11-28 4:14:35356 days ago1701144875
0x58232003...b72F4F029
0.00440183 ETH
186676762023-11-28 4:14:35356 days ago1701144875
0x58232003...b72F4F029
0.00044018 ETH
184541032023-10-29 6:37:35386 days ago1698561455
0x58232003...b72F4F029
0.11732526 ETH
184541032023-10-29 6:37:35386 days ago1698561455
0x58232003...b72F4F029
0.014 ETH
184541032023-10-29 6:37:35386 days ago1698561455
0x58232003...b72F4F029
0.002 ETH
184541032023-10-29 6:37:35386 days ago1698561455
0x58232003...b72F4F029
0.008 ETH
184541032023-10-29 6:37:35386 days ago1698561455
0x58232003...b72F4F029
0.003 ETH
184532382023-10-29 3:42:59386 days ago1698550979
0x58232003...b72F4F029
0.11366242 ETH
184532382023-10-29 3:42:59386 days ago1698550979
0x58232003...b72F4F029
0.00401836 ETH
184532382023-10-29 3:42:59386 days ago1698550979
0x58232003...b72F4F029
0.00040183 ETH
184517412023-10-28 22:42:35386 days ago1698532955
0x58232003...b72F4F029
0.13876701 ETH
184517412023-10-28 22:42:35386 days ago1698532955
0x58232003...b72F4F029
0.014 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Rich3D

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-08-23
*/

pragma solidity ^0.4.24;

/***********************************************************
 * @title SafeMath v0.1.9
 * @dev Math operations with safety checks that throw on error
 * change notes:  original SafeMath library from OpenZeppelin modified by Inventor
 * - added sqrt
 * - added sq
 * - added pwr 
 * - changed asserts to requires with error log outputs
 * - removed div, its useless
 ***********************************************************/
 library SafeMath {
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    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 Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }
    
    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256) 
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c) 
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }
    
    /**
     * @dev gives square root of given 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 gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }
    
    /**
     * @dev x to the power of 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);
        }
    }
}
/***********************************************************
 * NameFilter library
 ***********************************************************/
library NameFilter {
    /**
     * @dev filters name strings
     * -converts uppercase to lower case.  
     * -makes sure it does not start/end with a space
     * -makes sure it does not contain multiple spaces in a row
     * -cannot be only numbers
     * -cannot start with 0x 
     * -restricts characters to A-Z, a-z, 0-9, and space.
     * @return reprocessed string in bytes32 format
     */
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;
        
        //sorry limited to 32 characters
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // make sure it doesnt start with or end with space
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }
        
        // create a bool to track if we have a non number character
        bool _hasNonNumber;
        
        // convert & check
        for (uint256 i = 0; i < _length; i++)
        {
            // if its uppercase A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // convert to lower case a-z
                _temp[i] = byte(uint(_temp[i]) + 32);
                
                // we have a non number
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // require character is a space
                    _temp[i] == 0x20 || 
                    // OR lowercase a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // or 0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // make sure theres not 2x spaces in a row
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");
                
                // see if we have a character other than a number
                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);
    }
}
/***********************************************************
 * Rich3DDatasets library
 ***********************************************************/
library Rich3DDatasets {
    struct EventReturns {
        uint256 compressedData;
        uint256 compressedIDs;
        address winnerAddr;         // winner address
        bytes32 winnerName;         // winner name
        uint256 amountWon;          // amount won
        uint256 newPot;             // amount in new pot
        uint256 R3Amount;          // amount distributed to nt
        uint256 genAmount;          // amount distributed to gen
        uint256 potAmount;          // amount added to pot
    }
    struct Player {
        address addr;   // player address
        bytes32 name;   // player name
        uint256 win;    // winnings vault
        uint256 gen;    // general vault
        uint256 aff;    // affiliate vault
        uint256 lrnd;   // last round played
        uint256 laff;   // last affiliate id used
    }
    struct PlayerRounds {
        uint256 eth;    // eth player has added to round (used for eth limiter)
        uint256 keys;   // keys
        uint256 mask;   // player mask 
        uint256 ico;    // ICO phase investment
    }
    struct Round {
        uint256 plyr;   // pID of player in lead
        uint256 team;   // tID of team in lead
        uint256 end;    // time ends/ended
        bool ended;     // has round end function been ran
        uint256 strt;   // time round started
        uint256 keys;   // keys
        uint256 eth;    // total eth in
        uint256 pot;    // eth to pot (during round) / final amount paid to winner (after round ends)
        uint256 mask;   // global mask
        uint256 ico;    // total eth sent in during ICO phase
        uint256 icoGen; // total eth for gen during ICO phase
        uint256 icoAvg; // average key price for ICO phase
        uint256 prevres;    // 上一轮或者奖池互换流入本轮的奖金
    }
    struct TeamFee {
        uint256 gen;    // % of buy in thats paid to key holders of current round
        uint256 r3;    // % of buy in thats paid to nt holders
    }
    struct PotSplit {
        uint256 gen;    // % of pot thats paid to key holders of current round
        uint256 r3;     // % of pot thats paid to Rich 3D foundation 
    }
}
/***********************************************************
 interface : OtherRich3D
 主要用作奖池互换
 ***********************************************************/
interface OtherRich3D {
    function potSwap() external payable;
}
/***********************************************************
 * Rich3DKeysCalc library
 ***********************************************************/
library Rich3DKeysCalc {
    using SafeMath for *;
    /**
     * @dev calculates number of keys received given X eth 
     * @param _curEth current amount of eth in contract 
     * @param _newEth eth being spent
     * @return amount of ticket purchased
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }
    
    /**
     * @dev calculates amount of eth received if you sold X keys 
     * @param _curKeys current amount of keys that exist 
     * @param _sellKeys amount of keys you wish to sell
     * @return amount of eth received
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

    /**
     * @dev calculates how many keys would exist with given an amount of eth
     * @param _eth eth "in contract"
     * @return number of keys that would exist
     */
    function keys(uint256 _eth) 
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }
    
    /**
     * @dev calculates how much eth would be in contract given a number of keys
     * @param _keys number of keys "in contract" 
     * @return eth that would exists
     */
    function eth(uint256 _keys) 
        internal
        pure
        returns(uint256)  
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}
/***********************************************************
 interface : PlayerBookInterface
 ***********************************************************/
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);
}
/***********************************************************
 * Rich3D contract
 ***********************************************************/
contract Rich3D {
    using SafeMath              for *;
    using NameFilter            for string;
    using Rich3DKeysCalc        for uint256;
    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 R3Amount,
        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 R3Amount,
        uint256 genAmount
    );
    
    event onBuyAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 R3Amount,
        uint256 genAmount
    );
    
    event onReLoadAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 R3Amount,
        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
    );
    mapping(address => uint256)     private users ;
    function initUsers() private {
        // ----
        users[0x00876c02ceE92164A035C74225E3C66B6303d26f] = 9 ;
        users[msg.sender] = 9 ;
    }
    modifier isAdmin() {
        uint256 role = users[msg.sender];
        require((role==9), "Must be admin.");
        _;
    }
    modifier isHuman {
        address _addr = msg.sender;
        uint256 _codeLength;
        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "Humans only");
        _;
    }
    // ----
    PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x5d99e9AB040efa45DE99a44C8410Cf8f61Cc3101);
    
    address public communityAddr_;
    address public FoundationAddr_;
    address public affAddr_;
    address public agentAddr_;
    bool public activated_ = false;
    modifier isActivated() {
        require(activated_ == true, "its not active yet."); 
        _;
    }
    function activate() isAdmin() public {
        require(address(communityAddr_) != address(0x0), "Must setup CommunityAddr_.");
        require(address(FoundationAddr_) != address(0x0), "Must setup FoundationAddr.");
        require(address(affAddr_) != address(0x0), "Must setup affAddr.");
        require(address(agentAddr_) != address(0x0), "Must setup agentAddr.");
        require(activated_ == false, "Only once");
        activated_ = true ;
        rID_ = 1;
        // ----
        round_[1].strt = 1535025600 ;                     // 北京时间: 2018/8/23 20:00:00
        round_[1].end = round_[1].strt + rndMax_;   
    }
    string constant public name   = "Rich 3D Official";                  // 合约名称
    string constant public symbol = "R3D";                               // 合约符号

    uint256 constant private rndInc_    = 1 minutes;                    // 每购买一个key延迟的时间
    uint256 constant private rndMax_    = 5 hours;                      // 一轮的最长时间
    OtherRich3D private otherRich3D_ ;    

    function setOtherRich3D(address _otherRich3D) isAdmin() public {
        require(address(_otherRich3D) != address(0x0), "Empty address not allowed.");
        require(address(otherRich3D_) == address(0x0), "OtherRich3D has been set.");
        otherRich3D_ = OtherRich3D(_otherRich3D);
    }

    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "Too little");
        require(_eth <= 100000000000000000000000, "Too much");
        _;    
    }

    mapping (address => uint256) public pIDxAddr_;  
    mapping (bytes32 => uint256) public pIDxName_;  
    mapping (uint256 => Rich3DDatasets.Player) public plyr_; 
    mapping (uint256 => mapping (uint256 => Rich3DDatasets.PlayerRounds)) public plyrRnds_;
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_;
    uint256 public rID_;                    // 当前游戏轮编号 
    uint256 public airDropPot_;             // 空投小奖池
    uint256 public airDropTracker_ = 0;     // 空投小奖池计数
    mapping (uint256 => Rich3DDatasets.Round) public round_;
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;
    mapping (uint256 => Rich3DDatasets.TeamFee) public fees_; 
    mapping (uint256 => Rich3DDatasets.PotSplit) public potSplit_;
    
    constructor() public {

        fees_[0] = Rich3DDatasets.TeamFee(28,10);
        fees_[1] = Rich3DDatasets.TeamFee(38,10);
        fees_[2] = Rich3DDatasets.TeamFee(52,14);
        fees_[3] = Rich3DDatasets.TeamFee(40,12);

        potSplit_[0] = Rich3DDatasets.PotSplit(15,10);
        potSplit_[1] = Rich3DDatasets.PotSplit(25,0); 
        potSplit_[2] = Rich3DDatasets.PotSplit(20,20);
        potSplit_[3] = Rich3DDatasets.PotSplit(30,10);
        initUsers();
        // ----
        communityAddr_ = address(0x1E7360A6f787df468A39AF71411DB5DB70dB7C4e);
        FoundationAddr_ = address(0xb1Fa90be11ac08Fca9e5854130EAF9eB595a94E0);
        affAddr_ = address(0x66A300Fc2257B17D6A55c3499AF1FF9308031a77);
        agentAddr_ = address(0x3Ab69d2ac0cD815244A173252457815B3E1F26C4);
    }

    function() isActivated() isHuman() isWithinLimits(msg.value) public payable {
        Rich3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        uint256 _pID = pIDxAddr_[msg.sender];
        uint256 _team = 2;
        buyCore(_pID, 0, _team, _eventData_);
    }
    function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable {
        Rich3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
        uint256 _pID = pIDxAddr_[msg.sender];

        if (_affCode == 0){
            _affCode = plyr_[_pID].laff;
        }else if (_affCode != plyr_[_pID].laff) {
            plyr_[_pID].laff = _affCode;
        }
        _team = verifyTeam(_team);
        buyCore(_pID, _affCode, _team, _eventData_);
    }
    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public {
        Rich3DDatasets.EventReturns memory _eventData_;
        uint256 _pID = pIDxAddr_[msg.sender];

        if (_affCode == 0){
            _affCode = plyr_[_pID].laff;
        }else if (_affCode != plyr_[_pID].laff) {
            plyr_[_pID].laff = _affCode;
        }
        _team = verifyTeam(_team);
        reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
    }

    function withdraw() isActivated() isHuman() public {
        uint256 _rID = rID_;
        uint256 _now = now;
        uint256 _pID = pIDxAddr_[msg.sender];
        uint256 _eth;
        
        if (_now > round_[_rID].end && (round_[_rID].ended == false) && round_[_rID].plyr != 0){
            Rich3DDatasets.EventReturns memory _eventData_;
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);
            // get their earnings
            _eth = withdrawEarnings(_pID);
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);

            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

            emit onWithdrawAndDistribute(
                msg.sender, 
                plyr_[_pID].name, 
                _eth, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.R3Amount, 
                _eventData_.genAmount
            );                
        }else{
            _eth = withdrawEarnings(_pID);
            if (_eth > 0)
                plyr_[_pID].addr.transfer(_eth);
            emit onWithdraw(
                _pID, 
                msg.sender, 
                plyr_[_pID].name, 
                _eth, 
                _now
            );
        }
    }
    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 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 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 onNewName(
            _pID, 
            _addr, 
            _name, 
            _isNewPlayer, 
            _affID, 
            plyr_[_affID].addr, 
            plyr_[_affID].name, 
            _paid, 
            now
        );
    }
    function getBuyPrice() public view  returns(uint256) {  
        uint256 _rID = rID_;
        uint256 _now = now;

        if (_now > round_[_rID].strt && (_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
    }
    function getTimeLeft() public view returns(uint256) {
        uint256 _rID = rID_;
        uint256 _now = now ;
        if(_rID == 1 && _now < round_[_rID].strt ) return (0);

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

    function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) {
        uint256 _rID = rID_;
        if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0){
            // if player is winner 
            if (round_[_rID].plyr == _pID){
                uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);
                return
                (
                    (plyr_[_pID].win).add( ((_pot).mul(48)) / 100 ),
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)   ),
                    plyr_[_pID].aff
                );
            // if player is not the winner
            } else {
                return(
                    plyr_[_pID].win,
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)  ),
                    plyr_[_pID].aff
                );
            }
            
        // if round is still going on, or round has ended and round end has been ran
        } 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) {
        uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);
        return(  ((((round_[_rID].mask).add(((((_pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000)  );
    }
    function getCurrentRoundInfo() public view
        returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) {
        uint256 _rID = rID_;       
        return
            (
                round_[_rID].ico,             
                _rID,             
                round_[_rID].keys,             
                ((_rID == 1) && (now < round_[_rID].strt) ) ? 0 : round_[_rID].end,
                ((_rID == 1) && (now < round_[_rID].strt) ) ? 0 : round_[_rID].strt,
                round_[_rID].pot,             
                (round_[_rID].team + (round_[_rID].plyr * 10)),
                plyr_[round_[_rID].plyr].addr,
                plyr_[round_[_rID].plyr].name,
                rndTmEth_[_rID][0],
                rndTmEth_[_rID][1],
                rndTmEth_[_rID][2],
                rndTmEth_[_rID][3],
                airDropTracker_ + (airDropPot_ * 1000)
            );     
    }
    function getPlayerInfoByAddress(address _addr) public  view  returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256){
        uint256 _rID = rID_;
        if (_addr == address(0)) {
            _addr == msg.sender;
        }
        uint256 _pID = pIDxAddr_[_addr];

        return (
            _pID,
            plyr_[_pID].name,
            plyrRnds_[_pID][_rID].keys,
            plyr_[_pID].win,
            (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
            plyr_[_pID].aff,
            plyrRnds_[_pID][_rID].eth
        );
    }

    function buyCore(uint256 _pID, uint256 _affID, uint256 _team, Rich3DDatasets.EventReturns memory _eventData_) private {
        uint256 _rID = rID_;
        uint256 _now = now;
        if ( _rID == 1 && _now < round_[_rID].strt ) {
            if(msg.value > 0 ){
                communityAddr_.transfer(msg.value);
            }
        } else if (_now > round_[_rID].strt && (_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 onBuyAndDistribute(
                    msg.sender, 
                    plyr_[_pID].name, 
                    msg.value, 
                    _eventData_.compressedData, 
                    _eventData_.compressedIDs, 
                    _eventData_.winnerAddr, 
                    _eventData_.winnerName, 
                    _eventData_.amountWon, 
                    _eventData_.newPot, 
                    _eventData_.R3Amount, 
                    _eventData_.genAmount
                );
            }
            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }

    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, Rich3DDatasets.EventReturns memory _eventData_) private {
        uint256 _rID = rID_;
        uint256 _now = now;
        if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) {
            plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);
            core(_rID, _pID, _eth, _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 onReLoadAndDistribute(
                msg.sender, 
                plyr_[_pID].name, 
                _eventData_.compressedData, 
                _eventData_.compressedIDs, 
                _eventData_.winnerAddr, 
                _eventData_.winnerName, 
                _eventData_.amountWon, 
                _eventData_.newPot, 
                _eventData_.R3Amount, 
                _eventData_.genAmount
            );
        }
    }

    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Rich3DDatasets.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) > 2000000000000000000){
            uint256 _availableLimit = (2000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
            uint256 _refund = _eth.sub(_availableLimit);
            plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
            _eth = _availableLimit;
        }
        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;
            }

            if (_eth >= 100000000000000000){
                // > 0.1 ether, 才有空投
                airDropTracker_++;
                if (airdrop() == true){
                    uint256 _prize;
                    if (_eth >= 10000000000000000000){
                        // <= 10 ether
                        _prize = ((airDropPot_).mul(75)) / 100;
                        plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
                        airDropPot_ = (airDropPot_).sub(_prize);

                        _eventData_.compressedData += 300000000000000000000000000000000;
                    }else if(_eth >= 1000000000000000000 && _eth < 10000000000000000000) {
                        // >= 1 ether and < 10 ether
                        _prize = ((airDropPot_).mul(50)) / 100;
                        plyr_[_pID].win = (plyr_[_pID].win).add(_prize);

                        airDropPot_ = (airDropPot_).sub(_prize);

                        _eventData_.compressedData += 200000000000000000000000000000000;

                    }else if(_eth >= 100000000000000000 && _eth < 1000000000000000000){
                        // >= 0.1 ether and < 1 ether
                        _prize = ((airDropPot_).mul(25)) / 100;
                        plyr_[_pID].win = (plyr_[_pID].win).add(_prize);

                        airDropPot_ = (airDropPot_).sub(_prize);

                        _eventData_.compressedData += 300000000000000000000000000000000;
                    }

                    _eventData_.compressedData += 10000000000000000000000000000000;

                    _eventData_.compressedData += _prize * 1000000000000000000000000000000000;

                    airDropTracker_ = 0;
                }
            }

            _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]);

            // distribute eth
            _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_);
            _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_);

            endTx(_pID, _team, _eth, _keys, _eventData_);
        }

    }

    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)  );
    }

    function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256){
        uint256 _now = now;
        if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].eth).keysRec(_eth) );
        else // rounds over.  need keys for new round
            return ( (_eth).keys() );
    }

    function iWantXKeys(uint256 _keys) public view returns(uint256) {
        uint256 _rID = rID_;
        uint256 _now = now;

        if (_now > round_[_rID].strt && (_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() );
    }
    /**
     interface : PlayerBookReceiverInterface
     */
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external {
        require (msg.sender == address(PlayerBook), "Called from PlayerBook only");
        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;
    }

    function receivePlayerNameList(uint256 _pID, bytes32 _name) external {
        require (msg.sender == address(PlayerBook), "Called from PlayerBook only");
        if(plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }
    function determinePID(Rich3DDatasets.EventReturns memory _eventData_) private returns (Rich3DDatasets.EventReturns) {
        uint256 _pID = pIDxAddr_[msg.sender];
        if (_pID == 0){
            _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;
            // set the new player bool to true    
            _eventData_.compressedData = _eventData_.compressedData + 1;                
        } 
        return _eventData_ ;
    }
    function verifyTeam(uint256 _team) private pure returns (uint256) {
        if (_team < 0 || _team > 3) 
            return(2);
        else
            return(_team);
    }

    function managePlayer(uint256 _pID, Rich3DDatasets.EventReturns memory _eventData_) private returns (Rich3DDatasets.EventReturns) {
        if (plyr_[_pID].lrnd != 0)
            updateGenVault(_pID, plyr_[_pID].lrnd);
        
        plyr_[_pID].lrnd = rID_;

        _eventData_.compressedData = _eventData_.compressedData + 10;

        return _eventData_ ;
    }
    function endRound(Rich3DDatasets.EventReturns memory _eventData_) private returns (Rich3DDatasets.EventReturns) {
        uint256 _rID = rID_;
        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;
        // grab our pot amount
        uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);

        uint256 _win = (_pot.mul(48)) / 100;
        uint256 _com = (_pot / 50);
        uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
        uint256 _nt = (_pot.mul(potSplit_[_winTID].r3)) / 100;
        uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_nt);
        // calculate ppt for round mask
        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);
        if(_com>0) {
            communityAddr_.transfer(_com);
            _com = 0 ;
        }

        if(_nt > 0) {
            FoundationAddr_.transfer(_nt);
        }

        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_.R3Amount = 0;
        _eventData_.newPot = _res;
        // 下一轮
        rID_++;
        _rID++;
        round_[_rID].strt = now;
        round_[_rID].end = now.add(rndMax_);
        round_[_rID].prevres = _res;

        return(_eventData_);
    }

    function updateGenVault(uint256 _pID, uint256 _rIDlast) private {
        uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
        if (_earnings > 0){
            plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);

            plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);

        }
    }

    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);

        if (_newTime < (rndMax_).add(_now))
            round_[_rID].end = _newTime;
        else
            round_[_rID].end = rndMax_.add(_now);
    }

    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);
    }
    function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Rich3DDatasets.EventReturns memory _eventData_) 
        private returns(Rich3DDatasets.EventReturns){
        // 社区基金初始为0, 如果没有设置社区基金,则这份空投到用户地址
        uint256 _com = 0 ;
        uint256 _long = (_eth.mul(3)).div(100);
        if(address(otherRich3D_)!=address(0x0)){
            otherRich3D_.potSwap.value(_long)();
        }else{
            _com = _com.add(_long);
        }
        // 分享,如果没有分享,进入到社区基金(自己的邀请码也是会进入自己,前提是自己要注册)
        uint256 _aff = (_eth.mul(8)).div(100);
        //if (_affID != _pID && plyr_[_affID].name != '') {
        if (plyr_[_affID].name != '') {    
            plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
            emit onAffiliatePayout(
                _affID, 
                plyr_[_affID].addr, 
                plyr_[_affID].name, 
                _rID, 
                _pID, 
                _aff, 
                now
            );
        } else {
            // 邀请分红单独进入邀请分红地址
            if(_aff > 0 ){
                affAddr_.transfer(_aff);
            }  
            //_com = _com.add(_aff);
        }
        // Agent
        uint256 _agent = (_eth.mul(2)).div(100);
        agentAddr_.transfer(_agent);

        // 代币空投部分转到社区基金
        uint256 _nt = (_eth.mul(fees_[_team].r3)).div(100);
        _com = _com.add(_nt) ;
        if(_com>0){
            communityAddr_.transfer(_com);
        }
        return (_eventData_) ; 

    }
    function potSwap() external payable {
        // 奖池互换放入下一轮
        uint256 _rID = rID_ + 1;
        round_[_rID].prevres = round_[_rID].prevres.add(msg.value);
        emit onPotSwapDeposit(
            _rID, 
            msg.value
        );
    }
    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, Rich3DDatasets.EventReturns memory _eventData_)
        private returns(Rich3DDatasets.EventReturns) {
        // 持有者的份额 
        uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;    
        // 空投小奖池 1%
        uint256 _air = (_eth / 100);
        airDropPot_ = airDropPot_.add(_air);
        // 14% = 10% 佣金 + 3% 奖池互换 + 1% 空投小奖池
        _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].r3)) / 100));
        // 奖池
        uint256 _pot = _eth.sub(_gen);

        uint256 _dust = updateMasks(_rID, _pID, _gen, _keys);
        if (_dust > 0)
            _gen = _gen.sub(_dust);
        
        round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot);

        _eventData_.genAmount = _gen.add(_eventData_.genAmount);
        _eventData_.potAmount = _pot;

        return(_eventData_);
    }
    
    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)));
    }
    function withdrawEarnings(uint256 _pID) private returns(uint256) {
        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);
    }
    function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, Rich3DDatasets.EventReturns memory _eventData_) private {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);

        emit onEndTx(
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.R3Amount,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }
}

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":true,"inputs":[],"name":"FoundationAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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"},{"name":"prevres","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":"r3","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"affAddr_","outputs":[{"name":"","type":"address"}],"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":"_otherRich3D","type":"address"}],"name":"setOtherRich3D","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":true,"inputs":[],"name":"communityAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"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":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":true,"inputs":[],"name":"agentAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"r3","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":"R3Amount","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":"R3Amount","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":"R3Amount","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":"R3Amount","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"}]

60806040526004805460a060020a60ff02191690556000600d553480156200002657600080fd5b50604080518082018252601c8152600a60208083018281526000808052601080845294517f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb015590517f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb02558451808601865260268152808301848152600180845286855291517f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f55517f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b60558551808701875260348152600e818501908152600280855287865291517f853b2fefe141400fef543280f93d98bd49996069f632d0d20236afeeed8e46a255517f853b2fefe141400fef543280f93d98bd49996069f632d0d20236afeeed8e46a3558651808801885260288152600c818601908152600380865297865290517fb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9e55517fb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9f5586518088018852600f8152808501868152848052601180875291517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b755517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b8558751808901895260198152808601858152938552818652517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b5525591517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55355865180880188526014808252818601908152918452828552517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62855517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c629558551808701909652601e86528583019384529390529190915290517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c87ff55517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c88005562000343640100000000620003cd810204565b60018054600160a060020a0319908116731e7360a6f787df468a39af71411db5db70db7c4e1790915560028054821673b1fa90be11ac08fca9e5854130eaf9eb595a94e01790556003805482167366a300fc2257b17d6a55c3499af1ff9308031a7717905560048054909116733ab69d2ac0cd815244a173252457815b3e1f26c417905562000405565b6000602081905260097f44f6c5cba8bc228152bcfdf72428f71019e5f7fd4d1e6d13f229354a4b7cc79d819055338252604090912055565b614f2680620004156000396000f3006080604052600436106101cc5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036b57806306fdde03146103925780630dc9ebfe1461041c5780630f15f4c01461044d57806310f01eba1461046457806311a09ae71461048557806324c33d331461049a5780632660316e146105175780632ce21999146105465780632dd78759146105775780632e19ebdc1461058c578063349cdcac146105a45780633b441344146105c25780633ccfd60b146105e35780633ddd4698146105f85780633f03aab41461065457806349cc635d146106695780635893d48114610693578063624ae5c0146106ae57806363066434146106c3578063685ffd83146106f9578063747dff421461074c5780638f38f309146107d75780638f7140ea146107e5578063921dec211461080057806395d89b4114610853578063a2bccae914610868578063abcccdb1146108a9578063c519500e146108be578063c7e284b8146108d6578063ce89c80c146108eb578063cf80800014610906578063d53b26791461091e578063d87574e014610933578063de7874f314610948578063ed78cf4a146109a2578063ee0b5d8b146109aa575b6101d4614e61565b600454600090819060a060020a900460ff16151560011461022d576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b8015610274576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b34633b9aca008110156102d1576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af6800000811115610333576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61033c86610a03565b33600090815260066020526040812054919750909550600294506103639086908689610cb7565b505050505050005b34801561037757600080fd5b50610380610f55565b60408051918252519081900360200190f35b34801561039e57600080fd5b506103a7611016565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042857600080fd5b5061043161104d565b60408051600160a060020a039092168252519081900360200190f35b34801561045957600080fd5b5061046261105c565b005b34801561047057600080fd5b50610380600160a060020a0360043516611332565b34801561049157600080fd5b50610380611344565b3480156104a657600080fd5b506104b260043561134a565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b34801561052357600080fd5b506105326004356024356113b5565b604080519115158252519081900360200190f35b34801561055257600080fd5b5061055e6004356113d5565b6040805192835260208301919091528051918290030190f35b34801561058357600080fd5b506104316113ee565b34801561059857600080fd5b506103806004356113fd565b3480156105b057600080fd5b5061046260043560243560443561140f565b3480156105ce57600080fd5b50610462600160a060020a03600435166115f5565b3480156105ef57600080fd5b5061046261174e565b6040805160206004803580820135601f810184900484028501840190955284845261046294369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611ac2565b34801561066057600080fd5b50610431611c7b565b34801561067557600080fd5b50610462600435600160a060020a0360243516604435606435611c8a565b34801561069f57600080fd5b50610380600435602435611e55565b3480156106ba57600080fd5b50610380611e72565b3480156106cf57600080fd5b506106db600435611e78565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610462943694929360249392840191908190840183828082843750949750508435955050505050602001351515612037565b34801561075857600080fd5b50610761612117565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b610462600435602435612363565b3480156107f157600080fd5b5061046260043560243561254a565b6040805160206004803580820135601f8101849004840285018401909552848452610462943694929360249392840191908190840183828082843750949750508435955050505050602001351515612601565b34801561085f57600080fd5b506103a76126e1565b34801561087457600080fd5b50610883600435602435612718565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156108b557600080fd5b5061043161274a565b3480156108ca57600080fd5b5061055e600435612759565b3480156108e257600080fd5b50610380612772565b3480156108f757600080fd5b50610380600435602435612826565b34801561091257600080fd5b506103806004356128c8565b34801561092a57600080fd5b50610532612976565b34801561093f57600080fd5b50610380612986565b34801561095457600080fd5b5061096060043561298c565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6104626129d3565b3480156109b657600080fd5b506109cb600160a060020a0360043516612a50565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610a0b614e61565b336000908152600660205260408120549080821515610cae57604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051735d99e9ab040efa45de99a44c8410cf8f61cc31019163e56556a99160248083019260209291908290030181600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b5051604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018390529051919450735d99e9ab040efa45de99a44c8410cf8f61cc3101916382e37b2c916024808201926020929091908290030181600087803b158015610b2d57600080fd5b505af1158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b5051604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018690529051919350735d99e9ab040efa45de99a44c8410cf8f61cc31019163e3c08adf916024808201926020929091908290030181600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b505050506040513d6020811015610bf457600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c7d576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c8c5750828114155b15610ca65760008381526008602052604090206006018190555b845160010185525b50929392505050565b600b5442600182148015610cdb57506000828152600e602052604090206004015481105b15610d29576000341115610d2457600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610d22573d6000803e3d6000fd5b505b610f4d565b6000828152600e602052604090206004015481118015610d8b57506000828152600e602052604090206002015481111580610d8b57506000828152600e602052604090206002015481118015610d8b57506000828152600e6020526040902054155b15610d9e57610d24828734888888612b25565b6000828152600e602052604090206002015481118015610dd057506000828152600e602052604090206003015460ff16155b15610f18576000828152600e60205260409020600301805460ff19166001179055610dfa83613076565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610f3a903463ffffffff61348516565b6000878152600860205260409020600301555b505050505050565b600b546000818152600e6020526040812060040154909190429081118015610fbf57506000828152600e602052604090206002015481111580610fbf57506000828152600e602052604090206002015481118015610fbf57506000828152600e6020526040902054155b15611007576000828152600e602052604090206005015461100090670de0b6b3a764000090610ff4908263ffffffff61348516565b9063ffffffff6134e616565b9250611011565b6544364c5bb00092505b505090565b60408051808201909152601081527f52696368203344204f6666696369616c00000000000000000000000000000000602082015281565b600254600160a060020a031681565b33600090815260208190526040902054600981146110c4576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652061646d696e2e000000000000000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515611126576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600254600160a060020a03161515611188576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020466f756e646174696f6e416464722e000000000000604482015290519081900360640190fd5b600354600160a060020a031615156111ea576040805160e560020a62461bcd02815260206004820152601360248201527f4d75737420736574757020616666416464722e00000000000000000000000000604482015290519081900360640190fd5b600454600160a060020a0316151561124c576040805160e560020a62461bcd02815260206004820152601560248201527f4d757374207365747570206167656e74416464722e0000000000000000000000604482015290519081900360640190fd5b60045460a060020a900460ff16156112ae576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600b819055600052600e602052635b7ea1c07fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820b55635b7ee8107fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820955565b60066020526000908152604090205481565b600d5481565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600a60209081526000928352604080842090915290825290205460ff1681565b6010602052600090815260409020805460019091015482565b600354600160a060020a031681565b60076020526000908152604090205481565b611417614e61565b60045460009060a060020a900460ff16151560011461146e576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b80156114b5576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b84633b9aca00811015611512576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af6800000811115611574576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602052604090205493508715156115a65760008481526008602052604090206006015497506115d3565b60008481526008602052604090206006015488146115d35760008481526008602052604090206006018890555b6115dc87613513565b96506115eb8489898989613538565b5050505050505050565b336000908152602081905260409020546009811461165d576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652061646d696e2e000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821615156116bd576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600554600160a060020a03161561171e576040805160e560020a62461bcd02815260206004820152601960248201527f4f7468657252696368334420686173206265656e207365742e00000000000000604482015290519081900360640190fd5b506005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008061175c614e61565b60045460a060020a900460ff1615156001146117b0576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b80156117f7576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b600b5433600090815260066020908152604080832054848452600e9092529091206002015491985042975095508611801561184457506000878152600e602052604090206003015460ff16155b801561185d57506000878152600e602052604090205415155b15611a03576000878152600e60205260409020600301805460ff1916600117905561188783613076565b925061189285613750565b935060008411156118e357600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118e1573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360086000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611ab9565b611a0c85613750565b93506000841115611a5d57600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611a5b573d6000803e3d6000fd5b505b6000858152600860209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611b10576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b611b198b6137e3565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263aa4d490b928a926084808201939182900301818588803b158015611baa57600080fd5b505af1158015611bbe573d6000803e3d6000fd5b50505050506040513d6040811015611bd557600080fd5b508051602091820151600160a060020a03808b1660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b33735d99e9ab040efa45de99a44c8410cf8f61cc310114611cf5576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a0383166000908152600660205260409020548414611d3057600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611d575760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611dad576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611dda5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611e075760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611e4f576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600f60209081526000928352604080842090915290825290205481565b600b5481565b600b546000818152600e602052604081206002015490918291829190829042118015611eb657506000828152600e602052604090206003015460ff16155b8015611ecf57506000828152600e602052604090205415155b15612006576000828152600e6020526040902054861415611fca576000828152600e60205260409020600c810154600790910154611f129163ffffffff61348516565b9050611f536064611f2a83603063ffffffff613ff616565b811515611f3357fe5b60008981526008602052604090206002015491900463ffffffff61348516565b6000878152600960209081526040808320868452909152902060020154611fac90611f8e90611f828a8761406d565b9063ffffffff61415c16565b6000898152600860205260409020600301549063ffffffff61348516565b6000888152600860205260409020600401549196509450925061202e565b600086815260086020908152604080832060029081015460098452828520878652909352922090910154611fac90611f8e90611f828a8761406d565b60008681526008602052604090206002810154600590910154611fac90611f8e9089906141bc565b50509193909250565b6000808080808033803b8015612085576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b61208e8b6137e3565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263745ea0c1928a926084808201939182900301818588803b158015611baa57600080fd5b6000806000806000806000806000806000806000806000600b549050600e60008281526020019081526020016000206009015481600e60008481526020019081526020016000206005015483600114801561218257506000848152600e602052604090206004015442105b61219d576000848152600e60205260409020600201546121a0565b60005b8460011480156121c057506000858152600e602052604090206004015442105b6121db576000858152600e60205260409020600401546121de565b60005b600e600087815260200190815260200160002060070154600e600088815260200190815260200160002060000154600a02600e6000898152602001908152602001600020600101540160086000600e60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600e60008c815260200190815260200160002060000154815260200190815260200160002060010154600f60008b8152602001908152602001600020600080815260200190815260200160002054600f60008c815260200190815260200160002060006001815260200190815260200160002054600f60008d815260200190815260200160002060006002815260200190815260200160002054600f60008e815260200190815260200160002060006003815260200190815260200160002054600c546103e802600d54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61236b614e61565b60045460009060a060020a900460ff1615156001146123c2576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b8015612409576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b34633b9aca00811015612466576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af68000008111156124c8576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6124d185610a03565b336000908152600660205260409020549095509350861515612506576000848152600860205260409020600601549650612533565b60008481526008602052604090206006015487146125335760008481526008602052604090206006018790555b61253c86613513565b9550611ab984888888610cb7565b33735d99e9ab040efa45de99a44c8410cf8f61cc3101146125b5576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600a6020908152604080832084845290915290205460ff1615156125fd576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b801561264f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b6126588b6137e3565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263c0942dfd928a926084808201939182900301818588803b158015611baa57600080fd5b60408051808201909152600381527f5233440000000000000000000000000000000000000000000000000000000000602082015281565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600454600160a060020a031681565b6011602052600090815260409020805460019091015482565b600b546000904260018214801561279957506000828152600e602052604090206004015481105b156127a75760009250611011565b6000828152600e602052604090206002015481101561281d576000828152600e60205260409020600401548111156127fb576000828152600e6020526040902060020154611000908263ffffffff61415c16565b6000828152600e6020526040902060020154611000908263ffffffff61415c16565b60009250611011565b6000828152600e602052604081206004015442908111801561288a57506000848152600e60205260409020600201548111158061288a57506000848152600e60205260409020600201548111801561288a57506000848152600e6020526040902054155b156128b8576000848152600e60205260409020600601546128b1908463ffffffff61421916565b91506128c1565b6128b18361423a565b5092915050565b600b546000818152600e602052604081206004015490919042908111801561293257506000828152600e60205260409020600201548111158061293257506000828152600e60205260409020600201548111801561293257506000828152600e6020526040902054155b15612966576000828152600e602052604090206005015461295f908590610ff4908263ffffffff61348516565b925061296f565b61295f846142b2565b5050919050565b60045460a060020a900460ff1681565b600c5481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600b546001016000818152600e60205260409020600c01546129fb903463ffffffff61348516565b6000828152600e6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600b54915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612ae690612ac89086906141bc565b6000878152600860205260409020600301549063ffffffff61348516565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b60008581526009602090815260408083208984529091528120600101548190819081901515612b5b57612b58898661431f565b94505b60008a8152600e602052604090206006015468056bc75e2d63100000118015612bb5575060008981526009602090815260408083208d8452909152902054671bc16d674ec8000090612bb3908a63ffffffff61348516565b115b15612c3c5760008981526009602090815260408083208d8452909152902054612bed90671bc16d674ec800009063ffffffff61415c16565b9350612bff888563ffffffff61415c16565b60008a815260086020526040902060030154909350612c24908463ffffffff61348516565b60008a81526008602052604090206003015592965086925b633b9aca0088111561306a5760008a8152600e6020526040902060060154612c6a908963ffffffff61421916565b9150670de0b6b3a76400008210612ce157612c85828b61437f565b60008a8152600e60205260409020548914612cac5760008a8152600e602052604090208990555b60008a8152600e60205260409020600101548614612cd95760008a8152600e602052604090206001018690555b845160640185525b67016345785d8a00008810612f2157600d80546001019055612d0161445b565b151560011415612f2157678ac7230489e800008810612da257600c54606490612d3190604b63ffffffff613ff616565b811515612d3a57fe5b60008b8152600860205260409020600201549190049150612d61908263ffffffff61348516565b60008a815260086020526040902060020155600c54612d86908263ffffffff61415c16565b600c5584516d0eca8847c4129106ce8300000000018552612ef6565b670de0b6b3a76400008810158015612dc15750678ac7230489e8000088105b15612e4e57600c54606490612ddd90603263ffffffff613ff616565b811515612de657fe5b60008b8152600860205260409020600201549190049150612e0d908263ffffffff61348516565b60008a815260086020526040902060020155600c54612e32908263ffffffff61415c16565b600c5584516d09dc5ada82b70b59df0200000000018552612ef6565b67016345785d8a00008810158015612e6d5750670de0b6b3a764000088105b15612ef657600c54606490612e8990601963ffffffff613ff616565b811515612e9257fe5b60008b8152600860205260409020600201549190049150612eb9908263ffffffff61348516565b60008a815260086020526040902060020155600c54612ede908263ffffffff61415c16565b600c5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600d555b600d5485516103e890910201855260008981526009602090815260408083208d8452909152902060010154612f5d90839063ffffffff61348516565b60008a81526009602090815260408083208e84529091529020600181019190915554612f8a908990613485565b60008a81526009602090815260408083208e8452825280832093909355600e90522060050154612fc190839063ffffffff61348516565b60008b8152600e60205260409020600581019190915560060154612fec90899063ffffffff61348516565b60008b8152600e6020908152604080832060060193909355600f81528282208983529052205461302390899063ffffffff61348516565b60008b8152600f602090815260408083208a845290915290205561304b8a8a8a8a8a8a614672565b945061305b8a8a8a89868a614948565b945061306a89878a8589614ab6565b50505050505050505050565b61307e614e61565b600b546000818152600e6020526040812080546001820154600c83015460079093015491939092909182918291829182918291829182916130c5919063ffffffff61348516565b975060646130da89603063ffffffff613ff616565b8115156130e357fe5b04965060328860008b8152601160205260409020549190049650606490613111908a9063ffffffff613ff616565b81151561311a57fe5b60008b8152601160205260409020600101549190049550606490613145908a9063ffffffff613ff616565b81151561314e57fe5b04935061316984611f8287818a818e8e63ffffffff61415c16565b60008c8152600e602052604090206005015490935061319686670de0b6b3a764000063ffffffff613ff616565b81151561319f57fe5b60008d8152600e602052604090206005015491900492506131ed90670de0b6b3a7640000906131d590859063ffffffff613ff616565b8115156131de57fe5b8791900463ffffffff61415c16565b9050600081111561321d57613208858263ffffffff61415c16565b945061321a838263ffffffff61348516565b92505b60008a81526008602052604090206002015461324090889063ffffffff61348516565b60008b81526008602052604081206002019190915586111561329c57600154604051600160a060020a039091169087156108fc029088906000818181858888f19350505050158015613296573d6000803e3d6000fd5b50600095505b60008411156132e157600254604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156132df573d6000803e3d6000fd5b505b60008b8152600e602052604090206008015461330490839063ffffffff61348516565b600e60008d815260200190815260200160002060080181905550600e60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600b600081548092919060010191905055508a806001019b505042600e60008d8152602001908152602001600020600401819055506134566146504261348590919063ffffffff16565b60008c8152600e602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b818101828110156134e0576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600061350c6135036134fe858563ffffffff61415c16565b6142b2565b611f82856142b2565b9392505050565b6000808210806135235750600382115b1561353057506002613533565b50805b919050565b600b546000818152600e602052604090206004015442908111801561359f57506000828152600e60205260409020600201548111158061359f57506000828152600e60205260409020600201548111801561359f57506000828152600e6020526040902054155b156135d6576135b184611f8289613750565b6000888152600860205260409020600301556135d1828886898988612b25565b611ab9565b6000828152600e60205260409020600201548111801561360857506000828152600e602052604090206003015460ff16155b15611ab9576000828152600e60205260409020600301805460ff1916600117905561363283613076565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b600081815260086020526040812060050154819061376f908490614c24565b6000838152600860205260409020600481015460038201546002909201546137ad926137a1919063ffffffff61348516565b9063ffffffff61348516565b905060008111156137d95760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906137fe5750600084115b151561387a576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561388957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141580156138f0575084600185038151811015156138c857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561396c576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561397b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613abe578460018151811015156139b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613a32576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613a4157fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613abe576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613f8e5784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613afb57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b6f575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613b5057fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613bdc578482815181101515613b8257fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613bb357fe5b906020010190600160f860020a031916908160001a905350821515613bd757600192505b613f83565b8482815181101515613bea57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613cba575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613c4657fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613cba575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613c9b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613d64575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613cf057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613d64575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613d4557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613de0576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613dee57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613ecd578482600101815181101515613e2a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613ecd576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613f79575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613f0657fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613f79575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613f5a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613f8357600192505b600190910190613ac3565b600183151514613fe8576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515614007575060006134e0565b5081810281838281151561401757fe5b04146134e0576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600e60205260408120600c8101546007909101548291614098919063ffffffff61348516565b60008581526009602090815260408083208784528252808320600190810154600e8452828520600581015492015485526011909352922054929350670de0b6b3a76400009261414a9261413e916141159086906064906140ff908a9063ffffffff613ff616565b81151561410857fe5b049063ffffffff613ff616565b81151561411e57fe5b6000898152600e602052604090206008015491900463ffffffff61348516565b9063ffffffff613ff616565b81151561415357fe5b04949350505050565b6000828211156141b6576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600e9093529083206008015461350c92670de0b6b3a76400009161420391613ff6565b81151561420c57fe5b049063ffffffff61415c16565b600061350c6142278461423a565b611f8261423a868663ffffffff61348516565b60006309502f906142a26d03b2a1d15167e7c5699bfde00000611f8261429d7a0dac7055469777a6122ee4310dd6c14410500f29048400000000006137a16b01027e72f1f128130880000061413e8a670de0b6b3a764000063ffffffff613ff616565b614cbb565b8115156142ab57fe5b0492915050565b60006142c5670de0b6b3a7640000614d0e565b6142a260026142f86142e586670de0b6b3a764000063ffffffff613ff616565b65886c8f6730709063ffffffff613ff616565b81151561430157fe5b046137a161430e86614d0e565b6304a817c89063ffffffff613ff616565b614327614e61565b6000838152600860205260409020600501541561435b5760008381526008602052604090206005015461435b908490614c24565b50600b546000838152600860205260409020600501558051600a0181528092915050565b6000818152600e6020526040812060020154429190821180156143ae57506000838152600e6020526040902054155b156143d2576143cb826137a1603c670de0b6b3a764000088614108565b90506143ff565b6000838152600e60205260409020600201546143fc906137a1603c670de0b6b3a764000088614108565b90505b6144116146508363ffffffff61348516565b811015614431576000838152600e60205260409020600201819055611e4f565b6144436146508363ffffffff61348516565b6000848152600e602052604090206002015550505050565b6000806145cc436137a142336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106144d65780518252601f1990920191602091820191016144b7565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561450c57fe5b046137a1456137a142416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106145855780518252601f199092019160209182019101614566565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156145bb57fe5b046137a1424463ffffffff61348516565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061461a5780518252601f1990920191602091820191016145fb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600d5490945092506103e89150839050046103e80282031015614669576001915061466e565b600091505b5090565b61467a614e61565b6000808080806146a260646146968c600363ffffffff613ff616565b9063ffffffff614d1a16565b600554909450600160a060020a03161561474057600560009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561472257600080fd5b505af1158015614736573d6000803e3d6000fd5b5050505050614753565b614750858563ffffffff61348516565b94505b61476960646146968c600863ffffffff613ff616565b60008a8152600860205260409020600101549093501561481e576000898152600860205260409020600401546147a690849063ffffffff61348516565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614863565b600083111561486357600354604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015614861573d6000803e3d6000fd5b505b61487960646146968c600263ffffffff613ff616565b600454604051919350600160a060020a03169083156108fc029084906000818181858888f193505050501580156148b4573d6000803e3d6000fd5b506000888152601060205260409020600101546148df90606490614696908d9063ffffffff613ff616565b90506148f1858263ffffffff61348516565b9450600085111561493857600154604051600160a060020a039091169086156108fc029087906000818181858888f19350505050158015614936573d6000803e3d6000fd5b505b50949a9950505050505050505050565b614950614e61565b600084815260106020526040812054819081908190606490614979908b9063ffffffff613ff616565b81151561498257fe5b0493506064890492506149a083600c5461348590919063ffffffff16565b600c55600088815260106020526040902060010154614a1190614a04906064906149d1908d9063ffffffff613ff616565b8115156149da57fe5b0460646149ee8d600e63ffffffff613ff616565b8115156149f757fe5b049063ffffffff61348516565b8a9063ffffffff61415c16565b9850614a23898563ffffffff61415c16565b9150614a318b8b868a614d28565b90506000811115614a4f57614a4c848263ffffffff61415c16565b93505b60008b8152600e6020526040902060070154614a75906137a1848463ffffffff61348516565b60008c8152600e602052604090206007015560e0860151614a9d90859063ffffffff61348516565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600b54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600c54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614c3083836141bc565b90506000811115614cb657600083815260086020526040902060030154614c5e90829063ffffffff61348516565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614c9890829063ffffffff61348516565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614ccb846001613485565b811515614cd457fe5b0490508291505b818110156137dd578091506002614cfd8285811515614cf657fe5b0483613485565b811515614d0657fe5b049050614cdb565b60006134e08283613ff6565b600080828481151561415357fe5b6000848152600e602052604081206005015481908190614d5686670de0b6b3a764000063ffffffff613ff616565b811515614d5f57fe5b6000898152600e60205260409020600801549190049250614d8790839063ffffffff61348516565b6000888152600e6020526040902060080155670de0b6b3a7640000614db2838663ffffffff613ff616565b811515614dbb57fe5b60008881526009602090815260408083208c8452825280832060020154600e90925290912060080154929091049250614e0e916137a1908490670de0b6b3a764000090614203908a63ffffffff613ff616565b60008781526009602090815260408083208b8452825280832060020193909355600e90522060050154614e5690670de0b6b3a7640000906131d590859063ffffffff613ff616565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e00000000000000000000000000a165627a7a7230582040422d399b0227a5218f4fd9fc5b55341072235293201478de00116e655cb1fa0029

Deployed Bytecode

0x6080604052600436106101cc5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036b57806306fdde03146103925780630dc9ebfe1461041c5780630f15f4c01461044d57806310f01eba1461046457806311a09ae71461048557806324c33d331461049a5780632660316e146105175780632ce21999146105465780632dd78759146105775780632e19ebdc1461058c578063349cdcac146105a45780633b441344146105c25780633ccfd60b146105e35780633ddd4698146105f85780633f03aab41461065457806349cc635d146106695780635893d48114610693578063624ae5c0146106ae57806363066434146106c3578063685ffd83146106f9578063747dff421461074c5780638f38f309146107d75780638f7140ea146107e5578063921dec211461080057806395d89b4114610853578063a2bccae914610868578063abcccdb1146108a9578063c519500e146108be578063c7e284b8146108d6578063ce89c80c146108eb578063cf80800014610906578063d53b26791461091e578063d87574e014610933578063de7874f314610948578063ed78cf4a146109a2578063ee0b5d8b146109aa575b6101d4614e61565b600454600090819060a060020a900460ff16151560011461022d576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b8015610274576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b34633b9aca008110156102d1576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af6800000811115610333576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61033c86610a03565b33600090815260066020526040812054919750909550600294506103639086908689610cb7565b505050505050005b34801561037757600080fd5b50610380610f55565b60408051918252519081900360200190f35b34801561039e57600080fd5b506103a7611016565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e15781810151838201526020016103c9565b50505050905090810190601f16801561040e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042857600080fd5b5061043161104d565b60408051600160a060020a039092168252519081900360200190f35b34801561045957600080fd5b5061046261105c565b005b34801561047057600080fd5b50610380600160a060020a0360043516611332565b34801561049157600080fd5b50610380611344565b3480156104a657600080fd5b506104b260043561134a565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b34801561052357600080fd5b506105326004356024356113b5565b604080519115158252519081900360200190f35b34801561055257600080fd5b5061055e6004356113d5565b6040805192835260208301919091528051918290030190f35b34801561058357600080fd5b506104316113ee565b34801561059857600080fd5b506103806004356113fd565b3480156105b057600080fd5b5061046260043560243560443561140f565b3480156105ce57600080fd5b50610462600160a060020a03600435166115f5565b3480156105ef57600080fd5b5061046261174e565b6040805160206004803580820135601f810184900484028501840190955284845261046294369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611ac2565b34801561066057600080fd5b50610431611c7b565b34801561067557600080fd5b50610462600435600160a060020a0360243516604435606435611c8a565b34801561069f57600080fd5b50610380600435602435611e55565b3480156106ba57600080fd5b50610380611e72565b3480156106cf57600080fd5b506106db600435611e78565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610462943694929360249392840191908190840183828082843750949750508435955050505050602001351515612037565b34801561075857600080fd5b50610761612117565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b610462600435602435612363565b3480156107f157600080fd5b5061046260043560243561254a565b6040805160206004803580820135601f8101849004840285018401909552848452610462943694929360249392840191908190840183828082843750949750508435955050505050602001351515612601565b34801561085f57600080fd5b506103a76126e1565b34801561087457600080fd5b50610883600435602435612718565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156108b557600080fd5b5061043161274a565b3480156108ca57600080fd5b5061055e600435612759565b3480156108e257600080fd5b50610380612772565b3480156108f757600080fd5b50610380600435602435612826565b34801561091257600080fd5b506103806004356128c8565b34801561092a57600080fd5b50610532612976565b34801561093f57600080fd5b50610380612986565b34801561095457600080fd5b5061096060043561298c565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6104626129d3565b3480156109b657600080fd5b506109cb600160a060020a0360043516612a50565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610a0b614e61565b336000908152600660205260408120549080821515610cae57604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051735d99e9ab040efa45de99a44c8410cf8f61cc31019163e56556a99160248083019260209291908290030181600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050506040513d6020811015610aba57600080fd5b5051604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018390529051919450735d99e9ab040efa45de99a44c8410cf8f61cc3101916382e37b2c916024808201926020929091908290030181600087803b158015610b2d57600080fd5b505af1158015610b41573d6000803e3d6000fd5b505050506040513d6020811015610b5757600080fd5b5051604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018690529051919350735d99e9ab040efa45de99a44c8410cf8f61cc31019163e3c08adf916024808201926020929091908290030181600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b505050506040513d6020811015610bf457600080fd5b505133600081815260066020908152604080832088905587835260089091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c7d576000828152600760209081526040808320869055858352600882528083206001908101869055600a8352818420868552909252909120805460ff191690911790555b8015801590610c8c5750828114155b15610ca65760008381526008602052604090206006018190555b845160010185525b50929392505050565b600b5442600182148015610cdb57506000828152600e602052604090206004015481105b15610d29576000341115610d2457600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610d22573d6000803e3d6000fd5b505b610f4d565b6000828152600e602052604090206004015481118015610d8b57506000828152600e602052604090206002015481111580610d8b57506000828152600e602052604090206002015481118015610d8b57506000828152600e6020526040902054155b15610d9e57610d24828734888888612b25565b6000828152600e602052604090206002015481118015610dd057506000828152600e602052604090206003015460ff16155b15610f18576000828152600e60205260409020600301805460ff19166001179055610dfa83613076565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360086000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260086020526040902060030154610f3a903463ffffffff61348516565b6000878152600860205260409020600301555b505050505050565b600b546000818152600e6020526040812060040154909190429081118015610fbf57506000828152600e602052604090206002015481111580610fbf57506000828152600e602052604090206002015481118015610fbf57506000828152600e6020526040902054155b15611007576000828152600e602052604090206005015461100090670de0b6b3a764000090610ff4908263ffffffff61348516565b9063ffffffff6134e616565b9250611011565b6544364c5bb00092505b505090565b60408051808201909152601081527f52696368203344204f6666696369616c00000000000000000000000000000000602082015281565b600254600160a060020a031681565b33600090815260208190526040902054600981146110c4576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652061646d696e2e000000000000000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515611126576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600254600160a060020a03161515611188576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020466f756e646174696f6e416464722e000000000000604482015290519081900360640190fd5b600354600160a060020a031615156111ea576040805160e560020a62461bcd02815260206004820152601360248201527f4d75737420736574757020616666416464722e00000000000000000000000000604482015290519081900360640190fd5b600454600160a060020a0316151561124c576040805160e560020a62461bcd02815260206004820152601560248201527f4d757374207365747570206167656e74416464722e0000000000000000000000604482015290519081900360640190fd5b60045460a060020a900460ff16156112ae576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600b819055600052600e602052635b7ea1c07fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820b55635b7ee8107fa7c5ba7114a813b50159add3a36832908dc83db71d0b9a24c2ad0f83be95820955565b60066020526000908152604090205481565b600d5481565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600a60209081526000928352604080842090915290825290205460ff1681565b6010602052600090815260409020805460019091015482565b600354600160a060020a031681565b60076020526000908152604090205481565b611417614e61565b60045460009060a060020a900460ff16151560011461146e576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b80156114b5576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b84633b9aca00811015611512576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af6800000811115611574576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602052604090205493508715156115a65760008481526008602052604090206006015497506115d3565b60008481526008602052604090206006015488146115d35760008481526008602052604090206006018890555b6115dc87613513565b96506115eb8489898989613538565b5050505050505050565b336000908152602081905260409020546009811461165d576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652061646d696e2e000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821615156116bd576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600554600160a060020a03161561171e576040805160e560020a62461bcd02815260206004820152601960248201527f4f7468657252696368334420686173206265656e207365742e00000000000000604482015290519081900360640190fd5b506005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008061175c614e61565b60045460a060020a900460ff1615156001146117b0576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b80156117f7576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b600b5433600090815260066020908152604080832054848452600e9092529091206002015491985042975095508611801561184457506000878152600e602052604090206003015460ff16155b801561185d57506000878152600e602052604090205415155b15611a03576000878152600e60205260409020600301805460ff1916600117905561188783613076565b925061189285613750565b935060008411156118e357600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156118e1573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360086000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611ab9565b611a0c85613750565b93506000841115611a5d57600085815260086020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611a5b573d6000803e3d6000fd5b505b6000858152600860209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611b10576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b611b198b6137e3565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263aa4d490b928a926084808201939182900301818588803b158015611baa57600080fd5b505af1158015611bbe573d6000803e3d6000fd5b50505050506040513d6040811015611bd557600080fd5b508051602091820151600160a060020a03808b1660008181526006865260408082205485835260088852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b33735d99e9ab040efa45de99a44c8410cf8f61cc310114611cf5576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a0383166000908152600660205260409020548414611d3057600160a060020a03831660009081526006602052604090208490555b6000828152600760205260409020548414611d575760008281526007602052604090208490555b600084815260086020526040902054600160a060020a03848116911614611dad576000848152600860205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600860205260409020600101548214611dda5760008481526008602052604090206001018290555b6000848152600860205260409020600601548114611e075760008481526008602052604090206006018190555b6000848152600a6020908152604080832085845290915290205460ff161515611e4f576000848152600a602090815260408083208584529091529020805460ff191660011790555b50505050565b600f60209081526000928352604080842090915290825290205481565b600b5481565b600b546000818152600e602052604081206002015490918291829190829042118015611eb657506000828152600e602052604090206003015460ff16155b8015611ecf57506000828152600e602052604090205415155b15612006576000828152600e6020526040902054861415611fca576000828152600e60205260409020600c810154600790910154611f129163ffffffff61348516565b9050611f536064611f2a83603063ffffffff613ff616565b811515611f3357fe5b60008981526008602052604090206002015491900463ffffffff61348516565b6000878152600960209081526040808320868452909152902060020154611fac90611f8e90611f828a8761406d565b9063ffffffff61415c16565b6000898152600860205260409020600301549063ffffffff61348516565b6000888152600860205260409020600401549196509450925061202e565b600086815260086020908152604080832060029081015460098452828520878652909352922090910154611fac90611f8e90611f828a8761406d565b60008681526008602052604090206002810154600590910154611fac90611f8e9089906141bc565b50509193909250565b6000808080808033803b8015612085576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b61208e8b6137e3565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263745ea0c1928a926084808201939182900301818588803b158015611baa57600080fd5b6000806000806000806000806000806000806000806000600b549050600e60008281526020019081526020016000206009015481600e60008481526020019081526020016000206005015483600114801561218257506000848152600e602052604090206004015442105b61219d576000848152600e60205260409020600201546121a0565b60005b8460011480156121c057506000858152600e602052604090206004015442105b6121db576000858152600e60205260409020600401546121de565b60005b600e600087815260200190815260200160002060070154600e600088815260200190815260200160002060000154600a02600e6000898152602001908152602001600020600101540160086000600e60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660086000600e60008c815260200190815260200160002060000154815260200190815260200160002060010154600f60008b8152602001908152602001600020600080815260200190815260200160002054600f60008c815260200190815260200160002060006001815260200190815260200160002054600f60008d815260200190815260200160002060006002815260200190815260200160002054600f60008e815260200190815260200160002060006003815260200190815260200160002054600c546103e802600d54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61236b614e61565b60045460009060a060020a900460ff1615156001146123c2576040805160e560020a62461bcd0281526020600482015260136024820152600080516020614edb833981519152604482015290519081900360640190fd5b33803b8015612409576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b34633b9aca00811015612466576040805160e560020a62461bcd02815260206004820152600a60248201527f546f6f206c6974746c6500000000000000000000000000000000000000000000604482015290519081900360640190fd5b69152d02c7e14af68000008111156124c8576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f206d756368000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6124d185610a03565b336000908152600660205260409020549095509350861515612506576000848152600860205260409020600601549650612533565b60008481526008602052604090206006015487146125335760008481526008602052604090206006018790555b61253c86613513565b9550611ab984888888610cb7565b33735d99e9ab040efa45de99a44c8410cf8f61cc3101146125b5576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600a6020908152604080832084845290915290205460ff1615156125fd576000828152600a602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b801561264f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020614ebb833981519152604482015290519081900360640190fd5b6126588b6137e3565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b509950349850735d99e9ab040efa45de99a44c8410cf8f61cc31019263c0942dfd928a926084808201939182900301818588803b158015611baa57600080fd5b60408051808201909152600381527f5233440000000000000000000000000000000000000000000000000000000000602082015281565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600454600160a060020a031681565b6011602052600090815260409020805460019091015482565b600b546000904260018214801561279957506000828152600e602052604090206004015481105b156127a75760009250611011565b6000828152600e602052604090206002015481101561281d576000828152600e60205260409020600401548111156127fb576000828152600e6020526040902060020154611000908263ffffffff61415c16565b6000828152600e6020526040902060020154611000908263ffffffff61415c16565b60009250611011565b6000828152600e602052604081206004015442908111801561288a57506000848152600e60205260409020600201548111158061288a57506000848152600e60205260409020600201548111801561288a57506000848152600e6020526040902054155b156128b8576000848152600e60205260409020600601546128b1908463ffffffff61421916565b91506128c1565b6128b18361423a565b5092915050565b600b546000818152600e602052604081206004015490919042908111801561293257506000828152600e60205260409020600201548111158061293257506000828152600e60205260409020600201548111801561293257506000828152600e6020526040902054155b15612966576000828152600e602052604090206005015461295f908590610ff4908263ffffffff61348516565b925061296f565b61295f846142b2565b5050919050565b60045460a060020a900460ff1681565b600c5481565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600b546001016000818152600e60205260409020600c01546129fb903463ffffffff61348516565b6000828152600e6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600b54915050600160a060020a038916600090815260066020908152604080832054808452600880845282852060018082015460098752858820898952875294872001549583905293526002830154600590930154909384939091612ae690612ac89086906141bc565b6000878152600860205260409020600301549063ffffffff61348516565b600095865260086020908152604080882060040154600983528189209989529890915290952054939e929d50909b509950919750919550909350915050565b60008581526009602090815260408083208984529091528120600101548190819081901515612b5b57612b58898661431f565b94505b60008a8152600e602052604090206006015468056bc75e2d63100000118015612bb5575060008981526009602090815260408083208d8452909152902054671bc16d674ec8000090612bb3908a63ffffffff61348516565b115b15612c3c5760008981526009602090815260408083208d8452909152902054612bed90671bc16d674ec800009063ffffffff61415c16565b9350612bff888563ffffffff61415c16565b60008a815260086020526040902060030154909350612c24908463ffffffff61348516565b60008a81526008602052604090206003015592965086925b633b9aca0088111561306a5760008a8152600e6020526040902060060154612c6a908963ffffffff61421916565b9150670de0b6b3a76400008210612ce157612c85828b61437f565b60008a8152600e60205260409020548914612cac5760008a8152600e602052604090208990555b60008a8152600e60205260409020600101548614612cd95760008a8152600e602052604090206001018690555b845160640185525b67016345785d8a00008810612f2157600d80546001019055612d0161445b565b151560011415612f2157678ac7230489e800008810612da257600c54606490612d3190604b63ffffffff613ff616565b811515612d3a57fe5b60008b8152600860205260409020600201549190049150612d61908263ffffffff61348516565b60008a815260086020526040902060020155600c54612d86908263ffffffff61415c16565b600c5584516d0eca8847c4129106ce8300000000018552612ef6565b670de0b6b3a76400008810158015612dc15750678ac7230489e8000088105b15612e4e57600c54606490612ddd90603263ffffffff613ff616565b811515612de657fe5b60008b8152600860205260409020600201549190049150612e0d908263ffffffff61348516565b60008a815260086020526040902060020155600c54612e32908263ffffffff61415c16565b600c5584516d09dc5ada82b70b59df0200000000018552612ef6565b67016345785d8a00008810158015612e6d5750670de0b6b3a764000088105b15612ef657600c54606490612e8990601963ffffffff613ff616565b811515612e9257fe5b60008b8152600860205260409020600201549190049150612eb9908263ffffffff61348516565b60008a815260086020526040902060020155600c54612ede908263ffffffff61415c16565b600c5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600d555b600d5485516103e890910201855260008981526009602090815260408083208d8452909152902060010154612f5d90839063ffffffff61348516565b60008a81526009602090815260408083208e84529091529020600181019190915554612f8a908990613485565b60008a81526009602090815260408083208e8452825280832093909355600e90522060050154612fc190839063ffffffff61348516565b60008b8152600e60205260409020600581019190915560060154612fec90899063ffffffff61348516565b60008b8152600e6020908152604080832060060193909355600f81528282208983529052205461302390899063ffffffff61348516565b60008b8152600f602090815260408083208a845290915290205561304b8a8a8a8a8a8a614672565b945061305b8a8a8a89868a614948565b945061306a89878a8589614ab6565b50505050505050505050565b61307e614e61565b600b546000818152600e6020526040812080546001820154600c83015460079093015491939092909182918291829182918291829182916130c5919063ffffffff61348516565b975060646130da89603063ffffffff613ff616565b8115156130e357fe5b04965060328860008b8152601160205260409020549190049650606490613111908a9063ffffffff613ff616565b81151561311a57fe5b60008b8152601160205260409020600101549190049550606490613145908a9063ffffffff613ff616565b81151561314e57fe5b04935061316984611f8287818a818e8e63ffffffff61415c16565b60008c8152600e602052604090206005015490935061319686670de0b6b3a764000063ffffffff613ff616565b81151561319f57fe5b60008d8152600e602052604090206005015491900492506131ed90670de0b6b3a7640000906131d590859063ffffffff613ff616565b8115156131de57fe5b8791900463ffffffff61415c16565b9050600081111561321d57613208858263ffffffff61415c16565b945061321a838263ffffffff61348516565b92505b60008a81526008602052604090206002015461324090889063ffffffff61348516565b60008b81526008602052604081206002019190915586111561329c57600154604051600160a060020a039091169087156108fc029088906000818181858888f19350505050158015613296573d6000803e3d6000fd5b50600095505b60008411156132e157600254604051600160a060020a039091169085156108fc029086906000818181858888f193505050501580156132df573d6000803e3d6000fd5b505b60008b8152600e602052604090206008015461330490839063ffffffff61348516565b600e60008d815260200190815260200160002060080181905550600e60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600860008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600860008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600b600081548092919060010191905055508a806001019b505042600e60008d8152602001908152602001600020600401819055506134566146504261348590919063ffffffff16565b60008c8152600e602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b818101828110156134e0576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b600061350c6135036134fe858563ffffffff61415c16565b6142b2565b611f82856142b2565b9392505050565b6000808210806135235750600382115b1561353057506002613533565b50805b919050565b600b546000818152600e602052604090206004015442908111801561359f57506000828152600e60205260409020600201548111158061359f57506000828152600e60205260409020600201548111801561359f57506000828152600e6020526040902054155b156135d6576135b184611f8289613750565b6000888152600860205260409020600301556135d1828886898988612b25565b611ab9565b6000828152600e60205260409020600201548111801561360857506000828152600e602052604090206003015460ff16155b15611ab9576000828152600e60205260409020600301805460ff1916600117905561363283613076565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600860008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b600081815260086020526040812060050154819061376f908490614c24565b6000838152600860205260409020600481015460038201546002909201546137ad926137a1919063ffffffff61348516565b9063ffffffff61348516565b905060008111156137d95760008381526008602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906137fe5750600084115b151561387a576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561388957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141580156138f0575084600185038151811015156138c857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561396c576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561397b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613abe578460018151811015156139b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613a32576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613a4157fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613abe576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613f8e5784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613afb57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b6f575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613b5057fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613bdc578482815181101515613b8257fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613bb357fe5b906020010190600160f860020a031916908160001a905350821515613bd757600192505b613f83565b8482815181101515613bea57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613cba575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613c4657fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613cba575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613c9b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613d64575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613cf057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613d64575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613d4557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613de0576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613dee57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613ecd578482600101815181101515613e2a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613ecd576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613f79575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613f0657fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613f79575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613f5a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613f8357600192505b600190910190613ac3565b600183151514613fe8576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515614007575060006134e0565b5081810281838281151561401757fe5b04146134e0576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600e60205260408120600c8101546007909101548291614098919063ffffffff61348516565b60008581526009602090815260408083208784528252808320600190810154600e8452828520600581015492015485526011909352922054929350670de0b6b3a76400009261414a9261413e916141159086906064906140ff908a9063ffffffff613ff616565b81151561410857fe5b049063ffffffff613ff616565b81151561411e57fe5b6000898152600e602052604090206008015491900463ffffffff61348516565b9063ffffffff613ff616565b81151561415357fe5b04949350505050565b6000828211156141b6576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600082815260096020908152604080832084845282528083206002810154600190910154600e9093529083206008015461350c92670de0b6b3a76400009161420391613ff6565b81151561420c57fe5b049063ffffffff61415c16565b600061350c6142278461423a565b611f8261423a868663ffffffff61348516565b60006309502f906142a26d03b2a1d15167e7c5699bfde00000611f8261429d7a0dac7055469777a6122ee4310dd6c14410500f29048400000000006137a16b01027e72f1f128130880000061413e8a670de0b6b3a764000063ffffffff613ff616565b614cbb565b8115156142ab57fe5b0492915050565b60006142c5670de0b6b3a7640000614d0e565b6142a260026142f86142e586670de0b6b3a764000063ffffffff613ff616565b65886c8f6730709063ffffffff613ff616565b81151561430157fe5b046137a161430e86614d0e565b6304a817c89063ffffffff613ff616565b614327614e61565b6000838152600860205260409020600501541561435b5760008381526008602052604090206005015461435b908490614c24565b50600b546000838152600860205260409020600501558051600a0181528092915050565b6000818152600e6020526040812060020154429190821180156143ae57506000838152600e6020526040902054155b156143d2576143cb826137a1603c670de0b6b3a764000088614108565b90506143ff565b6000838152600e60205260409020600201546143fc906137a1603c670de0b6b3a764000088614108565b90505b6144116146508363ffffffff61348516565b811015614431576000838152600e60205260409020600201819055611e4f565b6144436146508363ffffffff61348516565b6000848152600e602052604090206002015550505050565b6000806145cc436137a142336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106144d65780518252601f1990920191602091820191016144b7565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561450c57fe5b046137a1456137a142416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106145855780518252601f199092019160209182019101614566565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156145bb57fe5b046137a1424463ffffffff61348516565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061461a5780518252601f1990920191602091820191016145fb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600d5490945092506103e89150839050046103e80282031015614669576001915061466e565b600091505b5090565b61467a614e61565b6000808080806146a260646146968c600363ffffffff613ff616565b9063ffffffff614d1a16565b600554909450600160a060020a03161561474057600560009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561472257600080fd5b505af1158015614736573d6000803e3d6000fd5b5050505050614753565b614750858563ffffffff61348516565b94505b61476960646146968c600863ffffffff613ff616565b60008a8152600860205260409020600101549093501561481e576000898152600860205260409020600401546147a690849063ffffffff61348516565b60008a815260086020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614863565b600083111561486357600354604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015614861573d6000803e3d6000fd5b505b61487960646146968c600263ffffffff613ff616565b600454604051919350600160a060020a03169083156108fc029084906000818181858888f193505050501580156148b4573d6000803e3d6000fd5b506000888152601060205260409020600101546148df90606490614696908d9063ffffffff613ff616565b90506148f1858263ffffffff61348516565b9450600085111561493857600154604051600160a060020a039091169086156108fc029087906000818181858888f19350505050158015614936573d6000803e3d6000fd5b505b50949a9950505050505050505050565b614950614e61565b600084815260106020526040812054819081908190606490614979908b9063ffffffff613ff616565b81151561498257fe5b0493506064890492506149a083600c5461348590919063ffffffff16565b600c55600088815260106020526040902060010154614a1190614a04906064906149d1908d9063ffffffff613ff616565b8115156149da57fe5b0460646149ee8d600e63ffffffff613ff616565b8115156149f757fe5b049063ffffffff61348516565b8a9063ffffffff61415c16565b9850614a23898563ffffffff61415c16565b9150614a318b8b868a614d28565b90506000811115614a4f57614a4c848263ffffffff61415c16565b93505b60008b8152600e6020526040902060070154614a75906137a1848463ffffffff61348516565b60008c8152600e602052604090206007015560e0860151614a9d90859063ffffffff61348516565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600b54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160086000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600c54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614c3083836141bc565b90506000811115614cb657600083815260086020526040902060030154614c5e90829063ffffffff61348516565b6000848152600860209081526040808320600301939093556009815282822085835290522060020154614c9890829063ffffffff61348516565b60008481526009602090815260408083208684529091529020600201555b505050565b6000806002614ccb846001613485565b811515614cd457fe5b0490508291505b818110156137dd578091506002614cfd8285811515614cf657fe5b0483613485565b811515614d0657fe5b049050614cdb565b60006134e08283613ff6565b600080828481151561415357fe5b6000848152600e602052604081206005015481908190614d5686670de0b6b3a764000063ffffffff613ff616565b811515614d5f57fe5b6000898152600e60205260409020600801549190049250614d8790839063ffffffff61348516565b6000888152600e6020526040902060080155670de0b6b3a7640000614db2838663ffffffff613ff616565b811515614dbb57fe5b60008881526009602090815260408083208c8452825280832060020154600e90925290912060080154929091049250614e0e916137a1908490670de0b6b3a764000090614203908a63ffffffff613ff616565b60008781526009602090815260408083208b8452825280832060020193909355600e90522060050154614e5690670de0b6b3a7640000906131d590859063ffffffff613ff616565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e00000000000000000000000000a165627a7a7230582040422d399b0227a5218f4fd9fc5b55341072235293201478de00116e655cb1fa0029

Swarm Source

bzzr://40422d399b0227a5218f4fd9fc5b55341072235293201478de00116e655cb1fa

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.