ETH Price: $2,136.28 (+8.38%)

Contract

0xe5fA9eaa53aFF323f9a581551A9bB2fFB4282C8A
 

Overview

ETH Balance

29 wei

Eth Value

Less Than $0.01 (@ $2,136.28/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer112833832020-11-18 17:56:291932 days ago1605722189IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0026997573.00000156
Transfer111571742020-10-30 8:46:081951 days ago1604047568IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0021436258
Transfer107450632020-08-27 21:33:022015 days ago1598563982IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0021080357.00000156
Transfer101921982020-06-03 10:02:172100 days ago1591178537IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0006004627.36
Transfer101921982020-06-03 10:02:172100 days ago1591178537IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0006007927.36
Transfer101921962020-06-03 10:02:012100 days ago1591178521IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000579426.4
Transfer101921942020-06-03 10:01:502100 days ago1591178510IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0005006622.8
Transfer101921802020-06-03 9:57:542100 days ago1591178274IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0005003922.8
Transfer101921792020-06-03 9:57:322100 days ago1591178252IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0005006622.8
Transfer101921782020-06-03 9:57:312100 days ago1591178251IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0005006622.8
Transfer95561302020-02-26 1:26:592199 days ago1582680419IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000187053.6
Transfer94849422020-02-15 2:35:532210 days ago1581734153IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0007097213.65625
Transfer93802002020-01-29 23:56:592226 days ago1580342219IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000133053.6
Transfer93802002020-01-29 23:56:592226 days ago1580342219IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000133093.6
Transfer93802002020-01-29 23:56:592226 days ago1580342219IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000088752.4
Transfer93801972020-01-29 23:56:372226 days ago1580342197IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000124752.4
Transfer93618712020-01-27 4:38:512229 days ago1580099931IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000103942
Transfer91217962019-12-17 18:06:192269 days ago1576605979IN
0xe5fA9eaa...FB4282C8A
0 ETH0.00005272.4
Transfer91208332019-12-17 13:45:042269 days ago1576590304IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0010913921
Transfer90675712019-12-07 18:25:202279 days ago1575743120IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0003677110
Transfer90675612019-12-07 18:23:202279 days ago1575743000IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0003677110
Transfer90675562019-12-07 18:21:332279 days ago1575742893IN
0xe5fA9eaa...FB4282C8A
0 ETH0.000051771
Transfer90675482019-12-07 18:18:082279 days ago1575742688IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0003677110
Transfer90675382019-12-07 18:15:482279 days ago1575742548IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0003677110
Transfer90675312019-12-07 18:14:232279 days ago1575742463IN
0xe5fA9eaa...FB4282C8A
0 ETH0.0003677110
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
2.1785625 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
2.614275 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
3.0499875 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
3.4857 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
3.9214125 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
4.7928375 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
5.22855 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
5.6642625 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
6.099975 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
6.5356875 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.58095 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.69714 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.81333 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.92952 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.04571 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.27809 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.39428 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.51047 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.62666 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
1.74285 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.290475 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.290475 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.290475 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.290475 ETH
-83747972019-08-18 14:06:412390 days ago1566137201
0xe5fA9eaa...FB4282C8A
0.290475 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XDS

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: XDS.sol
pragma solidity ^0.5.8;
import './ERC20.sol';

library address_make_payable {
   function make_payable(address x) internal pure returns (address payable) {
      return address(uint160(x));
   }
}

contract VDPoolBasic {
    function price() external view returns (uint256);
    function buyToken(uint256 ethAmount) external returns (uint256);
    function currentLevel() external view returns(uint256);
    function currentLevelRemaining() external view returns(uint256);
}

contract InvitationBasic {
    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external;
    function isRoot(address addr) external view returns (bool);
    function newRoot(address addr, uint256 phase) external;
    function getParent(address addr) external view returns(address);
    function getAncestors(address addr) external view returns(address[] memory);
    function isSignedUp(address addr) public view returns (bool);
    function getPoints(uint256 phase, address addr) external view returns (uint256);
    function newSignupCount(uint256 phase) external view returns (uint256);
    function getTop(uint256 phase) external view returns(address[] memory);
    function distributeBonus(uint256 len) external pure returns(uint256[] memory);
}

contract LuckyDrawBasic {
    function buyTicket(address addr, uint256 phase) external;
    function aggregateIcexWinners(uint256 phase) external;
    function getWinners(uint256 phase) external view returns(address[] memory);
}

contract XDS is StandardToken {
    using address_make_payable for address;

    /*
     * CONSTANTS
     */

    uint16[] public bonusRate = [200, 150, 100, 50];

    /*
     * STATES
     */
    address public settler;
    string public name;
    string public symbol;
    uint8 public constant decimals = 18;

    address public reservedAccount;
    uint256 public reservedAmount;
    address public foundationAddr;

    uint256 public firstBlock = 0;
    uint256 public blockPerPhase = 0;

    mapping (uint256 => uint256) public ethBalance;
    mapping (uint256 => mapping (address => uint256)) public addressInvestment;
    mapping (address => uint256) public totalInvestment;
    mapping (address => uint256) public crBonus; // controlled release bonus
    address[] icexInvestors;
    mapping (uint256 => address[]) public topInvestor;
    mapping (uint256 => bool) public settled;

    InvitationBasic invitationContract;
    LuckyDrawBasic luckydrawContract;
    VDPoolBasic vdPoolContract;

    uint256 public signUpFee = 0;
    uint256 public rootFee = 0;
    uint256 referrerBonus = 0;
    uint256 ancestorBonus = 0;
    uint16 topInvestorCounter = 0;
    uint16 icexCRBonusRatio = 75;
    uint256 crBonusReleasePhases = 10;
    uint256 ethBonusReleasePhases = 20;

    uint256 luckyDrawRate = 10;
    uint256 invitationRate = 70;
    uint256 topInvestorRate = 20;

    uint256 foundationRate = 50;

    uint256 icexRewardETHPool = 0;

    /*
     * EVENTS
     */
    /// Emitted only once after token sale starts.
    event SaleStarted();

    event Settled(uint256 phase, uint256 ethDistributed, uint256 ethToPool);

    event LuckydrawSettle(uint256 phase, address indexed who, uint256 ethAmount);
    event InvitationSettle(uint256 phase, address indexed who, uint256 ethAmount);
    event InvestorSettle(uint256 phase, address indexed who, uint256 ethAmount);

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only master can call");
        _;
    }

    constructor(string memory _name, string memory _symbol, uint256 _blockPerPhase, uint256 _totalSupply, uint256 _reservedAmount, address _reservedAccount, address _foundationAddr) public {
        master = msg.sender;  // master account
        settler = master;

        name = _name;
        symbol = _symbol;
        totalSupply = _totalSupply;
        currentSupply = _reservedAmount;

        reservedAmount = _reservedAmount;
        reservedAccount = _reservedAccount;
        balances[reservedAccount] = reservedAmount;
        emit Transfer(address(this), reservedAccount, reservedAmount);

        foundationAddr = _foundationAddr; // foundation account

        blockPerPhase = _blockPerPhase; // block number per phase
    }

    /*
     * EXTERNAL FUNCTIONS
     */

    function setOwner(address newOwner) external onlyOwner {
        master = newOwner;
    }

    function setSettler(address newSettler) external onlyOwner {
        settler = newSettler;
    }

    function transfer(address _to, uint256 _value) external onlyPayloadSize(2 * 32) {
        if ( _to == address(this)) {
            require(_value == rootFee, "only valid value is root fee for this recipient");
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            emit Transfer(msg.sender, _to, _value);
            require(!isSignedUp(), "not qulifiled as new root");
            invitationContract.newRoot(msg.sender, currentPhase());
        } else if ( _value == signUpFee && invitationContract.isSignedUp(_to) && !isSignedUp()) {
            uint256 fee = _value;
            balances[msg.sender] = balances[msg.sender].sub(fee);

            uint256 phase = currentPhase();
            uint256 ePhase = phase;
            if (phase < bonusRate.length) {
                ePhase = bonusRate.length - 1;
            }

            invitationContract.signUp(_to, msg.sender, phase, ePhase);
            //direct referrer
            balances[_to] = balances[_to].add(referrerBonus);
            emit Transfer(msg.sender, _to, referrerBonus);
            fee = fee.sub(referrerBonus);

            // go up referrer tree
            address[] memory ancestors = invitationContract.getAncestors(msg.sender);
            for ( uint256 i = 0; i < ancestors.length && fee >= ancestorBonus; i++) {
                if (ancestors[i] == address(0)) {
                    break;
                }
                balances[ancestors[i]] = balances[ancestors[i]].add(ancestorBonus);
                emit Transfer(msg.sender, ancestors[i], ancestorBonus);
                fee = fee.sub(ancestorBonus);
            }

            balances[foundationAddr] = balances[foundationAddr].add(fee);
            emit Transfer(msg.sender, foundationAddr, fee);
        } else {
            balances[msg.sender] = balances[msg.sender].sub(_value);
            balances[_to] = balances[_to].add(_value);
            emit Transfer(msg.sender, _to, _value);
        }
    }

    function setInvitationContract(address addr, uint256 _rootFee, uint256 _signUpFee, uint256 _ancestorBonus, uint256 _referrerBonus, uint256 _invitationRate) external onlyOwner {
        invitationContract = InvitationBasic(addr);

        rootFee = _rootFee; // price to be root
        signUpFee = _signUpFee; // sign up ticker price
        ancestorBonus = _ancestorBonus;  // ancestor node bonus
        referrerBonus = _referrerBonus;  // referrer node bonus
        invitationRate = _invitationRate;
    }

    function setVdPoolContract(address addr, uint16 _topInvestorCounter, uint256 _topInvestorRate, uint256 _foundationRate) external onlyOwner {
        vdPoolContract = VDPoolBasic(addr);

        topInvestorCounter = _topInvestorCounter;  // number of top investor used during settlment
        topInvestorRate = _topInvestorRate;  // top investor settle rate

        foundationRate = _foundationRate; // foudation share
    }

    function setLuckyDrawContract(address addr, uint256 _luckyDrawRate) external onlyOwner {
        luckydrawContract = LuckyDrawBasic(addr);
        luckyDrawRate = _luckyDrawRate;
    }

    function settle(uint256 phase) external {
        require(settler == address(0) || settler == msg.sender, "only settler can call");
        require(phase >= 0, "invalid phase");
        require(phase < currentPhase(), "phase not matured yet");
        require (!settled[phase], "phase already settled");

        uint256 pool = 0;
        uint256 toPool = 0;
        if (phase < bonusRate.length) {
            if(ethBalance[phase] > 0) {
                toPool = ethBalance[phase].mul(bonusRate.length).div(bonusRate.length + ethBonusReleasePhases);
                icexRewardETHPool = icexRewardETHPool.add(toPool);
                transferToFoundation(ethBalance[phase].sub(toPool));
            }
            // settling last phase of ICEX, combine pools
            if (phase == bonusRate.length - 1) {
                pool = icexRewardETHPool;
            }
        } else {
            pool = ethBalance[phase];
            distributeCRBonus(phase);
        }

        if (pool > 0 ) {
            settleLuckydraw(phase, pool, phase < bonusRate.length);
            settleTopInvestor(phase, pool);
            settleInvitation(phase, pool);
        }

        settled[phase] = true;
        emit Settled(phase, pool, toPool);
    }

    function start(uint256 _firstBlock) external onlyOwner {
        require(!saleStarted(), "Sale has not started yet");
        require(firstBlock == 0 , "Resonance already started");
        firstBlock = _firstBlock;
        emit SaleStarted();
    }

    /// @dev This default function allows token to be purchased by directly
    /// sending ether to this smart contract.
    function () external payable {
        issueToken(msg.sender);
    }

    function price() external view returns(uint256) {
        return vdPoolContract.price();
    }

    function currentLevel() external view returns(uint256) {
        return vdPoolContract.currentLevel();
    }

    function currentRemainingEth() external view returns(uint256) {
        return vdPoolContract.currentLevelRemaining();
    }

    function currentBonusRate() external view returns(uint16) {
        uint256 phase = currentPhase();
        if (phase < bonusRate.length){
            return bonusRate[phase];
        }
        return 0;
    }

    function isSignedUp() public view returns (bool) {
        return invitationContract.isSignedUp(msg.sender);
    }

    function topInvestors(uint256 phase) external view returns (address[] memory) {
        return topInvestor[phase];
    }

    function luckyWinners(uint256 phase) external view returns (address[] memory) {
        return luckydrawContract.getWinners(phase);
    }

    function invitationWinners(uint256 phase) external view returns(address[] memory) {
        return invitationContract.getTop(phase);
    }

    function drain(uint256 amount) external onlyOwner {
        transferToFoundation(amount);
    }

    /*
     * PUBLIC FUNCTIONS
     */
    function saleStarted() public view returns (bool) {
        return (firstBlock > 0 && block.number >= firstBlock);
    }

    function currentPhase() public view returns(uint256) {
        return (block.number - firstBlock).div(blockPerPhase);
    }

    function issueToken(address recipient) public payable {
        require(saleStarted(), "Sale is not in progress");
        require(msg.value >= 0.1 ether, "minimal of 0.1 eth required");
        uint256 phase = currentPhase();
        uint256 totalEth = msg.value;

        updateTopInvestor(recipient, msg.value, phase);
        // ICEX
        if (phase < bonusRate.length){
            uint256 bonus = totalEth.mul(bonusRate[phase]).div(100);
            totalEth = totalEth.add(bonus);
            if (crBonus[recipient] == 0 ) {
                icexInvestors.push(recipient);
            }
        }

        uint256 tokens = vdPoolContract.buyToken(totalEth);

        totalInvestment[recipient] = totalInvestment[recipient].add(msg.value);
        currentSupply = currentSupply.add(tokens);

        require(currentSupply <= totalSupply, "exceed token supply cap");

        if (phase < bonusRate.length){
            uint256 crTokens = tokens.mul(bonusRate[phase]).div(100 + bonusRate[phase]).mul(icexCRBonusRatio).div(100);
            require(crTokens >= 0 && tokens > crTokens, 'invalid cr bonus value');
            crBonus[recipient] = crBonus[recipient].add(crTokens.div(crBonusReleasePhases));
            balances[recipient] = balances[recipient].add(tokens).sub(crTokens);
            emit Transfer(address(this), recipient, tokens.sub(crTokens));
        } else {
            balances[recipient] = balances[recipient].add(tokens);
            emit Transfer(address(this), recipient, tokens);
        }

        uint256 foundation = msg.value.mul(foundationRate).div(100);
        transferToFoundation(foundation);
        ethBalance[phase] = ethBalance[phase].add(msg.value).sub(foundation);
        luckydrawContract.buyTicket(recipient, phase);
    }

    /*
     * INTERNAL FUNCTIONS
     */

    function updateTopInvestor(address addr, uint256 ethAmount, uint256 phase) internal {
        uint256 ePhase = phase;
        if (phase < bonusRate.length) {
            ePhase = bonusRate.length - 1; // save it for the last phase of ICEX
        }
        addressInvestment[ePhase][addr] = addressInvestment[ePhase][addr].add(ethAmount);

        for (uint256 k = 0; k < topInvestor[ePhase].length; k++){
            if (topInvestor[ePhase][k] == addr) {
                for (uint256 i = k; i > 0; i--){
                    if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) {
                        (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]);
                    } else {
                      break;
                    }
                }
                return;
            }
        }

        if (topInvestor[ePhase].length < topInvestorCounter){
            topInvestor[ePhase].push(addr);
        } else if (addressInvestment[ePhase][addr] > addressInvestment[ePhase][topInvestor[ePhase][topInvestor[ePhase].length - 1]]){
            topInvestor[ePhase][topInvestor[ePhase].length - 1] = addr;
        }

        for (uint256 i = topInvestor[ePhase].length - 1; i > 0; i--){
            if (addressInvestment[ePhase][topInvestor[ePhase][i]] > addressInvestment[ePhase][topInvestor[ePhase][i-1]]) {
                (topInvestor[ePhase][i], topInvestor[ePhase][i-1]) = (topInvestor[ePhase][i-1], topInvestor[ePhase][i]);
            } else {
              break;
            }
        }
    }

    function transferToFoundation(uint256 ethAmount) internal {
        address payable addr = foundationAddr.make_payable();
        addr.transfer(ethAmount);
    }

    function settleLuckydraw(uint256 phase, uint256 ethAmount, bool isIcex) internal {
        if (isIcex) {
            luckydrawContract.aggregateIcexWinners(phase);
        }
        address[] memory winners = luckydrawContract.getWinners(phase);

        uint256 bonus = ethAmount.mul(luckyDrawRate).div(100).div(winners.length);
        if (winners.length == 0 && bonus > 0){
            transferToFoundation(bonus);
            return;
        }

        for (uint256 i = 0; i < winners.length; i++) {
            address payable addr = winners[i].make_payable();
            addr.transfer(bonus);
            emit LuckydrawSettle(phase, winners[i], bonus);
        }
    }

    function settleTopInvestor (uint256 phase, uint256 ethAmount) internal {
        uint256 bonus = ethAmount.mul(topInvestorRate).div(100);
        if (topInvestor[phase].length == 0 && bonus > 0){
            transferToFoundation(bonus);
            return;
        }

        uint256 len = topInvestor[phase].length;
        uint256[] memory factors = invitationContract.distributeBonus(len);
        for (uint256 i = 0; i < topInvestor[phase].length; i++) {
            address payable addr = topInvestor[phase][i].make_payable();
            uint256 iBonus = bonus.mul(factors[i]).div(len).div(len);
            addr.transfer(iBonus);
            emit InvestorSettle(phase, addr, iBonus);
        }
    }

    function settleInvitation (uint256 phase, uint256 ethAmount) internal {
        uint256 totalBonus = ethAmount.mul(invitationRate).div(100);
        address[] memory winners = invitationContract.getTop(phase);
        if (winners.length == 0 && totalBonus > 0){
            transferToFoundation(totalBonus);
            return;
        }

        uint256 len = winners.length;
        uint256[] memory factors = invitationContract.distributeBonus(len);
        for (uint256 i = 0; i < factors.length; i++) {
            uint256 bonus = totalBonus.mul(factors[i]).div(len).div(len);
            address payable addr = winners[i].make_payable();
            addr.transfer(bonus);
            emit InvitationSettle(phase, winners[i], bonus);
        }
    }

    function distributeCRBonus(uint256 phase) internal {
        if (phase < bonusRate.length || phase >= bonusRate.length + crBonusReleasePhases) {
          return;
        }

        for (uint256 i = 0; i < icexInvestors.length; i++) {
            address addr = icexInvestors[i];
            balances[addr] = balances[addr].add(crBonus[addr]);
            emit Transfer(address(this), addr, crBonus[addr]);
        }
    }
}

