ETH Price: $2,126.29 (-3.85%)

Token

Run Away (RUN)
 

Overview

Max Total Supply

7,357.555415701927144782 RUN

Holders

2

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.009 RUN

Value
$0.00
0x94b66369eec9423011739570f54acabbec4343dd
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RunAway

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-15
*/

pragma solidity ^0.4.25;

contract RunAway {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    /*=================================
    =            MODIFIERS            =
    =================================*/
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }

    /**
     * @dev prevents contracts from interacting with me
     */
    modifier onlyHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;

        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }

    // administrators can:
    // -> change the name of the contract
    // -> change the name of the token
    // -> start the game(activate)
    // they CANNOT:
    // -> take funds
    // -> disable withdrawals
    // -> kill the contract
    // -> change the price of tokens
    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators[keccak256(abi.encodePacked(_customerAddress))]);
        _;
    }

    modifier onlyComm1(){
        address _customerAddress = msg.sender;
        require(keccak256(abi.encodePacked(_customerAddress)) == comm1_);
        _;
    }

    modifier onlyComm2{
        address _customerAddress = msg.sender;
        require(keccak256(abi.encodePacked(_customerAddress)) == comm2_);
        _;
    }

    modifier checkRoundStatus()
    {
      if(now >= rounds_[currentRoundID_].endTime)
      {
        endCurrentRound();
        startNextRound();
      }
      _;
    }

    function startNextRound()
      private
      {
        currentRoundID_ ++;
        rounds_[currentRoundID_].roundID = currentRoundID_;
        rounds_[currentRoundID_].startTime = now;
        rounds_[currentRoundID_].endTime = now + roundDuration_;
        rounds_[currentRoundID_].ended = false;
      }

      function endCurrentRound()
        private
      {
        Round storage round = rounds_[currentRoundID_];
        round.ended = true;
        if(round.netBuySum>0 && round.dividends>0)
        {
          round.profitPerShare = round.dividends.mul(magnitude).div(round.netBuySum);
        }
      }

        modifier isActivated() {
            require(activated_ == true, "its not ready yet.  check ?eta in discord");
            _;
        }

    // ensures that the first tokens in the contract will be equally distributed
    // meaning, no divine dump will be ever possible
    // result: healthy longevity.
    modifier antiEarlyWhale(uint256 _amountOfEthereum){
        address _customerAddress = msg.sender;

        // are we still in the vulnerable phase?
        // if so, enact anti early whale protocol
        if( onlyAmbassadors && ((totalEthereumBalance() - _amountOfEthereum) <= ambassadorQuota_ )){
            require(
                // is the customer in the ambassador list?
                ambassadors_[_customerAddress] == true &&

                // does the customer purchase exceed the max ambassador quota?
                (ambassadorAccumulatedQuota_[_customerAddress] + _amountOfEthereum) <= ambassadorMaxPurchase_

            );

            // updated the accumulated quota
            ambassadorAccumulatedQuota_[_customerAddress] = SafeMath.add(ambassadorAccumulatedQuota_[_customerAddress], _amountOfEthereum);

            // execute
            _;
        } else {
            // in case the ether count drops low, the ambassador phase won't reinitiate
            onlyAmbassadors = false;
            _;
        }

    }


    /*==============================
    =            EVENTS            =
    ==============================*/
    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted
    );

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned
    );

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );
    event onAcquireDividends(
        address indexed customerAddress,
        uint256 dividendsAcquired
    );

    // ERC20
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );

    event onWithDrawComm(
      uint8 indexed comm,
      uint256 ethereumWithdrawn
    );

    event onTransferExpiredDividends(
      address indexed customerAddress,
      uint256 roundID,
      uint256 amount
    );
    /*=====================================
    =            Structs                  =
    =====================================*/
    struct Round {
        uint256 roundID;   // Starting from 1, increasing by 1
        uint256 netBuySum;   // Sum of all userNetBuy which are > 0
        uint256 endTime;
        bool ended;
        uint256 startTime;
        uint256 profitPerShare;
        uint256 dividends;
        mapping(address=>int256) userNetBuy;
        mapping(address => uint256) payoutsTo;
        uint256 totalPayouts;
    }

    // Rounds recorder
    mapping(uint256=>Round) public rounds_;

    // Fees storage accounts
    uint256 public comm1Balance_;
    uint256 public comm2Balance_;
    bytes32 comm1_=0xc0495b4fc42a03a01bdcd5e2f7b89dfd2e077e19f273ff82d33e9ec642fc7a08;
    bytes32 comm2_=0xa1bb9d7f7e4c2b049c73772f2cab50235f20a685f798970054b74fbc6d411c1e;

    // Current round ID
    uint256 public currentRoundID_;
    uint256 public roundDuration_ = 1 days;
    // Is game started?
    bool public activated_=false;

    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public name = "Run Away";
    string public symbol = "RUN";
    uint8 constant public decimals = 18;
    uint8 constant internal dividendFee_ = 10;
    uint8 constant internal communityFee_ = 50;
    uint256 constant internal tokenPriceInitial_ = 0.0000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;
    uint256 constant internal magnitude = 2**64;

    // ambassador program
    mapping(address => bool) internal ambassadors_;
    uint256 constant internal ambassadorMaxPurchase_ = 20 ether;
    uint256 constant internal ambassadorQuota_ = 120 ether;

   /*================================
    =            DATASETS            =
    ================================*/
    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    // Income, including dividends in each round and sale income.
    mapping(address => uint256) public income_;
    mapping(address => uint256) internal ambassadorAccumulatedQuota_;
    uint256 internal tokenSupply_ = 0;

    // administrator list (see above on what they can do)
    mapping(bytes32 => bool) public administrators;

    // when this is set to true, only ambassadors can purchase tokens (this prevents a whale premine, it ensures a fairly distributed upper pyramid)
    bool public onlyAmbassadors = true;



    /*=======================================
    =            PUBLIC FUNCTIONS            =
    =======================================*/
    /*
    * -- APPLICATION ENTRY POINTS --
    */
    constructor()
        public
    {
        // add administrators here
        administrators[0x2a94d36a11c723ddffd4bf9352609aed9b400b2be1e9b272421fa7b4e7a40560] = true;

        // add the ambassadors here.
        ambassadors_[0x16F2971f677DDCe04FC44bb1A5289f0B96053b2C] = true;
        ambassadors_[0x579F9608b1fa6aA387BD2a3844469CA8fb10628c] = true;
        ambassadors_[0x62E691c598D968633EEAB5588b1AF95725E33316] = true;
        ambassadors_[0x9e3F432dc2CD4EfFB0F0EB060b07DC2dFc574d0D] = true;
        ambassadors_[0x63735870e79A653aA445d7b7B59DC9c1a7149F39] = true;
        ambassadors_[0x562DEd82A67f4d2ED3782181f938f2E4232aE02C] = true;
        ambassadors_[0x22ec2994d77E3Ca929eAc83dEF3958CC547ff028] = true;
        ambassadors_[0xF2e602645AC91727D75E66231d06F572E133E59F] = true;
        ambassadors_[0x1AA16F9A2428ceBa2eDeb5D544b3a3D767c1566e] = true;
        ambassadors_[0x273b270F0eA966a462feAC89C9d4f4D6Dcd1CbdF] = true;
        ambassadors_[0x7ABe6948E5288a30026EdE239446a0B84d502184] = true;
        ambassadors_[0xB6Aa76e55564D9dB18cAF61369ff4618F5287f43] = true;
        ambassadors_[0x3c6c909dB011Af05Dadd706D88a6Cd03D87a4f86] = true;
        ambassadors_[0x914132fe8075aF2d932cadAa7d603DDfDf70D353] = true;
        ambassadors_[0x8Be6Aa12746e84e448a18B20013F3AdB9e24e1c6] = true;
        ambassadors_[0x3595bA9Ab527101B5cc78195Ca043653d96fEEB6] = true;
        ambassadors_[0x17dBe44d9c91d2c71E33E3fd239BD1574A7f46DF] = true;
        ambassadors_[0x47Ce514A4392304D9Ccaa7A807776AcB391198D0] = true;
        ambassadors_[0x96b41F6DE1d579ea5CB87bA04834368727B993e4] = true;
        ambassadors_[0x0953800A059a9d30BD6E47Ae2D34f3665F8E2b53] = true;
        ambassadors_[0x497C85EeF12A17D3fEd3aef894ec3273046FdC1D] = true;
        ambassadors_[0x116febf80104677019ac4C9E693c63c19B26Cf86] = true;
        ambassadors_[0xFb214AA761CcC1Ccc9D2134a33f4aC77c514d59c] = true;
        ambassadors_[0x567e3616dE1b217d6004cbE9a84095Ce90E94Bfd] = true;
        ambassadors_[0x3f054BF8C392F4F28a9B29f911503c6BC58ED4Da] = true;
        ambassadors_[0x71F658079CaEEDf2270F37c6235D0Ac6B25c9849] = true;
        ambassadors_[0x0581d2d23A300327678E4497d84d58FF64B9CfDe] = true;
        ambassadors_[0xFFAE7193dFA6eBff817C47cd2e5Ce4497c082613] = true;

        ambassadors_[0x18B0f4F11Cb1F2170a6AC594b2Cb0107e2B44821] = true;//zl
        ambassadors_[0x081c65ff7328ac4cC173D3dA7fD02371760B0cF4] = true;//yp
        ambassadors_[0xfa698b3242A3a48AadbC64F50dc96e1DE630F39A] = true;//lxy
        ambassadors_[0xAA5BA7930A1B2c14CDad11bECA86bf43779C05c5] = true;//m
        ambassadors_[0xa7bF8FF736532f6725c5433190E0852DD1592213] = true;//zsj


    }

    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buy()
        public
        payable
        returns(uint256)
    {
        purchaseTokens(msg.value);
    }

    /**
     * Fallback function to handle ethereum that was send straight to the contract
     * Unfortunately we cannot use a referral address this way.
     */
    function()
        payable
        public
    {
        purchaseTokens(msg.value);
    }

    /**
     * Converts all of caller's dividends to tokens.
     */
    function reinvest()
        isActivated()
        onlyHuman()
        checkRoundStatus()
        public
    {
        address _customerAddress = msg.sender;
        uint256 incomeTmp = income_[_customerAddress];
        //clear income of this user
        income_[_customerAddress] = 0;
        uint256 _tokens = purchaseTokens(incomeTmp);
        // fire event
        emit onReinvestment(_customerAddress, incomeTmp, _tokens);
    }

    /**
     * Alias of sell(), acquireDividends() and withdraw().
     */
    function exit()
        isActivated()
        onlyHuman()
        checkRoundStatus()
        public
    {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if(_tokens > 0) sell(_tokens);
        acquireDividends();
        // lambo delivery service
        withdraw();
    }

    /**
     * Withdraws all of the caller's dividends in previous round.
     */
    function acquireDividends()
        isActivated()
        onlyHuman()
        checkRoundStatus()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        Round storage round = rounds_[currentRoundID_.sub(1)];
        uint256 _dividends = myDividends(round.roundID); // get ref. bonus later in the code

        // update dividend tracker
        round.payoutsTo[_customerAddress] = round.payoutsTo[_customerAddress].add(_dividends);
        round.totalPayouts = round.totalPayouts.add(_dividends);

        // Add dividends to income.
        income_[_customerAddress] = income_[_customerAddress].add(_dividends);

        // fire event
        emit onAcquireDividends(_customerAddress, _dividends);
    }

    /**
     * Withdraws all of the caller's income.
     */
    function withdraw()
        isActivated()
        onlyHuman()
        checkRoundStatus()
        public
    {
        address _customerAddress = msg.sender;
        uint256 myIncome = income_[_customerAddress];
        //clear value
        income_[_customerAddress]=0;
        _customerAddress.transfer(myIncome);
        // fire event
        emit onWithdraw(_customerAddress, myIncome);
    }

    /**
     * Tax dividends to community.
    */
    function taxDividends(uint256 _dividends)
      internal
      returns (uint256)
    {
      // Taxed dividends
      uint256 _comm = _dividends.div(communityFee_);
      uint256 _taxedDividends = _dividends.sub(_comm);
      // Community fees
      uint256 _comm_1 = _comm.mul(3).div(10);
      comm1Balance_ = comm1Balance_.add(_comm_1);
      comm2Balance_ = comm2Balance_.add(_comm.sub(_comm_1));
      return _taxedDividends;
    }

    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens)
        isActivated()
        onlyHuman()
        onlyBagholders()
        checkRoundStatus()
        public
    {
        require(_amountOfTokens > 0, "Selling 0 token!");

        Round storage round = rounds_[currentRoundID_];
        // setup data
        address _customerAddress = msg.sender;
        // russian hackers BTFO
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

        // Record income
        income_[_customerAddress] = income_[_customerAddress].add(_taxedEthereum);

        // Taxed dividends
        uint256 _taxedDividends = taxDividends(_dividends);
        round.dividends = round.dividends.add(_taxedDividends);

        // burn the sold tokens
        tokenSupply_ = tokenSupply_.sub(_tokens);
        tokenBalanceLedger_[_customerAddress] = tokenBalanceLedger_[_customerAddress].sub(_tokens);

        // Calculate net buy of current round
        int256 _userNetBuyBeforeSale = round.userNetBuy[_customerAddress];
        round.userNetBuy[_customerAddress] = _userNetBuyBeforeSale.sub(_tokens.toInt256Safe());
        if( _userNetBuyBeforeSale > 0)
        {
          if(_userNetBuyBeforeSale.toUint256Safe() > _tokens)
          {
            round.netBuySum = round.netBuySum.sub(_tokens);
          }
          else
          {
            round.netBuySum = round.netBuySum.sub(_userNetBuyBeforeSale.toUint256Safe());
          }
        }

        // fire event
        emit onTokenSell(_customerAddress, _tokens, _taxedEthereum);
    }


    /**
     * Transfer tokens from the caller to a new holder.
     * Remember, there's a 10% fee here as well.
     */
    function transfer(address _toAddress, uint256 _amountOfTokens)
        isActivated()
        onlyHuman()
        checkRoundStatus()
        onlyBagholders()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        // also disables transfers until ambassador phase is over
        // ( we dont want whale premines )
        require(!onlyAmbassadors && _amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // liquify 10% of the tokens that are transfered
        // these are dispersed to shareholders
        uint256 _tokenFee = _amountOfTokens.div(dividendFee_);
        uint256 _taxedTokens = _amountOfTokens.sub(_tokenFee);
        uint256 _dividends = tokensToEthereum_(_tokenFee);


        // Taxed dividends
        uint256 _taxedDividends = taxDividends(_dividends);
        rounds_[currentRoundID_].dividends = rounds_[currentRoundID_].dividends.add(_taxedDividends);

        // burn the fee tokens
        tokenSupply_ = tokenSupply_.sub(_tokenFee);

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = tokenBalanceLedger_[_customerAddress].sub(_amountOfTokens);
        tokenBalanceLedger_[_toAddress] = tokenBalanceLedger_[_toAddress].add(_taxedTokens);

        // fire event
        emit Transfer(_customerAddress, _toAddress, _taxedTokens);

        // ERC20
        return true;

    }

    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/
    /**
     * In case the amassador quota is not met, the administrator can manually disable the ambassador phase.
     */
    function disableInitialStage()
        onlyAdministrator()
        public
    {
        onlyAmbassadors = false;
    }

    /**
     * In case one of us dies, we need to replace ourselves.
     */
    function setAdministrator(bytes32 _identifier, bool _status)
        onlyAdministrator()
        public
    {
        administrators[_identifier] = _status;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setName(string _name)
        onlyAdministrator()
        public
    {
        name = _name;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setSymbol(string _symbol)
        onlyAdministrator()
        public
    {
        symbol = _symbol;
    }

    /**
      Start this game.
    */
    function activate()
      onlyAdministrator()
      public
    {
      // can only be ran once
      require(activated_ == false, "Already activated");

      currentRoundID_ = 1;
      rounds_[currentRoundID_].roundID = currentRoundID_;
      rounds_[currentRoundID_].startTime = now;
      rounds_[currentRoundID_].endTime = now + roundDuration_;

      activated_ = true;
    }

    /**
      Set round ruration, taking effect in the next round.
    */
    // function setRoundDuration(uint _duration)
    //   onlyAdministrator()
    //   public
    // {
    //   roundDuration_ = _duration;
    // }


    /*----------  HELPERS AND CALCULATORS  ----------*/
    /**
     * Method to view the current Ethereum stored in the contract
     * Example: totalEthereumBalance()
     */
    function totalEthereumBalance()
        public
        view
        returns(uint)
    {
        return address(this).balance;
    }

    /**
     * Retrieve the total token supply.
     */
    function totalSupply()
        public
        view
        returns(uint256)
    {
        return tokenSupply_;
    }

    /**
     * Retrieve the tokens owned by the caller.
     */
    function myTokens()
        public
        view
        returns(uint256)
    {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    /**
     * Retrieve the dividends owned by the caller.
     * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     * The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     * But in the internal calculations, we want them separate.
     */
    function myDividends(uint256 _roundID)
        public
        view
        returns(uint256)
    {
        return dividendsOf(msg.sender, _roundID);
    }

    /**
     * Retrieve the token balance of any single address.
     */
    function balanceOf(address _customerAddress)
        view
        public
        returns(uint256)
    {
        return tokenBalanceLedger_[_customerAddress];
    }

    /**
     * Retrieve the dividend balance of any single address.
     */
    function dividendsOf(address _customerAddress, uint256 _roundID)
        view
        public
        returns(uint256)
    {
      if(_roundID<1) return 0;
      if (_roundID > currentRoundID_) return 0;
      Round storage round = rounds_[_roundID];
      // Sold >= bought
      if(round.userNetBuy[_customerAddress] <= 0)
      {
        return 0;
      }

      // Nobody sold.
      if(round.dividends <= 0)
      {
        return 0;
      }
      return round.profitPerShare.mul(round.userNetBuy[_customerAddress].toUint256Safe()).div(magnitude).sub(round.payoutsTo[_customerAddress]);
    }

    /**
     * Estimate user dividends in current round.
    */
    function estimateDividends(address _customerAddress)
        view
        public
        returns(uint256)
    {
      Round storage round = rounds_[currentRoundID_];
      // Sold >= bought
      if(round.userNetBuy[_customerAddress] <= 0)
      {
        return 0;
      }

      // Nobody sold.
      if(round.dividends <= 0)
      {
        return 0;
      }

      return round.dividends.mul(magnitude).div(round.netBuySum).mul(round.userNetBuy[_customerAddress].toUint256Safe()).div(magnitude);
    }

    /**
     * Return the buy price of 1 individual token.
     */
    function sellPrice()
        public
        view
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(_ethereum, dividendFee_  );
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }

    /**
     * Return the sell price of 1 individual token.
     */
    function buyPrice()
        public
        view
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            return _ethereum;
        }
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of buy orders.
     */
    function calculateTokensReceived(uint256 _ethereumToSpend)
        public
        view
        returns(uint256)
    {
        uint256 _amountOfTokens = ethereumToTokens_(_ethereumToSpend);
        return _amountOfTokens;
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of sell orders.
     */
    function calculateEthereumReceived(uint256 _tokensToSell)
        public
        view
        returns(uint256)
    {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }

    function roundNetBuySum(uint256 _roundID)
      public view returns(uint256)
    {
        if(_roundID <1 || _roundID > currentRoundID_) return 0;
        return rounds_[_roundID].netBuySum;
    }

    function roundEndTime(uint256 _roundID)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].endTime;
    }
    function roundEnded(uint256 _roundID)
      public view returns(bool)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return true;
      return rounds_[_roundID].ended;
    }

    function roundStartTime(uint256 _roundID)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].startTime;
    }

    function roundProfitPerShare(uint256 _roundID)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].profitPerShare;
    }
    function roundDividends(uint256 _roundID)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].dividends;
    }

    function roundUserNetBuy(uint256 _roundID, address addr)
      public view returns(int256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].userNetBuy[addr];
    }

    function roundPayoutsTo(uint256 _roundID, address addr)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].payoutsTo[addr];
    }
    function roundTotalPayouts(uint256 _roundID)
      public view returns(uint256)
    {
      if(_roundID <1 || _roundID > currentRoundID_) return 0;
      return rounds_[_roundID].totalPayouts;
    }

    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/
    function purchaseTokens(uint256 _incomingEthereum)
        isActivated()
        antiEarlyWhale(_incomingEthereum)
        onlyHuman()
        checkRoundStatus()
        internal
        returns(uint256)
    {
        require(_incomingEthereum > 0, "0 eth buying.");
        Round storage round = rounds_[currentRoundID_];
        // data setup
        address _customerAddress = msg.sender;
        uint256 _amountOfTokens = ethereumToTokens_(_incomingEthereum);

        // no point in continuing execution if OP is a poorfag russian hacker
        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && (tokenSupply_.add(_amountOfTokens) > tokenSupply_));

        // we can't give people infinite ethereum
        if(tokenSupply_ > 0){
            // add tokens to the pool
            tokenSupply_ = tokenSupply_.add(_amountOfTokens);
        } else {
            // add tokens to the pool
            tokenSupply_ = _amountOfTokens;
        }

        int256 _userNetBuy = round.userNetBuy[_customerAddress];
        int256 _userNetBuyAfterPurchase = _userNetBuy.add(_amountOfTokens.toInt256Safe());
        round.userNetBuy[_customerAddress] = _userNetBuyAfterPurchase;
        if(_userNetBuy >= 0)
        {
          round.netBuySum = round.netBuySum.add(_amountOfTokens);
        }
        else
        {
          if( _userNetBuyAfterPurchase > 0)
          {
            round.netBuySum = round.netBuySum.add(_userNetBuyAfterPurchase.toUint256Safe());
          }
        }

        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[_customerAddress] = tokenBalanceLedger_[_customerAddress].add(_amountOfTokens);

        // fire event
        emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens);

        return _amountOfTokens;
    }

    /**
     * Calculate Token price based on an amount of incoming ethereum
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum)
        internal
        view
        returns(uint256)
    {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived =
         (
            (
                // underflow attempts BTFO
                SafeMath.sub(
                    (sqrt
                        (
                            (_tokenPriceInitial**2)
                            +
                            (2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18))
                            +
                            (((tokenPriceIncremental_)**2)*(tokenSupply_**2))
                            +
                            (2*(tokenPriceIncremental_)*_tokenPriceInitial*tokenSupply_)
                        )
                    ), _tokenPriceInitial
                )
            )/(tokenPriceIncremental_)
        )-(tokenSupply_)
        ;

        return _tokensReceived;
    }

    /**
     * Calculate token sell value.
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
     function tokensToEthereum_(uint256 _tokens)
        internal
        view
        returns(uint256)
    {

        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
            // underflow attempts BTFO
            SafeMath.sub(
                (
                    (
                        (
                            tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18))
                        )-tokenPriceIncremental_
                    )*(tokens_ - 1e18)
                ),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2
            )
        /1e18);
        return _etherReceived;
    }

    /*==========================================
    =           COMMUNITY FUNCTIONS            =
    ==========================================*/
    function withdrawComm1()
      isActivated()
      onlyComm1()
      onlyHuman()
      checkRoundStatus()
      public
    {
      uint256 bal = comm1Balance_;
      comm1Balance_ = 0;
      msg.sender.transfer(bal);
      emit onWithDrawComm(1, bal);
    }

    function withdrawComm2()
      isActivated()
      onlyComm2()
      onlyHuman()
      checkRoundStatus()
      public
    {
      uint256 bal = comm2Balance_;
      comm2Balance_ = 0;
      msg.sender.transfer(bal);
      emit onWithDrawComm(2, bal);
    }

    function transferExpiredDividends(uint256 _roundID)
      isActivated()
      onlyHuman()
      checkRoundStatus()
      public
    {
      require(_roundID > 0 && _roundID < currentRoundID_.sub(1), "Invalid round number");
      Round storage round = rounds_[_roundID];
      uint256 _unpaid = round.dividends.sub(round.totalPayouts);
      require(_unpaid>0, "No expired dividends.");
      uint256 comm1 = _unpaid.mul(3).div(10);
      comm1Balance_ = comm1Balance_.add(comm1);
      comm2Balance_ = comm2Balance_.add(_unpaid.sub(comm1));
      round.totalPayouts = round.totalPayouts.add(_unpaid);
      emit onTransferExpiredDividends(msg.sender, _roundID, _unpaid);
    }

    //This is where all your gas goes, sorry
    //Not sorry, you probably only paid 1 gwei
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }

}

