ETH Price: $3,364.46 (-8.52%)

Contract

0xB8F93e49A3278bb92f643Ca2491cf80bfa0a01b7
 
Transaction Hash
Method
Block
From
To
Withdraw164029542023-01-14 5:28:47706 days ago1673674127IN
0xB8F93e49...bfa0a01b7
0 ETH0.0005400518.25249795
Withdraw94275872020-02-06 6:52:161778 days ago1580971936IN
0xB8F93e49...bfa0a01b7
0 ETH0.004114341
Withdraw67970502018-11-29 23:24:492212 days ago1543533889IN
0xB8F93e49...bfa0a01b7
0 ETH0.000221035
Withdraw66608302018-11-07 15:13:262234 days ago1541603606IN
0xB8F93e49...bfa0a01b7
0 ETH0.0009141622
Withdraw66601312018-11-07 12:35:252234 days ago1541594125IN
0xB8F93e49...bfa0a01b7
0 ETH0.000377765.11
Withdraw65879382018-10-26 16:12:552246 days ago1540570375IN
0xB8F93e49...bfa0a01b7
0 ETH0.000627417
Buy65869582018-10-26 12:27:162246 days ago1540556836IN
0xB8F93e49...bfa0a01b7
0.001 ETH0.002753886
Buy65840162018-10-26 0:47:242247 days ago1540514844IN
0xB8F93e49...bfa0a01b7
0.01 ETH0.000677382.6
Withdraw65822172018-10-25 17:38:122247 days ago1540489092IN
0xB8F93e49...bfa0a01b7
0 ETH0.000532859
Withdraw65812352018-10-25 13:59:532247 days ago1540475993IN
0xB8F93e49...bfa0a01b7
0 ETH0.000402719.11
Withdraw65799712018-10-25 9:03:072247 days ago1540458187IN
0xB8F93e49...bfa0a01b7
0 ETH0.001015799
Buy65799542018-10-25 8:59:302247 days ago1540457970IN
0xB8F93e49...bfa0a01b7
0.001 ETH0.003671848
Withdraw65790882018-10-25 5:38:182248 days ago1540445898IN
0xB8F93e49...bfa0a01b7
0 ETH0.00048958.2
Buy65779622018-10-25 1:02:572248 days ago1540429377IN
0xB8F93e49...bfa0a01b7
0.04 ETH0.001563286
Buy Xname65779622018-10-25 1:02:572248 days ago1540429377IN
0xB8F93e49...bfa0a01b7
0.1 ETH0.002186568
Buy65778012018-10-25 0:25:002248 days ago1540427100IN
0xB8F93e49...bfa0a01b7
0.003 ETH0.001852387.11
Withdraw65777792018-10-25 0:20:152248 days ago1540426815IN
0xB8F93e49...bfa0a01b7
0 ETH0.00031437.11
Withdraw65762242018-10-24 18:12:012248 days ago1540404721IN
0xB8F93e49...bfa0a01b7
0 ETH0.000397859
Withdraw65748602018-10-24 13:03:062248 days ago1540386186IN
0xB8F93e49...bfa0a01b7
0 ETH0.000358068.1
Withdraw65745442018-10-24 11:42:202248 days ago1540381340IN
0xB8F93e49...bfa0a01b7
0 ETH0.000606969
Withdraw65743832018-10-24 11:09:452248 days ago1540379385IN
0xB8F93e49...bfa0a01b7
0 ETH0.000896310
Buy65743762018-10-24 11:08:032248 days ago1540379283IN
0xB8F93e49...bfa0a01b7
0.001 ETH0.0045898110
Withdraw65743692018-10-24 11:06:532248 days ago1540379213IN
0xB8F93e49...bfa0a01b7
0 ETH0.0005969610
Buy Xname65743142018-10-24 10:53:212248 days ago1540378401IN
0xB8F93e49...bfa0a01b7
1 ETH0.002883210
Buy Xname65743072018-10-24 10:50:512248 days ago1540378251IN
0xB8F93e49...bfa0a01b7
0.2 ETH0.00260839.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
94275872020-02-06 6:52:161778 days ago1580971936
0xB8F93e49...bfa0a01b7
0.88088 ETH
67970502018-11-29 23:24:492212 days ago1543533889
0xB8F93e49...bfa0a01b7
0.02098482 ETH
66608302018-11-07 15:13:262234 days ago1541603606
0xB8F93e49...bfa0a01b7
0.264 ETH
66601312018-11-07 12:35:252234 days ago1541594125
0xB8F93e49...bfa0a01b7
0.8096 ETH
65879382018-10-26 16:12:552246 days ago1540570375
0xB8F93e49...bfa0a01b7
0.00209848 ETH
65869582018-10-26 12:27:162246 days ago1540556836
0xB8F93e49...bfa0a01b7
0.000005 ETH
65869582018-10-26 12:27:162246 days ago1540556836
0xB8F93e49...bfa0a01b7
0.000005 ETH
65840162018-10-26 0:47:242247 days ago1540514844
0xB8F93e49...bfa0a01b7
0.00005 ETH
65840162018-10-26 0:47:242247 days ago1540514844
0xB8F93e49...bfa0a01b7
0.00005 ETH
65822172018-10-25 17:38:122247 days ago1540489092
0xB8F93e49...bfa0a01b7
0.05211926 ETH
65812352018-10-25 13:59:532247 days ago1540475993
0xB8F93e49...bfa0a01b7
0.00393534 ETH
65799712018-10-25 9:03:072247 days ago1540458187
0xB8F93e49...bfa0a01b7
0.13248993 ETH
65799542018-10-25 8:59:302247 days ago1540457970
0xB8F93e49...bfa0a01b7
0.000005 ETH
65799542018-10-25 8:59:302247 days ago1540457970
0xB8F93e49...bfa0a01b7
0.000005 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.0002 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.0002 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.0005 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.0005 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.001 ETH
65779622018-10-25 1:02:572248 days ago1540429377
0xB8F93e49...bfa0a01b7
0.002 ETH
65778012018-10-25 0:25:002248 days ago1540427100
0xB8F93e49...bfa0a01b7
0.000015 ETH
65778012018-10-25 0:25:002248 days ago1540427100
0xB8F93e49...bfa0a01b7
0.000015 ETH
65777792018-10-25 0:20:152248 days ago1540426815
0xB8F93e49...bfa0a01b7
0.02758589 ETH
65762242018-10-24 18:12:012248 days ago1540404721
0xB8F93e49...bfa0a01b7
0.12596407 ETH
65748602018-10-24 13:03:062248 days ago1540386186
0xB8F93e49...bfa0a01b7
0.20994013 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FairBank

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-27
*/

pragma solidity ^0.4.25;

/**
 *
 *  https://fairdapp.com/bank/  https://fairdapp.com/bank/   https://fairdapp.com/bank/
 *   
 *       _______     _       ______  _______ ______ ______  
 *      (_______)   (_)     (______)(_______|_____ (_____ \ 
 *       _____ _____ _  ____ _     _ _______ _____) )____) )
 *      |  ___|____ | |/ ___) |   | |  ___  |  ____/  ____/ 
 *      | |   / ___ | | |   | |__/ /| |   | | |    | |      
 *      |_|   \_____|_|_|   |_____/ |_|   |_|_|    |_|      
 *                                                     
 *               ______              _                              
 *              (____  \            | |                             
 *               ____)  )_____ ____ | |  _                          
 *              |  __  ((____ |  _ \| |_/ )                         
 *              | |__)  ) ___ | | | |  _ (                          
 *              |______/\_____|_| |_|_| \_)                         
 *                                                    
 *         ______ _             _                            
 *        / _____|_)           | |         _                 
 *       ( (____  _ ____  _   _| | _____ _| |_ ___   ____    
 *        \____ \| |    \| | | | |(____ (_   _) _ \ / ___)   
 *        _____) ) | | | | |_| | |/ ___ | | || |_| | |       
 *       (______/|_|_|_|_|____/ \_)_____|  \__)___/|_|       
 *                                                   
 *   
 *  Warning:
 *     
 *  FairDAPP – Bank Simulator (actually this probably has more resemblance 
 *  of a government bond simulator but Bank is a more catchy name)
 *  is a system designed to explore how a real world financial bank would
 *  operate during a financial collapse without quantitative easing and bail outs.
 *  This system is simulated through open source smart contract codes and pre-defined rules.
 *  This contract may only be used internally for study purposes and all could be 
 *  lost by sending anything to this contract address. 
 *  All users are prohibited to interact with this contract if this 
 *  contract is in conflict with user’s local regulations or laws.
 * 
 *  -Original Contract built by the FairDAPP Community
 *  -Code Audited by 8Bit & Etherguy (formula calculations are excluded from the audit)
 *  
 *  -The contract has an activation switch to activate the system.
 *  -The resetTime and reduceTime functions have an on and off switch which the developer owner can control.
 *  -No one can change anything else once the contract has been deployed.
 *  
 *  -No anti-whales and almost no restrictions on what a user can do!
 *  -There is no need to FOMO, early players have no significant advantage over later players.
 *      -Scaling is slow, the system is designed for players to stake many stages. 
 *  -The contract is fully solvent in any event (assuming there are no bugs).
 *      -ie. The contract will always payout what it owes. 
 *
**/