File 2 of 8: ERC20.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 */
contract ERC20Basic {
  uint256 public totalSupply;
  uint256 public currentSupply;
  address public master;
  function balanceOf(address who) external view returns (uint256);
  function transfer(address to, uint256 value) external;
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;
  mapping(address => uint256) balances;

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint256 size) {
     if(msg.data.length < size + 4) {
       revert();
     }
     _;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) external view returns (uint256 balance) {
    return balances[_owner];
  }
}

/**
 * @title ERC20 interface
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) external view returns (uint256);
  function transferFrom(address from, address to, uint256 value) external;
  function approve(address spender, uint256 value) external;
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implemantation of the basic standart token.
 */
contract StandardToken is BasicToken, ERC20 {

  mapping (address => mapping (address => uint256)) allowed;

  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) external onlyPayloadSize(3 * 32) {
    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // if (_value > _allowance) throw;

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    emit Transfer(_from, _to, _value);
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) external {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) revert();

    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
  }

  /**
   * @dev Function to check the amount of tokens than an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) external view returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }
}

File 3 of 8: Invitation.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

contract InvitationBasic {
    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external;
    function getParent(address addr) external view returns(address);
    function getAncestors(address addr) external view returns(address[] memory);
    function isRoot(address addr) external view returns (bool);
    function isSignedUp(address addr) public view returns (bool);
    function newRoot(address addr, uint256 phase) external;
    function newSignupCount(uint256 phase) external view returns (uint);
    function getPoints(uint256 phase, address addr) external view returns (uint256);
    function getTop(uint256 phase) external view returns(address[] memory);
    function distributeBonus(uint256 len) external pure returns(uint256[] memory);
}

contract Invitation is InvitationBasic {
    using SafeMath for uint256;

    /*
     * STATES
     */
    address public master;
    address public caller;

    bool public paused;

    mapping (address => bool) public rootList;
    mapping (address => address) public referenceParentList;
    mapping (address => address[]) public referenceChildList;
    mapping (uint256 => mapping (address => uint256)) public addressPoints;
    mapping (uint256 => address[]) public newSignupList;
    mapping (uint256 => address[]) public inviterList;
    mapping (uint256 => address[]) public top;

    uint maxChildrenCount = 0;
    uint256 basePoints = 100000;
    uint256 pointRate = 0;
    uint256 maxPointLevel = 10;
    uint256 winnerCount = 10;

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function setWinnerCount(uint256 _count) external onlyOwner {
        winnerCount = _count;
    }

    function isSignedUp(address addr) public view returns (bool) {
        return rootList[addr] == true || referenceParentList[addr] != address(0);
    }

    function signUp(address referrer, address addr, uint256 phase, uint256 ePhase) external onlyCaller notPaused {
        require(isSignedUp(referrer), "invalid referrer");
        require(!isSignedUp(addr), "address has signed up");

        setUpParent(referrer, addr);
        updatePoints(referrer, addr, ePhase);
        newSignupList[phase].push(addr);
    }

    function isRoot(address addr) external view returns (bool) {
        return rootList[addr] == true;
    }

    function newRoot(address addr, uint256 phase) external onlyCaller notPaused {
        require(!isSignedUp(addr), "address has signed up");
        rootList[addr] = true;
        newSignupList[phase].push(addr);
    }

    function getTop(uint256 phase) external view returns(address[] memory) {
      return top[phase];
    }

    /*
    function getTopInviter(uint256 phase, uint256 topN) external onlyCaller returns(address[] memory) {
        if (inviterList[phase].length == 0 || top[phase].length > 0){
            return top[phase];
        }
        uint256 k = topN;
        randomizedSelect(inviterList[phase], 0, inviterList[phase].length - 1, k, phase);

        for (uint256 i = 0; i< k && i < inviterList[phase].length; i++){
            top[phase].push(inviterList[phase][i]);
        }
        return top[phase];
    }
    */

    function getChild(address addr) external view returns(address[] memory) {
        return referenceChildList[addr];
    }

    function getPoints(uint256 phase, address addr) external view returns (uint256) {
        return addressPoints[phase][addr];
    }

    function getParent(address addr) external view returns(address) {
        return referenceParentList[addr];
    }

    function getNewSignup(uint256 phase) external view returns(address[] memory) {
        return newSignupList[phase];
    }

    function newSignupCount(uint256 phase) external view returns (uint) {
        return newSignupList[phase].length;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    constructor(uint _maxChildrenCount, uint _pointRate, uint256 _winnerCount) public {
        master = msg.sender; // master account
        maxChildrenCount = _maxChildrenCount;  // child node max number
        pointRate = _pointRate;  // e.g. 618
        winnerCount = _winnerCount;
    }

    function setUpParent(address pAddress, address addr) internal {
        pAddress = findParent(pAddress);
        referenceParentList[addr] = pAddress;
        referenceChildList[pAddress].push(addr);
    }

    function updateTop(address addr, uint256 phase) internal {
        for (uint256 k = 0; k < top[phase].length; k++){
            if (top[phase][k] == addr) {
                for (uint256 i = k; i > 0; i--){
                    if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) {
                        (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]);
                    } else {
                        break;
                    }
                }
                return;
            }
        }

        if (top[phase].length < winnerCount){
            top[phase].push(addr);
        } else if (addressPoints[phase][addr] > addressPoints[phase][top[phase][top[phase].length - 1]]){
            top[phase][top[phase].length - 1] = addr;
        }

        for (uint256 i = top[phase].length - 1; i > 0; i--){
            if (addressPoints[phase][top[phase][i]] > addressPoints[phase][top[phase][i-1]]) {
                (top[phase][i], top[phase][i-1]) = (top[phase][i-1], top[phase][i]);
            } else {
              break;
            }
        }
    }

    function updatePoints(address referrer, address addr, uint256 phase) internal {
        uint256 points = basePoints;
        if (addressPoints[phase][referrer] == 0) {
            inviterList[phase].push(referrer);
        }
        addressPoints[phase][referrer] = addressPoints[phase][referrer].add(points);
        points = points.mul(pointRate).div(1000);
        updateTop(referrer, phase);

        address parent = referenceParentList[addr];
        uint256 level = 0;
        while (parent != address(0) && level < maxPointLevel){
            level = level.add(1);
            if (parent == referrer) {
                parent = referenceParentList[parent];
                continue;
            }
            if (addressPoints[phase][parent] == 0) {
                inviterList[phase].push(parent);
            }
            addressPoints[phase][parent] = addressPoints[phase][parent].add(points);
            points = points.mul(pointRate).div(1000);
            updateTop(parent, phase);
            parent = referenceParentList[parent];
        }
    }

    function findParent(address root) internal view returns (address) {
        uint len = 10000;
        address[] memory temp = new address[](len);
        uint startIndex = 0;
        uint currentIndex = 0;
        temp[startIndex] = root;
        while (true){
            address currentAddress = temp[startIndex];
            startIndex++;
            if (startIndex == len){
                startIndex = 0;
            }
            if (referenceChildList[currentAddress].length < maxChildrenCount){
                return currentAddress;
            }else {
                for(uint i = 0; i< referenceChildList[currentAddress].length; i++){
                    currentIndex++;
                    if (currentIndex == len){
                        currentIndex = 0;
                    }
                    temp[currentIndex] = referenceChildList[currentAddress][i];
                }
            }
        }
    }

    /*
    function randomizedSelect(address[] storage addressList, uint left, uint right, uint256 k, uint256 phase) internal{
        if (left == right) {
            return;
        }

        if (left < right) {
            uint mid = partition(addressList, left, right, phase);
            uint i = mid - left + 1;
            if (i == k){
                return;
            }

            if (k < i) {
                return randomizedSelect(addressList, left, mid - 1, k, phase);
            } else {
                return randomizedSelect(addressList, mid + 1, right, k - i, phase);
            }
        }
    }

    function partition(address[] storage addressList, uint left, uint right, uint256 phase) internal returns(uint) {
        address tmp = addressList[left];

        while (left < right) {
            while (left < right && addressPoints[phase][addressList[right]] < addressPoints[phase][tmp]) {
                right--;
            }
            addressList[left] = addressList[right];
            while (left < right && addressPoints[phase][addressList[left]] >= addressPoints[phase][tmp]) {
                left++;
            }
            addressList[right] = addressList[left];
        }
        addressList[left] = tmp;
        return left;
    }
    */

    function distributeBonus(uint256 len) external pure returns(uint256[] memory) {
        uint256[] memory factors = new uint256[](len);
        for (uint256 i = 0; i < len; i++) {
            if (i < len.div(2)) {
              factors[i] = len.add(len.div(2).sub(i));
            } else {
              if (len % 2 == 0 ) {
                factors[i] = len.add(len.div(2)).sub(1).sub(i);
              } else {
                factors[i] = len.add(len.div(2)).sub(i);
              }
            }
        }
        return factors;
    }

    function getAncestors(address addr) external view returns(address[] memory) {
        address[] memory ancestors = new address[](maxPointLevel);
        address parent = referenceParentList[addr];

        for (uint256 i = 0; parent != address(0) && i < maxPointLevel; i++) {
            ancestors[i] = parent;
            parent = referenceParentList[parent];
        }
        return ancestors;
    }
}