// From https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMath.sol
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;

    assert(a == 0 || c / a == b);
    return c;
  }

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

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }

  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    assert(b >= 0);
    return b;
  }
}

// From: https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol
/**
 * @title SafeMathInt
 * @dev Math operations with safety checks that throw on error
 * @dev SafeMath adapted for int256
 */
library SafeMathInt {
  function mul(int256 a, int256 b) internal pure returns (int256) {
    // Prevent overflow when multiplying INT256_MIN with -1
    // https://github.com/RequestNetwork/requestNetwork/issues/43
    assert(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1));

    int256 c = a * b;
    assert((b == 0) || (c / b == a));
    return c;
  }

  function div(int256 a, int256 b) internal pure returns (int256) {
    // Prevent overflow when dividing INT256_MIN by -1
    // https://github.com/RequestNetwork/requestNetwork/issues/43
    assert(!(a == - 2**255 && b == -1));

    // assert(b > 0); // Solidity automatically throws when dividing by 0
    int256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(int256 a, int256 b) internal pure returns (int256) {
    assert((b >= 0 && a - b <= a) || (b < 0 && a - b > a));

    return a - b;
  }

  function add(int256 a, int256 b) internal pure returns (int256) {
    int256 c = a + b;
    assert((b >= 0 && c >= a) || (b < 0 && c < a));
    return c;
  }

  function toUint256Safe(int256 a) internal pure returns (uint256) {
    assert(a>=0);
    return uint256(a);
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"},{"name":"_roundID","type":"uint256"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"comm1Balance_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"},{"name":"addr","type":"address"}],"name":"roundPayoutsTo","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundProfitPerShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundTotalPayouts","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawComm1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acquireDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"comm2Balance_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_identifier","type":"bytes32"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","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":"","type":"uint256"}],"name":"rounds_","outputs":[{"name":"roundID","type":"uint256"},{"name":"netBuySum","type":"uint256"},{"name":"endTime","type":"uint256"},{"name":"ended","type":"bool"},{"name":"startTime","type":"uint256"},{"name":"profitPerShare","type":"uint256"},{"name":"dividends","type":"uint256"},{"name":"totalPayouts","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"estimateDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"disableInitialStage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"roundDuration_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"transferExpiredDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawComm2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"},{"name":"addr","type":"address"}],"name":"roundUserNetBuy","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"income_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundID","type":"uint256"}],"name":"roundNetBuySum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentRoundID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"dividendsAcquired","type":"uint256"}],"name":"onAcquireDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"comm","type":"uint8"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithDrawComm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onTransferExpiredDividends","type":"event"}]