contract ERC721{
    
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function approve(address _to, uint256 _tokenId) public;
    function takeOwnership(uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    function transferFrom(address _from, address _to, uint256 _tokenId) public;
    
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract FairBank is ERC721{
    using SafeMath for uint256;
    using NameFilter for string;
    address public developerAddr;

    string public name = "FairDAPP - Bank Simulator";
    string public symbol = "FBank";
    
    uint256 public stageDuration;
    uint256 public standardProtectRatio;
    bool public activated = false;
    bool public modifyCountdown = false;
    
    uint256 public rId;
    uint256 public sId;
    
    mapping (uint256 => FBankdatasets.Round) public round;
    mapping (uint256 => mapping (uint256 => FBankdatasets.Stage)) public stage;
    
    mapping (address => bytes32) public register;
    mapping (bytes32 => address) public playerName;
    
    mapping (address => uint256[]) public playerGoodsList;
    mapping (address => uint256[]) public playerWithdrawList;
    
    /**
     * Anti clone protection.
     * Do not clone this contract without permission even if you manage to break the conceal. 
     * The concealed code contains core calculations necessary for this contract to function, read line 1058. 
     * This contract can be licensed for a fee, contact us instead of cloning!
     */ 
    FairBankCompute constant private bankCompute = FairBankCompute(0x26DA117A72DBcB686c2FCF88c4BFC6110cAe0464);
    
    FBankdatasets.Goods[] public goodsList;
    
    FBankdatasets.Card[6] public cardList;
    mapping (uint256 => address) public cardIndexToApproved;
    
    modifier registerVerify() {
        require(msg.value == 10000000000000000, "registration fee is 0.01 ether, please set the exact amount");
        _;
    }
    
    modifier isActivated() {
        require(activated == true, "FairBank its not ready yet.  check ?eta in discord"); 
        _;
    }
    
    modifier isDeveloperAddr() {
        require(msg.sender == developerAddr, "Permission denied");
        _;
    }
    
    modifier modifyCountdownVerify() {
        require(modifyCountdown == true, "this feature is not turned on or has been turned off"); 
        _;
    }
     
    modifier senderVerify() {
        require (msg.sender == tx.origin, "sender does not meet the rules");
        _;
    }
    
    /**
     * Don't toy or spam the contract, it may raise the gas cost for everyone else.
     * The scientists will take anything below 0.001 ETH sent to the contract.
     * Thank you for your donation.
     */
    modifier amountVerify() {
        if(msg.value < 1000000000000000){
            developerAddr.send(msg.value);
        }else{
            require(msg.value >= 1000000000000000, "minimum amount is 0.001 ether");
            _;
        }
    }
    
    modifier playerVerify() {
        require(playerGoodsList[msg.sender].length > 0, "user has not purchased the product or has completed the withdrawal");
        _;
    }
    
    modifier stepSizeVerify(uint256 _stepSize) {
        require(_stepSize <= 1000000, "step size must not exceed 1000000");
        _;
    }
    
    constructor()
        public
    {
        developerAddr = msg.sender;
        
        stageDuration = 64800;
        standardProtectRatio = 57;
        uint256 i;
        while(i < cardList.length){
            cardList[i].playerAddress = developerAddr;
            cardList[i].amount = 5000000000000000000; 
            i++;
        }
    }
    
    function registered(string _playerName)
        senderVerify()
        registerVerify()
        payable
        public
    {
        bytes32 _name = _playerName.nameFilter();
        require(_name != bytes32(0), "name cannot be empty");
        require(playerName[_name] == address(0), "this name has already been registered");
        require(register[msg.sender] == bytes32(0), "please do not repeat registration");
        
        playerName[_name] = msg.sender;
        register[msg.sender] = _name;
        developerAddr.send(msg.value);
    }
    
    /**
     * Activation of contract with settings
     */
    function activate()
        senderVerify()
        isDeveloperAddr()
        public
    {
        require(activated == false, "FairBank already activated");
        
        activated = true;
        rId = 1;
        sId = 1;
        round[rId].start = now;
        stage[rId][sId].start = now;
    }
    
    function openModifyCountdown()
        senderVerify()
        isDeveloperAddr()
        public
    {
        require(modifyCountdown == false, "Time service is already open");
        
        modifyCountdown = true;
        
    }
    
    function closeModifyCountdown()
        senderVerify()
        isDeveloperAddr()
        public
    {
        require(modifyCountdown == true, "Time service is already open");
        
        modifyCountdown = false;
        
    }
    
    function purchaseCard(uint256 _cId)
        isActivated()
        senderVerify()
        payable
        public
    {
        
        address _player = msg.sender;
        uint256 _amount = msg.value;
        uint256 _purchasePrice = cardList[_cId].amount.mul(110) / 100;
        
        require(
            cardList[_cId].playerAddress != address(0) 
            && cardList[_cId].playerAddress != _player 
            && _amount >= _purchasePrice, 
            "Failed purchase"
        );
        
        if(cardIndexToApproved[_cId] != address(0)){
            cardIndexToApproved[_cId].send(
                cardList[_cId].amount.mul(105) / 100
                );
            delete cardIndexToApproved[_cId];
        }else
            cardList[_cId].playerAddress.send(
                cardList[_cId].amount.mul(105) / 100
                );
                
        developerAddr.send(cardList[_cId].amount.mul(5) / 100);
        if(_amount > _purchasePrice)
            _player.send(_amount.sub(_purchasePrice));
            
        cardList[_cId].amount = _purchasePrice;
        cardList[_cId].playerAddress = _player;
        
    }
    
    /**
     * Fallback function to handle ethereum that was send straight to the contract
     * Unfortunately we cannot use a referral address this way.
     */
    function()
        isActivated()
        senderVerify()
        amountVerify()
        payable
        public
    {
        buyAnalysis(100, standardProtectRatio, address(0));
    }

    function buy(uint256 _stepSize, uint256 _protectRatio, address _recommendAddr)
        isActivated()
        senderVerify()
        amountVerify()
        stepSizeVerify(_stepSize)
        public
        payable
    {
        buyAnalysis(
            _stepSize <= 0 ? 100 : _stepSize, 
            _protectRatio <= 100 ? _protectRatio : standardProtectRatio, 
            _recommendAddr
            );
    }
    
    function buyXname(uint256 _stepSize, uint256 _protectRatio, string _recommendName)
        isActivated()
        senderVerify()
        amountVerify()
        stepSizeVerify(_stepSize)
        public
        payable
    {
        buyAnalysis(
            _stepSize <= 0 ? 100 : _stepSize, 
            _protectRatio <= 100 ? _protectRatio : standardProtectRatio, 
            playerName[_recommendName.nameFilter()]
            );
    }
    
    /**
     * Standard withdraw function.
     */
    function withdraw()
        isActivated()
        senderVerify()
        playerVerify()
        public
    {
        
        address _player = msg.sender;
        uint256[] memory _playerGoodsList = playerGoodsList[_player];
        uint256 length = _playerGoodsList.length;
        uint256 _totalAmount;
        uint256 _amount;
        uint256 _withdrawSid;
        uint256 _reachAmount;
        bool _finish;
        uint256 i;
        
        delete playerGoodsList[_player];
        while(i < length){
            
            (_amount, _withdrawSid, _reachAmount, _finish) = getEarningsAmountByGoodsIndex(_playerGoodsList[i]);
            
            if(_finish == true){
                playerWithdrawList[_player].push(_playerGoodsList[i]);
            }else{
                goodsList[_playerGoodsList[i]].withdrawSid = _withdrawSid;
                goodsList[_playerGoodsList[i]].reachAmount = _reachAmount;
                playerGoodsList[_player].push(_playerGoodsList[i]);
            }
            
            _totalAmount = _totalAmount.add(_amount);
            i++;
        }
        _player.transfer(_totalAmount);
    }
     
     /**
     * Backup withdraw function in case gas is too high to use standard withdraw.
     */
    function withdrawByGid(uint256 _gId)
        isActivated()
        senderVerify()
        playerVerify()
        public
    {
        address _player = msg.sender;
        uint256 _amount;
        uint256 _withdrawSid;
        uint256 _reachAmount;
        bool _finish;
        
        (_amount, _withdrawSid, _reachAmount, _finish) = getEarningsAmountByGoodsIndex(_gId);
            
        if(_finish == true){
            
            for(uint256 i = 0; i < playerGoodsList[_player].length; i++){
                if(playerGoodsList[_player][i] == _gId)
                    break;
            }
            require(i < playerGoodsList[_player].length, "gid is wrong");
            
            playerWithdrawList[_player].push(_gId);
            playerGoodsList[_player][i] = playerGoodsList[_player][playerGoodsList[_player].length - 1];
            playerGoodsList[_player].length--;
        }else{
            goodsList[_gId].withdrawSid = _withdrawSid;
            goodsList[_gId].reachAmount = _reachAmount;
        }
        
        _player.transfer(_amount);
    }
    
    function resetTime()
        modifyCountdownVerify()
        senderVerify()
        public
        payable
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _amount = msg.value;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _costAmount = _targetAmount.mul(20) / 100;
        
        if(_costAmount > 3 ether)
            _costAmount = 3 ether;
        require(_amount >= _costAmount, "Not enough price");
        
        stage[_rId][_sId].start = now;
        
        cardList[5].playerAddress.send(_costAmount / 2);
        developerAddr.send(_costAmount / 2);
        
        if(_amount > _costAmount)
            msg.sender.send(_amount.sub(_costAmount));
        
    }
    
    function reduceTime()
        modifyCountdownVerify()
        senderVerify()
        public
        payable
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _amount = msg.value;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ?
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _costAmount = _targetAmount.mul(30) / 100;
        
        if(_costAmount > 3 ether)
            _costAmount = 3 ether;
        require(_amount >= _costAmount, "Not enough price");
        
        stage[_rId][_sId].start = now - stageDuration + 1800;
        
        cardList[5].playerAddress.send(_costAmount / 2);
        developerAddr.send(_costAmount / 2);
        
        if(_amount > _costAmount)
            msg.sender.send(_amount.sub(_costAmount));
        
    }
    
    /**
     * Core logic to analyse buy behaviour. 
     */
    function buyAnalysis(uint256 _stepSize, uint256 _protectRatio, address _recommendAddr)
        private
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _targetExpectedAmount = getStageTargetAmount(_sId);
        uint256 _targetAmount = 
            stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
            _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
        uint256 _stageTargetBalance = 
            stage[_rId][_sId].amount > 0 ? 
            _targetAmount.sub(stage[_rId][_sId].amount) : _targetAmount;
        
        if(now > stage[_rId][_sId].start.add(stageDuration) 
            && _targetAmount > stage[_rId][_sId].amount
        ){
            
            endRound(_rId, _sId);
            
            _rId = rId;
            _sId = sId;
            stage[_rId][_sId].start = now;
            
            _targetExpectedAmount = getStageTargetAmount(_sId);
            _targetAmount = 
                stage[_rId][_sId].dividendAmount <= _targetExpectedAmount ? 
                _targetExpectedAmount : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
            _stageTargetBalance = 
                stage[_rId][_sId].amount > 0 ? 
                _targetAmount.sub(stage[_rId][_sId].amount) : _targetAmount;
        }
        if(_stageTargetBalance > msg.value)
            buyDataRecord(
                _rId, 
                _sId, 
                _targetAmount, 
                msg.value, 
                _stepSize, 
                _protectRatio
                );
        else
            multiStake(
                msg.value, 
                _stepSize, 
                _protectRatio, 
                _targetAmount, 
                _stageTargetBalance
                );
        /* This is a backstop check to ensure that the contract will always be solvent.
        It would reject any stakes with a protection ratio that the contract may not be able to repay.
        This backstop should never be needed under current settings. */
        require(
            (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ) > 0, "data error"
        );    
        bankerFeeDataRecord(_recommendAddr, msg.value, _protectRatio);    
    }
    
    function multiStake(uint256 _amount, uint256 _stepSize, uint256 _protectRatio, uint256 _targetAmount, uint256 _stageTargetBalance)
        private
    {
        uint256 _rId = rId;
        uint256 _sId = sId;
        uint256 _crossStageNum = 1;
        uint256 _protectTotalAmount;
        uint256 _dividendTotalAmount;
            
        while(true){

            if(_crossStageNum == 1){
                playerDataRecord(
                    _rId, 
                    _sId, 
                    _amount, 
                    _stageTargetBalance, 
                    _stepSize, 
                    _protectRatio, 
                    _crossStageNum
                    );
                round[_rId].amount = round[_rId].amount.add(_amount);
                round[_rId].protectAmount = round[_rId].protectAmount.add(
                    _amount.mul(_protectRatio.mul(88)) / 10000);    
            }
                
            buyStageDataRecord(
                _rId, 
                _sId, 
                _targetAmount, 
                _stageTargetBalance, 
                _sId.
                add(_stepSize), 
                _protectRatio
                );
            _dividendTotalAmount = _dividendTotalAmount.add(stage[_rId][_sId].dividendAmount);
            _protectTotalAmount = _protectTotalAmount.add(stage[_rId][_sId].protectAmount);
            
            _sId++;
            _amount = _amount.sub(_stageTargetBalance);
            _targetAmount = 
                stage[_rId][_sId].dividendAmount <= getStageTargetAmount(_sId) ? 
                getStageTargetAmount(_sId) : stage[_rId][_sId].dividendAmount;
            _targetAmount = _targetAmount.mul(100) / 88;
            _stageTargetBalance = _targetAmount;
            _crossStageNum++;
            if(_stageTargetBalance >= _amount){
                buyStageDataRecord(
                    _rId, 
                    _sId, 
                    _targetAmount, 
                    _amount, 
                    _sId.add(_stepSize), 
                    _protectRatio
                    );
                playerDataRecord(
                    _rId, 
                    _sId, 
                    0, 
                    _amount, 
                    _stepSize, 
                    _protectRatio, 
                    _crossStageNum
                    );
                    
                if(_targetAmount == _amount)
                    _sId++;
                    
                stage[_rId][_sId].start = now;
                sId = _sId;
                
                round[_rId].protectAmount = round[_rId].protectAmount.sub(_protectTotalAmount);
                round[_rId].dividendAmount = round[_rId].dividendAmount.add(_dividendTotalAmount);
                break;
            }
        }
    }
    
    /**
     * Records all data.
     */
    function buyDataRecord(uint256 _rId, uint256 _sId, uint256 _targetAmount, uint256 _amount, uint256 _stepSize, uint256 _protectRatio)
        private
    {
        uint256 _expectEndSid = _sId.add(_stepSize);
        uint256 _protectAmount = _amount.mul(_protectRatio.mul(88)) / 10000;
        
        round[_rId].amount = round[_rId].amount.add(_amount);
        round[_rId].protectAmount = round[_rId].protectAmount.add(_protectAmount);
        
        stage[_rId][_sId].amount = stage[_rId][_sId].amount.add(_amount);
        stage[_rId][_expectEndSid].protectAmount = stage[_rId][_expectEndSid].protectAmount.add(_protectAmount);
        stage[_rId][_expectEndSid].dividendAmount = 
            stage[_rId][_expectEndSid].dividendAmount.add(
                computeEarningsAmount(_sId, 
                _amount, 
                _targetAmount, 
                _expectEndSid, 
                100 - _protectRatio
                )
                );
                
        FBankdatasets.Goods memory _goods;
        _goods.rId = _rId;
        _goods.startSid = _sId;
        _goods.amount = _amount;
        _goods.endSid = _expectEndSid;
        _goods.protectRatio = _protectRatio;
        playerGoodsList[msg.sender].push(goodsList.push(_goods) - 1);
    }
    
    /**
     * Records the stage data.
     */
    function buyStageDataRecord(uint256 _rId, uint256 _sId, uint256 _targetAmount, uint256 _amount, uint256 _expectEndSid, uint256 _protectRatio)
        private
    {
        uint256 _protectAmount = _amount.mul(_protectRatio.mul(88)) / 10000;
        
        if(_targetAmount != _amount)
            stage[_rId][_sId].amount = stage[_rId][_sId].amount.add(_amount);
        stage[_rId][_expectEndSid].protectAmount = stage[_rId][_expectEndSid].protectAmount.add(_protectAmount);
        stage[_rId][_expectEndSid].dividendAmount = 
            stage[_rId][_expectEndSid].dividendAmount.add(
                computeEarningsAmount(
                    _sId, 
                    _amount, 
                    _targetAmount, 
                    _expectEndSid, 
                    100 - _protectRatio
                    )
                );
    }
    
    /**
     * Records the player data.
     */
    function playerDataRecord(uint256 _rId, uint256 _sId, uint256 _totalAmount, uint256 _stageBuyAmount, uint256 _stepSize, uint256 _protectRatio, uint256 _crossStageNum)
        private
    {    
        if(_crossStageNum <= 1){
            FBankdatasets.Goods memory _goods;
            _goods.rId = _rId;
            _goods.startSid = _sId;
            _goods.amount = _totalAmount;
            _goods.stepSize = _stepSize;
            _goods.protectRatio = _protectRatio;
            if(_crossStageNum == 1)
                _goods.startAmount = _stageBuyAmount;
            playerGoodsList[msg.sender].push(goodsList.push(_goods) - 1);
        }
        else{
            uint256 _goodsIndex = goodsList.length - 1;
            goodsList[_goodsIndex].endAmount = _stageBuyAmount;
            goodsList[_goodsIndex].endSid = _sId;
        }
        
    }
    
    function bankerFeeDataRecord(address _recommendAddr, uint256 _amount, uint256 _protectRatio)
        private
    {
        uint256 _jackpotProportion = 80;
        if(_recommendAddr != address(0) 
            && _recommendAddr != msg.sender 
            && (register[_recommendAddr] != bytes32(0))
        ){
            _recommendAddr.send(_amount / 50);
            msg.sender.send(_amount / 100);
        }
        else
            _jackpotProportion = 110;
            
        round[rId].jackpotAmount = round[rId].jackpotAmount.add(_amount.mul(_jackpotProportion).div(1000));

        uint256 _cardAmount = _amount / 200;
        if(_protectRatio == 0)
            cardList[0].playerAddress.send(_cardAmount);
        else if(_protectRatio > 0 && _protectRatio < 57)
            cardList[1].playerAddress.send(_cardAmount);   
        else if(_protectRatio == 57)
            cardList[2].playerAddress.send(_cardAmount);   
        else if(_protectRatio > 57 && _protectRatio < 100)
            cardList[3].playerAddress.send(_cardAmount);   
        else if(_protectRatio == 100)
            cardList[4].playerAddress.send(_cardAmount);   
        
        developerAddr.send(_amount / 200);
    }
    
    function endRound(uint256 _rId, uint256 _sId)
        private
    {
        round[_rId].end = now;
        round[_rId].ended = true;
        round[_rId].endSid = _sId;
        
        if(stage[_rId][_sId].amount > 0)
            round[_rId + 1].jackpotAmount = (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ).mul(20).div(100);
        else
            round[_rId + 1].jackpotAmount = (
                round[_rId].jackpotAmount.add(round[_rId].amount.mul(88) / 100)
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            );
        
        round[_rId + 1].start = now;
        rId++;
        sId = 1;
    }
    
    function getStageTargetAmount(uint256 _sId)
        public
        view
        returns(uint256)
    {
        return bankCompute.getStageTargetAmount(_sId);
    }
    
    function computeEarningsAmount(uint256 _sId, uint256 _amount, uint256 _currentTargetAmount, uint256 _expectEndSid, uint256 _ratio)
        public
        view
        returns(uint256)
    {
        return bankCompute.computeEarningsAmount(_sId, _amount, _currentTargetAmount, _expectEndSid, _ratio);
    }
    
    function getEarningsAmountByGoodsIndex(uint256 _goodsIndex)
        public
        view
        returns(uint256, uint256, uint256, bool)
    {
        FBankdatasets.Goods memory _goods = goodsList[_goodsIndex];
        uint256 _sId = sId;
        uint256 _amount;
        uint256 _targetExpectedAmount;
        uint256 _targetAmount;
        if(_goods.stepSize == 0){
            if(round[_goods.rId].ended == true){
                if(round[_goods.rId].endSid > _goods.endSid){
                    _targetExpectedAmount = getStageTargetAmount(_goods.startSid);
                    _targetAmount = 
                        stage[_goods.rId][_goods.startSid].dividendAmount <= _targetExpectedAmount ? 
                        _targetExpectedAmount : stage[_goods.rId][_goods.startSid].dividendAmount;
                    _targetAmount = _targetAmount.mul(100) / 88;
                    _amount = computeEarningsAmount(
                        _goods.startSid, 
                        _goods.amount, 
                        _targetAmount, 
                        _goods.endSid, 
                        100 - _goods.protectRatio
                        );
                    
                }else
                    _amount = _goods.amount.mul(_goods.protectRatio.mul(88)) / 10000;
                    
                if(round[_goods.rId].endSid == _goods.startSid)
                    _amount = _amount.add(
                        _goods.amount.mul(
                            getRoundJackpot(_goods.rId)
                            ).div(stage[_goods.rId][_goods.startSid].amount)
                            );
                
                return (_amount, 0, 0, true);
            }else{
                if(_sId > _goods.endSid){
                    _targetExpectedAmount = getStageTargetAmount(_goods.startSid);
                    _targetAmount = 
                        stage[_goods.rId][_goods.startSid].dividendAmount <= _targetExpectedAmount ?
                        _targetExpectedAmount : stage[_goods.rId][_goods.startSid].dividendAmount;
                    _targetAmount = _targetAmount.mul(100) / 88;
                    _amount = computeEarningsAmount(
                        _goods.startSid, 
                        _goods.amount, 
                        _targetAmount, 
                        _goods.endSid, 
                        100 - _goods.protectRatio
                        );
                }else
                    return (0, 0, 0, false);
            }
            return (_amount, 0, 0, true);
            
        }else{
            
            uint256 _startSid = _goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid;
            uint256 _ratio = 100 - _goods.protectRatio;
            uint256 _reachAmount = _goods.reachAmount;
            if(round[_goods.rId].ended == true){
                
                while(true){
                    
                    if(_startSid - (_goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid) > 100){
                        return (_amount, _startSid, _reachAmount, false);
                    }
                    
                    if(round[_goods.rId].endSid > _startSid.add(_goods.stepSize)){
                        _targetExpectedAmount = getStageTargetAmount(_startSid);
                        _targetAmount = 
                            stage[_goods.rId][_startSid].dividendAmount <= _targetExpectedAmount ? 
                            _targetExpectedAmount : stage[_goods.rId][_startSid].dividendAmount;
                        _targetAmount = _targetAmount.mul(100) / 88;
                        if(_startSid == _goods.endSid){
                            _amount = _amount.add(
                                computeEarningsAmount(
                                    _startSid, 
                                    _goods.endAmount, 
                                    _targetAmount, 
                                    _startSid.add(_goods.stepSize), 
                                    _ratio
                                    )
                                );
                            return (_amount, _goods.endSid, 0, true);
                        }
                        _amount = _amount.add(
                            computeEarningsAmount(
                                _startSid, 
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount, 
                                _targetAmount, 
                                _startSid.add(_goods.stepSize), 
                                _ratio
                                )
                            );
                        _reachAmount = 
                            _reachAmount.add(
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount
                            );
                    }else{
                        
                        _amount = _amount.add(
                            (_goods.amount.sub(_reachAmount))
                            .mul(_goods.protectRatio.mul(88)) / 10000
                            );
                        
                        if(round[_goods.rId].endSid == _goods.endSid)
                            _amount = _amount.add(
                                _goods.endAmount.mul(getRoundJackpot(_goods.rId))
                                .div(stage[_goods.rId][_goods.endSid].amount)
                                );
                        
                        return (_amount, _goods.endSid, 0, true);
                    }
                    
                    _startSid++;
                }
                
            }else{
                while(true){
                    
                    if(_startSid - (_goods.withdrawSid == 0 ? _goods.startSid : _goods.withdrawSid) > 100){
                        return (_amount, _startSid, _reachAmount, false);
                    }
                    
                    if(_sId > _startSid.add(_goods.stepSize)){
                        _targetExpectedAmount = getStageTargetAmount(_startSid);
                        _targetAmount = 
                            stage[_goods.rId][_startSid].dividendAmount <= _targetExpectedAmount ? 
                            _targetExpectedAmount : stage[_goods.rId][_startSid].dividendAmount;
                        _targetAmount = _targetAmount.mul(100) / 88;
                        if(_startSid == _goods.endSid){
                            _amount = _amount.add(
                                computeEarningsAmount(
                                    _startSid, 
                                    _goods.endAmount, 
                                    _targetAmount, 
                                    _startSid.add(_goods.stepSize), 
                                    _ratio
                                    )
                                );
                            return (_amount, _goods.endSid, 0, true);
                        }
                        _amount = _amount.add(
                            computeEarningsAmount(
                                _startSid, 
                                _startSid == _goods.startSid ? _goods.startAmount : _targetAmount, 
                                _targetAmount, 
                                _startSid.add(_goods.stepSize), 
                                _ratio
                                )
                            );
                        _reachAmount = 
                            _reachAmount.add(
                                _startSid == _goods.startSid ? 
                                _goods.startAmount : _targetAmount
                            );
                    }else    
                        return (_amount, _startSid, _reachAmount, false);
                    
                    _startSid++;
                }
            }
        }
    }
    
    function getRoundJackpot(uint256 _rId)
        public
        view
        returns(uint256)
    {
        return (
            (
                round[_rId].jackpotAmount
                .add(round[_rId].amount.mul(88) / 100))
                .sub(round[_rId].protectAmount)
                .sub(round[_rId].dividendAmount)
            ).mul(80).div(100);
    }
    
    function getHeadInfo()
        public
        view
        returns(uint256, uint256, uint256, uint256, uint256, uint256)
    {
        uint256 _targetExpectedAmount = getStageTargetAmount(sId);
        
        return
            (
                rId,
                sId,
                stage[rId][sId].start.add(stageDuration),
                stage[rId][sId].amount,
                (
                    stage[rId][sId].dividendAmount <= _targetExpectedAmount ? 
                    _targetExpectedAmount : stage[rId][sId].dividendAmount
                ).mul(100) / 88,
                round[rId].jackpotAmount.add(round[rId].amount.mul(88) / 100)
                .sub(round[rId].protectAmount)
                .sub(round[rId].dividendAmount)
            );
    }
    
    function getPlayerGoodList(address _player)
        public
        view
        returns(uint256[])
    {
        return playerGoodsList[_player];
    }

    function totalSupply() 
        public 
        view 
        returns (uint256 total)
    {
        return cardList.length;
    }
    
    function balanceOf(address _owner) 
        public 
        view 
        returns (uint256 balance)
    {
        uint256 _length = cardList.length;
        uint256 _count;
        for(uint256 i = 0; i < _length; i++){
            if(cardList[i].playerAddress == _owner)
                _count++;
        }
        
        return _count;
    }
    
    function ownerOf(uint256 _tokenId) 
        public 
        view 
        returns (address owner)
    {
        require(cardList.length > _tokenId, "tokenId error");
        owner = cardList[_tokenId].playerAddress;
        require(owner != address(0), "No owner");
    }
    
    function approve(address _to, uint256 _tokenId)
        senderVerify()
        public
    {
        require (register[_to] != bytes32(0), "Not a registered user");
        require (msg.sender == cardList[_tokenId].playerAddress, "The card does not belong to you");
        require (cardList.length > _tokenId, "tokenId error");
        require (cardIndexToApproved[_tokenId] == address(0), "Approved");
        
        cardIndexToApproved[_tokenId] = _to;
        
        emit Approval(msg.sender, _to, _tokenId);
    }
    
    function takeOwnership(uint256 _tokenId)
        senderVerify()
        public
    {
        address _newOwner = msg.sender;
        address _oldOwner = cardList[_tokenId].playerAddress;
        
        require(_newOwner != address(0), "Address error");
        require(_newOwner == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _newOwner;
        delete cardIndexToApproved[_tokenId];
        
        emit Transfer(_oldOwner, _newOwner, _tokenId);
    }
    
    function transfer(address _to, uint256 _tokenId) 
        senderVerify()
        public
    {
        require (msg.sender == cardList[_tokenId].playerAddress, "The card does not belong to you");
        require(_to != address(0), "Address error");
        require(_to == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _to;
        
        if(cardIndexToApproved[_tokenId] != address(0))
            delete cardIndexToApproved[_tokenId];
        
        emit Transfer(msg.sender, _to, _tokenId);
    }
    
    function transferFrom(address _from, address _to, uint256 _tokenId)
        senderVerify()
        public
    {
        require (_from == cardList[_tokenId].playerAddress, "Owner error");
        require(_to != address(0), "Address error");
        require(_to == cardIndexToApproved[_tokenId], "Without permission");
        
        cardList[_tokenId].playerAddress = _to;
        delete cardIndexToApproved[_tokenId];
        
        emit Transfer(_from, _to, _tokenId);
    }
    
}

library FBankdatasets {
    
    struct Round {
        uint256 start;
        uint256 end;
        bool ended;
        uint256 endSid;
        uint256 amount;
        uint256 protectAmount;
        uint256 dividendAmount;
        uint256 jackpotAmount;
    }
    
    struct Stage {
        uint256 start;
        uint256 amount;
        uint256 protectAmount;
        uint256 dividendAmount;
    }
    
    struct Goods {
        uint256 rId;
        uint256 startSid;
        uint256 endSid;
        uint256 withdrawSid;
        uint256 amount;
        uint256 startAmount;
        uint256 endAmount;
        uint256 reachAmount;
        uint256 stepSize;
        uint256 protectRatio;
    }
    
    struct Card {
        address playerAddress;
        uint256 amount;
    }
}

/**
 * Anti clone protection.
 * Do not clone this contract without permission even if you manage to break the conceal. 
 * The concealed code contains core calculations necessary for this contract to function. 
 * This contract can be licensed for a fee, contact us instead of cloning!
 */ 
interface FairBankCompute {
    function getStageTargetAmount(uint256 _sId) external view returns(uint256);
    function computeEarningsAmount(uint256 _sId, uint256 _amount, uint256 _currentTargetAmount, uint256 _expectEndSid, uint256 _ratio) external view returns(uint256);
}

library NameFilter {
    
    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 > 3, "string must be between 4 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");
        }
        
        for (uint256 i = 0; i < _length; i++)
        {
            require
            (
                // OR uppercase A-Z
                (_temp[i] > 0x40 && _temp[i] < 0x5b) ||
                // OR lowercase a-z
                (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                // or 0-9
                (_temp[i] > 0x2f && _temp[i] < 0x3a),
                "string contains invalid characters"
            );
        }
        
        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

/**
 * @title SafeMath v0.1.9
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    
    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
    
    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) 
        internal 
        pure 
        returns (uint256) 
    {
        assert(b <= a);
        return a - b;
    }

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

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"playerName","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"}],"name":"getPlayerGoodList","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"playerWithdrawList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"goodsList","outputs":[{"name":"rId","type":"uint256"},{"name":"startSid","type":"uint256"},{"name":"endSid","type":"uint256"},{"name":"withdrawSid","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"startAmount","type":"uint256"},{"name":"endAmount","type":"uint256"},{"name":"reachAmount","type":"uint256"},{"name":"stepSize","type":"uint256"},{"name":"protectRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeModifyCountdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"developerAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"stage","outputs":[{"name":"start","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"protectAmount","type":"uint256"},{"name":"dividendAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round","outputs":[{"name":"start","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"endSid","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"protectAmount","type":"uint256"},{"name":"dividendAmount","type":"uint256"},{"name":"jackpotAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cardIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"register","outputs":[{"name":"","type":"bytes32"}],"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":"standardProtectRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stepSize","type":"uint256"},{"name":"_protectRatio","type":"uint256"},{"name":"_recommendAddr","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_playerName","type":"string"}],"name":"registered","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resetTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_goodsIndex","type":"uint256"}],"name":"getEarningsAmountByGoodsIndex","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sId","type":"uint256"},{"name":"_amount","type":"uint256"},{"name":"_currentTargetAmount","type":"uint256"},{"name":"_expectEndSid","type":"uint256"},{"name":"_ratio","type":"uint256"}],"name":"computeEarningsAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rId","type":"uint256"}],"name":"getRoundJackpot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cId","type":"uint256"}],"name":"purchaseCard","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stageDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gId","type":"uint256"}],"name":"withdrawByGid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"modifyCountdown","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stepSize","type":"uint256"},{"name":"_protectRatio","type":"uint256"},{"name":"_recommendName","type":"string"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"playerGoodsList","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getHeadInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sId","type":"uint256"}],"name":"getStageTargetAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cardList","outputs":[{"name":"playerAddress","type":"address"},{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"openModifyCountdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reduceTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

60c0604052601960808190527f4661697244415050202d2042616e6b2053696d756c61746f720000000000000060a09081526200004091600191906200013c565b506040805180820190915260058082527f4642616e6b000000000000000000000000000000000000000000000000000000602090920191825262000087916002916200013c565b506005805461ffff19169055348015620000a057600080fd5b5060008054600160a060020a0319163317815561fd2060035560396004555b60068110156200013557600054600160a060020a0316600f8260068110620000e357fe5b600202018054600160a060020a031916600160a060020a0392909216919091179055674563918244f40000600f82600681106200011c57fe5b60020201600101819055508080600101915050620000bf565b50620001e1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017f57805160ff1916838001178555620001af565b82800160010185558215620001af579182015b82811115620001af57825182559160200191906001019062000192565b50620001bd929150620001c1565b5090565b620001de91905b80821115620001bd5760008155600101620001c8565b90565b61526080620001f16000396000f3006080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610357578063095ea7b3146103e15780630f15f4c01461040557806315daf5941461041a578063180392301461044e57806318160ddd146104bf578063186601ca146104e657806323b872dd1461050f57806323df93c11461053957806328d27f091461055d5780632d6ddfda146105c557806333b6baf5146105da57806334aed7a0146105ef57806334d5f37b14610630578063394baa0b146106895780633ccfd60b146106a15780634420e486146106b657806350197646146106d757806358761920146106ec57806359a87bc1146107015780635d2d5c371461071b5780636352211e1461076757806365a114f11461077f578063678bbf241461078757806370a08231146107c757806378c9f9cf146107e857806395d89b411461080c57806398f0412814610821578063a54447aa14610839578063a9059cbb14610844578063aafb088e14610868578063b2e6ceeb1461087d578063b604ed1b14610895578063bed47ed8146108ad578063c5d3ce1e146108c2578063cca63f4f146108d7578063ce2b78541461092a578063d571dbac1461094e578063d9daa49714610996578063d9f035aa146109ae578063ef8c2c58146109e9578063f60436cd146109fe575b60055460ff161515600114610264576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146102a9576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156102e75760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050610355565b66038d7ea4c68000341015610346576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b61035560646004546000610a06565b005b34801561036357600080fd5b5061036c610d41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a657818101518382015260200161038e565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ed57600080fd5b50610355600160a060020a0360043516602435610dce565b34801561041157600080fd5b50610355611026565b34801561042657600080fd5b506104326004356111b2565b60408051600160a060020a039092168252519081900360200190f35b34801561045a57600080fd5b5061046f600160a060020a03600435166111cd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ab578181015183820152602001610493565b505050509050019250505060405180910390f35b3480156104cb57600080fd5b506104d461123a565b60408051918252519081900360200190f35b3480156104f257600080fd5b506104fb611240565b604080519115158252519081900360200190f35b34801561051b57600080fd5b50610355600160a060020a0360043581169060243516604435611249565b34801561054557600080fd5b506104d4600160a060020a0360043516602435611463565b34801561056957600080fd5b50610575600435611493565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b3480156105d157600080fd5b506103556114f5565b3480156105e657600080fd5b5061043261160e565b3480156105fb57600080fd5b5061060a60043560243561161d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561063c57600080fd5b5061064860043561164f565b604080519889526020890197909752941515878701526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561069557600080fd5b50610432600435611696565b3480156106ad57600080fd5b506103556116b1565b3480156106c257600080fd5b506104d4600160a060020a0360043516611a4e565b3480156106e357600080fd5b506104d4611a60565b3480156106f857600080fd5b506104d4611a66565b610355600435602435600160a060020a0360443516611a6c565b6040805160206004803580820135601f8101849004840285018401909552848452610355943694929360249392840191908190840183828082843750949750611c669650505050505050565b34801561077357600080fd5b50610432600435611f0d565b610355611fdb565b34801561079357600080fd5b5061079f600435612286565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b3480156107d357600080fd5b506104d4600160a060020a0360043516612a0c565b3480156107f457600080fd5b506104d4600435602435604435606435608435612a5d565b34801561081857600080fd5b5061036c612b1f565b34801561082d57600080fd5b506104d4600435612b77565b610355600435612bc8565b34801561085057600080fd5b50610355600160a060020a0360043516602435612f20565b34801561087457600080fd5b506104d4613151565b34801561088957600080fd5b50610355600435613157565b3480156108a157600080fd5b5061035560043561331a565b3480156108b957600080fd5b506104d46136aa565b3480156108ce57600080fd5b506104fb6136b0565b604080516020600460443581810135601f81018490048402850184019095528484526103559482359460248035953695946064949201919081908401838280828437509497506136be9650505050505050565b34801561093657600080fd5b506104d4600160a060020a03600435166024356138d7565b34801561095a57600080fd5b506109636138f2565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156109a257600080fd5b506104d4600435613a3e565b3480156109ba57600080fd5b506109c6600435613ae8565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156109f557600080fd5b50610355613b11565b610355613c29565b60065460075460008080610a1984613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610a62576000858152600960209081526040808320878452909152902060030154610a64565b825b91506058610a7983606463ffffffff613e4a16565b811515610a8257fe5b600087815260096020908152604080832089845290915281206001015492909104935010610ab05781610ade565b6000858152600960209081526040808320878452909152902060010154610ade90839063ffffffff613e8016565b6003546000878152600960209081526040808320898452909152902054919250610b0e919063ffffffff613e9216565b42118015610b375750600085815260096020908152604080832087845290915290206001015482115b15610c3e57610b468585613ea1565b600654600754600082815260096020908152604080832084845290915290204290559095509350610b7684613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610bbf576000858152600960209081526040808320878452909152902060030154610bc1565b825b91506058610bd683606463ffffffff613e4a16565b811515610bdf57fe5b600087815260096020908152604080832089845290915281206001015492909104935010610c0d5781610c3b565b6000858152600960209081526040808320878452909152902060010154610c3b90839063ffffffff613e8016565b90505b34811115610c5957610c54858584348c8c613fef565b610c66565b610c663489898585614356565b600085815260086020526040812060068101546005820154600490920154610cd792610ccb918290606490610ca290605863ffffffff613e4a16565b811515610cab57fe5b60008d81526008602052604090206007015491900463ffffffff613e9216565b9063ffffffff613e8016565b11610d2c576040805160e560020a62461bcd02815260206004820152600a60248201527f64617461206572726f7200000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d378634896145ea565b5050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b820191906000526020600020905b815481529060010190602001808311610da957829003601f168201915b505050505081565b333214610e13576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a60205260409020541515610e82576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f742061207265676973746572656420757365720000000000000000000000604482015290519081900360640190fd5b600f8160068110610e8f57fe5b6002020154600160a060020a03163314610ef3576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b60068110610f4b576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a031615610fb8576040805160e560020a62461bcd02815260206004820152600860248201527f417070726f766564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b60209081526040918290208054600160a060020a038616600160a060020a0319909116811790915582513381529182015280820183905290517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360600190a15050565b33321461106b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a031633146110cd576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff1615611128576040805160e560020a62461bcd02815260206004820152601a60248201527f4661697242616e6b20616c726561647920616374697661746564000000000000604482015290519081900360640190fd5b6005805460ff1916600190811790915560068190556007819055600052427fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8190557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a366020527fcc827bfc2dbd52cbec5736232342c6a272d0cf5ce2695a969eb442c9480de86d55565b600b60205260009081526040902054600160a060020a031681565b600160a060020a0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561122d57602002820191906000526020600020905b815481526020019060010190808311611219575b505050505090505b919050565b60065b90565b60055460ff1681565b33321461128e576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f816006811061129b57fe5b6002020154600160a060020a03848116911614611302576040805160e560020a62461bcd02815260206004820152600b60248201527f4f776e6572206572726f72000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611362576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146113d3576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106113e157fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000838152601b602090815260409182902080549093169092558051868416815292851691830191909152818101839052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600d6020528160005260406000208181548110151561147e57fe5b90600052602060002001600091509150505481565b600e8054829081106114a157fe5b90600052602060002090600a0201600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015490508a565b33321461153a576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a0316331461159c576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff610100909104161515600114611601576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff0019169055565b600054600160a060020a031681565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701549596949560ff9094169492939192909188565b601b60205260009081526040902054600160a060020a031681565b600554600090606090829081908190819081908190819060ff161515600114611726576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b33321461176b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161181c576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b336000818152600c60209081526040918290208054835181840281018401909452808452939c5091929083018282801561187557602002820191906000526020600020905b815481526020019060010190808311611861575b50508351600160a060020a038e166000908152600c60205260408120959d50909b506118a694935091506151219050565b86811015611a0c576118ce88828151811015156118bf57fe5b90602001906020020151612286565b929750909550935091506001821515141561192c57600160a060020a0389166000908152600d60205260409020885189908390811061190957fe5b6020908102909101810151825460018101845560009384529190922001556119f2565b83600e898381518110151561193d57fe5b602090810290910101518154811061195157fe5b90600052602060002090600a02016003018190555082600e898381518110151561197757fe5b602090810290910101518154811061198b57fe5b90600052602060002090600a020160070181905550600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002088828151811015156119d357fe5b6020908102909101810151825460018101845560009384529190922001555b611a02868663ffffffff613e9216565b95506001016118a6565b604051600160a060020a038a169087156108fc029088906000818181858888f19350505050158015611a42573d6000803e3d6000fd5b50505050505050505050565b600a6020526000908152604090205481565b60065481565b60045481565b60055460ff161515600114611acd576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214611b12576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c68000341015611b505760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015611baf576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115611c31576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f6000851115611c435784611c46565b60645b6064851115611c5757600454611c59565b845b84610a06565b505b505050565b6000333214611cad576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b662386f26fc100003414611d31576040805160e560020a62461bcd02815260206004820152603b60248201527f726567697374726174696f6e2066656520697320302e30312065746865722c2060448201527f706c65617365207365742074686520657861637420616d6f756e740000000000606482015290519081900360840190fd5b611d3a826147ce565b9050801515611d93576040805160e560020a62461bcd02815260206004820152601460248201527f6e616d652063616e6e6f7420626520656d707479000000000000000000000000604482015290519081900360640190fd5b6000818152600b6020526040902054600160a060020a031615611e26576040805160e560020a62461bcd02815260206004820152602560248201527f74686973206e616d652068617320616c7265616479206265656e20726567697360448201527f7465726564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600a602052604090205415611eb1576040805160e560020a62461bcd02815260206004820152602160248201527f706c6561736520646f206e6f742072657065617420726567697374726174696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000818152600b602090815260408083208054600160a060020a031916339081179091558352600a90915280822083905581549051600160a060020a0391909116913480156108fc02929091818181858888f150505050505050565b600060068210611f67576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b600f8260068110611f7457fe5b6002020154600160a060020a03169050801515611235576040805160e560020a62461bcd02815260206004820152600860248201527f4e6f206f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6005546000908190819081908190819060ff610100909104161515600114612073576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b3332146120b8576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600654955060075494503493506120ce85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015612117576000868152600960209081526040808320888452909152902060030154612119565b825b9150605861212e83606463ffffffff613e4a16565b81151561213757fe5b049150606461214d83601463ffffffff613e4a16565b81151561215657fe5b0490506729a2241af62c000081111561217457506729a2241af62c00005b808410156121cc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b60008681526009602090815260408083208884529091529020429055600f60055b60029081029190910154604051600160a060020a0390911691830480156108fc02916000818181858888f1505060008054604051600160a060020a0390911694506002860480156108fc029450925090818181858888f19350505050508084111561227e57336108fc612266868463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b505050505050565b600080600080612294615142565b6000806000806000806000600e8d8154811015156122ae57fe5b90600052602060002090600a0201610140604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152505097506007549650876101000151600014156125d057875160009081526008602052604090206002015460ff16151560011415612507576040808901518951600090815260086020529190912060030154111561242e576123908860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156123e35787516000908152600960209081526040808320828c015184529091529020600301546123e5565b845b935060586123fa85606463ffffffff613e4a16565b81151561240357fe5b04935061242788602001518960800151868b604001518c6101200151606403612a5d565b955061246b565b61271061245e61244d60588b6101200151613e4a90919063ffffffff16565b60808b01519063ffffffff613e4a16565b81151561246757fe5b0495505b60208089015189516000908152600890925260409091206003015414156124f25787516000908152600960209081526040808320828c0151845290915290206001015488516124ef916124e2916124d6906124c590612b77565b60808d01519063ffffffff613e4a16565b9063ffffffff614d4116565b879063ffffffff613e9216565b95505b949a5060009950899850600197508a946129fd565b87604001518711156125be576125208860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156125735787516000908152600960209081526040808320828c01518452909152902060030154612575565b845b9350605861258a85606463ffffffff613e4a16565b81151561259357fe5b0493506125b788602001518960800151868b604001518c6101200151606403612a5d565b95506124f2565b60009b508b9a508a99508998506129fd565b6060880151156125e45787606001516125ea565b87602001515b61012089015160e08a01518a516000908152600860205260409020600201549295506064919091039350915060ff161515600114156128ab575b6064886060015160001461263c578860600151612642565b88602001515b8403111561265c5785838260009b509b509b509b506129fd565b61010088015161267390849063ffffffff613e9216565b885160009081526008602052604090206003015411156127be5761269683613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156126e357875160009081526009602090815260408083208684529091529020600301546126e5565b845b935060586126fa85606463ffffffff613e4a16565b81151561270357fe5b04935087604001518314156127575761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b87612a5d565b6040890151909c509a5060009950600198508b95506129fd565b61278e6124e2848a60200151861461276f5786612775565b8a60a001515b876127378d610100015189613e9290919063ffffffff16565b95506127b7886020015184146127a457846127aa565b8860a001515b829063ffffffff613e9216565b90506128a0565b6128196127106128016127e060588c6101200151613e4a90919063ffffffff16565b60808c01516127f5908663ffffffff613e8016565b9063ffffffff613e4a16565b81151561280a57fe5b8891900463ffffffff613e9216565b6040808a01518a5160009081526008602052919091206003015491975014156128865787516000908152600960209081526040808320818c01518452909152902060010154885161273d916124e2916124d69061287590612b77565b60c08d01519063ffffffff613e4a16565b858860400151600060018191509b509b509b509b506129fd565b600190920191612624565b606488606001516000146128c35788606001516128c9565b88602001515b840311156128e35785838260009b509b509b509b506129fd565b6101008801516128fa90849063ffffffff613e9216565b8711156129e05761290a83613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156129575787516000908152600960209081526040808320868452909152902060030154612959565b845b9350605861296e85606463ffffffff613e4a16565b81151561297757fe5b04935087604001518314156129ab5761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b6129c36124e2848a60200151861461276f5786612775565b95506129d9886020015184146127a457846127aa565b90506129f2565b85838260009b509b509b509b506129fd565b6001909201916128ab565b50505050505050509193509193565b6000600681805b82811015612a5557600160a060020a038516600f8260068110612a3257fe5b6002020154600160a060020a03161415612a4d576001909101905b600101612a13565b509392505050565b604080517f78c9f9cf000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606481018490526084810183905290516000917326da117a72dbcb686c2fcf88c4bfc6110cae0464916378c9f9cf9160a48082019260209290919082900301818787803b158015612ae957600080fd5b505af1158015612afd573d6000803e3d6000fd5b505050506040513d6020811015612b1357600080fd5b50519695505050505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b600081815260086020526040812060068101546005820154600490920154612bc2926064926124d6926050926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b92915050565b6005546000908190819060ff161515600114612c30576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214612c75576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b3392503491506064612ca5606e600f8760068110612c8f57fe5b6002020160010154613e4a90919063ffffffff16565b811515612cae57fe5b0490506000600f8560068110612cc057fe5b6002020154600160a060020a031614801590612cff5750600160a060020a038316600f8560068110612cee57fe5b6002020154600160a060020a031614155b8015612d0b5750808210155b1515612d61576040805160e560020a62461bcd02815260206004820152600f60248201527f4661696c65642070757263686173650000000000000000000000000000000000604482015290519081900360640190fd5b6000848152601b6020526040902054600160a060020a031615612df3576000848152601b6020526040902054600160a060020a03166108fc6064612dad6069600f8960068110612c8f57fe5b811515612db657fe5b049081150290604051600060405180830381858888f15050506000868152601b602052604090208054600160a060020a031916905550612e4a9050565b600f8460068110612e0057fe5b6002020154600160a060020a03166108fc6064612e256069600f8960068110612c8f57fe5b811515612e2e57fe5b049081150290604051600060405180830381858888f150505050505b600054600160a060020a03166108fc6064612e6d6005600f8960068110612c8f57fe5b811515612e7657fe5b049081150290604051600060405180830381858888f193505050505080821115612ecf57600160a060020a0383166108fc612eb7848463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b80600f8560068110612edd57fe5b600202016001018190555082600f85600681101515612ef857fe5b600202018054600160a060020a031916600160a060020a039290921691909117905550505050565b333214612f65576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f8160068110612f7257fe5b6002020154600160a060020a03163314612fd6576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b600160a060020a0382161515613036576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146130a7576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106130b557fe5b600202018054600160a060020a031916600160a060020a039283161790556000828152601b60205260409020541615613105576000818152601b602052604090208054600160a060020a03191690555b60408051338152600160a060020a038416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60035481565b60008033321461319f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b339150600f83600681106131af57fe5b6002020154600160a060020a03908116915082161515613219576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152601b6020526040902054600160a060020a0383811691161461328a576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f846006811061329857fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000858152601b602090815260409182902080549093169092558051848416815292851691830191909152818101859052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b6005546000908190819081908190819060ff161515600114613388576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146133cd576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161347e576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b33955061348a87612286565b9297509095509350915060018215151415613629575060005b600160a060020a0386166000908152600c602052604090205481101561350857600160a060020a0386166000908152600c602052604090208054889190839081106134ea57fe5b9060005260206000200154141561350057613508565b6001016134a3565b600160a060020a0386166000908152600c60205260409020548110613577576040805160e560020a62461bcd02815260206004820152600c60248201527f6769642069732077726f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000818152600d602090815260408083208054600181018255908452828420018b9055928252600c905220805460001981019081106135bc57fe5b6000918252602080832090910154600160a060020a0389168352600c90915260409091208054839081106135ec57fe5b6000918252602080832090910192909255600160a060020a0388168152600c90915260409020805490613623906000198301615196565b50613674565b83600e8881548110151561363957fe5b90600052602060002090600a02016003018190555082600e8881548110151561365e57fe5b90600052602060002090600a0201600701819055505b604051600160a060020a0387169086156108fc029087906000818181858888f19350505050158015610d37573d6000803e3d6000fd5b60075481565b600554610100900460ff1681565b60055460ff16151560011461371f576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214613764576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156137a25760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015613801576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115613883576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f60008511156138955784613898565b60645b60648511156138a9576004546138ab565b845b600b60006138b8876147ce565b8152602081019190915260400160002054600160a060020a0316610a06565b600c6020528160005260406000208181548110151561147e57fe5b6000806000806000806000613908600754613a3e565b600654600754600354600083815260096020908152604080832085845290915290205493945091929091613942919063ffffffff613e9216565b60065460009081526009602090815260408083206007548452909152902060018101546003909101546058906139b0906064908810156139a357600654600090815260096020908152604080832060075484529091529020600301546127f5565b879063ffffffff613e4a16565b8115156139b957fe5b6006805460009081526008602052604090209081015460058201546004909201549390920492613a2a9291610ccb9182906064906139fe90605863ffffffff613e4a16565b811515613a0757fe5b60065460009081526008602052604090206007015491900463ffffffff613e9216565b949c939b5091995097509550909350915050565b60007326da117a72dbcb686c2fcf88c4bfc6110cae0464600160a060020a031663d9daa497836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613ab657600080fd5b505af1158015613aca573d6000803e3d6000fd5b505050506040513d6020811015613ae057600080fd5b505192915050565b600f8160068110613af557fe5b600202018054600190910154600160a060020a03909116915082565b333214613b56576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a03163314613bb8576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b600554610100900460ff1615613c18576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff001916610100179055565b6005546000908190819081908190819060ff610100909104161515600114613cc1576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b333214613d06576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b60065495506007549450349350613d1c85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015613d65576000868152600960209081526040808320888452909152902060030154613d67565b825b91506058613d7c83606463ffffffff613e4a16565b811515613d8557fe5b0491506064613d9b83601e63ffffffff613e4a16565b811515613da457fe5b0490506729a2241af62c0000811115613dc257506729a2241af62c00005b80841015613e1a576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b600354600087815260096020908152604080832089845290915290204291909103610708019055600f60056121ed565b600080831515613e5d5760009150613e79565b50828202828482811515613e6d57fe5b0414613e7557fe5b8091505b5092915050565b600082821115613e8c57fe5b50900390565b600082820183811015613e7557fe5b60008281526008602090815260408083204260018083019190915560028201805460ff191682179055600390910185905560098352818420858552909252822001541115613f4f57600082815260086020526040902060068101546005820154600490920154613f34926064926124d6926014926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b60018301600090815260086020526040902060070155613fcb565b600082815260086020526040902060068101546005820154600490920154613fb492610ccb918290606490613f8b90605863ffffffff613e4a16565b811515613f9457fe5b60008981526008602052604090206007015491900463ffffffff613e9216565b600183016000908152600860205260409020600701555b50600190810160009081526008602052604090204290556006805482019055600755565b600080613ffa615142565b61400a888663ffffffff613e9216565b925061271061403061402386605863ffffffff613e4a16565b889063ffffffff613e4a16565b81151561403957fe5b60008b8152600860205260409020600401549190049250614060908763ffffffff613e9216565b60008a815260086020526040902060048101919091556005015461408a908363ffffffff613e9216565b60008a815260086020908152604080832060050193909355600981528282208b8352905220600101546140c3908763ffffffff613e9216565b60008a81526009602090815260408083208c84529091528082206001019290925584815220600201546140f69083613e92565b60008a815260096020908152604080832087845290915290206002015561415061412789888a8760648a9003612a5d565b60008b81526009602090815260408083208884529091529020600301549063ffffffff613e9216565b60008a81526009602090815260408083208784528252808320600301939093559a8352828b01998a52608083019788528282019485526101208301958652338152600c8b52908120600e8054600181810183559184528451600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd8101919091559b517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe8d015595517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff8c015560608401517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4008c015597517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4018b015560a08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4028b015560c08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4038b015560e08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048b0155610100909201517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058a015593517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069098019790975550855493840186559481529490942001919091555050565b60065460075460016000805b82600114156144115761437a85858c898d8d89614d75565b60008581526008602052604090206004015461439c908b63ffffffff613e9216565b6000868152600860205260409020600401556143fe6127106143d56143c88b605863ffffffff613e4a16565b8d9063ffffffff613e4a16565b8115156143de57fe5b60008881526008602052604090206005015491900463ffffffff613e9216565b6000868152600860205260409020600501555b61442e85858989614428838f63ffffffff613e9216565b8d614fed565b600085815260096020908152604080832087845290915290206003015461445c90829063ffffffff613e9216565b600086815260096020908152604080832088845290915290206002015490915061448d90839063ffffffff613e9216565b60019094019391506144a58a8763ffffffff613e8016565b99506144b084613a3e565b600086815260096020908152604080832088845290915290206003015411156144f55760008581526009602090815260408083208784529091529020600301546144fe565b6144fe84613a3e565b9650605861451388606463ffffffff613e4a16565b81151561451c57fe5b0496508695506001909201918986106145e5576145468585898d614428838f63ffffffff613e9216565b614556858560008d8d8d89614d75565b89871415614565576001909301925b60008581526009602090815260408083208784528252808320429055600787905587835260089091529020600501546145a4908363ffffffff613e8016565b60008681526008602052604090206005810191909155600601546145ce908263ffffffff613e9216565b600086815260086020526040902060060155611a42565b614362565b60506000600160a060020a0385161580159061460f5750600160a060020a0385163314155b80156146325750600160a060020a0385166000908152600a602052604090205415155b1561468357604051600160a060020a038616906032860480156108fc02916000818181858888f150506040513393506064880480156108fc02935091506000818181858888f1935050505050614688565b606e91505b6146c26146a16103e86124d6878663ffffffff613e4a16565b6006546000908152600860205260409020600701549063ffffffff613e9216565b6006546000908152600860205260409020600701555060c8830482151561471957600f60005b6002020154604051600160a060020a039091169082156108fc029083906000818181858888f193505050505061479a565b6000831180156147295750603983105b1561473757600f60016146e8565b826039141561474957600f60026146e8565b6039831180156147595750606483105b1561476757600f60036146e8565b826064141561479a57601754604051600160a060020a03909116906108fc8315029083906000818181858888f150505050505b600054600160a060020a03166108fc60c886049081150290604051600060405180830381858888f150505050505050505050565b805160009082908280602083118015906147e85750600383115b1515614864576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203420616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561487357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141580156148da575083600184038151811015156148b257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515614956576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561496557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415614aa85783600181518110151561499f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515614a1c576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b836001815181101515614a2b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515614aa8576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b82821015614d345783517f400000000000000000000000000000000000000000000000000000000000000090859084908110614ae557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614b59575083517f5b0000000000000000000000000000000000000000000000000000000000000090859084908110614b3a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614c03575083517f600000000000000000000000000000000000000000000000000000000000000090859084908110614b8f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614c03575083517f7b0000000000000000000000000000000000000000000000000000000000000090859084908110614be457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614cad575083517f2f0000000000000000000000000000000000000000000000000000000000000090859084908110614c3957fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614cad575083517f3a0000000000000000000000000000000000000000000000000000000000000090859084908110614c8e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515614d29576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600190910190614aad565b5050506020015192915050565b600080808311614d4d57fe5b8284811515614d5857fe5b0490508284811515614d6657fe5b068184020184141515613e7557fe5b614d7d615142565b600060018311614f90578882526020820188905260808201879052610100820185905261012082018490526001831415614db95760a082018690525b336000908152600c60209081526040808320600e8054600181810183559186528751600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd810191909155888601517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe820155938801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff85015560608801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40085015560808801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40185015560a08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40285015560c08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40385015560e08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048501556101008801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058501556101208801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069094019390935581549081018255908452919092200155614fe2565b50600e8054600019810191879183908110614fa757fe5b90600052602060002090600a02016006018190555087600e82815481101515614fcc57fe5b90600052602060002090600a0201600201819055505b505050505050505050565b600061271061501361500684605863ffffffff613e4a16565b869063ffffffff613e4a16565b81151561501c57fe5b049050848414615071576000878152600960209081526040808320898452909152902060010154615053908563ffffffff613e9216565b60008881526009602090815260408083208a84529091529020600101555b600087815260096020908152604080832086845290915290206002015461509e908263ffffffff613e9216565b60008881526009602090815260408083208784529091529020600201556150f86150cf878688876064889003612a5d565b60008981526009602090815260408083208884529091529020600301549063ffffffff613e9216565b6000978852600960209081526040808a20958a5294905292909620600301919091555050505050565b508054600082559060005260206000209081019061513f91906151b6565b50565b61014060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b815481835581811115611c6157600083815260209020611c619181019083015b61123d91905b808211156151d057600081556001016151bc565b509056004661697242616e6b20697473206e6f74207265616479207965742e202063686573656e64657220646f6573206e6f74206d656574207468652072756c65730000636b203f65746120696e20646973636f72640000000000000000000000000000a165627a7a7230582033daa80fc25b9a9d27088a7b1891f5a6aaf17fe9090c3c043aa082068865c9c90029

Deployed Bytecode

0x6080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610357578063095ea7b3146103e15780630f15f4c01461040557806315daf5941461041a578063180392301461044e57806318160ddd146104bf578063186601ca146104e657806323b872dd1461050f57806323df93c11461053957806328d27f091461055d5780632d6ddfda146105c557806333b6baf5146105da57806334aed7a0146105ef57806334d5f37b14610630578063394baa0b146106895780633ccfd60b146106a15780634420e486146106b657806350197646146106d757806358761920146106ec57806359a87bc1146107015780635d2d5c371461071b5780636352211e1461076757806365a114f11461077f578063678bbf241461078757806370a08231146107c757806378c9f9cf146107e857806395d89b411461080c57806398f0412814610821578063a54447aa14610839578063a9059cbb14610844578063aafb088e14610868578063b2e6ceeb1461087d578063b604ed1b14610895578063bed47ed8146108ad578063c5d3ce1e146108c2578063cca63f4f146108d7578063ce2b78541461092a578063d571dbac1461094e578063d9daa49714610996578063d9f035aa146109ae578063ef8c2c58146109e9578063f60436cd146109fe575b60055460ff161515600114610264576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146102a9576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156102e75760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050610355565b66038d7ea4c68000341015610346576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b61035560646004546000610a06565b005b34801561036357600080fd5b5061036c610d41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a657818101518382015260200161038e565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ed57600080fd5b50610355600160a060020a0360043516602435610dce565b34801561041157600080fd5b50610355611026565b34801561042657600080fd5b506104326004356111b2565b60408051600160a060020a039092168252519081900360200190f35b34801561045a57600080fd5b5061046f600160a060020a03600435166111cd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ab578181015183820152602001610493565b505050509050019250505060405180910390f35b3480156104cb57600080fd5b506104d461123a565b60408051918252519081900360200190f35b3480156104f257600080fd5b506104fb611240565b604080519115158252519081900360200190f35b34801561051b57600080fd5b50610355600160a060020a0360043581169060243516604435611249565b34801561054557600080fd5b506104d4600160a060020a0360043516602435611463565b34801561056957600080fd5b50610575600435611493565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b3480156105d157600080fd5b506103556114f5565b3480156105e657600080fd5b5061043261160e565b3480156105fb57600080fd5b5061060a60043560243561161d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561063c57600080fd5b5061064860043561164f565b604080519889526020890197909752941515878701526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561069557600080fd5b50610432600435611696565b3480156106ad57600080fd5b506103556116b1565b3480156106c257600080fd5b506104d4600160a060020a0360043516611a4e565b3480156106e357600080fd5b506104d4611a60565b3480156106f857600080fd5b506104d4611a66565b610355600435602435600160a060020a0360443516611a6c565b6040805160206004803580820135601f8101849004840285018401909552848452610355943694929360249392840191908190840183828082843750949750611c669650505050505050565b34801561077357600080fd5b50610432600435611f0d565b610355611fdb565b34801561079357600080fd5b5061079f600435612286565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b3480156107d357600080fd5b506104d4600160a060020a0360043516612a0c565b3480156107f457600080fd5b506104d4600435602435604435606435608435612a5d565b34801561081857600080fd5b5061036c612b1f565b34801561082d57600080fd5b506104d4600435612b77565b610355600435612bc8565b34801561085057600080fd5b50610355600160a060020a0360043516602435612f20565b34801561087457600080fd5b506104d4613151565b34801561088957600080fd5b50610355600435613157565b3480156108a157600080fd5b5061035560043561331a565b3480156108b957600080fd5b506104d46136aa565b3480156108ce57600080fd5b506104fb6136b0565b604080516020600460443581810135601f81018490048402850184019095528484526103559482359460248035953695946064949201919081908401838280828437509497506136be9650505050505050565b34801561093657600080fd5b506104d4600160a060020a03600435166024356138d7565b34801561095a57600080fd5b506109636138f2565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156109a257600080fd5b506104d4600435613a3e565b3480156109ba57600080fd5b506109c6600435613ae8565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156109f557600080fd5b50610355613b11565b610355613c29565b60065460075460008080610a1984613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610a62576000858152600960209081526040808320878452909152902060030154610a64565b825b91506058610a7983606463ffffffff613e4a16565b811515610a8257fe5b600087815260096020908152604080832089845290915281206001015492909104935010610ab05781610ade565b6000858152600960209081526040808320878452909152902060010154610ade90839063ffffffff613e8016565b6003546000878152600960209081526040808320898452909152902054919250610b0e919063ffffffff613e9216565b42118015610b375750600085815260096020908152604080832087845290915290206001015482115b15610c3e57610b468585613ea1565b600654600754600082815260096020908152604080832084845290915290204290559095509350610b7684613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610bbf576000858152600960209081526040808320878452909152902060030154610bc1565b825b91506058610bd683606463ffffffff613e4a16565b811515610bdf57fe5b600087815260096020908152604080832089845290915281206001015492909104935010610c0d5781610c3b565b6000858152600960209081526040808320878452909152902060010154610c3b90839063ffffffff613e8016565b90505b34811115610c5957610c54858584348c8c613fef565b610c66565b610c663489898585614356565b600085815260086020526040812060068101546005820154600490920154610cd792610ccb918290606490610ca290605863ffffffff613e4a16565b811515610cab57fe5b60008d81526008602052604090206007015491900463ffffffff613e9216565b9063ffffffff613e8016565b11610d2c576040805160e560020a62461bcd02815260206004820152600a60248201527f64617461206572726f7200000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d378634896145ea565b5050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b820191906000526020600020905b815481529060010190602001808311610da957829003601f168201915b505050505081565b333214610e13576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a60205260409020541515610e82576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f742061207265676973746572656420757365720000000000000000000000604482015290519081900360640190fd5b600f8160068110610e8f57fe5b6002020154600160a060020a03163314610ef3576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b60068110610f4b576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a031615610fb8576040805160e560020a62461bcd02815260206004820152600860248201527f417070726f766564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b60209081526040918290208054600160a060020a038616600160a060020a0319909116811790915582513381529182015280820183905290517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360600190a15050565b33321461106b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a031633146110cd576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff1615611128576040805160e560020a62461bcd02815260206004820152601a60248201527f4661697242616e6b20616c726561647920616374697661746564000000000000604482015290519081900360640190fd5b6005805460ff1916600190811790915560068190556007819055600052427fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8190557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a366020527fcc827bfc2dbd52cbec5736232342c6a272d0cf5ce2695a969eb442c9480de86d55565b600b60205260009081526040902054600160a060020a031681565b600160a060020a0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561122d57602002820191906000526020600020905b815481526020019060010190808311611219575b505050505090505b919050565b60065b90565b60055460ff1681565b33321461128e576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f816006811061129b57fe5b6002020154600160a060020a03848116911614611302576040805160e560020a62461bcd02815260206004820152600b60248201527f4f776e6572206572726f72000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611362576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146113d3576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106113e157fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000838152601b602090815260409182902080549093169092558051868416815292851691830191909152818101839052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600d6020528160005260406000208181548110151561147e57fe5b90600052602060002001600091509150505481565b600e8054829081106114a157fe5b90600052602060002090600a0201600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015490508a565b33321461153a576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a0316331461159c576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff610100909104161515600114611601576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff0019169055565b600054600160a060020a031681565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701549596949560ff9094169492939192909188565b601b60205260009081526040902054600160a060020a031681565b600554600090606090829081908190819081908190819060ff161515600114611726576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b33321461176b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161181c576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b336000818152600c60209081526040918290208054835181840281018401909452808452939c5091929083018282801561187557602002820191906000526020600020905b815481526020019060010190808311611861575b50508351600160a060020a038e166000908152600c60205260408120959d50909b506118a694935091506151219050565b86811015611a0c576118ce88828151811015156118bf57fe5b90602001906020020151612286565b929750909550935091506001821515141561192c57600160a060020a0389166000908152600d60205260409020885189908390811061190957fe5b6020908102909101810151825460018101845560009384529190922001556119f2565b83600e898381518110151561193d57fe5b602090810290910101518154811061195157fe5b90600052602060002090600a02016003018190555082600e898381518110151561197757fe5b602090810290910101518154811061198b57fe5b90600052602060002090600a020160070181905550600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002088828151811015156119d357fe5b6020908102909101810151825460018101845560009384529190922001555b611a02868663ffffffff613e9216565b95506001016118a6565b604051600160a060020a038a169087156108fc029088906000818181858888f19350505050158015611a42573d6000803e3d6000fd5b50505050505050505050565b600a6020526000908152604090205481565b60065481565b60045481565b60055460ff161515600114611acd576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214611b12576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c68000341015611b505760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015611baf576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115611c31576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f6000851115611c435784611c46565b60645b6064851115611c5757600454611c59565b845b84610a06565b505b505050565b6000333214611cad576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b662386f26fc100003414611d31576040805160e560020a62461bcd02815260206004820152603b60248201527f726567697374726174696f6e2066656520697320302e30312065746865722c2060448201527f706c65617365207365742074686520657861637420616d6f756e740000000000606482015290519081900360840190fd5b611d3a826147ce565b9050801515611d93576040805160e560020a62461bcd02815260206004820152601460248201527f6e616d652063616e6e6f7420626520656d707479000000000000000000000000604482015290519081900360640190fd5b6000818152600b6020526040902054600160a060020a031615611e26576040805160e560020a62461bcd02815260206004820152602560248201527f74686973206e616d652068617320616c7265616479206265656e20726567697360448201527f7465726564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600a602052604090205415611eb1576040805160e560020a62461bcd02815260206004820152602160248201527f706c6561736520646f206e6f742072657065617420726567697374726174696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000818152600b602090815260408083208054600160a060020a031916339081179091558352600a90915280822083905581549051600160a060020a0391909116913480156108fc02929091818181858888f150505050505050565b600060068210611f67576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b600f8260068110611f7457fe5b6002020154600160a060020a03169050801515611235576040805160e560020a62461bcd02815260206004820152600860248201527f4e6f206f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6005546000908190819081908190819060ff610100909104161515600114612073576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b3332146120b8576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600654955060075494503493506120ce85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015612117576000868152600960209081526040808320888452909152902060030154612119565b825b9150605861212e83606463ffffffff613e4a16565b81151561213757fe5b049150606461214d83601463ffffffff613e4a16565b81151561215657fe5b0490506729a2241af62c000081111561217457506729a2241af62c00005b808410156121cc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b60008681526009602090815260408083208884529091529020429055600f60055b60029081029190910154604051600160a060020a0390911691830480156108fc02916000818181858888f1505060008054604051600160a060020a0390911694506002860480156108fc029450925090818181858888f19350505050508084111561227e57336108fc612266868463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b505050505050565b600080600080612294615142565b6000806000806000806000600e8d8154811015156122ae57fe5b90600052602060002090600a0201610140604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152505097506007549650876101000151600014156125d057875160009081526008602052604090206002015460ff16151560011415612507576040808901518951600090815260086020529190912060030154111561242e576123908860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156123e35787516000908152600960209081526040808320828c015184529091529020600301546123e5565b845b935060586123fa85606463ffffffff613e4a16565b81151561240357fe5b04935061242788602001518960800151868b604001518c6101200151606403612a5d565b955061246b565b61271061245e61244d60588b6101200151613e4a90919063ffffffff16565b60808b01519063ffffffff613e4a16565b81151561246757fe5b0495505b60208089015189516000908152600890925260409091206003015414156124f25787516000908152600960209081526040808320828c0151845290915290206001015488516124ef916124e2916124d6906124c590612b77565b60808d01519063ffffffff613e4a16565b9063ffffffff614d4116565b879063ffffffff613e9216565b95505b949a5060009950899850600197508a946129fd565b87604001518711156125be576125208860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156125735787516000908152600960209081526040808320828c01518452909152902060030154612575565b845b9350605861258a85606463ffffffff613e4a16565b81151561259357fe5b0493506125b788602001518960800151868b604001518c6101200151606403612a5d565b95506124f2565b60009b508b9a508a99508998506129fd565b6060880151156125e45787606001516125ea565b87602001515b61012089015160e08a01518a516000908152600860205260409020600201549295506064919091039350915060ff161515600114156128ab575b6064886060015160001461263c578860600151612642565b88602001515b8403111561265c5785838260009b509b509b509b506129fd565b61010088015161267390849063ffffffff613e9216565b885160009081526008602052604090206003015411156127be5761269683613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156126e357875160009081526009602090815260408083208684529091529020600301546126e5565b845b935060586126fa85606463ffffffff613e4a16565b81151561270357fe5b04935087604001518314156127575761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b87612a5d565b6040890151909c509a5060009950600198508b95506129fd565b61278e6124e2848a60200151861461276f5786612775565b8a60a001515b876127378d610100015189613e9290919063ffffffff16565b95506127b7886020015184146127a457846127aa565b8860a001515b829063ffffffff613e9216565b90506128a0565b6128196127106128016127e060588c6101200151613e4a90919063ffffffff16565b60808c01516127f5908663ffffffff613e8016565b9063ffffffff613e4a16565b81151561280a57fe5b8891900463ffffffff613e9216565b6040808a01518a5160009081526008602052919091206003015491975014156128865787516000908152600960209081526040808320818c01518452909152902060010154885161273d916124e2916124d69061287590612b77565b60c08d01519063ffffffff613e4a16565b858860400151600060018191509b509b509b509b506129fd565b600190920191612624565b606488606001516000146128c35788606001516128c9565b88602001515b840311156128e35785838260009b509b509b509b506129fd565b6101008801516128fa90849063ffffffff613e9216565b8711156129e05761290a83613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156129575787516000908152600960209081526040808320868452909152902060030154612959565b845b9350605861296e85606463ffffffff613e4a16565b81151561297757fe5b04935087604001518314156129ab5761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b6129c36124e2848a60200151861461276f5786612775565b95506129d9886020015184146127a457846127aa565b90506129f2565b85838260009b509b509b509b506129fd565b6001909201916128ab565b50505050505050509193509193565b6000600681805b82811015612a5557600160a060020a038516600f8260068110612a3257fe5b6002020154600160a060020a03161415612a4d576001909101905b600101612a13565b509392505050565b604080517f78c9f9cf000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606481018490526084810183905290516000917326da117a72dbcb686c2fcf88c4bfc6110cae0464916378c9f9cf9160a48082019260209290919082900301818787803b158015612ae957600080fd5b505af1158015612afd573d6000803e3d6000fd5b505050506040513d6020811015612b1357600080fd5b50519695505050505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b600081815260086020526040812060068101546005820154600490920154612bc2926064926124d6926050926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b92915050565b6005546000908190819060ff161515600114612c30576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214612c75576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b3392503491506064612ca5606e600f8760068110612c8f57fe5b6002020160010154613e4a90919063ffffffff16565b811515612cae57fe5b0490506000600f8560068110612cc057fe5b6002020154600160a060020a031614801590612cff5750600160a060020a038316600f8560068110612cee57fe5b6002020154600160a060020a031614155b8015612d0b5750808210155b1515612d61576040805160e560020a62461bcd02815260206004820152600f60248201527f4661696c65642070757263686173650000000000000000000000000000000000604482015290519081900360640190fd5b6000848152601b6020526040902054600160a060020a031615612df3576000848152601b6020526040902054600160a060020a03166108fc6064612dad6069600f8960068110612c8f57fe5b811515612db657fe5b049081150290604051600060405180830381858888f15050506000868152601b602052604090208054600160a060020a031916905550612e4a9050565b600f8460068110612e0057fe5b6002020154600160a060020a03166108fc6064612e256069600f8960068110612c8f57fe5b811515612e2e57fe5b049081150290604051600060405180830381858888f150505050505b600054600160a060020a03166108fc6064612e6d6005600f8960068110612c8f57fe5b811515612e7657fe5b049081150290604051600060405180830381858888f193505050505080821115612ecf57600160a060020a0383166108fc612eb7848463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b80600f8560068110612edd57fe5b600202016001018190555082600f85600681101515612ef857fe5b600202018054600160a060020a031916600160a060020a039290921691909117905550505050565b333214612f65576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f8160068110612f7257fe5b6002020154600160a060020a03163314612fd6576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b600160a060020a0382161515613036576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146130a7576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106130b557fe5b600202018054600160a060020a031916600160a060020a039283161790556000828152601b60205260409020541615613105576000818152601b602052604090208054600160a060020a03191690555b60408051338152600160a060020a038416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60035481565b60008033321461319f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b339150600f83600681106131af57fe5b6002020154600160a060020a03908116915082161515613219576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152601b6020526040902054600160a060020a0383811691161461328a576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f846006811061329857fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000858152601b602090815260409182902080549093169092558051848416815292851691830191909152818101859052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b6005546000908190819081908190819060ff161515600114613388576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146133cd576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161347e576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b33955061348a87612286565b9297509095509350915060018215151415613629575060005b600160a060020a0386166000908152600c602052604090205481101561350857600160a060020a0386166000908152600c602052604090208054889190839081106134ea57fe5b9060005260206000200154141561350057613508565b6001016134a3565b600160a060020a0386166000908152600c60205260409020548110613577576040805160e560020a62461bcd02815260206004820152600c60248201527f6769642069732077726f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000818152600d602090815260408083208054600181018255908452828420018b9055928252600c905220805460001981019081106135bc57fe5b6000918252602080832090910154600160a060020a0389168352600c90915260409091208054839081106135ec57fe5b6000918252602080832090910192909255600160a060020a0388168152600c90915260409020805490613623906000198301615196565b50613674565b83600e8881548110151561363957fe5b90600052602060002090600a02016003018190555082600e8881548110151561365e57fe5b90600052602060002090600a0201600701819055505b604051600160a060020a0387169086156108fc029087906000818181858888f19350505050158015610d37573d6000803e3d6000fd5b60075481565b600554610100900460ff1681565b60055460ff16151560011461371f576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214613764576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156137a25760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015613801576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115613883576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f60008511156138955784613898565b60645b60648511156138a9576004546138ab565b845b600b60006138b8876147ce565b8152602081019190915260400160002054600160a060020a0316610a06565b600c6020528160005260406000208181548110151561147e57fe5b6000806000806000806000613908600754613a3e565b600654600754600354600083815260096020908152604080832085845290915290205493945091929091613942919063ffffffff613e9216565b60065460009081526009602090815260408083206007548452909152902060018101546003909101546058906139b0906064908810156139a357600654600090815260096020908152604080832060075484529091529020600301546127f5565b879063ffffffff613e4a16565b8115156139b957fe5b6006805460009081526008602052604090209081015460058201546004909201549390920492613a2a9291610ccb9182906064906139fe90605863ffffffff613e4a16565b811515613a0757fe5b60065460009081526008602052604090206007015491900463ffffffff613e9216565b949c939b5091995097509550909350915050565b60007326da117a72dbcb686c2fcf88c4bfc6110cae0464600160a060020a031663d9daa497836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613ab657600080fd5b505af1158015613aca573d6000803e3d6000fd5b505050506040513d6020811015613ae057600080fd5b505192915050565b600f8160068110613af557fe5b600202018054600190910154600160a060020a03909116915082565b333214613b56576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a03163314613bb8576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b600554610100900460ff1615613c18576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff001916610100179055565b6005546000908190819081908190819060ff610100909104161515600114613cc1576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b333214613d06576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b60065495506007549450349350613d1c85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015613d65576000868152600960209081526040808320888452909152902060030154613d67565b825b91506058613d7c83606463ffffffff613e4a16565b811515613d8557fe5b0491506064613d9b83601e63ffffffff613e4a16565b811515613da457fe5b0490506729a2241af62c0000811115613dc257506729a2241af62c00005b80841015613e1a576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b600354600087815260096020908152604080832089845290915290204291909103610708019055600f60056121ed565b600080831515613e5d5760009150613e79565b50828202828482811515613e6d57fe5b0414613e7557fe5b8091505b5092915050565b600082821115613e8c57fe5b50900390565b600082820183811015613e7557fe5b60008281526008602090815260408083204260018083019190915560028201805460ff191682179055600390910185905560098352818420858552909252822001541115613f4f57600082815260086020526040902060068101546005820154600490920154613f34926064926124d6926014926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b60018301600090815260086020526040902060070155613fcb565b600082815260086020526040902060068101546005820154600490920154613fb492610ccb918290606490613f8b90605863ffffffff613e4a16565b811515613f9457fe5b60008981526008602052604090206007015491900463ffffffff613e9216565b600183016000908152600860205260409020600701555b50600190810160009081526008602052604090204290556006805482019055600755565b600080613ffa615142565b61400a888663ffffffff613e9216565b925061271061403061402386605863ffffffff613e4a16565b889063ffffffff613e4a16565b81151561403957fe5b60008b8152600860205260409020600401549190049250614060908763ffffffff613e9216565b60008a815260086020526040902060048101919091556005015461408a908363ffffffff613e9216565b60008a815260086020908152604080832060050193909355600981528282208b8352905220600101546140c3908763ffffffff613e9216565b60008a81526009602090815260408083208c84529091528082206001019290925584815220600201546140f69083613e92565b60008a815260096020908152604080832087845290915290206002015561415061412789888a8760648a9003612a5d565b60008b81526009602090815260408083208884529091529020600301549063ffffffff613e9216565b60008a81526009602090815260408083208784528252808320600301939093559a8352828b01998a52608083019788528282019485526101208301958652338152600c8b52908120600e8054600181810183559184528451600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd8101919091559b517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe8d015595517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff8c015560608401517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4008c015597517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4018b015560a08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4028b015560c08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4038b015560e08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048b0155610100909201517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058a015593517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069098019790975550855493840186559481529490942001919091555050565b60065460075460016000805b82600114156144115761437a85858c898d8d89614d75565b60008581526008602052604090206004015461439c908b63ffffffff613e9216565b6000868152600860205260409020600401556143fe6127106143d56143c88b605863ffffffff613e4a16565b8d9063ffffffff613e4a16565b8115156143de57fe5b60008881526008602052604090206005015491900463ffffffff613e9216565b6000868152600860205260409020600501555b61442e85858989614428838f63ffffffff613e9216565b8d614fed565b600085815260096020908152604080832087845290915290206003015461445c90829063ffffffff613e9216565b600086815260096020908152604080832088845290915290206002015490915061448d90839063ffffffff613e9216565b60019094019391506144a58a8763ffffffff613e8016565b99506144b084613a3e565b600086815260096020908152604080832088845290915290206003015411156144f55760008581526009602090815260408083208784529091529020600301546144fe565b6144fe84613a3e565b9650605861451388606463ffffffff613e4a16565b81151561451c57fe5b0496508695506001909201918986106145e5576145468585898d614428838f63ffffffff613e9216565b614556858560008d8d8d89614d75565b89871415614565576001909301925b60008581526009602090815260408083208784528252808320429055600787905587835260089091529020600501546145a4908363ffffffff613e8016565b60008681526008602052604090206005810191909155600601546145ce908263ffffffff613e9216565b600086815260086020526040902060060155611a42565b614362565b60506000600160a060020a0385161580159061460f5750600160a060020a0385163314155b80156146325750600160a060020a0385166000908152600a602052604090205415155b1561468357604051600160a060020a038616906032860480156108fc02916000818181858888f150506040513393506064880480156108fc02935091506000818181858888f1935050505050614688565b606e91505b6146c26146a16103e86124d6878663ffffffff613e4a16565b6006546000908152600860205260409020600701549063ffffffff613e9216565b6006546000908152600860205260409020600701555060c8830482151561471957600f60005b6002020154604051600160a060020a039091169082156108fc029083906000818181858888f193505050505061479a565b6000831180156147295750603983105b1561473757600f60016146e8565b826039141561474957600f60026146e8565b6039831180156147595750606483105b1561476757600f60036146e8565b826064141561479a57601754604051600160a060020a03909116906108fc8315029083906000818181858888f150505050505b600054600160a060020a03166108fc60c886049081150290604051600060405180830381858888f150505050505050505050565b805160009082908280602083118015906147e85750600383115b1515614864576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203420616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561487357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141580156148da575083600184038151811015156148b257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515614956576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561496557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415614aa85783600181518110151561499f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515614a1c576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b836001815181101515614a2b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515614aa8576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b82821015614d345783517f400000000000000000000000000000000000000000000000000000000000000090859084908110614ae557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614b59575083517f5b0000000000000000000000000000000000000000000000000000000000000090859084908110614b3a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614c03575083517f600000000000000000000000000000000000000000000000000000000000000090859084908110614b8f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614c03575083517f7b0000000000000000000000000000000000000000000000000000000000000090859084908110614be457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614cad575083517f2f0000000000000000000000000000000000000000000000000000000000000090859084908110614c3957fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614cad575083517f3a0000000000000000000000000000000000000000000000000000000000000090859084908110614c8e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515614d29576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600190910190614aad565b5050506020015192915050565b600080808311614d4d57fe5b8284811515614d5857fe5b0490508284811515614d6657fe5b068184020184141515613e7557fe5b614d7d615142565b600060018311614f90578882526020820188905260808201879052610100820185905261012082018490526001831415614db95760a082018690525b336000908152600c60209081526040808320600e8054600181810183559186528751600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd810191909155888601517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe820155938801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff85015560608801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40085015560808801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40185015560a08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40285015560c08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40385015560e08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048501556101008801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058501556101208801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069094019390935581549081018255908452919092200155614fe2565b50600e8054600019810191879183908110614fa757fe5b90600052602060002090600a02016006018190555087600e82815481101515614fcc57fe5b90600052602060002090600a0201600201819055505b505050505050505050565b600061271061501361500684605863ffffffff613e4a16565b869063ffffffff613e4a16565b81151561501c57fe5b049050848414615071576000878152600960209081526040808320898452909152902060010154615053908563ffffffff613e9216565b60008881526009602090815260408083208a84529091529020600101555b600087815260096020908152604080832086845290915290206002015461509e908263ffffffff613e9216565b60008881526009602090815260408083208784529091529020600201556150f86150cf878688876064889003612a5d565b60008981526009602090815260408083208884529091529020600301549063ffffffff613e9216565b6000978852600960209081526040808a20958a5294905292909620600301919091555050505050565b508054600082559060005260206000209081019061513f91906151b6565b50565b61014060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b815481835581811115611c6157600083815260209020611c619181019083015b61123d91905b808211156151d057600081556001016151bc565b509056004661697242616e6b20697473206e6f74207265616479207965742e202063686573656e64657220646f6573206e6f74206d656574207468652072756c65730000636b203f65746120696e20646973636f72640000000000000000000000000000a165627a7a7230582033daa80fc25b9a9d27088a7b1891f5a6aaf17fe9090c3c043aa082068865c9c90029

Swarm Source

bzzr://33daa80fc25b9a9d27088a7b1891f5a6aaf17fe9090c3c043aa082068865c9c9

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.