File 4 of 8: LuckyDraw.sol
pragma solidity ^0.5.8;

contract LuckyDrawBasic {
    function buyTicket(address addr, uint256 phase) external;
    function aggregateIcexWinners(uint256 phase) external;
    function getWinners(uint256 phase) external view returns(address[] memory);
}

contract LuckyDraw is LuckyDrawBasic {
    /*
     * STATES
     */
    address public master;
    address public caller;

    bool public paused;

    uint winnerCount = 10;
    mapping (uint256 => address[]) winnerList;
    mapping (uint256 => mapping(address => bool)) playerList;
    mapping (uint256 => uint256) playerNumbers;
    uint nonce = 0;

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    constructor() public {
        master = msg.sender;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function buyTicket(address addr, uint256 phase) external onlyCaller notPaused {
        if (!playerList[phase][addr]){
            playerNumbers[phase]++;
            if (winnerList[phase].length < winnerCount){
                winnerList[phase].push(addr);
            }else {
                uint index = randomIndex(addr, playerNumbers[phase]);
                if (index < winnerCount){
                    winnerList[phase][index] = addr;
                }
            }
            playerList[phase][addr] = true;
        }
    }

    // costs a bit, but will only invoke once, and paid by operator
    function aggregateIcexWinners(uint256 phase) external onlyCaller notPaused {
        for(uint i = 0 ; i < phase; ++i) {
            address[] memory candidates = winnerList[i];
            for(uint j = 0; j < candidates.length; ++j) {
                if (!playerList[phase][candidates[j]]) {
                    if (winnerList[phase].length < winnerCount) {
                        winnerList[phase].push(candidates[j]);
                    } else {
                        uint index = randomIndex(candidates[j], winnerCount * (phase + 1));
                        if (index < winnerCount){
                            winnerList[phase][index] = candidates[j];
                        }
                    }
                }
            }
        }
    }

    function getWinners(uint256 phase) external view returns(address[] memory) {
        return winnerList[phase];
    }

    function randomIndex(address addr, uint number) internal returns (uint) {
        uint randomnumber = uint(keccak256(abi.encodePacked(now, addr, nonce))) % number;
        nonce++;
        return randomnumber;
    }
}

File 5 of 8: Migrations.sol
pragma solidity >=0.4.25 <0.6.0;

contract Migrations {
  address public owner;
  uint public last_completed_migration;

  modifier restricted() {
    if (msg.sender == owner) _;
  }

  constructor() public {
    owner = msg.sender;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}

File 6 of 8: SafeMath.sol
pragma solidity ^0.5.8;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

File 7 of 8: VDPool.sol
pragma solidity ^0.5.8;
import './SafeMath.sol';

contract VDPoolBasic {
    function price() external view returns(uint256);
    function currentLevel() external view returns(uint256);
    function currentLevelRemaining() external view returns(uint256);
}

contract VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256);
}