7fc0495b4fc42a03a01bdcd5e2f7b89dfd2e077e19f273ff82d33e9ec642fc7a086003557fa1bb9d7f7e4c2b049c73772f2cab50235f20a685f798970054b74fbc6d411c1e600455620151806006556007805460ff1916905560c0604052600860808190527f52756e204177617900000000000000000000000000000000000000000000000060a0908152620000979190816200069d565b506040805180820190915260038082527f52554e00000000000000000000000000000000000000000000000000000000006020909201918252620000de916009916200069d565b506000600e556010805460ff19166001179055348015620000fe57600080fd5b507fccbf8237e8dcddbef6bc9034516f02a24c6c9888e9b04516ac3c124ac5749d918054600160ff199182168117909255600a6020527f3e3b6a20d3e83f71e25a821be2d6469c1be3dde9c54d4758556f45bdfb37908f80548216831790557f45129e04e804aa1b9cf3192f7945863e5dee892228d1881fe950f2394117833780548216831790557f40a0004e456b1b7e46446e6bac04fea96dd34b037638d36cb88f3cbb8054bab280548216831790557f301fe2b46999622e754ae4db7b3cafc4789f8792daf1d69f5219bce97b999aec80548216831790557fe3f86b945cd19f9e07eec9281b6208325129e74ade78ee0f4f5721cfc24e93eb80548216831790557f861a618da1c52dd47c88937e3f88966d04e9c719f146d81d5ef590c6f71de91380548216831790557fe5a0cc3c0710dee2b10dde69a6a7b856737d0d1c9533079bf7cbb7db2b71739180548216831790557f09bc0ab2a2000826a24ee9637219a0478c6c62dd64127f856b336ab1b314551a80548216831790557f2f8c6b1114513c33b4f7e6e4aa1f9fc010a8045c390efe81dc528983e73179d780548216831790557f538ab59214e8899756111ace551938f7e9b364b8d434925e904e58a0952c75b680548216831790557fc59c3d53b3f2cdeb842026a6a2d1612ad64f75a35bcc7a56303a8483d601e2f180548216831790557f9401b502f63def00cccba165bb7f96fa97ceead47e112c71809dc8e5d034da9880548216831790557f5b6c4aa52e16b620dc06caa11870d32f329ae63a5cb9b4da85343a93c98765d280548216831790557fbc1d42a2b15e56caf2469f68bad40e0b6dc56d0b9fcdb2e1a33317c6ad58c5a680548216831790557fbfe881a631fedc924e48094a0c388b17e24c5c98a28b11e4957872fe385c81b980548216831790557f979900c32d06206bc18c1c6d30ffb4e2b567eaaa24814efe6b84a60577d6fd3880548216831790557fd45e5c8e6b26acc3ee07502083623decbdb27ceb62a40483258dfdaa6838837f80548216831790557f18185753af0101903921e91c5017d2085603405b81d5a129a1fd98a8ca2ce2fa80548216831790557f27d9743d3d13a7798fd75c460cde6468110aa67798b46788e13d899893c406e780548216831790557f45f10e590437e3fbf862b962f9a02a7054b51213d9f13bf320a35a1645965a7a80548216831790557f92a54f2954478c56b7ce491e5cac22f26f23bd2fdf6ef94783a98028724c484680548216831790557ffd579f92a6310b5ee0d902e1d69b50d63472d299fe8d56fb2c1277cefe3a4c8680548216831790557f3e4bf49761ad416e7dae4fed4740f7933070c0698864de00707f642f2f97c13580548216831790557ff958ec0734a22bbe6a7109c4cab049a3d1e25bbbcf9676fd2069564688e0d07080548216831790557f4509d3bc567c9b330a945ceb6310570c32b79d0bb168c615d6eb3ad0472f637580548216831790557ff8b04769a97928a84619d208c3a2e59d3a94f009563fdfe4eee2ab4eca9a607e80548216831790557fada6b59a4fc42ccb6307653f6a743c05217758aab3b5a6cf907284c6e4d5383d80548216831790557ffd34b190ada69faafaf5287dc03a9bd7e76117efb38f8e905e2829f5088cf63280548216831790557f6d87d5a63389da4c2b12002c4dbb7f979c75ce027281dbad85568c2b6962e42e80548216831790557f8a8b2abb2b52d7e2da84c6fcccda8532bfafb7f2d65c37e9981a8c31489bdaf280548216831790557f51a74896e2c42ecc3abdae97145a5be0e678e1258dcc0ad00c764fdf940dd34480548216831790557fddc530335de83e9becb7257ef792203bd77a1b88c13907520c8abc0e2f0e475f805482168317905573a7bf8ff736532f6725c5433190e0852dd15922136000527fc2b88ba8b1b5fbe7a8350942986da2afb99d50073f312cdd413662278b225a8f8054909116909117905562000742565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e057805160ff191683800117855562000710565b8280016001018555821562000710579182015b8281111562000710578251825591602001919060010190620006f3565b506200071e92915062000722565b5090565b6200073f91905b808211156200071e576000815560010162000729565b90565b61300e80620007526000396000f30060806040526004361061023a5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146102465780630a5eb5ea146102d05780630f15f4c01461030657806310d0ffdd1461031d57806318160ddd146103355780631a682c7d1461034a578063226093731461035f57806326a93a621461037757806327defa1f1461039b5780632ab8f172146103c4578063313ce567146103dc578063392efb52146104075780633ccfd60b1461041f5780634b750334146104345780635110f8ef146104495780635a2280cd146104615780636265e628146104765780636b2f46321461048b57806370a08231146104a0578063746e4f81146104c15780638620410b146104d657806389135ae9146104eb578063949e8acd1461050857806395d89b411461051d57806396f5c1521461053257806397468dbb1461058b5780639f4b9eb6146105ac578063a4ee8b63146105c4578063a6f2ae3a146105dc578063a8e04f34146105e4578063a9059cbb146105f9578063b178d8991461061d578063b84c824614610635578063c137a60f1461068e578063c3446f7e146106a6578063c47f0027146106be578063c856d3c714610717578063ca6b54471461072c578063d53b267914610744578063d976fef014610759578063dfe652641461076e578063e4849b3214610792578063e9fad8ee146107aa578063f27782af146107bf578063f650582a146107e0578063f912d43d146107f8578063fdb5a03e1461080d575b61024334610822565b50005b34801561025257600080fd5b5061025b610e35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029557818101518382015260200161027d565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b506102f4600160a060020a0360043516602435610ec3565b60408051918252519081900360200190f35b34801561031257600080fd5b5061031b610fb3565b005b34801561032957600080fd5b506102f4600435611160565b34801561034157600080fd5b506102f4611178565b34801561035657600080fd5b506102f461117f565b34801561036b57600080fd5b506102f4600435611185565b34801561038357600080fd5b506102f4600435600160a060020a03602435166111c7565b3480156103a757600080fd5b506103b0611212565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102f460043561121b565b3480156103e857600080fd5b506103f1611253565b6040805160ff9092168252519081900360200190f35b34801561041357600080fd5b506103b0600435611258565b34801561042b57600080fd5b5061031b61126d565b34801561044057600080fd5b506102f46113d1565b34801561045557600080fd5b506102f4600435611425565b34801561046d57600080fd5b5061031b61145a565b34801561048257600080fd5b5061031b611645565b34801561049757600080fd5b506102f461183d565b3480156104ac57600080fd5b506102f4600160a060020a0360043516611842565b3480156104cd57600080fd5b506102f461185d565b3480156104e257600080fd5b506102f4611863565b3480156104f757600080fd5b5061031b6004356024351515611899565b34801561051457600080fd5b506102f461197e565b34801561052957600080fd5b5061025b611990565b34801561053e57600080fd5b5061054a6004356119eb565b604080519889526020890197909752878701959095529215156060870152608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561059757600080fd5b506102f4600160a060020a0360043516611a32565b3480156105b857600080fd5b506103b0600435611af0565b3480156105d057600080fd5b506102f4600435611b28565b6102f4611b5d565b3480156105f057600080fd5b5061031b611b68565b34801561060557600080fd5b506103b0600160a060020a0360043516602435611c39565b34801561062957600080fd5b506102f4600435611eb7565b34801561064157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031b943694929360249392840191908190840183828082843750949750611ec39650505050505050565b34801561069a57600080fd5b506102f4600435611f9f565b3480156106b257600080fd5b506102f4600435611fd4565b3480156106ca57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031b9436949293602493928401919081908401838280828437509497506120099650505050505050565b34801561072357600080fd5b506102f46120e0565b34801561073857600080fd5b5061031b6004356120e6565b34801561075057600080fd5b506103b061236d565b34801561076557600080fd5b5061031b612376565b34801561077a57600080fd5b506102f4600435600160a060020a0360243516612561565b34801561079e57600080fd5b5061031b6004356125ab565b3480156107b657600080fd5b5061031b612902565b3480156107cb57600080fd5b506102f4600160a060020a0360043516612a16565b3480156107ec57600080fd5b506102f4600435612a28565b34801561080457600080fd5b506102f4612a5d565b34801561081957600080fd5b5061031b612a63565b6007546000908190819081908190819060ff161515600114610890576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b6010548790339060ff1680156108b8575068068155a43676e00000826108b461183d565b0311155b15610bcb57600160a060020a0381166000908152600a602052604090205460ff161515600114801561090e5750600160a060020a0381166000908152600d60205260409020546801158e460913d0000090830111155b151561091957600080fd5b600160a060020a0381166000908152600d602052604090205461093c9083612bb1565b600160a060020a0382166000908152600d602052604090205533803b801561099c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106109c7576109bf612bc0565b6109c7612c2f565b60008b11610a1f576040805160e560020a62461bcd02815260206004820152600d60248201527f302065746820627579696e672e00000000000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020819052604090209850339750610a3e8b612c7c565b9650600087118015610a605750600e54610a5e818963ffffffff612bb116565b115b1515610a6b57600080fd5b6000600e541115610a9157600e54610a89908863ffffffff612bb116565b600e55610a97565b600e8790555b600160a060020a038816600090815260078a0160205260409020549550610acd610ac088612d14565b879063ffffffff612d2116565b600160a060020a038916600090815260078b01602052604081208290559095508612610b12576001890154610b08908863ffffffff612bb116565b60018a0155610b3e565b6000851315610b3e57610b38610b2786612d53565b60018b01549063ffffffff612bb116565b60018a01555b600160a060020a0388166000908152600b6020526040902054610b67908863ffffffff612bb116565b600160a060020a0389166000818152600b60209081526040918290209390935580518e81529283018a9052805191927f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae5929081900390910190a28699505050610e29565b6010805460ff1916905533803b8015610c1c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210610c4757610c3f612bc0565b610c47612c2f565b60008b11610c9f576040805160e560020a62461bcd02815260206004820152600d60248201527f302065746820627579696e672e00000000000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020819052604090209850339750610cbe8b612c7c565b9650600087118015610ce05750600e54610cde818963ffffffff612bb116565b115b1515610ceb57600080fd5b6000600e541115610d1157600e54610d09908863ffffffff612bb116565b600e55610d17565b600e8790555b600160a060020a038816600090815260078a0160205260409020549550610d40610ac088612d14565b600160a060020a038916600090815260078b01602052604081208290559095508612610d85576001890154610d7b908863ffffffff612bb116565b60018a0155610da0565b6000851315610da057610d9a610b2786612d53565b60018a01555b600160a060020a0388166000908152600b6020526040902054610dc9908863ffffffff612bb116565b600160a060020a0389166000818152600b60209081526040918290209390935580518e81529283018a9052805191927f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae5929081900390910190a286995050505b50505050505050919050565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ebb5780601f10610e9057610100808354040283529160200191610ebb565b820191906000526020600020905b815481529060010190602001808311610e9e57829003601f168201915b505050505081565b6000806001831015610ed85760009150610fac565b600554831115610eeb5760009150610fac565b50600082815260208181526040808320600160a060020a038716845260078101909252822054909112610f215760009150610fac565b6006810154600010610f365760009150610fac565b600160a060020a03841660009081526008820160209081526040808320546007850190925290912054610fa99190610f9d906801000000000000000090610f9190610f8090612d53565b60058701549063ffffffff612d5f16565b9063ffffffff612d8016565b9063ffffffff612d9716565b91505b5092915050565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061102c5780518252601f19909201916020918201910161100d565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061107791505057600080fd5b60075460ff16156110d2576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920616374697661746564000000000000000000000000000000604482015290519081900360640190fd5b506001600581905560008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d819055427fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e81819055600654017fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7f556007805460ff19169091179055565b60008061116c83612c7c565b90508091505b50919050565b600e545b90565b60015481565b600080600080600e54851115151561119c57600080fd5b6111a585612da9565b92506111b283600a612d80565b91506111be8383612d97565b95945050505050565b600060018310806111d9575060055483115b156111e65750600061120c565b50600082815260208181526040808320600160a060020a03851684526008019091529020545b92915050565b60105460ff1681565b6000600182108061122d575060055482115b1561123a5750600061124e565b506000818152602081905260409020600501545b919050565b601281565b600f6020526000908152604090205460ff1681565b600754600090819060ff1615156001146112d3576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b801561131a576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106113455761133d612bc0565b611345612c2f565b336000818152600c602052604080822080549083905590519296509450859185156108fc0291869190818181858888f1935050505015801561138b573d6000803e3d6000fd5b50604080518481529051600160a060020a038616917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a250505050565b600080600080600e54600014156113ef576414f46b0400935061141f565b611400670de0b6b3a7640000612da9565b925061140d83600a612d80565b91506114198383612d97565b90508093505b50505090565b60006001821080611437575060055482115b156114445750600061124e565b5060009081526020819052604090206009015490565b60075460009060ff1615156001146114be576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b60035460408051336c0100000000000000000000000081026020808401919091528351601481850301815260349093019384905282519194939182918401908083835b602083106115205780518252601f199092019160209182019101611501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561155d57600080fd5b33803b80156115a4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106115cf576115c7612bc0565b6115cf612c2f565b60018054600091829055604051909550339186156108fc02918791818181858888f19350505050158015611607573d6000803e3d6000fd5b506040805185815290516001917fe140efbb126c92f7fbc794e8b7ecd42f5bfc3acf44f46505c4fd0741b174ddaf919081900360200190a250505050565b6007546000908190819060ff1615156001146116ad576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b80156116f4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b600554600090815260208190526040902060020154421061171f57611717612bc0565b61171f612c2f565b33945060008061173b6001600554612d9790919063ffffffff16565b815260200190815260200160002093506117588460000154611eb7565b600160a060020a0386166000908152600886016020526040902054909350611786908463ffffffff612bb116565b600160a060020a038616600090815260088601602052604090205560098401546117b6908463ffffffff612bb116565b6009850155600160a060020a0385166000908152600c60205260409020546117e4908463ffffffff612bb116565b600160a060020a0386166000818152600c6020908152604091829020939093558051868152905191927f46ae18a6c054414376d861b158543ca3cd1b9e6ab90aa07eaf33209d08ac9a4a92918290030190a25050505050565b303190565b600160a060020a03166000908152600b602052604090205490565b60025481565b600080600e546000141561187e5764199c82cc009150611895565b61188f670de0b6b3a7640000612da9565b90508091505b5090565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106119125780518252601f1990920191602091820191016118f3565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061195d91505057600080fd5b506000918252600f6020526040909120805460ff1916911515919091179055565b60003361198a81611842565b91505090565b6009805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ebb5780601f10610e9057610100808354040283529160200191610ebb565b6000602081905290815260409020805460018201546002830154600384015460048501546005860154600687015460099097015495969495939460ff909316939192909188565b600554600090815260208181526040808320600160a060020a0385168452600781019092528220548212611a695760009150611172565b6006810154600010611a7e5760009150611172565b600160a060020a0383166000908152600782016020526040902054611ae9906801000000000000000090610f9190611ab590612d53565b611add8560010154610f91680100000000000000008860060154612d5f90919063ffffffff16565b9063ffffffff612d5f16565b9392505050565b60006001821080611b02575060055482115b15611b0f5750600161124e565b5060009081526020819052604090206003015460ff1690565b60006001821080611b3a575060055482115b15611b475750600061124e565b5060009081526020819052604090206002015490565b600061189534610822565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611be15780518252601f199092019160209182019101611bc2565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1615159250611c2c91505057600080fd5b506010805460ff19169055565b6007546000908190819081908190819060ff161515600114611ca7576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015611cee576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210611d1957611d11612bc0565b611d19612c2f565b6000611d2361197e565b11611d2d57600080fd5b60105433975060ff16158015611d5b5750600160a060020a0387166000908152600b60205260409020548911155b1515611d6657600080fd5b611d7789600a63ffffffff612d8016565b9550611d89898763ffffffff612d9716565b9450611d9486612da9565b9350611d9f84612e15565b600554600090815260208190526040902060060154909350611dc7908463ffffffff612bb116565b600554600090815260208190526040902060060155600e54611def908763ffffffff612d9716565b600e55600160a060020a0387166000908152600b6020526040902054611e1b908a63ffffffff612d9716565b600160a060020a038089166000908152600b602052604080822093909355908c1681522054611e50908663ffffffff612bb116565b600160a060020a03808c166000818152600b602090815260409182902094909455805189815290519193928b16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019998505050505050505050565b600061120c3383610ec3565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611f3c5780518252601f199092019160209182019101611f1d565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1615159250611f8791505057600080fd5b8151611f9a906009906020850190612ef4565b505050565b60006001821080611fb1575060055482115b15611fbe5750600061124e565b5060009081526020819052604090206004015490565b60006001821080611fe6575060055482115b15611ff35750600061124e565b5060009081526020819052604090206006015490565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120825780518252601f199092019160209182019101612063565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff16151592506120cd91505057600080fd5b8151611f9a906008906020850190612ef4565b60065481565b6007546000908190819060ff16151560011461214e576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612195576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106121c0576121b8612bc0565b6121c0612c2f565b6000861180156121e257506005546121df90600163ffffffff612d9716565b86105b1515612238576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420726f756e64206e756d626572000000000000000000000000604482015290519081900360640190fd5b600086815260208190526040902060098101546006820154919650612263919063ffffffff612d9716565b9350600084116122bd576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f2065787069726564206469766964656e64732e0000000000000000000000604482015290519081900360640190fd5b6122d3600a610f9186600363ffffffff612d5f16565b6001549093506122e9908463ffffffff612bb116565b60015561230e6122ff858563ffffffff612d9716565b6002549063ffffffff612bb116565b6002556009850154612326908563ffffffff612bb116565b60098601556040805187815260208101869052815133927fd51e56d3a93e55aa016708e8805be6a6b4b8e8fecab3fe8f1249649a11eef752928290030190a2505050505050565b60075460ff1681565b60075460009060ff1615156001146123da576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b60045460408051336c0100000000000000000000000081026020808401919091528351601481850301815260349093019384905282519194939182918401908083835b6020831061243c5780518252601f19909201916020918201910161241d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561247957600080fd5b33803b80156124c0576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106124eb576124e3612bc0565b6124eb612c2f565b60028054600091829055604051909550339186156108fc02918791818181858888f19350505050158015612523573d6000803e3d6000fd5b506040805185815290516002917fe140efbb126c92f7fbc794e8b7ecd42f5bfc3acf44f46505c4fd0741b174ddaf919081900360200190a250505050565b60006001831080612573575060055483115b156125805750600061120c565b50600082815260208181526040808320600160a060020a038516845260070190915290205492915050565b600754600090819081908190819081908190819060ff16151560011461261d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612664576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b600061266e61197e565b1161267857600080fd5b60055460009081526020819052604090206002015442106126a35761269b612bc0565b6126a3612c2f565b60008b116126fb576040805160e560020a62461bcd02815260206004820152601060248201527f53656c6c696e67203020746f6b656e2100000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020818152604080832033808552600b909352922054919b5099508b111561272a57600080fd5b8a975061273688612da9565b965061274387600a612d80565b955061274f8787612d97565b600160a060020a038a166000908152600c602052604090205490955061277b908663ffffffff612bb116565b600160a060020a038a166000908152600c602052604090205561279d86612e15565b60068b01549094506127b5908563ffffffff612bb116565b60068b0155600e546127cd908963ffffffff612d9716565b600e55600160a060020a0389166000908152600b60205260409020546127f9908963ffffffff612d9716565b600160a060020a038a166000908152600b602090815260408083209390935560078d0190522054925061283b61282e89612d14565b849063ffffffff612e8c16565b600160a060020a038a16600090815260078c0160205260408120919091558313156128b2578761286a84612d53565b111561288f5760018a0154612885908963ffffffff612d9716565b60018b01556128b2565b6128ac61289b84612d53565b60018c01549063ffffffff612d9716565b60018b01555b60408051898152602081018790528151600160a060020a038c16927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a25050505050505050505050565b600754600090819060ff161515600114612968576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b80156129af576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106129da576129d2612bc0565b6129da612c2f565b336000818152600b6020526040812054919550909350831115612a0057612a00836125ab565b612a08611645565b612a1061126d565b50505050565b600c6020526000908152604090205481565b60006001821080612a3a575060055482115b15612a475750600061124e565b5060009081526020819052604090206001015490565b60055481565b6007546000908190819060ff161515600114612acb576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612b12576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210612b3d57612b35612bc0565b612b3d612c2f565b336000818152600c6020526040812080549190559095509350612b5f84610822565b925084600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588585604051808381526020018281526020019250505060405180910390a25050505050565b600082820183811015611ae957fe5b600554600090815260208190526040812060038101805460ff191660019081179091558101549091108015612bf9575060008160060154115b15612c2c57612c268160010154610f91680100000000000000008460060154612d5f90919063ffffffff16565b60058201555b50565b60058054600101808255600081815260208190526040808220928355426004909301839055600654845483528183209301600290930192909255915482529020600301805460ff19169055565b600e546000906c01431e0fae6d7217caa00000009082906402540be400612d01612cfb730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e40000000000000001612ebf565b85612d97565b811515612d0a57fe5b0403949350505050565b6000818181121561120c57fe5b6000828201818312801590612d365750838112155b80612d4b5750600083128015612d4b57508381125b1515611ae957fe5b60008082121561189557fe5b6000828202831580612d4b5750828482811515612d7857fe5b0414611ae957fe5b6000808284811515612d8e57fe5b04949350505050565b600082821115612da357fe5b50900390565b600e54600090670de0b6b3a7640000838101918101908390612e026414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515612dfc57fe5b04612d97565b811515612e0b57fe5b0495945050505050565b6000808080612e2b85603263ffffffff612d8016565b9250612e3d858463ffffffff612d9716565b9150612e55600a610f9185600363ffffffff612d5f16565b600154909150612e6b908263ffffffff612bb116565b600155612e816122ff848363ffffffff612d9716565b600255509392505050565b6000808212158015612ea057508282840313155b80612eb75750600082128015612eb7575082828403135b1515612da357fe5b80600260018201045b81811015611172578091506002818285811515612ee157fe5b0401811515612eec57fe5b049050612ec8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f3557805160ff1916838001178555612f62565b82800160010185558215612f62579182015b82811115612f62578251825591602001919060010190612f47565b506118959261117c9250905b808211156118955760008155600101612f6e56006e20646973636f72640000000000000000000000000000000000000000000000697473206e6f74207265616479207965742e2020636865636b203f6574612069736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820f8b1f5b936f772daf0bf1a7c3da1c3bdccd9c697a1abe2b1e4469ee207d872a50029

