Sponsored:   VC, TLDR and CoinBene Funded "TEMCO: Bitcoin Network (RSK) Suppy Chain! Whitelist KYC Starts Now!!"
Contract Overview
Balance: 5.316586531749857761 Ether
Ether Value: $508.43 (@ $95.63/ETH)
Transactions: 996 txns
Token Tracker: FairDAPP - Bank Simulator (FBank)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xbc817a495f0114755da5305c5aa84fc5ca7ebabdat txn 0x5f6d759f9ff25dbeb92792079cdecf34fab439c12199943314aa5a8857c54814
Token Balance:
 Latest 25 transactions from a total of 996 transactions

TxHash Age From To Value [TxFee]
0x19cca25064bf6de8901a21eb4021fa0b597ae2eaa0ddabbe43ce67950188115e18 days 17 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00022103
0x992d21b4310b9f66bb451592127d82ced9cf46ab1bdad57922ca9fb6e967efb541 days 1 hr ago0xb03bef1d9659363a9357ab29a05941491accb4ec  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.000914166
0x42680cd0d465816e69c2af007ac76aae97c7b0e6e91259e898f8bf1e35ac356f41 days 4 hrs ago0x6e06469a45fb778efc3d487fdab89850a916ddf0  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00037776186
0x8c8c1d330527539c3d5a05051f82cea6bdd9d940ef1ddfabfa66f6f60a20e0d753 days 44 mins ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00062741
0xfcf0404943e205b1f8b25fc74f4d5f169f57898c51185db3b5f7c08028447a5b53 days 4 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.001 Ether0.002753886
0x31b8291084b607a2996f07c396071efa52debc156bc785d2978ecf252707d6be53 days 16 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.01 Ether0.0006773858
0xc642a8b8953ed13196fe649ef560db743741eee12a1a0a5b698091014ca3cc8353 days 23 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.000532854
0x209787991b8b90b18c60e9af190b130325d584a4996321244c8558aad99d0ee454 days 2 hrs ago0x76ecae8bffca24d2bf7744aa4b2d242325cba945  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00040271666
0x5623797f8ac472c6a49fdd3e083e377ca649f66f95b5f5a59208eebc4e2cb98a54 days 7 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.001015794
0xfaa46d8217cc1610b34baa4561840607ef34a2332c2874ffb72223687a0786f754 days 7 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.001 Ether0.003671848
0x8771d6715cd76dfe4d8331cf02a8c6f218bbf242c4c3065f4cb2e63d8d859ecf54 days 11 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.0004895072
0x052f4ec1e6b55e51293f3134f14b784c1fdfcf7a333cfbf8165ce47e58c17bec54 days 15 hrs ago0xe5b81a1b5c457fb2687e5ed9eb5894eec22bc474  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.04 Ether0.001563282
0x1749175b54e260f9a0159aef86c3aa33f740c484682a3a592b17be9fa98b258e54 days 15 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.1 Ether0.00218656
0x723c8627d771fc98a894cbef836e03e648fedad09e72dce1ab264c0fc880876354 days 16 hrs ago0x76ecae8bffca24d2bf7744aa4b2d242325cba945  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.003 Ether0.00185238963
0x5766de70a6efa156d835dfa78318899bf1b0c5b262d012dcdbbc2b935943d4c154 days 16 hrs ago0x76ecae8bffca24d2bf7744aa4b2d242325cba945  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00031430466
0xe25c6387b07753394877e2d0ce981027e0917279ec045f851170c8197f0852ee54 days 22 hrs ago0x190a2409fc6434483d4c2cab804e75e3bc5ebfa6  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.000397854
0xca63d9aad48f5a0ad44f0d531c4b1089fedf76a7bdd9d0417aedf9ea7e55312155 days 3 hrs ago0x20920c6df10c08ff92d74143a86a330185a726bf  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.0003580686
0x182223fb5bb725ceb89e18b19e92f394180f03106f27d2f3981527f13bfec2ef55 days 5 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00060696
0x0357826d6eb80976d18ec78cd5ae0b0c68683fc60081272a263c39c9a950769055 days 5 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.0008963
0x0a3e01820c8088b3deff4fa8863f0a72813e85b1210de1692f7a6de3858c4a5c55 days 5 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.001 Ether0.00458981
0xbd0aa5f6cf276a17be80a4db1b03a0052bcde797c6c1e6a88dca517c07d1a1ac55 days 5 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.00059696
0xe404f3c278e090aae5ce650ca33544be64440c29d4a3a749b8dca9f9128486ce55 days 6 hrs ago0x1dff003e16e93823cdb91e20bfd1d31ad05b6224  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b71 Ether0.0028832
0x992b47a1f66c1edddd91723701e420d700b24fdc62cadf2de02970af000f540155 days 6 hrs ago0x20920c6df10c08ff92d74143a86a330185a726bf  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.2 Ether0.0026083057
0x15f974f7b7918b74d037f647b6042565a350905df8797b70bc3aff7edc2270f155 days 6 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70.2 Ether0.00245533
0x393fe4e9853e27318a81b4501c46d22bc41a8ec59ef456236a90d16d52aa92ef55 days 9 hrs ago0x11dcb85916423c46f70552ddb220e2583d2a830f  IN   0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70 Ether0.000417872
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x19cca25064bf6de8901a21eb4021fa0b597ae2eaa0ddabbe43ce67950188115e679705018 days 17 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xe5b81a1b5c457fb2687e5ed9eb5894eec22bc4740.020984825105136415 Ether
0x992d21b4310b9f66bb451592127d82ced9cf46ab1bdad57922ca9fb6e967efb5666083041 days 1 hr ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xb03bef1d9659363a9357ab29a05941491accb4ec0.264 Ether
0x42680cd0d465816e69c2af007ac76aae97c7b0e6e91259e898f8bf1e35ac356f666013141 days 4 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6e06469a45fb778efc3d487fdab89850a916ddf00.8096 Ether
0x8c8c1d330527539c3d5a05051f82cea6bdd9d940ef1ddfabfa66f6f60a20e0d7658793853 days 44 mins ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x1dff003e16e93823cdb91e20bfd1d31ad05b62240.002098482510513641 Ether
0xfcf0404943e205b1f8b25fc74f4d5f169f57898c51185db3b5f7c08028447a5b658695853 days 4 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.000005 Ether
0xfcf0404943e205b1f8b25fc74f4d5f169f57898c51185db3b5f7c08028447a5b658695853 days 4 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.000005 Ether
0x31b8291084b607a2996f07c396071efa52debc156bc785d2978ecf252707d6be658401653 days 16 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.00005 Ether
0x31b8291084b607a2996f07c396071efa52debc156bc785d2978ecf252707d6be658401653 days 16 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.00005 Ether
0xc642a8b8953ed13196fe649ef560db743741eee12a1a0a5b698091014ca3cc83658221753 days 23 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xe5b81a1b5c457fb2687e5ed9eb5894eec22bc4740.052119260577291746 Ether
0x209787991b8b90b18c60e9af190b130325d584a4996321244c8558aad99d0ee4658123554 days 2 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x76ecae8bffca24d2bf7744aa4b2d242325cba9450.003935344543296881 Ether
0x5623797f8ac472c6a49fdd3e083e377ca649f66f95b5f5a59208eebc4e2cb98a657997154 days 7 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x1dff003e16e93823cdb91e20bfd1d31ad05b62240.132489932957661659 Ether
0xfaa46d8217cc1610b34baa4561840607ef34a2332c2874ffb72223687a0786f7657995454 days 7 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.000005 Ether
0xfaa46d8217cc1610b34baa4561840607ef34a2332c2874ffb72223687a0786f7657995454 days 7 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.000005 Ether
0x052f4ec1e6b55e51293f3134f14b784c1fdfcf7a333cfbf8165ce47e58c17bec657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.0002 Ether
0x052f4ec1e6b55e51293f3134f14b784c1fdfcf7a333cfbf8165ce47e58c17bec657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xd94ff29ee4ee9b9d0256774bff65b2ddd08ea0590.0002 Ether
0x1749175b54e260f9a0159aef86c3aa33f740c484682a3a592b17be9fa98b258e657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.0005 Ether
0x1749175b54e260f9a0159aef86c3aa33f740c484682a3a592b17be9fa98b258e657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.0005 Ether
0x1749175b54e260f9a0159aef86c3aa33f740c484682a3a592b17be9fa98b258e657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x1dff003e16e93823cdb91e20bfd1d31ad05b62240.001 Ether
0x1749175b54e260f9a0159aef86c3aa33f740c484682a3a592b17be9fa98b258e657796254 days 15 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x812f629c088196059fab6554cd6b9463685865400.002 Ether
0x723c8627d771fc98a894cbef836e03e648fedad09e72dce1ab264c0fc8808763657780154 days 16 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70xbc817a495f0114755da5305c5aa84fc5ca7ebabd0.000015 Ether
0x723c8627d771fc98a894cbef836e03e648fedad09e72dce1ab264c0fc8808763657780154 days 16 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x6d0acdd986b7589295a43c91b95fd1f26fbc59f60.000015 Ether
0x5766de70a6efa156d835dfa78318899bf1b0c5b262d012dcdbbc2b935943d4c1657777954 days 16 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x76ecae8bffca24d2bf7744aa4b2d242325cba9450.027585892217102666 Ether
0xe25c6387b07753394877e2d0ce981027e0917279ec045f851170c8197f0852ee657622454 days 22 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x190a2409fc6434483d4c2cab804e75e3bc5ebfa60.12596407813737684 Ether
0xca63d9aad48f5a0ad44f0d531c4b1089fedf76a7bdd9d0417aedf9ea7e553121657486055 days 3 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x20920c6df10c08ff92d74143a86a330185a726bf0.2099401302289614 Ether
0x182223fb5bb725ceb89e18b19e92f394180f03106f27d2f3981527f13bfec2ef657454455 days 5 hrs ago0xb8f93e49a3278bb92f643ca2491cf80bfa0a01b70x11dcb85916423c46f70552ddb220e2583d2a830f0.210989830880106207 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: FairBank
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

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 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"}]

  Contract Creation Code Switch To Opcodes View