contract VDPool is VDPoolBasic {
    using SafeMath for uint256;
    /*
     * STATES
     */
    address public master;
    address public caller;

    uint256 public ethCapacity = 0;
    uint256 public basicExchangeRate = 0;
    uint256 public currentLevel = 0;
    uint256 public currentLevelStartBlock = 0;
    uint256 public cooldownBlocks = 0; // by default wait 1 block before enterring next level
    VDPoolThrottler throttlerContract;
    uint256 public currentPrice = 0;
    uint256 public currentLevelRemaining = 0;

    bool public paused;

    /*
     * EVENTS
     */
    event LevelDescend(uint256 level, uint256 price, uint256 startBlock, uint256 cooldownBlocks, uint256 currentBlock);

    /*
     * MODIFIERS
     */
    /// only master can call the function
    modifier onlyOwner {
        require(master == msg.sender, "only owner can call");
        _;
    }

    /// only master can call the function
    modifier onlyCaller {
        require(caller == msg.sender, "only caller can call");
        _;
    }

    /// function not paused
    modifier notPaused {
        require(paused == false, "function is paused");
        _;
    }

    constructor(uint256 _ethCapacity, uint256 _currentLevel, uint256 _basicExchangeRate) public {
        master = msg.sender;
        ethCapacity = _ethCapacity;
        currentLevel = _currentLevel;
        currentPrice = (currentLevel.sub(1)).mul(10).add(_basicExchangeRate);
        currentLevelRemaining = _ethCapacity;
        basicExchangeRate = _basicExchangeRate;
    }

    function setPause(bool value) external onlyOwner {
        paused = value;
    }

    function setCaller(address who) external onlyOwner {
        caller = who;
    }

    function setOwner(address who) external onlyOwner {
        master = who;
    }

    function setCooldownBlocks(uint256 bn) external onlyOwner {
        cooldownBlocks = bn;
    }

    function setThrottlerContract(address contractAddress) external onlyOwner {
        throttlerContract = VDPoolThrottler(contractAddress);
    }

    function price() external view returns (uint256) {
        uint256 tokens = computeTokenAmount(1 ether);
        return tokens;
    }

    function computeTokenAmount(uint256 ethAmount) public view returns (uint256) {
        uint256 tokens = ethAmount.mul(currentPrice);
        return tokens;
    }

    function buyToken(uint256 ethAmount) external onlyCaller notPaused returns (uint256) {
        require(currentLevelStartBlock <= block.number, "cooling down");
        uint256 eth = ethAmount;
        uint256 tokens = 0;
        while (eth > 0) {
            if (eth <= currentLevelRemaining) {
                tokens = tokens + computeTokenAmount(eth);
                currentLevelRemaining = currentLevelRemaining.sub(eth);
                eth = 0;
            }else {
                tokens = tokens + computeTokenAmount(currentLevelRemaining);
                eth = eth.sub(currentLevelRemaining);
                currentLevelRemaining = 0;
            }

            if (currentLevelRemaining == 0){
                currentLevel = currentLevel.sub(1);
                require (currentLevel > 0, "end of levels");
                currentPrice = (currentLevel.sub(1)).mul(10).add(basicExchangeRate);
                currentLevelRemaining = ethCapacity;
                if (address(throttlerContract) != address(0)) {
                    cooldownBlocks = throttlerContract.getCooldownBlocks();
                }
                if (currentLevelStartBlock > block.number ) {
                    // handling the case of desending multiple level in one tx
                    currentLevelStartBlock = currentLevelStartBlock + cooldownBlocks;
                } else {
                    currentLevelStartBlock = block.number + cooldownBlocks;
                }
                emit LevelDescend(currentLevel, currentPrice, currentLevelStartBlock, cooldownBlocks, block.number);
            }
        }

        return tokens;
    }
}

File 8 of 8: VDPoolThrottler.sol
pragma solidity ^0.5.8;


contract VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256);
}