Deployed Bytecode

0x60806040526004361061023a5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146102465780630a5eb5ea146102d05780630f15f4c01461030657806310d0ffdd1461031d57806318160ddd146103355780631a682c7d1461034a578063226093731461035f57806326a93a621461037757806327defa1f1461039b5780632ab8f172146103c4578063313ce567146103dc578063392efb52146104075780633ccfd60b1461041f5780634b750334146104345780635110f8ef146104495780635a2280cd146104615780636265e628146104765780636b2f46321461048b57806370a08231146104a0578063746e4f81146104c15780638620410b146104d657806389135ae9146104eb578063949e8acd1461050857806395d89b411461051d57806396f5c1521461053257806397468dbb1461058b5780639f4b9eb6146105ac578063a4ee8b63146105c4578063a6f2ae3a146105dc578063a8e04f34146105e4578063a9059cbb146105f9578063b178d8991461061d578063b84c824614610635578063c137a60f1461068e578063c3446f7e146106a6578063c47f0027146106be578063c856d3c714610717578063ca6b54471461072c578063d53b267914610744578063d976fef014610759578063dfe652641461076e578063e4849b3214610792578063e9fad8ee146107aa578063f27782af146107bf578063f650582a146107e0578063f912d43d146107f8578063fdb5a03e1461080d575b61024334610822565b50005b34801561025257600080fd5b5061025b610e35565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029557818101518382015260200161027d565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b506102f4600160a060020a0360043516602435610ec3565b60408051918252519081900360200190f35b34801561031257600080fd5b5061031b610fb3565b005b34801561032957600080fd5b506102f4600435611160565b34801561034157600080fd5b506102f4611178565b34801561035657600080fd5b506102f461117f565b34801561036b57600080fd5b506102f4600435611185565b34801561038357600080fd5b506102f4600435600160a060020a03602435166111c7565b3480156103a757600080fd5b506103b0611212565b604080519115158252519081900360200190f35b3480156103d057600080fd5b506102f460043561121b565b3480156103e857600080fd5b506103f1611253565b6040805160ff9092168252519081900360200190f35b34801561041357600080fd5b506103b0600435611258565b34801561042b57600080fd5b5061031b61126d565b34801561044057600080fd5b506102f46113d1565b34801561045557600080fd5b506102f4600435611425565b34801561046d57600080fd5b5061031b61145a565b34801561048257600080fd5b5061031b611645565b34801561049757600080fd5b506102f461183d565b3480156104ac57600080fd5b506102f4600160a060020a0360043516611842565b3480156104cd57600080fd5b506102f461185d565b3480156104e257600080fd5b506102f4611863565b3480156104f757600080fd5b5061031b6004356024351515611899565b34801561051457600080fd5b506102f461197e565b34801561052957600080fd5b5061025b611990565b34801561053e57600080fd5b5061054a6004356119eb565b604080519889526020890197909752878701959095529215156060870152608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561059757600080fd5b506102f4600160a060020a0360043516611a32565b3480156105b857600080fd5b506103b0600435611af0565b3480156105d057600080fd5b506102f4600435611b28565b6102f4611b5d565b3480156105f057600080fd5b5061031b611b68565b34801561060557600080fd5b506103b0600160a060020a0360043516602435611c39565b34801561062957600080fd5b506102f4600435611eb7565b34801561064157600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031b943694929360249392840191908190840183828082843750949750611ec39650505050505050565b34801561069a57600080fd5b506102f4600435611f9f565b3480156106b257600080fd5b506102f4600435611fd4565b3480156106ca57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261031b9436949293602493928401919081908401838280828437509497506120099650505050505050565b34801561072357600080fd5b506102f46120e0565b34801561073857600080fd5b5061031b6004356120e6565b34801561075057600080fd5b506103b061236d565b34801561076557600080fd5b5061031b612376565b34801561077a57600080fd5b506102f4600435600160a060020a0360243516612561565b34801561079e57600080fd5b5061031b6004356125ab565b3480156107b657600080fd5b5061031b612902565b3480156107cb57600080fd5b506102f4600160a060020a0360043516612a16565b3480156107ec57600080fd5b506102f4600435612a28565b34801561080457600080fd5b506102f4612a5d565b34801561081957600080fd5b5061031b612a63565b6007546000908190819081908190819060ff161515600114610890576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b6010548790339060ff1680156108b8575068068155a43676e00000826108b461183d565b0311155b15610bcb57600160a060020a0381166000908152600a602052604090205460ff161515600114801561090e5750600160a060020a0381166000908152600d60205260409020546801158e460913d0000090830111155b151561091957600080fd5b600160a060020a0381166000908152600d602052604090205461093c9083612bb1565b600160a060020a0382166000908152600d602052604090205533803b801561099c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106109c7576109bf612bc0565b6109c7612c2f565b60008b11610a1f576040805160e560020a62461bcd02815260206004820152600d60248201527f302065746820627579696e672e00000000000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020819052604090209850339750610a3e8b612c7c565b9650600087118015610a605750600e54610a5e818963ffffffff612bb116565b115b1515610a6b57600080fd5b6000600e541115610a9157600e54610a89908863ffffffff612bb116565b600e55610a97565b600e8790555b600160a060020a038816600090815260078a0160205260409020549550610acd610ac088612d14565b879063ffffffff612d2116565b600160a060020a038916600090815260078b01602052604081208290559095508612610b12576001890154610b08908863ffffffff612bb116565b60018a0155610b3e565b6000851315610b3e57610b38610b2786612d53565b60018b01549063ffffffff612bb116565b60018a01555b600160a060020a0388166000908152600b6020526040902054610b67908863ffffffff612bb116565b600160a060020a0389166000818152600b60209081526040918290209390935580518e81529283018a9052805191927f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae5929081900390910190a28699505050610e29565b6010805460ff1916905533803b8015610c1c576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210610c4757610c3f612bc0565b610c47612c2f565b60008b11610c9f576040805160e560020a62461bcd02815260206004820152600d60248201527f302065746820627579696e672e00000000000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020819052604090209850339750610cbe8b612c7c565b9650600087118015610ce05750600e54610cde818963ffffffff612bb116565b115b1515610ceb57600080fd5b6000600e541115610d1157600e54610d09908863ffffffff612bb116565b600e55610d17565b600e8790555b600160a060020a038816600090815260078a0160205260409020549550610d40610ac088612d14565b600160a060020a038916600090815260078b01602052604081208290559095508612610d85576001890154610d7b908863ffffffff612bb116565b60018a0155610da0565b6000851315610da057610d9a610b2786612d53565b60018a01555b600160a060020a0388166000908152600b6020526040902054610dc9908863ffffffff612bb116565b600160a060020a0389166000818152600b60209081526040918290209390935580518e81529283018a9052805191927f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae5929081900390910190a286995050505b50505050505050919050565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ebb5780601f10610e9057610100808354040283529160200191610ebb565b820191906000526020600020905b815481529060010190602001808311610e9e57829003601f168201915b505050505081565b6000806001831015610ed85760009150610fac565b600554831115610eeb5760009150610fac565b50600082815260208181526040808320600160a060020a038716845260078101909252822054909112610f215760009150610fac565b6006810154600010610f365760009150610fac565b600160a060020a03841660009081526008820160209081526040808320546007850190925290912054610fa99190610f9d906801000000000000000090610f9190610f8090612d53565b60058701549063ffffffff612d5f16565b9063ffffffff612d8016565b9063ffffffff612d9716565b91505b5092915050565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b6020831061102c5780518252601f19909201916020918201910161100d565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061107791505057600080fd5b60075460ff16156110d2576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920616374697661746564000000000000000000000000000000604482015290519081900360640190fd5b506001600581905560008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d819055427fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e81819055600654017fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7f556007805460ff19169091179055565b60008061116c83612c7c565b90508091505b50919050565b600e545b90565b60015481565b600080600080600e54851115151561119c57600080fd5b6111a585612da9565b92506111b283600a612d80565b91506111be8383612d97565b95945050505050565b600060018310806111d9575060055483115b156111e65750600061120c565b50600082815260208181526040808320600160a060020a03851684526008019091529020545b92915050565b60105460ff1681565b6000600182108061122d575060055482115b1561123a5750600061124e565b506000818152602081905260409020600501545b919050565b601281565b600f6020526000908152604090205460ff1681565b600754600090819060ff1615156001146112d3576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b801561131a576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106113455761133d612bc0565b611345612c2f565b336000818152600c602052604080822080549083905590519296509450859185156108fc0291869190818181858888f1935050505015801561138b573d6000803e3d6000fd5b50604080518481529051600160a060020a038616917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a250505050565b600080600080600e54600014156113ef576414f46b0400935061141f565b611400670de0b6b3a7640000612da9565b925061140d83600a612d80565b91506114198383612d97565b90508093505b50505090565b60006001821080611437575060055482115b156114445750600061124e565b5060009081526020819052604090206009015490565b60075460009060ff1615156001146114be576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b60035460408051336c0100000000000000000000000081026020808401919091528351601481850301815260349093019384905282519194939182918401908083835b602083106115205780518252601f199092019160209182019101611501565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561155d57600080fd5b33803b80156115a4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106115cf576115c7612bc0565b6115cf612c2f565b60018054600091829055604051909550339186156108fc02918791818181858888f19350505050158015611607573d6000803e3d6000fd5b506040805185815290516001917fe140efbb126c92f7fbc794e8b7ecd42f5bfc3acf44f46505c4fd0741b174ddaf919081900360200190a250505050565b6007546000908190819060ff1615156001146116ad576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b80156116f4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b600554600090815260208190526040902060020154421061171f57611717612bc0565b61171f612c2f565b33945060008061173b6001600554612d9790919063ffffffff16565b815260200190815260200160002093506117588460000154611eb7565b600160a060020a0386166000908152600886016020526040902054909350611786908463ffffffff612bb116565b600160a060020a038616600090815260088601602052604090205560098401546117b6908463ffffffff612bb116565b6009850155600160a060020a0385166000908152600c60205260409020546117e4908463ffffffff612bb116565b600160a060020a0386166000818152600c6020908152604091829020939093558051868152905191927f46ae18a6c054414376d861b158543ca3cd1b9e6ab90aa07eaf33209d08ac9a4a92918290030190a25050505050565b303190565b600160a060020a03166000908152600b602052604090205490565b60025481565b600080600e546000141561187e5764199c82cc009150611895565b61188f670de0b6b3a7640000612da9565b90508091505b5090565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106119125780518252601f1990920191602091820191016118f3565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff161515925061195d91505057600080fd5b506000918252600f6020526040909120805460ff1916911515919091179055565b60003361198a81611842565b91505090565b6009805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ebb5780601f10610e9057610100808354040283529160200191610ebb565b6000602081905290815260409020805460018201546002830154600384015460048501546005860154600687015460099097015495969495939460ff909316939192909188565b600554600090815260208181526040808320600160a060020a0385168452600781019092528220548212611a695760009150611172565b6006810154600010611a7e5760009150611172565b600160a060020a0383166000908152600782016020526040902054611ae9906801000000000000000090610f9190611ab590612d53565b611add8560010154610f91680100000000000000008860060154612d5f90919063ffffffff16565b9063ffffffff612d5f16565b9392505050565b60006001821080611b02575060055482115b15611b0f5750600161124e565b5060009081526020819052604090206003015460ff1690565b60006001821080611b3a575060055482115b15611b475750600061124e565b5060009081526020819052604090206002015490565b600061189534610822565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611be15780518252601f199092019160209182019101611bc2565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1615159250611c2c91505057600080fd5b506010805460ff19169055565b6007546000908190819081908190819060ff161515600114611ca7576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015611cee576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210611d1957611d11612bc0565b611d19612c2f565b6000611d2361197e565b11611d2d57600080fd5b60105433975060ff16158015611d5b5750600160a060020a0387166000908152600b60205260409020548911155b1515611d6657600080fd5b611d7789600a63ffffffff612d8016565b9550611d89898763ffffffff612d9716565b9450611d9486612da9565b9350611d9f84612e15565b600554600090815260208190526040902060060154909350611dc7908463ffffffff612bb116565b600554600090815260208190526040902060060155600e54611def908763ffffffff612d9716565b600e55600160a060020a0387166000908152600b6020526040902054611e1b908a63ffffffff612d9716565b600160a060020a038089166000908152600b602052604080822093909355908c1681522054611e50908663ffffffff612bb116565b600160a060020a03808c166000818152600b602090815260409182902094909455805189815290519193928b16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019998505050505050505050565b600061120c3383610ec3565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310611f3c5780518252601f199092019160209182019101611f1d565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff1615159250611f8791505057600080fd5b8151611f9a906009906020850190612ef4565b505050565b60006001821080611fb1575060055482115b15611fbe5750600061124e565b5060009081526020819052604090206004015490565b60006001821080611fe6575060055482115b15611ff35750600061124e565b5060009081526020819052604090206006015490565b6000339050600f6000826040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106120825780518252601f199092019160209182019101612063565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205460ff16151592506120cd91505057600080fd5b8151611f9a906008906020850190612ef4565b60065481565b6007546000908190819060ff16151560011461214e576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612195576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106121c0576121b8612bc0565b6121c0612c2f565b6000861180156121e257506005546121df90600163ffffffff612d9716565b86105b1515612238576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420726f756e64206e756d626572000000000000000000000000604482015290519081900360640190fd5b600086815260208190526040902060098101546006820154919650612263919063ffffffff612d9716565b9350600084116122bd576040805160e560020a62461bcd02815260206004820152601560248201527f4e6f2065787069726564206469766964656e64732e0000000000000000000000604482015290519081900360640190fd5b6122d3600a610f9186600363ffffffff612d5f16565b6001549093506122e9908463ffffffff612bb116565b60015561230e6122ff858563ffffffff612d9716565b6002549063ffffffff612bb116565b6002556009850154612326908563ffffffff612bb116565b60098601556040805187815260208101869052815133927fd51e56d3a93e55aa016708e8805be6a6b4b8e8fecab3fe8f1249649a11eef752928290030190a2505050505050565b60075460ff1681565b60075460009060ff1615156001146123da576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b60045460408051336c0100000000000000000000000081026020808401919091528351601481850301815260349093019384905282519194939182918401908083835b6020831061243c5780518252601f19909201916020918201910161241d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151561247957600080fd5b33803b80156124c0576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106124eb576124e3612bc0565b6124eb612c2f565b60028054600091829055604051909550339186156108fc02918791818181858888f19350505050158015612523573d6000803e3d6000fd5b506040805185815290516002917fe140efbb126c92f7fbc794e8b7ecd42f5bfc3acf44f46505c4fd0741b174ddaf919081900360200190a250505050565b60006001831080612573575060055483115b156125805750600061120c565b50600082815260208181526040808320600160a060020a038516845260070190915290205492915050565b600754600090819081908190819081908190819060ff16151560011461261d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612664576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b600061266e61197e565b1161267857600080fd5b60055460009081526020819052604090206002015442106126a35761269b612bc0565b6126a3612c2f565b60008b116126fb576040805160e560020a62461bcd02815260206004820152601060248201527f53656c6c696e67203020746f6b656e2100000000000000000000000000000000604482015290519081900360640190fd5b60055460009081526020818152604080832033808552600b909352922054919b5099508b111561272a57600080fd5b8a975061273688612da9565b965061274387600a612d80565b955061274f8787612d97565b600160a060020a038a166000908152600c602052604090205490955061277b908663ffffffff612bb116565b600160a060020a038a166000908152600c602052604090205561279d86612e15565b60068b01549094506127b5908563ffffffff612bb116565b60068b0155600e546127cd908963ffffffff612d9716565b600e55600160a060020a0389166000908152600b60205260409020546127f9908963ffffffff612d9716565b600160a060020a038a166000908152600b602090815260408083209390935560078d0190522054925061283b61282e89612d14565b849063ffffffff612e8c16565b600160a060020a038a16600090815260078c0160205260408120919091558313156128b2578761286a84612d53565b111561288f5760018a0154612885908963ffffffff612d9716565b60018b01556128b2565b6128ac61289b84612d53565b60018c01549063ffffffff612d9716565b60018b01555b60408051898152602081018790528151600160a060020a038c16927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a25050505050505050505050565b600754600090819060ff161515600114612968576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b80156129af576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b60055460009081526020819052604090206002015442106129da576129d2612bc0565b6129da612c2f565b336000818152600b6020526040812054919550909350831115612a0057612a00836125ab565b612a08611645565b612a1061126d565b50505050565b600c6020526000908152604090205481565b60006001821080612a3a575060055482115b15612a475750600061124e565b5060009081526020819052604090206001015490565b60055481565b6007546000908190819060ff161515600114612acb576040805160e560020a62461bcd0281526020600482015260296024820152600080516020612fa38339815191526044820152600080516020612f83833981519152606482015290519081900360840190fd5b33803b8015612b12576040805160e560020a62461bcd0281526020600482015260116024820152600080516020612fc3833981519152604482015290519081900360640190fd5b6005546000908152602081905260409020600201544210612b3d57612b35612bc0565b612b3d612c2f565b336000818152600c6020526040812080549190559095509350612b5f84610822565b925084600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588585604051808381526020018281526020019250505060405180910390a25050505050565b600082820183811015611ae957fe5b600554600090815260208190526040812060038101805460ff191660019081179091558101549091108015612bf9575060008160060154115b15612c2c57612c268160010154610f91680100000000000000008460060154612d5f90919063ffffffff16565b60058201555b50565b60058054600101808255600081815260208190526040808220928355426004909301839055600654845483528183209301600290930192909255915482529020600301805460ff19169055565b600e546000906c01431e0fae6d7217caa00000009082906402540be400612d01612cfb730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e40000000000000001612ebf565b85612d97565b811515612d0a57fe5b0403949350505050565b6000818181121561120c57fe5b6000828201818312801590612d365750838112155b80612d4b5750600083128015612d4b57508381125b1515611ae957fe5b60008082121561189557fe5b6000828202831580612d4b5750828482811515612d7857fe5b0414611ae957fe5b6000808284811515612d8e57fe5b04949350505050565b600082821115612da357fe5b50900390565b600e54600090670de0b6b3a7640000838101918101908390612e026414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be40002811515612dfc57fe5b04612d97565b811515612e0b57fe5b0495945050505050565b6000808080612e2b85603263ffffffff612d8016565b9250612e3d858463ffffffff612d9716565b9150612e55600a610f9185600363ffffffff612d5f16565b600154909150612e6b908263ffffffff612bb116565b600155612e816122ff848363ffffffff612d9716565b600255509392505050565b6000808212158015612ea057508282840313155b80612eb75750600082128015612eb7575082828403135b1515612da357fe5b80600260018201045b81811015611172578091506002818285811515612ee157fe5b0401811515612eec57fe5b049050612ec8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f3557805160ff1916838001178555612f62565b82800160010185558215612f62579182015b82811115612f62578251825591602001919060010190612f47565b506118959261117c9250905b808211156118955760008155600101612f6e56006e20646973636f72640000000000000000000000000000000000000000000000697473206e6f74207265616479207965742e2020636865636b203f6574612069736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820f8b1f5b936f772daf0bf1a7c3da1c3bdccd9c697a1abe2b1e4469ee207d872a50029

Swarm Source

bzzr://f8b1f5b936f772daf0bf1a7c3da1c3bdccd9c697a1abe2b1e4469ee207d872a5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.