60c0604052601960808190527f4661697244415050202d2042616e6b2053696d756c61746f720000000000000060a09081526200004091600191906200013c565b506040805180820190915260058082527f4642616e6b000000000000000000000000000000000000000000000000000000602090920191825262000087916002916200013c565b506005805461ffff19169055348015620000a057600080fd5b5060008054600160a060020a0319163317815561fd2060035560396004555b60068110156200013557600054600160a060020a0316600f8260068110620000e357fe5b600202018054600160a060020a031916600160a060020a0392909216919091179055674563918244f40000600f82600681106200011c57fe5b60020201600101819055508080600101915050620000bf565b50620001e1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017f57805160ff1916838001178555620001af565b82800160010185558215620001af579182015b82811115620001af57825182559160200191906001019062000192565b50620001bd929150620001c1565b5090565b620001de91905b80821115620001bd5760008155600101620001c8565b90565b61526080620001f16000396000f3006080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610357578063095ea7b3146103e15780630f15f4c01461040557806315daf5941461041a578063180392301461044e57806318160ddd146104bf578063186601ca146104e657806323b872dd1461050f57806323df93c11461053957806328d27f091461055d5780632d6ddfda146105c557806333b6baf5146105da57806334aed7a0146105ef57806334d5f37b14610630578063394baa0b146106895780633ccfd60b146106a15780634420e486146106b657806350197646146106d757806358761920146106ec57806359a87bc1146107015780635d2d5c371461071b5780636352211e1461076757806365a114f11461077f578063678bbf241461078757806370a08231146107c757806378c9f9cf146107e857806395d89b411461080c57806398f0412814610821578063a54447aa14610839578063a9059cbb14610844578063aafb088e14610868578063b2e6ceeb1461087d578063b604ed1b14610895578063bed47ed8146108ad578063c5d3ce1e146108c2578063cca63f4f146108d7578063ce2b78541461092a578063d571dbac1461094e578063d9daa49714610996578063d9f035aa146109ae578063ef8c2c58146109e9578063f60436cd146109fe575b60055460ff161515600114610264576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146102a9576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156102e75760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050610355565b66038d7ea4c68000341015610346576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b61035560646004546000610a06565b005b34801561036357600080fd5b5061036c610d41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a657818101518382015260200161038e565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103ed57600080fd5b50610355600160a060020a0360043516602435610dce565b34801561041157600080fd5b50610355611026565b34801561042657600080fd5b506104326004356111b2565b60408051600160a060020a039092168252519081900360200190f35b34801561045a57600080fd5b5061046f600160a060020a03600435166111cd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ab578181015183820152602001610493565b505050509050019250505060405180910390f35b3480156104cb57600080fd5b506104d461123a565b60408051918252519081900360200190f35b3480156104f257600080fd5b506104fb611240565b604080519115158252519081900360200190f35b34801561051b57600080fd5b50610355600160a060020a0360043581169060243516604435611249565b34801561054557600080fd5b506104d4600160a060020a0360043516602435611463565b34801561056957600080fd5b50610575600435611493565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e085015261010084015261012083015251908190036101400190f35b3480156105d157600080fd5b506103556114f5565b3480156105e657600080fd5b5061043261160e565b3480156105fb57600080fd5b5061060a60043560243561161d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561063c57600080fd5b5061064860043561164f565b604080519889526020890197909752941515878701526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561069557600080fd5b50610432600435611696565b3480156106ad57600080fd5b506103556116b1565b3480156106c257600080fd5b506104d4600160a060020a0360043516611a4e565b3480156106e357600080fd5b506104d4611a60565b3480156106f857600080fd5b506104d4611a66565b610355600435602435600160a060020a0360443516611a6c565b6040805160206004803580820135601f8101849004840285018401909552848452610355943694929360249392840191908190840183828082843750949750611c669650505050505050565b34801561077357600080fd5b50610432600435611f0d565b610355611fdb565b34801561079357600080fd5b5061079f600435612286565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b3480156107d357600080fd5b506104d4600160a060020a0360043516612a0c565b3480156107f457600080fd5b506104d4600435602435604435606435608435612a5d565b34801561081857600080fd5b5061036c612b1f565b34801561082d57600080fd5b506104d4600435612b77565b610355600435612bc8565b34801561085057600080fd5b50610355600160a060020a0360043516602435612f20565b34801561087457600080fd5b506104d4613151565b34801561088957600080fd5b50610355600435613157565b3480156108a157600080fd5b5061035560043561331a565b3480156108b957600080fd5b506104d46136aa565b3480156108ce57600080fd5b506104fb6136b0565b604080516020600460443581810135601f81018490048402850184019095528484526103559482359460248035953695946064949201919081908401838280828437509497506136be9650505050505050565b34801561093657600080fd5b506104d4600160a060020a03600435166024356138d7565b34801561095a57600080fd5b506109636138f2565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b3480156109a257600080fd5b506104d4600435613a3e565b3480156109ba57600080fd5b506109c6600435613ae8565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156109f557600080fd5b50610355613b11565b610355613c29565b60065460075460008080610a1984613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610a62576000858152600960209081526040808320878452909152902060030154610a64565b825b91506058610a7983606463ffffffff613e4a16565b811515610a8257fe5b600087815260096020908152604080832089845290915281206001015492909104935010610ab05781610ade565b6000858152600960209081526040808320878452909152902060010154610ade90839063ffffffff613e8016565b6003546000878152600960209081526040808320898452909152902054919250610b0e919063ffffffff613e9216565b42118015610b375750600085815260096020908152604080832087845290915290206001015482115b15610c3e57610b468585613ea1565b600654600754600082815260096020908152604080832084845290915290204290559095509350610b7684613a3e565b6000868152600960209081526040808320888452909152902060030154909350831015610bbf576000858152600960209081526040808320878452909152902060030154610bc1565b825b91506058610bd683606463ffffffff613e4a16565b811515610bdf57fe5b600087815260096020908152604080832089845290915281206001015492909104935010610c0d5781610c3b565b6000858152600960209081526040808320878452909152902060010154610c3b90839063ffffffff613e8016565b90505b34811115610c5957610c54858584348c8c613fef565b610c66565b610c663489898585614356565b600085815260086020526040812060068101546005820154600490920154610cd792610ccb918290606490610ca290605863ffffffff613e4a16565b811515610cab57fe5b60008d81526008602052604090206007015491900463ffffffff613e9216565b9063ffffffff613e8016565b11610d2c576040805160e560020a62461bcd02815260206004820152600a60248201527f64617461206572726f7200000000000000000000000000000000000000000000604482015290519081900360640190fd5b610d378634896145ea565b5050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b820191906000526020600020905b815481529060010190602001808311610da957829003601f168201915b505050505081565b333214610e13576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600a60205260409020541515610e82576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f742061207265676973746572656420757365720000000000000000000000604482015290519081900360640190fd5b600f8160068110610e8f57fe5b6002020154600160a060020a03163314610ef3576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b60068110610f4b576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a031615610fb8576040805160e560020a62461bcd02815260206004820152600860248201527f417070726f766564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b60209081526040918290208054600160a060020a038616600160a060020a0319909116811790915582513381529182015280820183905290517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360600190a15050565b33321461106b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a031633146110cd576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff1615611128576040805160e560020a62461bcd02815260206004820152601a60248201527f4661697242616e6b20616c726561647920616374697661746564000000000000604482015290519081900360640190fd5b6005805460ff1916600190811790915560068190556007819055600052427fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f8190557f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a366020527fcc827bfc2dbd52cbec5736232342c6a272d0cf5ce2695a969eb442c9480de86d55565b600b60205260009081526040902054600160a060020a031681565b600160a060020a0381166000908152600c602090815260409182902080548351818402810184019094528084526060939283018282801561122d57602002820191906000526020600020905b815481526020019060010190808311611219575b505050505090505b919050565b60065b90565b60055460ff1681565b33321461128e576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f816006811061129b57fe5b6002020154600160a060020a03848116911614611302576040805160e560020a62461bcd02815260206004820152600b60248201527f4f776e6572206572726f72000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611362576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146113d3576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106113e157fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000838152601b602090815260409182902080549093169092558051868416815292851691830191909152818101839052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b600d6020528160005260406000208181548110151561147e57fe5b90600052602060002001600091509150505481565b600e8054829081106114a157fe5b90600052602060002090600a0201600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009015490508a565b33321461153a576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a0316331461159c576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b60055460ff610100909104161515600114611601576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff0019169055565b600054600160a060020a031681565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701549596949560ff9094169492939192909188565b601b60205260009081526040902054600160a060020a031681565b600554600090606090829081908190819081908190819060ff161515600114611726576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b33321461176b576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161181c576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b336000818152600c60209081526040918290208054835181840281018401909452808452939c5091929083018282801561187557602002820191906000526020600020905b815481526020019060010190808311611861575b50508351600160a060020a038e166000908152600c60205260408120959d50909b506118a694935091506151219050565b86811015611a0c576118ce88828151811015156118bf57fe5b90602001906020020151612286565b929750909550935091506001821515141561192c57600160a060020a0389166000908152600d60205260409020885189908390811061190957fe5b6020908102909101810151825460018101845560009384529190922001556119f2565b83600e898381518110151561193d57fe5b602090810290910101518154811061195157fe5b90600052602060002090600a02016003018190555082600e898381518110151561197757fe5b602090810290910101518154811061198b57fe5b90600052602060002090600a020160070181905550600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002088828151811015156119d357fe5b6020908102909101810151825460018101845560009384529190922001555b611a02868663ffffffff613e9216565b95506001016118a6565b604051600160a060020a038a169087156108fc029088906000818181858888f19350505050158015611a42573d6000803e3d6000fd5b50505050505050505050565b600a6020526000908152604090205481565b60065481565b60045481565b60055460ff161515600114611acd576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214611b12576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c68000341015611b505760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015611baf576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115611c31576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f6000851115611c435784611c46565b60645b6064851115611c5757600454611c59565b845b84610a06565b505b505050565b6000333214611cad576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b662386f26fc100003414611d31576040805160e560020a62461bcd02815260206004820152603b60248201527f726567697374726174696f6e2066656520697320302e30312065746865722c2060448201527f706c65617365207365742074686520657861637420616d6f756e740000000000606482015290519081900360840190fd5b611d3a826147ce565b9050801515611d93576040805160e560020a62461bcd02815260206004820152601460248201527f6e616d652063616e6e6f7420626520656d707479000000000000000000000000604482015290519081900360640190fd5b6000818152600b6020526040902054600160a060020a031615611e26576040805160e560020a62461bcd02815260206004820152602560248201527f74686973206e616d652068617320616c7265616479206265656e20726567697360448201527f7465726564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600a602052604090205415611eb1576040805160e560020a62461bcd02815260206004820152602160248201527f706c6561736520646f206e6f742072657065617420726567697374726174696f60448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000818152600b602090815260408083208054600160a060020a031916339081179091558352600a90915280822083905581549051600160a060020a0391909116913480156108fc02929091818181858888f150505050505050565b600060068210611f67576040805160e560020a62461bcd02815260206004820152600d60248201527f746f6b656e4964206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b600f8260068110611f7457fe5b6002020154600160a060020a03169050801515611235576040805160e560020a62461bcd02815260206004820152600860248201527f4e6f206f776e6572000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6005546000908190819081908190819060ff610100909104161515600114612073576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b3332146120b8576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600654955060075494503493506120ce85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015612117576000868152600960209081526040808320888452909152902060030154612119565b825b9150605861212e83606463ffffffff613e4a16565b81151561213757fe5b049150606461214d83601463ffffffff613e4a16565b81151561215657fe5b0490506729a2241af62c000081111561217457506729a2241af62c00005b808410156121cc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b60008681526009602090815260408083208884529091529020429055600f60055b60029081029190910154604051600160a060020a0390911691830480156108fc02916000818181858888f1505060008054604051600160a060020a0390911694506002860480156108fc029450925090818181858888f19350505050508084111561227e57336108fc612266868463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b505050505050565b600080600080612294615142565b6000806000806000806000600e8d8154811015156122ae57fe5b90600052602060002090600a0201610140604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152505097506007549650876101000151600014156125d057875160009081526008602052604090206002015460ff16151560011415612507576040808901518951600090815260086020529190912060030154111561242e576123908860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156123e35787516000908152600960209081526040808320828c015184529091529020600301546123e5565b845b935060586123fa85606463ffffffff613e4a16565b81151561240357fe5b04935061242788602001518960800151868b604001518c6101200151606403612a5d565b955061246b565b61271061245e61244d60588b6101200151613e4a90919063ffffffff16565b60808b01519063ffffffff613e4a16565b81151561246757fe5b0495505b60208089015189516000908152600890925260409091206003015414156124f25787516000908152600960209081526040808320828c0151845290915290206001015488516124ef916124e2916124d6906124c590612b77565b60808d01519063ffffffff613e4a16565b9063ffffffff614d4116565b879063ffffffff613e9216565b95505b949a5060009950899850600197508a946129fd565b87604001518711156125be576125208860200151613a3e565b88516000908152600960209081526040808320828d015184529091529020600301549095508510156125735787516000908152600960209081526040808320828c01518452909152902060030154612575565b845b9350605861258a85606463ffffffff613e4a16565b81151561259357fe5b0493506125b788602001518960800151868b604001518c6101200151606403612a5d565b95506124f2565b60009b508b9a508a99508998506129fd565b6060880151156125e45787606001516125ea565b87602001515b61012089015160e08a01518a516000908152600860205260409020600201549295506064919091039350915060ff161515600114156128ab575b6064886060015160001461263c578860600151612642565b88602001515b8403111561265c5785838260009b509b509b509b506129fd565b61010088015161267390849063ffffffff613e9216565b885160009081526008602052604090206003015411156127be5761269683613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156126e357875160009081526009602090815260408083208684529091529020600301546126e5565b845b935060586126fa85606463ffffffff613e4a16565b81151561270357fe5b04935087604001518314156127575761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b87612a5d565b6040890151909c509a5060009950600198508b95506129fd565b61278e6124e2848a60200151861461276f5786612775565b8a60a001515b876127378d610100015189613e9290919063ffffffff16565b95506127b7886020015184146127a457846127aa565b8860a001515b829063ffffffff613e9216565b90506128a0565b6128196127106128016127e060588c6101200151613e4a90919063ffffffff16565b60808c01516127f5908663ffffffff613e8016565b9063ffffffff613e4a16565b81151561280a57fe5b8891900463ffffffff613e9216565b6040808a01518a5160009081526008602052919091206003015491975014156128865787516000908152600960209081526040808320818c01518452909152902060010154885161273d916124e2916124d69061287590612b77565b60c08d01519063ffffffff613e4a16565b858860400151600060018191509b509b509b509b506129fd565b600190920191612624565b606488606001516000146128c35788606001516128c9565b88602001515b840311156128e35785838260009b509b509b509b506129fd565b6101008801516128fa90849063ffffffff613e9216565b8711156129e05761290a83613a3e565b885160009081526009602090815260408083208784529091529020600301549095508510156129575787516000908152600960209081526040808320868452909152902060030154612959565b845b9350605861296e85606463ffffffff613e4a16565b81151561297757fe5b04935087604001518314156129ab5761273d6124e2848a60c00151876127378d610100015189613e9290919063ffffffff16565b6129c36124e2848a60200151861461276f5786612775565b95506129d9886020015184146127a457846127aa565b90506129f2565b85838260009b509b509b509b506129fd565b6001909201916128ab565b50505050505050509193509193565b6000600681805b82811015612a5557600160a060020a038516600f8260068110612a3257fe5b6002020154600160a060020a03161415612a4d576001909101905b600101612a13565b509392505050565b604080517f78c9f9cf000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606481018490526084810183905290516000917326da117a72dbcb686c2fcf88c4bfc6110cae0464916378c9f9cf9160a48082019260209290919082900301818787803b158015612ae957600080fd5b505af1158015612afd573d6000803e3d6000fd5b505050506040513d6020811015612b1357600080fd5b50519695505050505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b600081815260086020526040812060068101546005820154600490920154612bc2926064926124d6926050926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b92915050565b6005546000908190819060ff161515600114612c30576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214612c75576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b3392503491506064612ca5606e600f8760068110612c8f57fe5b6002020160010154613e4a90919063ffffffff16565b811515612cae57fe5b0490506000600f8560068110612cc057fe5b6002020154600160a060020a031614801590612cff5750600160a060020a038316600f8560068110612cee57fe5b6002020154600160a060020a031614155b8015612d0b5750808210155b1515612d61576040805160e560020a62461bcd02815260206004820152600f60248201527f4661696c65642070757263686173650000000000000000000000000000000000604482015290519081900360640190fd5b6000848152601b6020526040902054600160a060020a031615612df3576000848152601b6020526040902054600160a060020a03166108fc6064612dad6069600f8960068110612c8f57fe5b811515612db657fe5b049081150290604051600060405180830381858888f15050506000868152601b602052604090208054600160a060020a031916905550612e4a9050565b600f8460068110612e0057fe5b6002020154600160a060020a03166108fc6064612e256069600f8960068110612c8f57fe5b811515612e2e57fe5b049081150290604051600060405180830381858888f150505050505b600054600160a060020a03166108fc6064612e6d6005600f8960068110612c8f57fe5b811515612e7657fe5b049081150290604051600060405180830381858888f193505050505080821115612ecf57600160a060020a0383166108fc612eb7848463ffffffff613e8016565b6040518115909202916000818181858888f150505050505b80600f8560068110612edd57fe5b600202016001018190555082600f85600681101515612ef857fe5b600202018054600160a060020a031916600160a060020a039290921691909117905550505050565b333214612f65576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600f8160068110612f7257fe5b6002020154600160a060020a03163314612fd6576040805160e560020a62461bcd02815260206004820152601f60248201527f546865206361726420646f6573206e6f742062656c6f6e6720746f20796f7500604482015290519081900360640190fd5b600160a060020a0382161515613036576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000818152601b6020526040902054600160a060020a038381169116146130a7576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f82600681106130b557fe5b600202018054600160a060020a031916600160a060020a039283161790556000828152601b60205260409020541615613105576000818152601b602052604090208054600160a060020a03191690555b60408051338152600160a060020a038416602082015280820183905290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a15050565b60035481565b60008033321461319f576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b339150600f83600681106131af57fe5b6002020154600160a060020a03908116915082161515613219576040805160e560020a62461bcd02815260206004820152600d60248201527f41646472657373206572726f7200000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152601b6020526040902054600160a060020a0383811691161461328a576040805160e560020a62461bcd02815260206004820152601260248201527f576974686f7574207065726d697373696f6e0000000000000000000000000000604482015290519081900360640190fd5b81600f846006811061329857fe5b600202018054600160a060020a03928316600160a060020a0319918216179091556000858152601b602090815260409182902080549093169092558051848416815292851691830191909152818101859052517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360600190a1505050565b6005546000908190819081908190819060ff161515600114613388576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b3332146133cd576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b336000908152600c60205260408120541161347e576040805160e560020a62461bcd02815260206004820152604260248201527f7573657220686173206e6f7420707572636861736564207468652070726f647560448201527f6374206f722068617320636f6d706c657465642074686520776974686472617760648201527f616c000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b33955061348a87612286565b9297509095509350915060018215151415613629575060005b600160a060020a0386166000908152600c602052604090205481101561350857600160a060020a0386166000908152600c602052604090208054889190839081106134ea57fe5b9060005260206000200154141561350057613508565b6001016134a3565b600160a060020a0386166000908152600c60205260409020548110613577576040805160e560020a62461bcd02815260206004820152600c60248201527f6769642069732077726f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000818152600d602090815260408083208054600181018255908452828420018b9055928252600c905220805460001981019081106135bc57fe5b6000918252602080832090910154600160a060020a0389168352600c90915260409091208054839081106135ec57fe5b6000918252602080832090910192909255600160a060020a0388168152600c90915260409020805490613623906000198301615196565b50613674565b83600e8881548110151561363957fe5b90600052602060002090600a02016003018190555082600e8881548110151561365e57fe5b90600052602060002090600a0201600701819055505b604051600160a060020a0387169086156108fc029087906000818181858888f19350505050158015610d37573d6000803e3d6000fd5b60075481565b600554610100900460ff1681565b60055460ff16151560011461371f576040805160e560020a62461bcd02815260206004820152603260248201526000805160206151d58339815191526044820152600080516020615215833981519152606482015290519081900360840190fd5b333214613764576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b66038d7ea4c680003410156137a25760008054604051600160a060020a03909116913480156108fc02929091818181858888f1935050505050611c61565b66038d7ea4c68000341015613801576040805160e560020a62461bcd02815260206004820152601d60248201527f6d696e696d756d20616d6f756e7420697320302e303031206574686572000000604482015290519081900360640190fd5b82620f4240811115613883576040805160e560020a62461bcd02815260206004820152602160248201527f737465702073697a65206d757374206e6f74206578636565642031303030303060448201527f3000000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611c5f60008511156138955784613898565b60645b60648511156138a9576004546138ab565b845b600b60006138b8876147ce565b8152602081019190915260400160002054600160a060020a0316610a06565b600c6020528160005260406000208181548110151561147e57fe5b6000806000806000806000613908600754613a3e565b600654600754600354600083815260096020908152604080832085845290915290205493945091929091613942919063ffffffff613e9216565b60065460009081526009602090815260408083206007548452909152902060018101546003909101546058906139b0906064908810156139a357600654600090815260096020908152604080832060075484529091529020600301546127f5565b879063ffffffff613e4a16565b8115156139b957fe5b6006805460009081526008602052604090209081015460058201546004909201549390920492613a2a9291610ccb9182906064906139fe90605863ffffffff613e4a16565b811515613a0757fe5b60065460009081526008602052604090206007015491900463ffffffff613e9216565b949c939b5091995097509550909350915050565b60007326da117a72dbcb686c2fcf88c4bfc6110cae0464600160a060020a031663d9daa497836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015613ab657600080fd5b505af1158015613aca573d6000803e3d6000fd5b505050506040513d6020811015613ae057600080fd5b505192915050565b600f8160068110613af557fe5b600202018054600190910154600160a060020a03909116915082565b333214613b56576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b600054600160a060020a03163314613bb8576040805160e560020a62461bcd02815260206004820152601160248201527f5065726d697373696f6e2064656e696564000000000000000000000000000000604482015290519081900360640190fd5b600554610100900460ff1615613c18576040805160e560020a62461bcd02815260206004820152601c60248201527f54696d65207365727669636520697320616c7265616479206f70656e00000000604482015290519081900360640190fd5b6005805461ff001916610100179055565b6005546000908190819081908190819060ff610100909104161515600114613cc1576040805160e560020a62461bcd02815260206004820152603460248201527f746869732066656174757265206973206e6f74207475726e6564206f6e206f7260448201527f20686173206265656e207475726e6564206f6666000000000000000000000000606482015290519081900360840190fd5b333214613d06576040805160e560020a62461bcd02815260206004820152601e60248201526000805160206151f5833981519152604482015290519081900360640190fd5b60065495506007549450349350613d1c85613a3e565b6000878152600960209081526040808320898452909152902060030154909350831015613d65576000868152600960209081526040808320888452909152902060030154613d67565b825b91506058613d7c83606463ffffffff613e4a16565b811515613d8557fe5b0491506064613d9b83601e63ffffffff613e4a16565b811515613da457fe5b0490506729a2241af62c0000811115613dc257506729a2241af62c00005b80841015613e1a576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f75676820707269636500000000000000000000000000000000604482015290519081900360640190fd5b600354600087815260096020908152604080832089845290915290204291909103610708019055600f60056121ed565b600080831515613e5d5760009150613e79565b50828202828482811515613e6d57fe5b0414613e7557fe5b8091505b5092915050565b600082821115613e8c57fe5b50900390565b600082820183811015613e7557fe5b60008281526008602090815260408083204260018083019190915560028201805460ff191682179055600390910185905560098352818420858552909252822001541115613f4f57600082815260086020526040902060068101546005820154600490920154613f34926064926124d6926014926127f59291610ccb919082908890610ca290605863ffffffff613e4a16565b60018301600090815260086020526040902060070155613fcb565b600082815260086020526040902060068101546005820154600490920154613fb492610ccb918290606490613f8b90605863ffffffff613e4a16565b811515613f9457fe5b60008981526008602052604090206007015491900463ffffffff613e9216565b600183016000908152600860205260409020600701555b50600190810160009081526008602052604090204290556006805482019055600755565b600080613ffa615142565b61400a888663ffffffff613e9216565b925061271061403061402386605863ffffffff613e4a16565b889063ffffffff613e4a16565b81151561403957fe5b60008b8152600860205260409020600401549190049250614060908763ffffffff613e9216565b60008a815260086020526040902060048101919091556005015461408a908363ffffffff613e9216565b60008a815260086020908152604080832060050193909355600981528282208b8352905220600101546140c3908763ffffffff613e9216565b60008a81526009602090815260408083208c84529091528082206001019290925584815220600201546140f69083613e92565b60008a815260096020908152604080832087845290915290206002015561415061412789888a8760648a9003612a5d565b60008b81526009602090815260408083208884529091529020600301549063ffffffff613e9216565b60008a81526009602090815260408083208784528252808320600301939093559a8352828b01998a52608083019788528282019485526101208301958652338152600c8b52908120600e8054600181810183559184528451600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd8101919091559b517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe8d015595517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff8c015560608401517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4008c015597517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4018b015560a08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4028b015560c08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4038b015560e08301517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048b0155610100909201517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058a015593517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069098019790975550855493840186559481529490942001919091555050565b60065460075460016000805b82600114156144115761437a85858c898d8d89614d75565b60008581526008602052604090206004015461439c908b63ffffffff613e9216565b6000868152600860205260409020600401556143fe6127106143d56143c88b605863ffffffff613e4a16565b8d9063ffffffff613e4a16565b8115156143de57fe5b60008881526008602052604090206005015491900463ffffffff613e9216565b6000868152600860205260409020600501555b61442e85858989614428838f63ffffffff613e9216565b8d614fed565b600085815260096020908152604080832087845290915290206003015461445c90829063ffffffff613e9216565b600086815260096020908152604080832088845290915290206002015490915061448d90839063ffffffff613e9216565b60019094019391506144a58a8763ffffffff613e8016565b99506144b084613a3e565b600086815260096020908152604080832088845290915290206003015411156144f55760008581526009602090815260408083208784529091529020600301546144fe565b6144fe84613a3e565b9650605861451388606463ffffffff613e4a16565b81151561451c57fe5b0496508695506001909201918986106145e5576145468585898d614428838f63ffffffff613e9216565b614556858560008d8d8d89614d75565b89871415614565576001909301925b60008581526009602090815260408083208784528252808320429055600787905587835260089091529020600501546145a4908363ffffffff613e8016565b60008681526008602052604090206005810191909155600601546145ce908263ffffffff613e9216565b600086815260086020526040902060060155611a42565b614362565b60506000600160a060020a0385161580159061460f5750600160a060020a0385163314155b80156146325750600160a060020a0385166000908152600a602052604090205415155b1561468357604051600160a060020a038616906032860480156108fc02916000818181858888f150506040513393506064880480156108fc02935091506000818181858888f1935050505050614688565b606e91505b6146c26146a16103e86124d6878663ffffffff613e4a16565b6006546000908152600860205260409020600701549063ffffffff613e9216565b6006546000908152600860205260409020600701555060c8830482151561471957600f60005b6002020154604051600160a060020a039091169082156108fc029083906000818181858888f193505050505061479a565b6000831180156147295750603983105b1561473757600f60016146e8565b826039141561474957600f60026146e8565b6039831180156147595750606483105b1561476757600f60036146e8565b826064141561479a57601754604051600160a060020a03909116906108fc8315029083906000818181858888f150505050505b600054600160a060020a03166108fc60c886049081150290604051600060405180830381858888f150505050505050505050565b805160009082908280602083118015906147e85750600383115b1515614864576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203420616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561487357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141580156148da575083600184038151811015156148b257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515614956576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b83600081518110151561496557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415614aa85783600181518110151561499f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515614a1c576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b836001815181101515614a2b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515614aa8576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b82821015614d345783517f400000000000000000000000000000000000000000000000000000000000000090859084908110614ae557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614b59575083517f5b0000000000000000000000000000000000000000000000000000000000000090859084908110614b3a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614c03575083517f600000000000000000000000000000000000000000000000000000000000000090859084908110614b8f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614c03575083517f7b0000000000000000000000000000000000000000000000000000000000000090859084908110614be457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80614cad575083517f2f0000000000000000000000000000000000000000000000000000000000000090859084908110614c3957fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614cad575083517f3a0000000000000000000000000000000000000000000000000000000000000090859084908110614c8e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515614d29576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600190910190614aad565b5050506020015192915050565b600080808311614d4d57fe5b8284811515614d5857fe5b0490508284811515614d6657fe5b068184020184141515613e7557fe5b614d7d615142565b600060018311614f90578882526020820188905260808201879052610100820185905261012082018490526001831415614db95760a082018690525b336000908152600c60209081526040808320600e8054600181810183559186528751600a82027fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd810191909155888601517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fe820155938801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3ff85015560608801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40085015560808801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40185015560a08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40285015560c08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c40385015560e08801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4048501556101008801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4058501556101208801517fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c4069094019390935581549081018255908452919092200155614fe2565b50600e8054600019810191879183908110614fa757fe5b90600052602060002090600a02016006018190555087600e82815481101515614fcc57fe5b90600052602060002090600a0201600201819055505b505050505050505050565b600061271061501361500684605863ffffffff613e4a16565b869063ffffffff613e4a16565b81151561501c57fe5b049050848414615071576000878152600960209081526040808320898452909152902060010154615053908563ffffffff613e9216565b60008881526009602090815260408083208a84529091529020600101555b600087815260096020908152604080832086845290915290206002015461509e908263ffffffff613e9216565b60008881526009602090815260408083208784529091529020600201556150f86150cf878688876064889003612a5d565b60008981526009602090815260408083208884529091529020600301549063ffffffff613e9216565b6000978852600960209081526040808a20958a5294905292909620600301919091555050505050565b508054600082559060005260206000209081019061513f91906151b6565b50565b61014060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b815481835581811115611c6157600083815260209020611c619181019083015b61123d91905b808211156151d057600081556001016151bc565b509056004661697242616e6b20697473206e6f74207265616479207965742e202063686573656e64657220646f6573206e6f74206d656574207468652072756c65730000636b203f65746120696e20646973636f72640000000000000000000000000000a165627a7a7230582033daa80fc25b9a9d27088a7b1891f5a6aaf17fe9090c3c043aa082068865c9c90029

   Swarm Source:
bzzr://33daa80fc25b9a9d27088a7b1891f5a6aaf17fe9090c3c043aa082068865c9c9

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.