contract DummyThrottler is VDPoolThrottler {
    function getCooldownBlocks() external view returns(uint256) {
      return 1;
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"currentPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newSettler","type":"address"}],"name":"setSettler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isSignedUp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentBonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"settled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusRate","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"invitationWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_rootFee","type":"uint256"},{"name":"_signUpFee","type":"uint256"},{"name":"_ancestorBonus","type":"uint256"},{"name":"_referrerBonus","type":"uint256"},{"name":"_invitationRate","type":"uint256"}],"name":"setInvitationContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentRemainingEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"topInvestor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rootFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_luckyDrawRate","type":"uint256"}],"name":"setLuckyDrawContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"issueToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"blockPerPhase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"phase","type":"uint256"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"signUpFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_firstBlock","type":"uint256"}],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"totalInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"addressInvestment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"_topInvestorCounter","type":"uint16"},{"name":"_topInvestorRate","type":"uint256"},{"name":"_foundationRate","type":"uint256"}],"name":"setVdPoolContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settler","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"topInvestors","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"crBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ethBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"phase","type":"uint256"}],"name":"luckyWinners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"master","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reservedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foundationAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_blockPerPhase","type":"uint256"},{"name":"_totalSupply","type":"uint256"},{"name":"_reservedAmount","type":"uint256"},{"name":"_reservedAccount","type":"address"},{"name":"_foundationAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"SaleStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":false,"name":"ethDistributed","type":"uint256"},{"indexed":false,"name":"ethToPool","type":"uint256"}],"name":"Settled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"LuckydrawSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvitationSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint256"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"}],"name":"InvestorSettle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

6080604052604051806080016040528060c860ff168152602001609660ff168152602001606460ff168152602001603260ff1681525060059060046200004792919062000447565b506000600c556000600d55600060185560006019556000601a556000601b556000601c60006101000a81548161ffff021916908361ffff160217905550604b601c60026101000a81548161ffff021916908361ffff160217905550600a601d556014601e55600a601f556046602055601460215560326022556000602355348015620000d257600080fd5b506040516200614438038062006144833981018060405260e0811015620000f857600080fd5b8101908080516401000000008111156200011157600080fd5b828101905060208101848111156200012857600080fd5b81518560018202830111640100000000821117156200014657600080fd5b505092919060200180516401000000008111156200016357600080fd5b828101905060208101848111156200017a57600080fd5b81518560018202830111640100000000821117156200019857600080fd5b5050929190602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866007908051906020019062000291929190620004f7565b508560089080519060200190620002aa929190620004f7565b50836000819055508260018190555082600a8190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600d8190555050505050505050620005da565b82805482825590600052602060002090600f01601090048101928215620004e45791602002820160005b83821115620004b257835183826101000a81548161ffff021916908360ff160217905550926020019260020160208160010104928301926001030262000471565b8015620004e25782816101000a81549061ffff0219169055600201602081600101049283019260010302620004b2565b505b509050620004f391906200057e565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200053a57805160ff19168380011785556200056b565b828001600101855582156200056b579182015b828111156200056a5782518255916020019190600101906200054d565b5b5090506200057a9190620005b2565b5090565b620005af91905b80821115620005ab57600081816101000a81549061ffff02191690555060010162000585565b5090565b90565b620005d791905b80821115620005d3576000816000905550600101620005b9565b5090565b90565b615b5a80620005ea6000396000f3fe6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796002900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063771282f61161014f578063a7848dca116100c1578063c25225981161007a578063c252259814610ed5578063dd62ed3e14610f65578063ee97f7f314610fea578063f6b19c7414611041578063f92c45b71461107c578063feafb79b146110a757610272565b8063a7848dca14610c6c578063a9059cbb14610cdf578063ab221a7614610d3a578063ad012f1c14610d91578063ba750fb214610e21578063bf17f2f214610e8657610272565b806395805dad1161011357806395805dad14610a7757806395d89b4114610ab25780639b2b524f14610b425780639c42abb314610ba75780639dc4b9c914610c16578063a035b1fe14610c4157610272565b8063771282f61461097757806389034082146109a25780638d5a1fb9146109e65780638df8280014610a115780639278b58714610a4c57610272565b806328345780116101e85780634152dc9f116101ac5780634152dc9f146107ad5780634cd1b1d2146107d85780635c474f9e1461085d5780635faeb3351461088c5780636b6bdec2146108b757806370a082311461091257610272565b806328345780146105bf5780632896ef47146106125780633087110514610669578063313ce567146106f9578063386914601461072a57610272565b806318160ddd1161023a57806318160ddd14610435578063191d1cb4146104605780631bec0d391461048f5780631d902fe9146104e6578063231b02681461051957806323b872dd1461054457610272565b8063055ad42e1461027d57806306fdde03146102a857806307f19eba14610338578063095ea7b31461038957806313af4035146103e4575b61027b336110fe565b005b34801561028957600080fd5b50610292611a91565b6040518082815260200191505060405180910390f35b3480156102b457600080fd5b506102bd611ab1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fd5780820151818401526020810190506102e2565b50505050905090810190601f16801561032a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034457600080fd5b506103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4f565b005b34801561039557600080fd5b506103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c56565b005b3480156103f057600080fd5b506104336004803603602081101561040757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dd8565b005b34801561044157600080fd5b5061044a611edf565b6040518082815260200191505060405180910390f35b34801561046c57600080fd5b50610475611ee5565b604051808215151515815260200191505060405180910390f35b34801561049b57600080fd5b506104a4611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611fec565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561052557600080fd5b5061052e612048565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506105bd6004803603606081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204e565b005b3480156105cb57600080fd5b506105f8600480360360208110156105e257600080fd5b810190808035906020019092919050505061230e565b604051808215151515815260200191505060405180910390f35b34801561061e57600080fd5b5061064b6004803603602081101561063557600080fd5b810190808035906020019092919050505061232e565b604051808261ffff1661ffff16815260200191505060405180910390f35b34801561067557600080fd5b506106a26004803603602081101561068c57600080fd5b8101908080359060200190929190505050612363565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106e55780820151818401526020810190506106ca565b505050509050019250505060405180910390f35b34801561070557600080fd5b5061070e612470565b604051808260ff1660ff16815260200191505060405180910390f35b34801561073657600080fd5b506107ab600480360360c081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612475565b005b3480156107b957600080fd5b506107c26125a4565b6040518082815260200191505060405180910390f35b3480156107e457600080fd5b5061081b600480360360408110156107fb57600080fd5b81019080803590602001909291908035906020019092919050505061264e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561086957600080fd5b50610872612699565b604051808215151515815260200191505060405180910390f35b34801561089857600080fd5b506108a16126b3565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b50610910600480360360408110156108da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b9565b005b34801561091e57600080fd5b506109616004803603602081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c8565b6040518082815260200191505060405180910390f35b34801561098357600080fd5b5061098c612811565b6040518082815260200191505060405180910390f35b6109e4600480360360208110156109b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fe565b005b3480156109f257600080fd5b506109fb612817565b6040518082815260200191505060405180910390f35b348015610a1d57600080fd5b50610a4a60048036036020811015610a3457600080fd5b810190808035906020019092919050505061281d565b005b348015610a5857600080fd5b50610a61612c68565b6040518082815260200191505060405180910390f35b348015610a8357600080fd5b50610ab060048036036020811015610a9a57600080fd5b8101908080359060200190929190505050612c6e565b005b348015610abe57600080fd5b50610ac7612e5a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b07578082015181840152602081019050610aec565b50505050905090810190601f168015610b345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b4e57600080fd5b50610b9160048036036020811015610b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ef8565b6040518082815260200191505060405180910390f35b348015610bb357600080fd5b50610c0060048036036040811015610bca57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f10565b6040518082815260200191505060405180910390f35b348015610c2257600080fd5b50610c2b612f35565b6040518082815260200191505060405180910390f35b348015610c4d57600080fd5b50610c56612fdf565b6040518082815260200191505060405180910390f35b348015610c7857600080fd5b50610cdd60048036036080811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080359060200190929190505050613089565b005b348015610ceb57600080fd5b50610d3860048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131be565b005b348015610d4657600080fd5b50610d4f613f05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050613f2b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e0d578082015181840152602081019050610df2565b505050509050019250505060405180910390f35b348015610e2d57600080fd5b50610e7060048036036020811015610e4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613fcc565b6040518082815260200191505060405180910390f35b348015610e9257600080fd5b50610ebf60048036036020811015610ea957600080fd5b8101908080359060200190929190505050613fe4565b6040518082815260200191505060405180910390f35b348015610ee157600080fd5b50610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050613ffc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610f51578082015181840152602081019050610f36565b505050509050019250505060405180910390f35b348015610f7157600080fd5b50610fd460048036036040811015610f8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614109565b6040518082815260200191505060405180910390f35b348015610ff657600080fd5b50610fff614190565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561104d57600080fd5b5061107a6004803603602081101561106457600080fd5b81019080803590602001909291905050506141b6565b005b34801561108857600080fd5b50611091614285565b6040518082815260200191505060405180910390f35b3480156110b357600080fd5b506110bc61428b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611106612699565b611178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f53616c65206973206e6f7420696e2070726f677265737300000000000000000081525060200191505060405180910390fd5b67016345785d8a00003410156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d696e696d616c206f6620302e3120657468207265717569726564000000000081525060200191505060405180910390fd5b6000611200611a91565b905060003490506112128334846142b1565b60058054905082101561134357600061127b606461126d6005868154811061123657fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1685614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506112908183614d4790919063ffffffff16565b91506000601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156113415760128490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d296bf1836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d60208110156113e457600080fd5b8101908080519060200190929190505050905061144934601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114a181600154614d4790919063ffffffff16565b6001819055506000546001541115611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f65786365656420746f6b656e20737570706c792063617000000000000000000081525060200191505060405180910390fd5b60058054905083101561184a5760006115f960646115eb601c60029054906101000a900461ffff1661ffff166115dd6005898154811061155d57fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660640161ffff166115cf60058b8154811061159857fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1689614c3290919063ffffffff16565b614cb890919063ffffffff16565b614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506000811015801561160b57508082115b61167d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f696e76616c696420637220626f6e75732076616c75650000000000000000000081525060200191505060405180910390fd5b6116e3611695601d5483614cb890919063ffffffff16565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178a8161177c84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61182f8486614dcf90919063ffffffff16565b6040518082815260200191505060405180910390a350611945565b61189c81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600061196f606461196160225434614c3290919063ffffffff16565b614cb890919063ffffffff16565b905061197a81614e58565b6119b2816119a434600e600089815260200190815260200160002054614d4790919063ffffffff16565b614dcf90919063ffffffff16565b600e600086815260200190815260200160002081905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166366a5ef2f86866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505050505050565b6000611aac600d54600c544303614cb890919063ffffffff16565b905090565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008114158015611ce457506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15611cee57600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005481565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d6020811015611fb057600080fd5b8101908080519060200190929190505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ff7611a91565b905060058054905081101561203f576005818154811061201357fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff16915050612045565b60009150505b90565b600c5481565b6060600481016000369050101561206457600080fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061213783600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121cc83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122228382614dcf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60146020528060005260406000206000915054906101000a900460ff1681565b6005818154811061233b57fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156123d857600080fd5b505afa1580156123ec573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561241657600080fd5b81019080805164010000000081111561242e57600080fd5b8281019050602081018481111561244457600080fd5b815185602082028301116401000000008211171561246157600080fd5b50509291905050509050919050565b601281565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612538576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b85601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846019819055508360188190555082601b8190555081601a8190555080602081905550505050505050565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328d807ad6040518163ffffffff1660e01b815260040160206040518083038186803b15801561260e57600080fd5b505afa158015612622573d6000803e3d6000fd5b505050506040513d602081101561263857600080fd5b8101908080519060200190929190505050905090565b6013602052816000526040600020818154811061266757fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c541180156126ae5750600c544310155b905090565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60015481565b600d5481565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806128c757503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f6e6c7920736574746c65722063616e2063616c6c000000000000000000000081525060200191505060405180910390fd5b60008110156129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070686173650000000000000000000000000000000000000081525060200191505060405180910390fd5b6129b8611a91565b8110612a2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7068617365206e6f74206d61747572656420796574000000000000000000000081525060200191505060405180910390fd5b6014600082815260200190815260200160002060009054906101000a900460ff1615612ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f706861736520616c726561647920736574746c6564000000000000000000000081525060200191505060405180910390fd5b60008090506000809050600580549050831015612ba0576000600e6000858152602001908152602001600020541115612b8557612b39601e5460058054905001612b2b600580549050600e600088815260200190815260200160002054614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050612b5081602354614d4790919063ffffffff16565b602381905550612b84612b7f82600e600087815260200190815260200160002054614dcf90919063ffffffff16565b614e58565b5b600160058054905003831415612b9b5760235491505b612bc0565b600e6000848152602001908152602001600020549150612bbf83614ee8565b5b6000821115612bf057612bdb838360058054905086106150e8565b612be583836153f5565b612bef8383615710565b5b60016014600085815260200190815260200160002060006101000a81548160ff0219169083151502179055507f321f57f44af402708b8b3bad0bd10012cd568d8696946e26edeb86178bb7c27e83838360405180848152602001838152602001828152602001935050505060405180910390a1505050565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b612d39612699565b15612dac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f53616c6520686173206e6f74207374617274656420796574000000000000000081525060200191505060405180910390fd5b6000600c5414612e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5265736f6e616e636520616c726561647920737461727465640000000000000081525060200191505060405180910390fd5b80600c819055507f912ee23dde46ec889d6748212cce445d667f7041597691dc89e8549ad8bc0acb60405160405180910390a150565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ef05780601f10612ec557610100808354040283529160200191612ef0565b820191906000526020600020905b815481529060010190602001808311612ed357829003601f168201915b505050505081565b60106020528060005260406000206000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc4b9c96040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9f57600080fd5b505afa158015612fb3573d6000803e3d6000fd5b505050506040513d6020811015612fc957600080fd5b8101908080519060200190929190505050905090565b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a035b1fe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561304957600080fd5b505afa15801561305d573d6000803e3d6000fd5b505050506040513d602081101561307357600080fd5b8101908080519060200190929190505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b83601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601c60006101000a81548161ffff021916908361ffff160217905550816021819055508060228190555050505050565b604060048101600036905010156131d457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613539576019548214613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615adf602f913960400191505060405180910390fd5b6132b482600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36133f9611ee5565b1561346c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f742071756c6966696c6564206173206e657720726f6f740000000000000081525060200191505060405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7f4b53336134b3611a91565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b50505050613f00565b601854821480156136205750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322b6ffca846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156135e457600080fd5b505afa1580156135f8573d6000803e3d6000fd5b505050506040513d602081101561360e57600080fd5b81019080805190602001909291905050505b8015613631575061362f611ee5565b155b15613d6f57600082905061368d81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136da611a91565b905060008190506005805490508210156136fa5760016005805490500390505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390859294873385856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001945050505050600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b5050505061384b601a54600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040518082815260200191505060405180910390a361390a601a5484614dcf90919063ffffffff16565b92506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ff747cc0336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156139ad57600080fd5b505afa1580156139c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156139eb57600080fd5b810190808051640100000000811115613a0357600080fd5b82810190506020810184811115613a1957600080fd5b8151856020820283011164010000000082111715613a3657600080fd5b5050929190505050905060008090505b815181108015613a585750601b548510155b15613c0557600073ffffffffffffffffffffffffffffffffffffffff16828281518110613a8157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415613aaa57613c05565b613b11601b5460036000858581518110613ac057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000848481518110613b2157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818181518110613b7357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b546040518082815260200191505060405180910390a3613bf6601b5486614dcf90919063ffffffff16565b94508080600101915050613a46565b50613c7a8460036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050613eff565b613dc182600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614dcf90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5682600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060136000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613fc057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613f76575b50505050509050919050565b60116020528060005260406000206000915090505481565b600e6020528060005260406000206000915090505481565b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156140af57600080fd5b8101908080516401000000008111156140c757600080fd5b828101905060208101848111156140dd57600080fd5b81518560208202830111640100000000821117156140fa57600080fd5b50509291905050509050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6f6e6c79206d61737465722063616e2063616c6c00000000000000000000000081525060200191505060405180910390fd5b61428281614e58565b50565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008190506005805490508210156142cf5760016005805490500390505b61433283600f600084815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008090505b6013600083815260200190815260200160002080549050811015614709578473ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002082815481106143df57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156146fc5760008190505b60008111156146f457600f6000848152602001908152602001600020600060136000868152602001908152602001600020600184038154811061446b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f6000858152602001908152602001600020600060136000878152602001908152602001600020848154811061450457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156146e15760136000848152602001908152602001600020600182038154811061459157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166013600085815260200190815260200160002082815481106145da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660136000868152602001908152602001600020838154811061462357fe5b90600052602060002001600060136000888152602001908152602001600020600186038154811061465057fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506146e6565b6146f4565b80806001900391505061442c565b505050614c2d565b808060010191505061438c565b50601c60009054906101000a900461ffff1661ffff16601360008381526020019081526020016000208054905010156147b857601360008281526020019081526020016000208490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614943565b600f600082815260200190815260200160002060006013600084815260200190815260200160002060016013600086815260200190815260200160002080549050038154811061480457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156149425783601360008381526020019081526020016000206001601360008581526020019081526020016000208054905003815481106148f957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000600160136000848152602001908152602001600020805490500390505b6000811115614c2a57600f600083815260200190815260200160002060006013600085815260200190815260200160002060018403815481106149a157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008481526020019081526020016000206000601360008681526020019081526020016000208481548110614a3a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115614c1757601360008381526020019081526020016000206001820381548110614ac757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008481526020019081526020016000208281548110614b1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360008581526020019081526020016000208381548110614b5957fe5b906000526020600020016000601360008781526020019081526020016000206001860381548110614b8657fe5b9060005260206000200160008491906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508391906101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050614c1c565b614c2a565b808060019003915050614962565b50505b505050565b600080831415614c455760009050614cb2565b6000828402905082848281614c5657fe5b0414614cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615b0e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481614d3a57fe5b0490508091505092915050565b600080828401905083811015614dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600082821115614e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000614e9b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614ee3573d6000803e3d6000fd5b505050565b600580549050811080614f045750601d54600580549050018110155b15614f0e576150e5565b60008090505b6012805490508110156150e357600060128281548110614f3057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050614fee601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614d4790919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3508080600101915050614f14565b505b50565b801561517c57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cf2371c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561516357600080fd5b505af1158015615177573d6000803e3d6000fd5b505050505b6060601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b1426a4856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156151f157600080fd5b505afa158015615205573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561522f57600080fd5b81019080805164010000000081111561524757600080fd5b8281019050602081018481111561525d57600080fd5b815185602082028301116401000000008211171561527a57600080fd5b5050929190505050905060006152c182516152b360646152a5601f5489614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b9050600082511480156152d45750600081115b156152e9576152e281614e58565b50506153f0565b60008090505b82518110156153ec57600061532c84838151811061530957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015615374573d6000803e3d6000fd5b5083828151811061538157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1bf242fce473b656e6d1d08dcb25b01042413f08c12e2818d923a6e29d4c1afb8885604051808381526020018281526020019250505060405180910390a25080806001019150506152ef565b5050505b505050565b600061541f606461541160215485614c3290919063ffffffff16565b614cb890919063ffffffff16565b9050600060136000858152602001908152602001600020805490501480156154475750600081115b1561545b5761545581614e58565b5061570c565b6000601360008581526020019081526020016000208054905090506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156154eb57600080fd5b505afa1580156154ff573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561552957600080fd5b81019080805164010000000081111561554157600080fd5b8281019050602081018481111561555757600080fd5b815185602082028301116401000000008211171561557457600080fd5b5050929190505050905060008090505b601360008781526020019081526020016000208054905081101561570757600061560b6013600089815260200190815260200160002083815481106155c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16615ad4565b905060006156598561564b8761563d88888151811061562657fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156156a1573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167f1eac6055421b211dbe224185ed987d950ab8cdad41c7e6cfa729cf3c92c5eed78983604051808381526020018281526020019250505060405180910390a250508080600101915050615584565b505050505b5050565b600061573a606461572c60205485614c3290919063ffffffff16565b614cb890919063ffffffff16565b90506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337caa8b6856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156157b157600080fd5b505afa1580156157c5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060208110156157ef57600080fd5b81019080805164010000000081111561580757600080fd5b8281019050602081018481111561581d57600080fd5b815185602082028301116401000000008211171561583a57600080fd5b50509291905050509050600081511480156158555750600082115b1561586a5761586382614e58565b5050615ad0565b6000815190506060601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393c1e292836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156158e557600080fd5b505afa1580156158f9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561592357600080fd5b81019080805164010000000081111561593b57600080fd5b8281019050602081018481111561595157600080fd5b815185602082028301116401000000008211171561596e57600080fd5b5050929190505050905060008090505b8151811015615aca5760006159d3846159c5866159b78787815181106159a057fe5b60200260200101518b614c3290919063ffffffff16565b614cb890919063ffffffff16565b614cb890919063ffffffff16565b90506000615a098684815181106159e657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16615ad4565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015615a51573d6000803e3d6000fd5b50858381518110615a5e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f70098ec6480a4d5390c19f0a21daad08444bf356e3cf48f99b4e65517edb1f8d8a84604051808381526020018281526020019250505060405180910390a25050808060010191505061597e565b50505050505b5050565b600081905091905056fe6f6e6c792076616c69642076616c756520697320726f6f742066656520666f72207468697320726563697069656e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a165627a7a72305820e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece07960029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000b3b000000000000000000000000000000000000000001027e72f1f12813088000000000000000000000000000000000000000000000005a790ea17ace06a960000000000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed93000000000000000000000000079756ba86affc6cdda424aa7a061fec56077f6130000000000000000000000000000000000000000000000000000000000000011562d44696d656e73696f6e20436c6f756400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035644430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): V-Dimension Cloud
Arg [1] : _symbol (string): VDC
Arg [2] : _blockPerPhase (uint256): 46000
Arg [3] : _totalSupply (uint256): 5000000000000000000000000000
Arg [4] : _reservedAmount (uint256): 1750000000000000000000000000
Arg [5] : _reservedAccount (address): 0x0AA3e3Ad42952958F2D81357Bf8CD5dcb77eD930
Arg [6] : _foundationAddr (address): 0x79756bA86aFFc6CddA424AA7a061fEc56077F613

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 000000000000000000000000000000000000000000000000000000000000b3b0
Arg [3] : 00000000000000000000000000000000000000001027e72f1f12813088000000
Arg [4] : 000000000000000000000000000000000000000005a790ea17ace06a96000000
Arg [5] : 0000000000000000000000000aa3e3ad42952958f2d81357bf8cd5dcb77ed930
Arg [6] : 00000000000000000000000079756ba86affc6cdda424aa7a061fec56077f613
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [8] : 562d44696d656e73696f6e20436c6f7564000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 5644430000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

1489:15585:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:22;9375:10;9364;:22::i;:::-;1489:15585;10757:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10757:123:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1714:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1714:18:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1714:18:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4430:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4430:96:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4430:96:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;2698:447:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2698:447:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2698:447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4335:89:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4335:89:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4335:89:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;146:26:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;146:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9958:114:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9958:114:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1806:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1806:30:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9743:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9743:209:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1913:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1913:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1968:499:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1968:499:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1968:499:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2337:40:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2337:40:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2337:40:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1603:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1603:47:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1603:47:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10347:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10347:138:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10347:138:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10347:138:7;;;;;;;;;;;;;;;;;1764:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1764:35:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6568:509;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6568:509:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6568:509:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9613:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9613:124:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2282:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2282:49:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2282:49:7;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10631:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10631:120:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2529:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2529:26:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7514:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7514:184:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7514:184:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1010:109:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1010:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1010:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;176:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;176:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10886:1770:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10886:1770:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;1948:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1948:32:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7704:1238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7704:1238:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7704:1238:7;;;;;;;;;;;;;;;;;:::i;:::-;;2495:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2495:28:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8948:249;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8948:249:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8948:249:7;;;;;;;;;;;;;;;;;:::i;:::-;;1738:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1738:20:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1738:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2119:51:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2119:51:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2039:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2039:74:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2039:74:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9499:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9499:108:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9399:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9399:94:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7083:425;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7083:425:7;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7083:425:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4532:2030;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4532:2030:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4532:2030:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1686:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1686:22:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10078:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10078:120:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10078:120:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10078:120:7;;;;;;;;;;;;;;;;;2176:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2176:43:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2176:43:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1987:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1987:46:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1987:46:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10204:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10204:137:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10204:137:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10204:137:7;;;;;;;;;;;;;;;;;3461:138:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3461:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3461:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;208:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;208:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10491:95:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10491:95:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10491:95:7;;;;;;;;;;;;;;;;;:::i;:::-;;1842:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1842:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1877;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1877:29:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10886:1770;10958:13;:11;:13::i;:::-;10950:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11030:9;11017;:22;;11009:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11081:13;11097:14;:12;:14::i;:::-;11081:30;;11121:16;11140:9;11121:28;;11160:46;11178:9;11189;11200:5;11160:17;:46::i;:::-;11244:9;:16;;;;11236:5;:24;11232:258;;;11275:13;11291:39;11326:3;11291:30;11304:9;11314:5;11304:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11291:30;;:8;:12;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;11275:55;;11355:19;11368:5;11355:8;:12;;:19;;;;:::i;:::-;11344:30;;11414:1;11392:7;:18;11400:9;11392:18;;;;;;;;;;;;;;;;:23;11388:92;;;11436:13;11455:9;11436:29;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11436:29:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:92;11232:258;;11500:14;11517;;;;;;;;;;;:23;;;11541:8;11517:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11517:33:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11517:33:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11517:33:7;;;;;;;;;;;;;;;;11500:50;;11590:41;11621:9;11590:15;:26;11606:9;11590:26;;;;;;;;;;;;;;;;:30;;:41;;;;:::i;:::-;11561:15;:26;11577:9;11561:26;;;;;;;;;;;;;;;:70;;;;11657:25;11675:6;11657:13;;:17;;:25;;;;:::i;:::-;11641:13;:41;;;;11718:11;;11701:13;;:28;;11693:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11780:9;:16;;;;11772:5;:24;11768:637;;;11811:16;11830:87;11913:3;11830:78;11891:16;;;;;;;;;;;11830:78;;:56;11869:9;11879:5;11869:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11863:3;:22;11830:56;;:28;11841:9;11851:5;11841:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11830:28;;:6;:10;;:28;;;;:::i;:::-;:32;;:56;;;;:::i;:::-;:60;;:78;;;;:::i;:::-;:82;;:87;;;;:::i;:::-;11811:106;;11951:1;11939:8;:13;;:34;;;;;11965:8;11956:6;:17;11939:34;11931:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12035:58;12058:34;12071:20;;12058:8;:12;;:34;;;;:::i;:::-;12035:7;:18;12043:9;12035:18;;;;;;;;;;;;;;;;:22;;:58;;;;:::i;:::-;12014:7;:18;12022:9;12014:18;;;;;;;;;;;;;;;:79;;;;12129:45;12165:8;12129:31;12153:6;12129:8;:19;12138:9;12129:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;:35;;:45;;;;:::i;:::-;12107:8;:19;12116:9;12107:19;;;;;;;;;;;;;;;:67;;;;12217:9;12193:56;;12210:4;12193:56;;;12228:20;12239:8;12228:6;:10;;:20;;;;:::i;:::-;12193:56;;;;;;;;;;;;;;;;;;11768:637;;;;12302:31;12326:6;12302:8;:19;12311:9;12302:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;12280:8;:19;12289:9;12280:19;;;;;;;;;;;;;;;:53;;;;12376:9;12352:42;;12369:4;12352:42;;;12387:6;12352:42;;;;;;;;;;;;;;;;;;11768:637;12415:18;12436:38;12470:3;12436:29;12450:14;;12436:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;12415:59;;12484:32;12505:10;12484:20;:32::i;:::-;12546:48;12583:10;12546:32;12568:9;12546:10;:17;12557:5;12546:17;;;;;;;;;;;;:21;;:32;;;;:::i;:::-;:36;;:48;;;;:::i;:::-;12526:10;:17;12537:5;12526:17;;;;;;;;;;;:68;;;;12604:17;;;;;;;;;;;:27;;;12632:9;12643:5;12604:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12604:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12604:45:7;;;;10886:1770;;;;;:::o;10757:123::-;10801:7;10827:46;10859:13;;10843:10;;10828:12;:25;10827:31;;:46;;;;:::i;:::-;10820:53;;10757:123;:::o;1714:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4430:96::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4509:10;4499:7;;:20;;;;;;;;;;;;;;;;;;4430:96;:::o;2698:447:0:-;2994:1;2984:6;:11;;2983:53;;;;;3034:1;3001:7;:19;3009:10;3001:19;;;;;;;;;;;;;;;:29;3021:8;3001:29;;;;;;;;;;;;;;;;:34;;2983:53;2979:67;;;3038:8;;;2979:67;3085:6;3053:7;:19;3061:10;3053:19;;;;;;;;;;;;;;;:29;3073:8;3053:29;;;;;;;;;;;;;;;:38;;;;3123:8;3102:38;;3111:10;3102:38;;;3133:6;3102:38;;;;;;;;;;;;;;;;;;2698:447;;:::o;4335:89:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4409:8;4400:6;;:17;;;;;;;;;;;;;;;;;;4335:89;:::o;146:26:0:-;;;;:::o;9958:114:7:-;10001:4;10024:18;;;;;;;;;;;:29;;;10054:10;10024:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10024:41:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10024:41:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10024:41:7;;;;;;;;;;;;;;;;10017:48;;9958:114;:::o;1806:30::-;;;;;;;;;;;;;:::o;9743:209::-;9793:6;9811:13;9827:14;:12;:14::i;:::-;9811:30;;9863:9;:16;;;;9855:5;:24;9851:77;;;9901:9;9911:5;9901:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9894:23;;;;;9851:77;9944:1;9937:8;;;9743:209;;:::o;1913:29::-;;;;:::o;1968:499:0:-;2059:6;768:1;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;2073:18;2094:7;:14;2102:5;2094:14;;;;;;;;;;;;;;;:26;2109:10;2094:26;;;;;;;;;;;;;;;;2073:47;;2290:25;2308:6;2290:8;:13;2299:3;2290:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2274:8;:13;2283:3;2274:13;;;;;;;;;;;;;;;:41;;;;2339:27;2359:6;2339:8;:15;2348:5;2339:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;2321:8;:15;2330:5;2321:15;;;;;;;;;;;;;;;:45;;;;2401:22;2416:6;2401:10;:14;;:22;;;;:::i;:::-;2372:7;:14;2380:5;2372:14;;;;;;;;;;;;;;;:26;2387:10;2372:26;;;;;;;;;;;;;;;:51;;;;2450:3;2434:28;;2443:5;2434:28;;;2455:6;2434:28;;;;;;;;;;;;;;;;;;802:1;1968:499;;;;:::o;2337:40:7:-;;;;;;;;;;;;;;;;;;;;;;:::o;1603:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10347:138::-;10411:16;10446:18;;;;;;;;;;;:25;;;10472:5;10446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10446:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10446:32:7;;;;;;39:16:-1;36:1;17:17;2:54;10446:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10446:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10446:32:7;;;;;;10439:39;;10347:138;;;:::o;1764:35::-;1797:2;1764:35;:::o;6568:509::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6790:4;6753:18;;:42;;;;;;;;;;;;;;;;;;6816:8;6806:7;:18;;;;6866:10;6854:9;:22;;;;6926:14;6910:13;:30;;;;6990:14;6974:13;:30;;;;7055:15;7038:14;:32;;;;6568:509;;;;;;:::o;9613:124::-;9666:7;9692:14;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9692:38:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9692:38:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9692:38:7;;;;;;;;;;;;;;;;9685:45;;9613:124;:::o;2282:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10631:120::-;10675:4;10712:1;10699:10;;:14;:44;;;;;10733:10;;10717:12;:26;;10699:44;10691:53;;10631:120;:::o;2529:26::-;;;;:::o;7514:184::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7646:4;7611:17;;:40;;;;;;;;;;;;;;;;;;7677:14;7661:13;:30;;;;7514:184;;:::o;1010:109:0:-;1068:15;1098:8;:16;1107:6;1098:16;;;;;;;;;;;;;;;;1091:23;;1010:109;;;:::o;176:28::-;;;;:::o;1948:32:7:-;;;;:::o;7704:1238::-;7781:1;7762:21;;:7;;;;;;;;;;;:21;;;:46;;;;7798:10;7787:21;;:7;;;;;;;;;;;:21;;;7762:46;7754:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7861:1;7852:5;:10;;7844:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:14;:12;:14::i;:::-;7898:5;:22;7890:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7966:7;:14;7974:5;7966:14;;;;;;;;;;;;;;;;;;;;;7965:15;7956:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8017:12;8032:1;8017:16;;8043:14;8060:1;8043:18;;8083:9;:16;;;;8075:5;:24;8071:599;;;8138:1;8118:10;:17;8129:5;8118:17;;;;;;;;;;;;:21;8115:289;;;8168:85;8231:21;;8212:9;:16;;;;:40;8168:39;8190:9;:16;;;;8168:10;:17;8179:5;8168:17;;;;;;;;;;;;:21;;:39;;;;:::i;:::-;:43;;:85;;;;:::i;:::-;8159:94;;8291:29;8313:6;8291:17;;:21;;:29;;;;:::i;:::-;8271:17;:49;;;;8338:51;8359:29;8381:6;8359:10;:17;8370:5;8359:17;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;8338:20;:51::i;:::-;8115:289;8507:1;8488:9;:16;;;;:20;8479:5;:29;8475:92;;;8535:17;;8528:24;;8475:92;8071:599;;;8604:10;:17;8615:5;8604:17;;;;;;;;;;;;8597:24;;8635;8653:5;8635:17;:24::i;:::-;8071:599;8691:1;8684:4;:8;8680:181;;;8709:54;8725:5;8732:4;8746:9;:16;;;;8738:5;:24;8709:15;:54::i;:::-;8777:30;8795:5;8802:4;8777:17;:30::i;:::-;8821:29;8838:5;8845:4;8821:16;:29::i;:::-;8680:181;8888:4;8871:7;:14;8879:5;8871:14;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8907:28;8915:5;8922:4;8928:6;8907:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7704:1238;;;:::o;2495:28::-;;;;:::o;8948:249::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9022:13;:11;:13::i;:::-;9021:14;9013:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:1;9082:10;;:15;9074:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9151:11;9138:10;:24;;;;9177:13;;;;;;;;;;8948:249;:::o;1738:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:51::-;;;;;;;;;;;;;;;;;:::o;2039:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9499:108::-;9545:7;9571:14;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9571:29:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9571:29:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9571:29:7;;;;;;;;;;;;;;;;9564:36;;9499:108;:::o;9399:94::-;9438:7;9464:14;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9464:22:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9464:22:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9464:22:7;;;;;;;;;;;;;;;;9457:29;;9399:94;:::o;7083:425::-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7261:4;7232:14;;:34;;;;;;;;;;;;;;;;;;7298:19;7277:18;;:40;;;;;;;;;;;;;;;;;;7394:16;7376:15;:34;;;;7467:15;7450:14;:32;;;;7083:425;;;;:::o;4532:2030::-;4604:6;768:1:0;761:4;:8;743;;:15;;:26;740:56;;;780:8;;;740:56;4642:4:7;4627:20;;:3;:20;;;4622:1934;;;4681:7;;4671:6;:17;4663:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4777:32;4802:6;4777:8;:20;4786:10;4777:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4754:8;:20;4763:10;4754:20;;;;;;;;;;;;;;;:55;;;;4839:25;4857:6;4839:8;:13;4848:3;4839:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;4823:8;:13;4832:3;4823:13;;;;;;;;;;;;;;;:41;;;;4904:3;4883:33;;4892:10;4883:33;;;4909:6;4883:33;;;;;;;;;;;;;;;;;;4939:12;:10;:12::i;:::-;4938:13;4930:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:18;;;;;;;;;;;:26;;;5022:10;5034:14;:12;:14::i;:::-;4995:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4995:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4995:54:7;;;;4622:1934;;;5081:9;;5071:6;:19;:57;;;;;5094:18;;;;;;;;;;;:29;;;5124:3;5094:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5094:34:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5094:34:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5094:34:7;;;;;;;;;;;;;;;;5071:57;:74;;;;;5133:12;:10;:12::i;:::-;5132:13;5071:74;5066:1490;;;5161:11;5175:6;5161:20;;5218:29;5243:3;5218:8;:20;5227:10;5218:20;;;;;;;;;;;;;;;;:24;;:29;;;;:::i;:::-;5195:8;:20;5204:10;5195:20;;;;;;;;;;;;;;;:52;;;;5262:13;5278:14;:12;:14::i;:::-;5262:30;;5306:14;5323:5;5306:22;;5354:9;:16;;;;5346:5;:24;5342:92;;;5418:1;5399:9;:16;;;;:20;5390:29;;5342:92;5448:18;;;;;;;;;;;:25;;;5474:3;5479:10;5491:5;5498:6;5448:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5448:57:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5448:57:7;;;;5565:32;5583:13;;5565:8;:13;5574:3;5565:13;;;;;;;;;;;;;;;;:17;;:32;;;;:::i;:::-;5549:8;:13;5558:3;5549:13;;;;;;;;;;;;;;;:48;;;;5637:3;5616:40;;5625:10;5616:40;;;5642:13;;5616:40;;;;;;;;;;;;;;;;;;5676:22;5684:13;;5676:3;:7;;:22;;;;:::i;:::-;5670:28;;5748:26;5777:18;;;;;;;;;;;:31;;;5809:10;5777:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5777:43:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5777:43:7;;;;;;39:16:-1;36:1;17:17;2:54;5777:43:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5777:43:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;5777:43:7;;;;;;5748:72;;5840:9;5852:1;5840:13;;5834:384;5859:9;:16;5855:1;:20;:44;;;;;5886:13;;5879:3;:20;;5855:44;5834:384;;;5952:1;5928:26;;:9;5938:1;5928:12;;;;;;;;;;;;;;:26;;;5924:78;;;5978:5;;5924:78;6044:41;6071:13;;6044:8;:22;6053:9;6063:1;6053:12;;;;;;;;;;;;;;6044:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;6019:8;:22;6028:9;6038:1;6028:12;;;;;;;;;;;;;;6019:22;;;;;;;;;;;;;;;:66;;;;6129:9;6139:1;6129:12;;;;;;;;;;;;;;6108:49;;6117:10;6108:49;;;6143:13;;6108:49;;;;;;;;;;;;;;;;;;6181:22;6189:13;;6181:3;:7;;:22;;;;:::i;:::-;6175:28;;5901:3;;;;;;;5834:384;;;;6259:33;6288:3;6259:8;:24;6268:14;;;;;;;;;;;6259:24;;;;;;;;;;;;;;;;:28;;:33;;;;:::i;:::-;6232:8;:24;6241:14;;;;;;;;;;;6232:24;;;;;;;;;;;;;;;:60;;;;6332:14;;;;;;;;;;;6311:41;;6320:10;6311:41;;;6348:3;6311:41;;;;;;;;;;;;;;;;;;5066:1490;;;;;;;6406:32;6431:6;6406:8;:20;6415:10;6406:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;6383:8;:20;6392:10;6383:20;;;;;;;;;;;;;;;:55;;;;6468:25;6486:6;6468:8;:13;6477:3;6468:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;6452:8;:13;6461:3;6452:13;;;;;;;;;;;;;;;:41;;;;6533:3;6512:33;;6521:10;6512:33;;;6538:6;6512:33;;;;;;;;;;;;;;;;;;5066:1490;4622:1934;4532:2030;;;:::o;1686:22::-;;;;;;;;;;;;;:::o;10078:120::-;10138:16;10173:11;:18;10185:5;10173:18;;;;;;;;;;;10166:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10078:120;;;:::o;2176:43::-;;;;;;;;;;;;;;;;;:::o;1987:46::-;;;;;;;;;;;;;;;;;:::o;10204:137::-;10264:16;10299:17;;;;;;;;;;;:28;;;10328:5;10299:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10299:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10299:35:7;;;;;;39:16:-1;36:1;17:17;2:54;10299:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10299:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;10299:35:7;;;;;;10292:42;;10204:137;;;:::o;3461:138:0:-;3537:17;3569:7;:15;3577:6;3569:15;;;;;;;;;;;;;;;:25;3585:8;3569:25;;;;;;;;;;;;;;;;3562:32;;3461:138;;;;:::o;208:21::-;;;;;;;;;;;;;:::o;10491:95:7:-;3494:10;3484:20;;:6;;;;;;;;;;;:20;;;3476:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10551:28;10572:6;10551:20;:28::i;:::-;10491:95;:::o;1842:29::-;;;;:::o;1877:::-;;;;;;;;;;;;;:::o;12704:1620::-;12798:14;12815:5;12798:22;;12842:9;:16;;;;12834:5;:24;12830:122;;;12902:1;12883:9;:16;;;;:20;12874:29;;12830:122;12995:46;13031:9;12995:17;:25;13013:6;12995:25;;;;;;;;;;;:31;13021:4;12995:31;;;;;;;;;;;;;;;;:35;;:46;;;;:::i;:::-;12961:17;:25;12979:6;12961:25;;;;;;;;;;;:31;12987:4;12961:31;;;;;;;;;;;;;;;:80;;;;13057:9;13069:1;13057:13;;13052:562;13076:11;:19;13088:6;13076:19;;;;;;;;;;;:26;;;;13072:1;:30;13052:562;;;13152:4;13126:30;;:11;:19;13138:6;13126:19;;;;;;;;;;;13146:1;13126:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;13122:482;;;13181:9;13193:1;13181:13;;13176:390;13200:1;13196;:5;13176:390;;;13285:17;:25;13303:6;13285:25;;;;;;;;;;;:51;13311:11;:19;13323:6;13311:19;;;;;;;;;;;13333:1;13331;:3;13311:24;;;;;;;;;;;;;;;;;;;;;;;;;13285:51;;;;;;;;;;;;;;;;13233:17;:25;13251:6;13233:25;;;;;;;;;;;:49;13259:11;:19;13271:6;13259:19;;;;;;;;;;;13279:1;13259:22;;;;;;;;;;;;;;;;;;;;;;;;;13233:49;;;;;;;;;;;;;;;;:103;13229:319;;;13418:11;:19;13430:6;13418:19;;;;;;;;;;;13440:1;13438;:3;13418:24;;;;;;;;;;;;;;;;;;;;;;;;;13444:11;:19;13456:6;13444:19;;;;;;;;;;;13464:1;13444:22;;;;;;;;;;;;;;;;;;;;;;;;;13365:11;:19;13377:6;13365:19;;;;;;;;;;;13385:1;13365:22;;;;;;;;;;;;;;;;13389:11;:19;13401:6;13389:19;;;;;;;;;;;13411:1;13409;:3;13389:24;;;;;;;;;;;;;;;;13364:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13229:319;;;13520:5;;13229:319;13203:3;;;;;;;;13176:390;;;;13583:7;;;;13122:482;13104:3;;;;;;;13052:562;;;;13657:18;;;;;;;;;;;13628:47;;:11;:19;13640:6;13628:19;;;;;;;;;;;:26;;;;:47;13624:313;;;13690:11;:19;13702:6;13690:19;;;;;;;;;;;13715:4;13690:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13690:30:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13624:313;;;13775:17;:25;13793:6;13775:25;;;;;;;;;;;:78;13801:11;:19;13813:6;13801:19;;;;;;;;;;;13850:1;13821:11;:19;13833:6;13821:19;;;;;;;;;;;:26;;;;:30;13801:51;;;;;;;;;;;;;;;;;;;;;;;;;13775:78;;;;;;;;;;;;;;;;13741:17;:25;13759:6;13741:25;;;;;;;;;;;:31;13767:4;13741:31;;;;;;;;;;;;;;;;:112;13737:200;;;13922:4;13868:11;:19;13880:6;13868:19;;;;;;;;;;;13917:1;13888:11;:19;13900:6;13888:19;;;;;;;;;;;:26;;;;:30;13868:51;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;13737:200;13624:313;13952:9;13993:1;13964:11;:19;13976:6;13964:19;;;;;;;;;;;:26;;;;:30;13952:42;;13947:371;14000:1;13996;:5;13947:371;;;14077:17;:25;14095:6;14077:25;;;;;;;;;;;:51;14103:11;:19;14115:6;14103:19;;;;;;;;;;;14125:1;14123;:3;14103:24;;;;;;;;;;;;;;;;;;;;;;;;;14077:51;;;;;;;;;;;;;;;;14025:17;:25;14043:6;14025:25;;;;;;;;;;;:49;14051:11;:19;14063:6;14051:19;;;;;;;;;;;14071:1;14051:22;;;;;;;;;;;;;;;;;;;;;;;;;14025:49;;;;;;;;;;;;;;;;:103;14021:287;;;14202:11;:19;14214:6;14202:19;;;;;;;;;;;14224:1;14222;:3;14202:24;;;;;;;;;;;;;;;;;;;;;;;;;14228:11;:19;14240:6;14228:19;;;;;;;;;;;14248:1;14228:22;;;;;;;;;;;;;;;;;;;;;;;;;14149:11;:19;14161:6;14149:19;;;;;;;;;;;14169:1;14149:22;;;;;;;;;;;;;;;;14173:11;:19;14185:6;14173:19;;;;;;;;;;;14195:1;14193;:3;14173:24;;;;;;;;;;;;;;;;14148:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14021:287;;;14288:5;;14021:287;14003:3;;;;;;;;13947:371;;;;12704:1620;;;;;:::o;1693:458:4:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;2606:326::-;2664:7;2761:1;2757;:5;2749:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;2803:17;;2924:1;2917:8;;;2606:326;;;;:::o;834:176::-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;1274:179::-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;14330:161:7:-;14398:20;14421:29;:14;;;;;;;;;;;:27;;;:29::i;:::-;14398:52;;14460:4;:13;;:24;14474:9;14460:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14460:24:7;14330:161;;:::o;16650:422::-;16723:9;:16;;;;16715:5;:24;:76;;;;16771:20;;16752:9;:16;;;;:39;16743:5;:48;;16715:76;16711:111;;;16805:7;;16711:111;16837:9;16849:1;16837:13;;16832:234;16856:13;:20;;;;16852:1;:24;16832:234;;;16897:12;16912:13;16926:1;16912:16;;;;;;;;;;;;;;;;;;;;;;;;;16897:31;;16959:33;16978:7;:13;16986:4;16978:13;;;;;;;;;;;;;;;;16959:8;:14;16968:4;16959:14;;;;;;;;;;;;;;;;:18;;:33;;;;:::i;:::-;16942:8;:14;16951:4;16942:14;;;;;;;;;;;;;;;:50;;;;17035:4;17011:44;;17028:4;17011:44;;;17041:7;:13;17049:4;17041:13;;;;;;;;;;;;;;;;17011:44;;;;;;;;;;;;;;;;;;16832:234;16878:3;;;;;;;16832:234;;;;16650:422;;:::o;14497:675::-;14592:6;14588:82;;;14614:17;;;;;;;;;;;:38;;;14653:5;14614:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14614:45:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14614:45:7;;;;14588:82;14679:24;14706:17;;;;;;;;;;;:28;;;14735:5;14706:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14706:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14706:35:7;;;;;;39:16:-1;36:1;17:17;2:54;14706:35:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14706:35:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;14706:35:7;;;;;;14679:62;;14752:13;14768:57;14810:7;:14;14768:37;14801:3;14768:28;14782:13;;14768:9;:13;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;14752:73;;14857:1;14839:7;:14;:19;:32;;;;;14870:1;14862:5;:9;14839:32;14835:109;;;14886:27;14907:5;14886:20;:27::i;:::-;14927:7;;;;14835:109;14959:9;14971:1;14959:13;;14954:212;14978:7;:14;14974:1;:18;14954:212;;;15013:20;15036:25;:7;15044:1;15036:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;15013:48;;15075:4;:13;;:20;15089:5;15075:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15075:20:7;15137:7;15145:1;15137:10;;;;;;;;;;;;;;15114:41;;;15130:5;15149;15114:41;;;;;;;;;;;;;;;;;;;;;;;;14954:212;14994:3;;;;;;;14954:212;;;;14497:675;;;;;;:::o;15178:706::-;15259:13;15275:39;15310:3;15275:30;15289:15;;15275:9;:13;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15259:55;;15357:1;15328:11;:18;15340:5;15328:18;;;;;;;;;;;:25;;;;:30;:43;;;;;15370:1;15362:5;:9;15328:43;15324:120;;;15386:27;15407:5;15386:20;:27::i;:::-;15427:7;;;15324:120;15454:11;15468;:18;15480:5;15468:18;;;;;;;;;;;:25;;;;15454:39;;15503:24;15530:18;;;;;;;;;;;:34;;;15565:3;15530:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15530:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15530:39:7;;;;;;39:16:-1;36:1;17:17;2:54;15530:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15530:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;15530:39:7;;;;;;15503:66;;15584:9;15596:1;15584:13;;15579:299;15603:11;:18;15615:5;15603:18;;;;;;;;;;;:25;;;;15599:1;:29;15579:299;;;15649:20;15672:36;:11;:18;15684:5;15672:18;;;;;;;;;;;15691:1;15672:21;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;:36::i;:::-;15649:59;;15722:14;15739:39;15774:3;15739:30;15765:3;15739:21;15749:7;15757:1;15749:10;;;;;;;;;;;;;;15739:5;:9;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;15722:56;;15792:4;:13;;:21;15806:6;15792:21;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15792:21:7;15854:4;15832:35;;;15847:5;15860:6;15832:35;;;;;;;;;;;;;;;;;;;;;;;;15579:299;;15630:3;;;;;;;15579:299;;;;15178:706;;;;;;:::o;15890:754::-;15970:18;15991:38;16025:3;15991:29;16005:14;;15991:9;:13;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;15970:59;;16039:24;16066:18;;;;;;;;;;;:25;;;16092:5;16066:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16066:32:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16066:32:7;;;;;;39:16:-1;36:1;17:17;2:54;16066:32:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16066:32:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16066:32:7;;;;;;16039:59;;16130:1;16112:7;:14;:19;:37;;;;;16148:1;16135:10;:14;16112:37;16108:119;;;16164:32;16185:10;16164:20;:32::i;:::-;16210:7;;;;16108:119;16237:11;16251:7;:14;16237:28;;16275:24;16302:18;;;;;;;;;;;:34;;;16337:3;16302:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16302:39:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16302:39:7;;;;;;39:16:-1;36:1;17:17;2:54;16302:39:7;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16302:39:7;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;16302:39:7;;;;;;16275:66;;16356:9;16368:1;16356:13;;16351:287;16375:7;:14;16371:1;:18;16351:287;;;16410:13;16426:44;16466:3;16426:35;16457:3;16426:26;16441:7;16449:1;16441:10;;;;;;;;;;;;;;16426;:14;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;16410:60;;16484:20;16507:25;:7;16515:1;16507:10;;;;;;;;;;;;;;:23;;;:25::i;:::-;16484:48;;16546:4;:13;;:20;16560:5;16546:20;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16546:20:7;16609:7;16617:1;16609:10;;;;;;;;;;;;;;16585:42;;;16602:5;16621;16585:42;;;;;;;;;;;;;;;;;;;;;;;;16351:287;;16391:3;;;;;;;16351:287;;;;15890:754;;;;;;;:::o;81:113::-;137:15;185:1;162:26;;81:113;;;:::o

Swarm Source

bzzr://e5035ff13373008b1863bfb433199e29c407914cd84c4b0fbdaa3b093ece0796

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.