ETH Price: $2,735.92 (+4.56%)

Contract

0xde5C85111C10Ee5A1C550101DEC2c34c7C6e8561
 

Overview

ETH Balance

1.201 ETH

Eth Value

$3,285.84 (@ $2,735.92/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit Ether93643722020-01-27 13:51:191843 days ago1580133079IN
0xde5C8511...c7C6e8561
0.5 ETH0.000273766
Make Order93354572020-01-23 3:25:051847 days ago1579749905IN
0xde5C8511...c7C6e8561
0 ETH0.000814165
Make Order91680242019-12-26 23:26:171875 days ago1577402777IN
0xde5C8511...c7C6e8561
0 ETH0.000162831
Make Order91593122019-12-25 5:37:051876 days ago1577252225IN
0xde5C8511...c7C6e8561
0 ETH0.000325682
Cancel Order91592992019-12-25 5:34:201876 days ago1577252060IN
0xde5C8511...c7C6e8561
0 ETH0.000233224
Cancel Order91592962019-12-25 5:33:081876 days ago1577251988IN
0xde5C8511...c7C6e8561
0 ETH0.000279814.8
Make Order91592732019-12-25 5:25:461876 days ago1577251546IN
0xde5C8511...c7C6e8561
0 ETH0.000325662
Make Order91592732019-12-25 5:25:461876 days ago1577251546IN
0xde5C8511...c7C6e8561
0 ETH0.000325662
Deposit Ether91591502019-12-25 4:49:261876 days ago1577249366IN
0xde5C8511...c7C6e8561
0.05 ETH0.000275649
Deposit Ether91591462019-12-25 4:46:471876 days ago1577249207IN
0xde5C8511...c7C6e8561
0.1 ETH0.000082121.8
Deposit Ether81282582019-07-11 6:08:532043 days ago1562825333IN
0xde5C8511...c7C6e8561
0.001 ETH0.000089272
Make Order80009822019-06-21 10:33:322063 days ago1561113212IN
0xde5C8511...c7C6e8561
0 ETH0.000281881.65
Make Order80009762019-06-21 10:32:532063 days ago1561113173IN
0xde5C8511...c7C6e8561
0 ETH0.000256261.5
Make Order80009682019-06-21 10:30:592063 days ago1561113059IN
0xde5C8511...c7C6e8561
0 ETH0.000256351.5
Make Order80009592019-06-21 10:29:442063 days ago1561112984IN
0xde5C8511...c7C6e8561
0 ETH0.000256351.5
Make Order80009462019-06-21 10:25:152063 days ago1561112715IN
0xde5C8511...c7C6e8561
0 ETH0.000341422
Make Order80009432019-06-21 10:24:412063 days ago1561112681IN
0xde5C8511...c7C6e8561
0 ETH0.000341682
Make Order80009342019-06-21 10:22:512063 days ago1561112571IN
0xde5C8511...c7C6e8561
0 ETH0.000666033.9
Make Order80009302019-06-21 10:22:142063 days ago1561112534IN
0xde5C8511...c7C6e8561
0 ETH0.000666033.9
Make Order80009272019-06-21 10:21:212063 days ago1561112481IN
0xde5C8511...c7C6e8561
0 ETH0.000853895
Make Order80009182019-06-21 10:20:022063 days ago1561112402IN
0xde5C8511...c7C6e8561
0 ETH0.000956285.59992
Make Order80009062019-06-21 10:16:582063 days ago1561112218IN
0xde5C8511...c7C6e8561
0 ETH0.0018784411
Make Order80008962019-06-21 10:15:502063 days ago1561112150IN
0xde5C8511...c7C6e8561
0 ETH0.0023601513.81999999
Set Fee Distribu...80000562019-06-21 7:07:092063 days ago1561100829IN
0xde5C8511...c7C6e8561
0 ETH0.0005120310
Make Order79842592019-06-18 19:47:432066 days ago1560887263IN
0xde5C8511...c7C6e8561
0 ETH0.000170711
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Exchange

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-06-17
*/

// JHE 20190617
// File: openzeppelin-solidity\contracts\math\SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on 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);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: src\contracts\Token.sol

pragma solidity ^0.5.0;


contract Token {
    using SafeMath for uint;

    // Variables
    string public name = "Yasuda Takahashi coin";
    string public symbol = "YATA";
    uint256 public decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor() public {
        // totalSupply = 1000000000000 * (10 ** decimals);  // REAL
        totalSupply = 1000000 * (10 ** decimals);
        balanceOf[msg.sender] = totalSupply;
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        require(balanceOf[msg.sender] >= _value);
        _transfer(msg.sender, _to, _value);
        return true;
    }

    function _transfer(address _from, address _to, uint256 _value) internal {
        require(_to != address(0));
        balanceOf[_from] = balanceOf[_from].sub(_value);
        balanceOf[_to] = balanceOf[_to].add(_value);
        emit Transfer(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        require(_spender != address(0));
        allowance[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value <= balanceOf[_from]);
        require(_value <= allowance[_from][msg.sender]);
        allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value);
        _transfer(_from, _to, _value);
        return true;
    }
}

// File: src\contracts\Exchange.sol

pragma solidity ^0.5.0;



contract Exchange {
    using SafeMath for uint;

    // Variables
    address constant ETHER = address(0); // store Ether in tokens mapping with blank address
    mapping(address => mapping(address => uint256)) public tokens; // balance of user's token
    mapping(uint256 => _Order) public orders;
    uint256 public orderCount;
    mapping(uint256 => bool) public orderCancelled;
    mapping(uint256 => bool) public orderFilled;

    address public owner; // the account that receives exchange fees
    address internal ercToken;
    mapping(address => _Fee[]) public feeDistributions;   // tokenAddr=>[_Fee]
    _Fee[] public feeDetails;


    // Events
    event Deposit(address token, address user, uint256 amount, uint256 balance);
    event Withdraw(address token, address user, uint256 amount, uint256 balance);
    event Order(
        uint256 id,
        address user,
        address ercToken,
        address tokenGet,
        uint256 amountGet,
        address tokenGive,
        uint256 amountGive,
        uint256 timestamp
    );
    event Cancel(
        uint256 id,
        address user,
        address ercToken,
        address tokenGet,
        uint256 amountGet,
        address tokenGive,
        uint256 amountGive,
        uint256 timestamp
    );
    event Trade(
        uint256 id,
        address user,
        address ercToken,
        address tokenGet,
        uint256 amountGet,
        address tokenGive,
        uint256 amountGive,
        address userFill,
        uint256 timestamp
    );

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    // Structs
    struct _Order {
        uint256 id;
        address user;
        address tokenGet;
        uint256 amountGet;
        address tokenGive;
        uint256 amountGive;
        uint256 timestamp;
    }

    struct _Fee {
        uint256 id;
        string name;
        address wallet;
        uint256 percent;
        bool active;
    }

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

    // Fallback: reverts if Ether is sent to this smart contract by mistake
    function() external {
        revert();
    }

    // Modifier
    modifier onlyOwner() {
        require(msg.sender == owner, "owner only");
        _;
    }

    function depositEther() payable public {
        tokens[ETHER][msg.sender] = tokens[ETHER][msg.sender].add(msg.value);
        emit Deposit(ETHER, msg.sender, msg.value, tokens[ETHER][msg.sender]);
    }

    function withdrawEther(uint _amount) public {
        require(tokens[ETHER][msg.sender] >= _amount);
        tokens[ETHER][msg.sender] = tokens[ETHER][msg.sender].sub(_amount);
        msg.sender.transfer(_amount);
        emit Withdraw(ETHER, msg.sender, _amount, tokens[ETHER][msg.sender]);
    }

    function depositToken(address _token, uint _amount) public {
        require(_token != ETHER);
        require(Token(_token).transferFrom(msg.sender, address(this), _amount));
        tokens[_token][msg.sender] = tokens[_token][msg.sender].add(_amount);
        emit Deposit(_token, msg.sender, _amount, tokens[_token][msg.sender]);
    }

    function withdrawToken(address _token, uint256 _amount) public {
        require(_token != ETHER);
        require(tokens[_token][msg.sender] >= _amount);
        tokens[_token][msg.sender] = tokens[_token][msg.sender].sub(_amount);
        require(Token(_token).transfer(msg.sender, _amount));
        emit Withdraw(_token, msg.sender, _amount, tokens[_token][msg.sender]);
    }

    function balanceOf(address _token, address _user) public view returns (uint256) {
        return tokens[_token][_user];
    }

    function makeOrder(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive) public {
        orderCount = orderCount.add(1);
        orders[orderCount] = _Order(orderCount, msg.sender, _tokenGet, _amountGet, _tokenGive, _amountGive, now);

        ercToken = _getErcTokenAddress(_tokenGet, _tokenGive);

        emit Order(orderCount, msg.sender, ercToken, _tokenGet, _amountGet, _tokenGive, _amountGive, now);
    }

    function cancelOrder(uint256 _id) public {
        _Order storage _order = orders[_id];
        require(address(_order.user) == msg.sender);
        require(_order.id == _id); // The order must exist
        orderCancelled[_id] = true;

        ercToken = _getErcTokenAddress(_order.tokenGet, _order.tokenGive);

        emit Cancel(_order.id, msg.sender, ercToken, _order.tokenGet, _order.amountGet, _order.tokenGive, _order.amountGive, now);
    }

    function fillOrder(uint256 _id) public {
        require(_id > 0 && _id <= orderCount);
        require(!orderFilled[_id]);
        require(!orderCancelled[_id]);
        _Order storage _order = orders[_id];
        _trade(_order.id, _order.user, _order.tokenGet, _order.amountGet, _order.tokenGive, _order.amountGive);
        orderFilled[_order.id] = true;
    }

    function _trade(uint256 _orderId, address _user, address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive) internal {
        ercToken = _getErcTokenAddress(_tokenGet, _tokenGive);
        uint totalFeePercent = getTotalFeePercent (ercToken);

        uint256 _feeAmount = _amountGet.mul(totalFeePercent).div(100000);  // FEE: 100000 = 100%

        tokens[_tokenGet][msg.sender] = tokens[_tokenGet][msg.sender].sub(_amountGet.add(_feeAmount));
        tokens[_tokenGet][_user] = tokens[_tokenGet][_user].add(_amountGet);
        tokens[_tokenGive][_user] = tokens[_tokenGive][_user].sub(_amountGive);
        tokens[_tokenGive][msg.sender] = tokens[_tokenGive][msg.sender].add(_amountGive);       

        // distribute fees
        uint256 feesCount = getFeeDistributionsCount(ercToken);
        _Fee[] storage fees = feeDistributions[ercToken];

        for (uint i = 0; i < feesCount; i++){
            if (fees[i].active){
                uint feeValue = _amountGet.mul(fees[i].percent).div(100000);  // FEE: 100000 = 100%
                tokens[_tokenGet][fees[i].wallet] = tokens[_tokenGet][fees[i].wallet].add(feeValue);
            }
        }


        emit Trade(_orderId, _user, ercToken, _tokenGet, _amountGet, _tokenGive, _amountGive, msg.sender, now);
    }

    // Transfer
    function transferOwnership(address _newOwner) public onlyOwner {
        _transferOwnership(_newOwner);
    }
    function _transferOwnership(address _newOwner) internal {
        require(_newOwner != address(0), "address not valid");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }


    function _getErcTokenAddress(address tokenGet, address tokenGive) internal returns (address){
        if (tokenGet == ETHER){
            ercToken = tokenGive;
        } else {
            ercToken = tokenGet;
        }
        return ercToken;
    }

    function getFeeDistributionsCount(address _token) public view returns(uint) {
        _Fee[] storage fees = feeDistributions[_token];
        return fees.length;
    }

    function getTotalFeePercent (address _ercToken) public view returns (uint){
        require(_ercToken != address(0), "address not valid");
        uint256 totalFeePercent = 0;
        uint256 feesCount = getFeeDistributionsCount(_ercToken);
        _Fee[] storage fees = feeDistributions[_ercToken];

        for (uint i = 0; i < feesCount; i++){
            if (fees[i].active){
                totalFeePercent = totalFeePercent.add(fees[i].percent);
            }
        }

        return totalFeePercent;
    }

    /*
    *       FEE: 
    *              1 = 0.001%
    *           1000 = 1%
    *         100000 = 100%
    */
    function setFeeDistributions(address _token, address _feeWallet, string memory _name, uint256 _percent) public  onlyOwner {
        require(_token != address(0), "address not valid");
        require(_feeWallet != address(0), "address not valid");

        _Fee[] storage fees = feeDistributions[_token];
        // uint256 feesCount = fees.length;
        uint256 feesCount = getFeeDistributionsCount(_token);

        bool feeExiste = false;

        uint totalFeePercent = getTotalFeePercent (_token);
        totalFeePercent = totalFeePercent.add(_percent);
        require(totalFeePercent <= 100000, "total fee cannot exceed 100");

        for (uint i = 0; i < feesCount; i++){
            if (fees[i].wallet == _feeWallet){
                fees[i].name    = _name;
                fees[i].percent = _percent;
                fees[i].active  = true;

                feeExiste = true;
                break;
            }
        }

        // fee not found => add as new fee
        if (!feeExiste){
            _Fee memory fee;

            fee.id = (feesCount + 1);
            fee.name = _name;
            fee.wallet = _feeWallet;
            fee.percent = _percent;
            fee.active = true;

            fees.push(fee);
        }
    }

    function deActivateFeeWallet(address _token, address _feeWallet) public onlyOwner {
        require(_token != address(0), "address not valid");
        require(_feeWallet != address(0), "address not valid");

        _Fee[] storage fees = feeDistributions[_token];
        uint256 feesCount = getFeeDistributionsCount(_token);
        for (uint i = 0; i < feesCount; i++){
            if (fees[i].wallet == _feeWallet){
                fees[i].active = false;
                break;
            }
        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_feeWallet","type":"address"},{"name":"_name","type":"string"},{"name":"_percent","type":"uint256"}],"name":"setFeeDistributions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_feeWallet","type":"address"}],"name":"deActivateFeeWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"feeDetails","outputs":[{"name":"id","type":"uint256"},{"name":"name","type":"string"},{"name":"wallet","type":"address"},{"name":"percent","type":"uint256"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"orderCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"orderFilled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"fillOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_ercToken","type":"address"}],"name":"getTotalFeePercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenGet","type":"address"},{"name":"_amountGet","type":"uint256"},{"name":"_tokenGive","type":"address"},{"name":"_amountGive","type":"uint256"}],"name":"makeOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"orders","outputs":[{"name":"id","type":"uint256"},{"name":"user","type":"address"},{"name":"tokenGet","type":"address"},{"name":"amountGet","type":"uint256"},{"name":"tokenGive","type":"address"},{"name":"amountGive","type":"uint256"},{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"getFeeDistributionsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"orderCancelled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"feeDistributions","outputs":[{"name":"id","type":"uint256"},{"name":"name","type":"string"},{"name":"wallet","type":"address"},{"name":"percent","type":"uint256"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"ercToken","type":"address"},{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"ercToken","type":"address"},{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"ercToken","type":"address"},{"indexed":false,"name":"tokenGet","type":"address"},{"indexed":false,"name":"amountGet","type":"uint256"},{"indexed":false,"name":"tokenGive","type":"address"},{"indexed":false,"name":"amountGive","type":"uint256"},{"indexed":false,"name":"userFill","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b5033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613bfb806100616000396000f3fe60806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e8161ee1461012f5780630f36d0a114610241578063134a6bb2146102b25780632453ffa8146103b2578063338b5dea146103dd5780633bed33ce146104385780634a93e0da14610473578063508493bc146104c6578063514fcac71461054b57806367b830ad146105865780636ebfaee2146105c15780638da5cb5b1461062657806398ea5fca1461067d5780639a5c90aa146106875780639e281a981461070c578063a85c38ef14610767578063aa6d95b614610864578063e9c18966146108c9578063f2fde38b1461091c578063f529bdcc1461096d578063f7888aec14610a8d575b34801561012957600080fd5b50600080fd5b34801561013b57600080fd5b5061023f6004803603608081101561015257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460018302840111640100000000831117156101e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610b12565b005b34801561024d57600080fd5b506102b06004803603604081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611087565b005b3480156102be57600080fd5b506102eb600480360360208110156102d557600080fd5b81019080803590602001909291905050506113b8565b60405180868152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825286818151815260200191508051906020019080838360005b83811015610373578082015181840152602081019050610358565b50505050905090810190601f1680156103a05780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156103be57600080fd5b506103c76114c2565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506104366004803603604081101561040057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c8565b005b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b8101908080359060200190929190505050611854565b005b34801561047f57600080fd5b506104ac6004803603602081101561049657600080fd5b8101908080359060200190929190505050611b58565b604051808215151515815260200191505060405180910390f35b3480156104d257600080fd5b50610535600480360360408110156104e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b78565b6040518082815260200191505060405180910390f35b34801561055757600080fd5b506105846004803603602081101561056e57600080fd5b8101908080359060200190929190505050611b9d565b005b34801561059257600080fd5b506105bf600480360360208110156105a957600080fd5b8101908080359060200190929190505050611e7b565b005b3480156105cd57600080fd5b50610610600480360360208110156105e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc3565b6040518082815260200191505060405180910390f35b34801561063257600080fd5b5061063b61214c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610685612172565b005b34801561069357600080fd5b5061070a600480360360808110156106aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a4565b005b34801561071857600080fd5b506107656004803603604081101561072f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126e0565b005b34801561077357600080fd5b506107a06004803603602081101561078a57600080fd5b8101908080359060200190929190505050612ac2565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200197505050505050505060405180910390f35b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b64565b6040518082815260200191505060405180910390f35b3480156108d557600080fd5b50610902600480360360208110156108ec57600080fd5b8101908080359060200190929190505050612bb5565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061096b6004803603602081101561093f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd5565b005b34801561097957600080fd5b506109c66004803603604081101561099057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ca6565b60405180868152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825286818151815260200191508051906020019080838360005b83811015610a4e578082015181840152602081019050610a33565b50505050905090810190601f168015610a7b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b348015610a9957600080fd5b50610afc60048036036040811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dbd565b6040518082815260200191505060405180910390f35b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610c7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610d6f86612b64565b905060008090506000610d8188611fc3565b9050610d968582612e4390919063ffffffff16565b9050620186a08111151515610e13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f74616c206665652063616e6e6f742065786365656420313030000000000081525060200191505060405180910390fd5b60008090505b83811015610f3a578773ffffffffffffffffffffffffffffffffffffffff168582815481101515610e4657fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2d57868582815481101515610ea357fe5b90600052602060002090600502016001019080519060200190610ec7929190613a62565b50858582815481101515610ed757fe5b90600052602060002090600502016003018190555060018582815481101515610efc57fe5b906000526020600020906005020160040160006101000a81548160ff02191690831515021790555060019250610f3a565b8080600101915050610e19565b5081151561107d57610f4a613ae2565b6001840181600001818152505086816020018190525087816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858160600181815250506001816080019015159081151581525050848190806001815401808255809150509060018203906000526020600020906005020160009091929091909150600082015181600001556020820151816001019080519060200190611006929190613b2a565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548160ff021916908315150217905550505050505b5050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006112e484612b64565b905060008090505b818110156113b1578373ffffffffffffffffffffffffffffffffffffffff16838281548110151561131957fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113a4576000838281548110151561137757fe5b906000526020600020906005020160040160006101000a81548160ff0219169083151502179055506113b1565b80806001019150506112ec565b5050505050565b6008818154811015156113c757fe5b9060005260206000209060050201600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114795780601f1061144e57610100808354040283529160200191611479565b820191906000526020600020905b81548152906001019060200180831161145c57829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff16905085565b60025481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561150457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b505050506040513d602081101561160557600080fd5b8101908080519060200190929190505050151561162157600080fd5b6116af816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78233836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050565b806000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156118de57600080fd5b61196c816000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a31573d6000803e3d6000fd5b507ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567600033836000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a150565b60046020528060005260406000206000915054906101000a900460ff1681565b6000602052816000526040600020602052806000526040600020600091509150505481565b60006001600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c1257600080fd5b818160000154141515611c2457600080fd5b60016003600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611ca28160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe5da03d77aead36fe1bb373dfb6f8347cb3e4cd38b9ca6438df05c33c54f16a3816000015433600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600301548660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876005015442604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019850505050505050505060405180910390a15050565b600081118015611e8d57506002548111155b1515611e9857600080fd5b6004600082815260200190815260200160002060009054906101000a900460ff16151515611ec557600080fd5b6003600082815260200190815260200160002060009054906101000a900460ff16151515611ef257600080fd5b6000600160008381526020019081526020016000209050611f8f81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301548560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660050154612f6f565b6001600460008360000154815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000809050600061207984612b64565b90506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b828110156121405781818154811015156120da57fe5b906000526020600020906005020160040160009054906101000a900460ff161561213357612130828281548110151561210f57fe5b90600052602060002090600502016003015485612e4390919063ffffffff16565b93505b80806001019150506120c4565b50829350505050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612200346000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7600033346000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a1565b6123ba6001600254612e4390919063ffffffff16565b60028190555060e06040519081016040528060025481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001428152506001600060025481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c082015181600601559050506125578483612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb739eeabbe5a297a30a4b6e06a17c82304e8d0214abb17bacc8209cc1ce18bd60025433600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787878742604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019850505050505050505060405180910390a150505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561271c57600080fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156127a657600080fd5b612834816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b505050506040513d602081101561298057600080fd5b8101908080519060200190929190505050151561299c57600080fd5b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5678233836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154908060060154905087565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508080549050915050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612ca381613895565b50565b600760205281600052604060002081815481101515612cc157fe5b906000526020600020906005020160009150915050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612d745780601f10612d4957610100808354040283529160200191612d74565b820191906000526020600020905b815481529060010190602001808311612d5757829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff16905085565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808284019050838110151515612e5a57600080fd5b8091505092915050565b6000828211151515612e7557600080fd5b600082840390508091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f025781600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f44565b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b612f798483612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000612fe6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611fc3565b90506000613012620186a061300484886139fa90919063ffffffff16565b613a3890919063ffffffff16565b90506130b461302a8287612e4390919063ffffffff16565b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131c1856000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132ce836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133db836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000613487600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612b64565b9050600060076000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8281101561371357818181548110151561350a57fe5b906000526020600020906005020160040160009054906101000a900460ff1615613706576000613577620186a0613569858581548110151561354857fe5b9060005260206000209060050201600301548c6139fa90919063ffffffff16565b613a3890919063ffffffff16565b9050613646816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086868154811015156135cb57fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858581548110151561369457fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b80806001019150506134f4565b507f3d3981f9232b7e7600945de92bf4f8f6399d437c04f9e6a755552b3280e370278a8a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b8b8b8b3342604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001995050505050505050505060405180910390a150505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415613a0d5760009050613a32565b60008284029050828482811515613a2057fe5b04141515613a2d57600080fd5b809150505b92915050565b60008082111515613a4857600080fd5b60008284811515613a5557fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa357805160ff1916838001178555613ad1565b82800160010185558215613ad1579182015b82811115613ad0578251825591602001919060010190613ab5565b5b509050613ade9190613baa565b5090565b60a0604051908101604052806000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b6b57805160ff1916838001178555613b99565b82800160010185558215613b99579182015b82811115613b98578251825591602001919060010190613b7d565b5b509050613ba69190613baa565b5090565b613bcc91905b80821115613bc8576000816000905550600101613bb0565b5090565b9056fea165627a7a7230582077f531691e31af8093edebf7d669171a409cedf18dfa327573391c857265371f0029

Deployed Bytecode

0x60806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e8161ee1461012f5780630f36d0a114610241578063134a6bb2146102b25780632453ffa8146103b2578063338b5dea146103dd5780633bed33ce146104385780634a93e0da14610473578063508493bc146104c6578063514fcac71461054b57806367b830ad146105865780636ebfaee2146105c15780638da5cb5b1461062657806398ea5fca1461067d5780639a5c90aa146106875780639e281a981461070c578063a85c38ef14610767578063aa6d95b614610864578063e9c18966146108c9578063f2fde38b1461091c578063f529bdcc1461096d578063f7888aec14610a8d575b34801561012957600080fd5b50600080fd5b34801561013b57600080fd5b5061023f6004803603608081101561015257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101af57600080fd5b8201836020820111156101c157600080fd5b803590602001918460018302840111640100000000831117156101e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610b12565b005b34801561024d57600080fd5b506102b06004803603604081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611087565b005b3480156102be57600080fd5b506102eb600480360360208110156102d557600080fd5b81019080803590602001909291905050506113b8565b60405180868152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825286818151815260200191508051906020019080838360005b83811015610373578082015181840152602081019050610358565b50505050905090810190601f1680156103a05780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156103be57600080fd5b506103c76114c2565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506104366004803603604081101561040057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114c8565b005b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b8101908080359060200190929190505050611854565b005b34801561047f57600080fd5b506104ac6004803603602081101561049657600080fd5b8101908080359060200190929190505050611b58565b604051808215151515815260200191505060405180910390f35b3480156104d257600080fd5b50610535600480360360408110156104e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b78565b6040518082815260200191505060405180910390f35b34801561055757600080fd5b506105846004803603602081101561056e57600080fd5b8101908080359060200190929190505050611b9d565b005b34801561059257600080fd5b506105bf600480360360208110156105a957600080fd5b8101908080359060200190929190505050611e7b565b005b3480156105cd57600080fd5b50610610600480360360208110156105e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc3565b6040518082815260200191505060405180910390f35b34801561063257600080fd5b5061063b61214c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610685612172565b005b34801561069357600080fd5b5061070a600480360360808110156106aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a4565b005b34801561071857600080fd5b506107656004803603604081101561072f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126e0565b005b34801561077357600080fd5b506107a06004803603602081101561078a57600080fd5b8101908080359060200190929190505050612ac2565b604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200197505050505050505060405180910390f35b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b64565b6040518082815260200191505060405180910390f35b3480156108d557600080fd5b50610902600480360360208110156108ec57600080fd5b8101908080359060200190929190505050612bb5565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061096b6004803603602081101561093f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd5565b005b34801561097957600080fd5b506109c66004803603604081101561099057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ca6565b60405180868152602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828103825286818151815260200191508051906020019080838360005b83811015610a4e578082015181840152602081019050610a33565b50505050905090810190601f168015610a7b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b348015610a9957600080fd5b50610afc60048036036040811015610ab057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dbd565b6040518082815260200191505060405180910390f35b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610c7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610d6f86612b64565b905060008090506000610d8188611fc3565b9050610d968582612e4390919063ffffffff16565b9050620186a08111151515610e13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f74616c206665652063616e6e6f742065786365656420313030000000000081525060200191505060405180910390fd5b60008090505b83811015610f3a578773ffffffffffffffffffffffffffffffffffffffff168582815481101515610e4657fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2d57868582815481101515610ea357fe5b90600052602060002090600502016001019080519060200190610ec7929190613a62565b50858582815481101515610ed757fe5b90600052602060002090600502016003018190555060018582815481101515610efc57fe5b906000526020600020906005020160040160006101000a81548160ff02191690831515021790555060019250610f3a565b8080600101915050610e19565b5081151561107d57610f4a613ae2565b6001840181600001818152505086816020018190525087816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858160600181815250506001816080019015159081151581525050848190806001815401808255809150509060018203906000526020600020906005020160009091929091909150600082015181600001556020820151816001019080519060200190611006929190613b2a565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548160ff021916908315150217905550505050505b5050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006112e484612b64565b905060008090505b818110156113b1578373ffffffffffffffffffffffffffffffffffffffff16838281548110151561131957fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113a4576000838281548110151561137757fe5b906000526020600020906005020160040160006101000a81548160ff0219169083151502179055506113b1565b80806001019150506112ec565b5050505050565b6008818154811015156113c757fe5b9060005260206000209060050201600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114795780601f1061144e57610100808354040283529160200191611479565b820191906000526020600020905b81548152906001019060200180831161145c57829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff16905085565b60025481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561150457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156115db57600080fd5b505af11580156115ef573d6000803e3d6000fd5b505050506040513d602081101561160557600080fd5b8101908080519060200190929190505050151561162157600080fd5b6116af816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78233836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050565b806000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156118de57600080fd5b61196c816000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a31573d6000803e3d6000fd5b507ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567600033836000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a150565b60046020528060005260406000206000915054906101000a900460ff1681565b6000602052816000526040600020602052806000526040600020600091509150505481565b60006001600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c1257600080fd5b818160000154141515611c2457600080fd5b60016003600084815260200190815260200160002060006101000a81548160ff021916908315150217905550611ca28160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe5da03d77aead36fe1bb373dfb6f8347cb3e4cd38b9ca6438df05c33c54f16a3816000015433600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600301548660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876005015442604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019850505050505050505060405180910390a15050565b600081118015611e8d57506002548111155b1515611e9857600080fd5b6004600082815260200190815260200160002060009054906101000a900460ff16151515611ec557600080fd5b6003600082815260200190815260200160002060009054906101000a900460ff16151515611ef257600080fd5b6000600160008381526020019081526020016000209050611f8f81600001548260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301548560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660050154612f6f565b6001600460008360000154815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b6000809050600061207984612b64565b90506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b828110156121405781818154811015156120da57fe5b906000526020600020906005020160040160009054906101000a900460ff161561213357612130828281548110151561210f57fe5b90600052602060002090600502016003015485612e4390919063ffffffff16565b93505b80806001019150506120c4565b50829350505050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612200346000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7600033346000808073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a1565b6123ba6001600254612e4390919063ffffffff16565b60028190555060e06040519081016040528060025481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001428152506001600060025481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c082015181600601559050506125578483612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb739eeabbe5a297a30a4b6e06a17c82304e8d0214abb17bacc8209cc1ce18bd60025433600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787878742604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019850505050505050505060405180910390a150505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561271c57600080fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156127a657600080fd5b612834816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b505050506040513d602081101561298057600080fd5b8101908080519060200190929190505050151561299c57600080fd5b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5678233836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154908060060154905087565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508080549050915050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f776e6572206f6e6c790000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612ca381613895565b50565b600760205281600052604060002081815481101515612cc157fe5b906000526020600020906005020160009150915050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612d745780601f10612d4957610100808354040283529160200191612d74565b820191906000526020600020905b815481529060010190602001808311612d5757829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900460ff16905085565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808284019050838110151515612e5a57600080fd5b8091505092915050565b6000828211151515612e7557600080fd5b600082840390508091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f025781600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f44565b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b612f798483612e86565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000612fe6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611fc3565b90506000613012620186a061300484886139fa90919063ffffffff16565b613a3890919063ffffffff16565b90506130b461302a8287612e4390919063ffffffff16565b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131c1856000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132ce836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6490919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133db836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000613487600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612b64565b9050600060076000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b8281101561371357818181548110151561350a57fe5b906000526020600020906005020160040160009054906101000a900460ff1615613706576000613577620186a0613569858581548110151561354857fe5b9060005260206000209060050201600301548c6139fa90919063ffffffff16565b613a3890919063ffffffff16565b9050613646816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086868154811015156135cb57fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4390919063ffffffff16565b6000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858581548110151561369457fe5b906000526020600020906005020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b80806001019150506134f4565b507f3d3981f9232b7e7600945de92bf4f8f6399d437c04f9e6a755552b3280e370278a8a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b8b8b8b3342604051808a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001995050505050505050505060405180910390a150505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561393a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f61646472657373206e6f742076616c696400000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415613a0d5760009050613a32565b60008284029050828482811515613a2057fe5b04141515613a2d57600080fd5b809150505b92915050565b60008082111515613a4857600080fd5b60008284811515613a5557fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa357805160ff1916838001178555613ad1565b82800160010185558215613ad1579182015b82811115613ad0578251825591602001919060010190613ab5565b5b509050613ade9190613baa565b5090565b60a0604051908101604052806000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b6b57805160ff1916838001178555613b99565b82800160010185558215613b99579182015b82811115613b98578251825591602001919060010190613b7d565b5b509050613ba69190613baa565b5090565b613bcc91905b80821115613bc8576000816000905550600101613bb0565b5090565b9056fea165627a7a7230582077f531691e31af8093edebf7d669171a409cedf18dfa327573391c857265371f0029

Deployed Bytecode Sourcemap

3983:9708:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3983:9708:0;6236:8;;;11864:1290;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11864:1290:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11864:1290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11864:1290:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11864:1290:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11864:1290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11864:1290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13162:524;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13162:524:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13162:524:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4613:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4613:24:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4613:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;4613:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4294:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4294:25:0;;;;;;;;;;;;;;;;;;;;;;;6904:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6904:343:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6904:343:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6593:303;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6593:303:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6593:303:0;;;;;;;;;;;;;;;;;;;;4379:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4379:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4379:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4152:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4152:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4152:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8238:458;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8238:458:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8238:458:0;;;;;;;;;;;;;;;;;;;;8704:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8704:371:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8704:371:0;;;;;;;;;;;;;;;;;;;;11207:527;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11207:527:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11207:527:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4431:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4431:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6379:206;;;;;;7784:446;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7784:446:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7784:446:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:386;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7255:386:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7255:386:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4247:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4247:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4247:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11029:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11029:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11029:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4326:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4326:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4326:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10427:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10427:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10427:111:0;;;;;;;;;;;;;;;;;;;;;;4533:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4533:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4533:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;4533:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7649:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7649:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7649:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11864:1290;6331:5;;;;;;;;;;;6317:19;;:10;:19;;;6309:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12023:1;12005:20;;:6;:20;;;;11997:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12088:1;12066:24;;:10;:24;;;;12058:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12125:19;12147:16;:24;12164:6;12147:24;;;;;;;;;;;;;;;12125:46;;12227:17;12247:32;12272:6;12247:24;:32::i;:::-;12227:52;;12292:14;12309:5;12292:22;;12327:20;12350:27;12370:6;12350:18;:27::i;:::-;12327:50;;12406:29;12426:8;12406:15;:19;;:29;;;;:::i;:::-;12388:47;;12473:6;12454:15;:25;;12446:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12529:6;12538:1;12529:10;;12524:300;12545:9;12541:1;:13;12524:300;;;12597:10;12579:28;;:4;12584:1;12579:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;:28;;;12575:238;;;12645:5;12627:4;12632:1;12627:7;;;;;;;;;;;;;;;;;;;;:12;;:23;;;;;;;;;;;;:::i;:::-;;12687:8;12669:4;12674:1;12669:7;;;;;;;;;;;;;;;;;;;;:15;;:26;;;;12732:4;12714;12719:1;12714:7;;;;;;;;;;;;;;;;;;;;:14;;;:22;;;;;;;;;;;;;;;;;;12769:4;12757:16;;12792:5;;12575:238;12556:3;;;;;;;12524:300;;;;12885:9;12884:10;12880:267;;;12910:15;;:::i;:::-;12964:1;12952:9;:13;12942:3;:6;;:24;;;;;12992:5;12981:3;:8;;:16;;;;13025:10;13012:3;:10;;:23;;;;;;;;;;;13064:8;13050:3;:11;;:22;;;;;13100:4;13087:3;:10;;:17;;;;;;;;;;;13121:4;13131:3;13121:14;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13121:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12880:267;;6362:1;;;;11864:1290;;;;:::o;13162:524::-;6331:5;;;;;;;;;;;6317:19;;:10;:19;;;6309:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13281:1;13263:20;;:6;:20;;;;13255:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13346:1;13324:24;;:10;:24;;;;13316:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13383:19;13405:16;:24;13422:6;13405:24;;;;;;;;;;;;;;;13383:46;;13440:17;13460:32;13485:6;13460:24;:32::i;:::-;13440:52;;13508:6;13517:1;13508:10;;13503:176;13524:9;13520:1;:13;13503:176;;;13576:10;13558:28;;:4;13563:1;13558:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;:28;;;13554:114;;;13623:5;13606:4;13611:1;13606:7;;;;;;;;;;;;;;;;;;;;:14;;;:22;;;;;;;;;;;;;;;;;;13647:5;;13554:114;13535:3;;;;;;;13503:176;;;;6362:1;;13162:524;;:::o;4613:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4294:25::-;;;;:::o;6904:343::-;4091:1;6982:15;;:6;:15;;;;6974:24;;;;;;;;7023:6;7017:26;;;7044:10;7064:4;7071:7;7017:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7017:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7017:62:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7017:62:0;;;;;;;;;;;;;;;;7009:71;;;;;;;;7120:39;7151:7;7120:6;:14;7127:6;7120:14;;;;;;;;;;;;;;;:26;7135:10;7120:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;7091:6;:14;7098:6;7091:14;;;;;;;;;;;;;;;:26;7106:10;7091:26;;;;;;;;;;;;;;;:68;;;;7175:64;7183:6;7191:10;7203:7;7212:6;:14;7219:6;7212:14;;;;;;;;;;;;;;;:26;7227:10;7212:26;;;;;;;;;;;;;;;;7175:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6904:343;;:::o;6593:303::-;6685:7;6656:6;:13;4091:1;6656:13;;;;;;;;;;;;;;;:25;6670:10;6656:25;;;;;;;;;;;;;;;;:36;;6648:45;;;;;;;;6732:38;6762:7;6732:6;:13;4091:1;6732:13;;;;;;;;;;;;;;;:25;6746:10;6732:25;;;;;;;;;;;;;;;;:29;;:38;;;;:::i;:::-;6704:6;:13;4091:1;6704:13;;;;;;;;;;;;;;;:25;6718:10;6704:25;;;;;;;;;;;;;;;:66;;;;6781:10;:19;;:28;6801:7;6781:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6781:28:0;6825:63;4091:1;6841:10;6853:7;6862:6;:13;4091:1;6862:13;;;;;;;;;;;;;;;:25;6876:10;6862:25;;;;;;;;;;;;;;;;6825:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6593:303;:::o;4379:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;4152:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8238:458::-;8290:21;8314:6;:11;8321:3;8314:11;;;;;;;;;;;8290:35;;8368:10;8344:34;;8352:6;:11;;;;;;;;;;;;8344:34;;;8336:43;;;;;;;;8411:3;8398:6;:9;;;:16;8390:25;;;;;;;;8472:4;8450:14;:19;8465:3;8450:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;8500:54;8520:6;:15;;;;;;;;;;;;8537:6;:16;;;;;;;;;;;;8500:19;:54::i;:::-;8489:8;;:65;;;;;;;;;;;;;;;;;;8572:116;8579:6;:9;;;8590:10;8602:8;;;;;;;;;;;8612:6;:15;;;;;;;;;;;;8629:6;:16;;;8647:6;:16;;;;;;;;;;;;8665:6;:17;;;8684:3;8572:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8238:458;;:::o;8704:371::-;8768:1;8762:3;:7;:28;;;;;8780:10;;8773:3;:17;;8762:28;8754:37;;;;;;;;8811:11;:16;8823:3;8811:16;;;;;;;;;;;;;;;;;;;;;8810:17;8802:26;;;;;;;;8848:14;:19;8863:3;8848:19;;;;;;;;;;;;;;;;;;;;;8847:20;8839:29;;;;;;;;8879:21;8903:6;:11;8910:3;8903:11;;;;;;;;;;;8879:35;;8925:102;8932:6;:9;;;8943:6;:11;;;;;;;;;;;;8956:6;:15;;;;;;;;;;;;8973:6;:16;;;8991:6;:16;;;;;;;;;;;;9009:6;:17;;;8925:6;:102::i;:::-;9063:4;9038:11;:22;9050:6;:9;;;9038:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8704:371;;:::o;11207:527::-;11276:4;11321:1;11300:23;;:9;:23;;;;11292:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11356:23;11382:1;11356:27;;11394:17;11414:35;11439:9;11414:24;:35::i;:::-;11394:55;;11460:19;11482:16;:27;11499:9;11482:27;;;;;;;;;;;;;;;11460:49;;11527:6;11536:1;11527:10;;11522:170;11543:9;11539:1;:13;11522:170;;;11577:4;11582:1;11577:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;11573:108;;;11629:36;11649:4;11654:1;11649:7;;;;;;;;;;;;;;;;;;;;:15;;;11629;:19;;:36;;;;:::i;:::-;11611:54;;11573:108;11554:3;;;;;;;11522:170;;;;11711:15;11704:22;;;;;11207:527;;;:::o;4431:20::-;;;;;;;;;;;;;:::o;6379:206::-;6457:40;6487:9;6457:6;:13;4091:1;6457:13;;;;;;;;;;;;;;;:25;6471:10;6457:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;6429:6;:13;4091:1;6429:13;;;;;;;;;;;;;;;:25;6443:10;6429:25;;;;;;;;;;;;;;;:68;;;;6513:64;4091:1;6528:10;6540:9;6551:6;:13;4091:1;6551:13;;;;;;;;;;;;;;;:25;6565:10;6551:25;;;;;;;;;;;;;;;;6513:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6379:206::o;7784:446::-;7914:17;7929:1;7914:10;;:14;;:17;;;;:::i;:::-;7901:10;:30;;;;7963:83;;;;;;;;;7970:10;;7963:83;;;;7982:10;7963:83;;;;;;7994:9;7963:83;;;;;;8005:10;7963:83;;;;8017:10;7963:83;;;;;;8029:11;7963:83;;;;8042:3;7963:83;;;7942:6;:18;7949:10;;7942:18;;;;;;;;;;;:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8070:42;8090:9;8101:10;8070:19;:42::i;:::-;8059:8;;:53;;;;;;;;;;;;;;;;;;8130:92;8136:10;;8148;8160:8;;;;;;;;;;;8170:9;8181:10;8193;8205:11;8218:3;8130:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7784:446;;;;:::o;7255:386::-;4091:1;7337:15;;:6;:15;;;;7329:24;;;;;;;;7402:7;7372:6;:14;7379:6;7372:14;;;;;;;;;;;;;;;:26;7387:10;7372:26;;;;;;;;;;;;;;;;:37;;7364:46;;;;;;;;7450:39;7481:7;7450:6;:14;7457:6;7450:14;;;;;;;;;;;;;;;:26;7465:10;7450:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;7421:6;:14;7428:6;7421:14;;;;;;;;;;;;;;;:26;7436:10;7421:26;;;;;;;;;;;;;;;:68;;;;7514:6;7508:22;;;7531:10;7543:7;7508:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7508:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7508:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7508:43:0;;;;;;;;;;;;;;;;7500:52;;;;;;;;7568:65;7577:6;7585:10;7597:7;7606:6;:14;7613:6;7606:14;;;;;;;;;;;;;;;:26;7621:10;7606:26;;;;;;;;;;;;;;;;7568:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:386;;:::o;4247:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11029:170::-;11099:4;11116:19;11138:16;:24;11155:6;11138:24;;;;;;;;;;;;;;;11116:46;;11180:4;:11;;;;11173:18;;;11029:170;;;:::o;4326:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;10427:111::-;6331:5;;;;;;;;;;;6317:19;;:10;:19;;;6309:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10501:29;10520:9;10501:18;:29::i;:::-;10427:111;:::o;4533:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7649:127::-;7720:7;7747:6;:14;7754:6;7747:14;;;;;;;;;;;;;;;:21;7762:5;7747:21;;;;;;;;;;;;;;;;7740:28;;7649:127;;;;:::o;1559:150::-;1617:7;1637:9;1653:1;1649;:5;1637:17;;1678:1;1673;:6;;1665:15;;;;;;;;1700:1;1693:8;;;1559:150;;;;:::o;1323:::-;1381:7;1414:1;1409;:6;;1401:15;;;;;;;;1427:9;1443:1;1439;:5;1427:17;;1464:1;1457:8;;;1323:150;;;;:::o;10764:257::-;10848:7;4091:1;10871:17;;:8;:17;;;10867:121;;;10915:9;10904:8;;:20;;;;;;;;;;;;;;;;;;10867:121;;;10968:8;10957;;:19;;;;;;;;;;;;;;;;;;10867:121;11005:8;;;;;;;;;;;10998:15;;10764:257;;;;:::o;9083:1319::-;9243:42;9263:9;9274:10;9243:19;:42::i;:::-;9232:8;;:53;;;;;;;;;;;;;;;;;;9296:20;9319:29;9339:8;;;;;;;;;;;9319:18;:29::i;:::-;9296:52;;9361:18;9382:43;9418:6;9382:31;9397:15;9382:10;:14;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;9361:64;;9493:61;9527:26;9542:10;9527;:14;;:26;;;;:::i;:::-;9493:6;:17;9500:9;9493:17;;;;;;;;;;;;;;;:29;9511:10;9493:29;;;;;;;;;;;;;;;;:33;;:61;;;;:::i;:::-;9461:6;:17;9468:9;9461:17;;;;;;;;;;;;;;;:29;9479:10;9461:29;;;;;;;;;;;;;;;:93;;;;9592:40;9621:10;9592:6;:17;9599:9;9592:17;;;;;;;;;;;;;;;:24;9610:5;9592:24;;;;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;9565:6;:17;9572:9;9565:17;;;;;;;;;;;;;;;:24;9583:5;9565:24;;;;;;;;;;;;;;;:67;;;;9671:42;9701:11;9671:6;:18;9678:10;9671:18;;;;;;;;;;;;;;;:25;9690:5;9671:25;;;;;;;;;;;;;;;;:29;;:42;;;;:::i;:::-;9643:6;:18;9650:10;9643:18;;;;;;;;;;;;;;;:25;9662:5;9643:25;;;;;;;;;;;;;;;:70;;;;9757:47;9792:11;9757:6;:18;9764:10;9757:18;;;;;;;;;;;;;;;:30;9776:10;9757:30;;;;;;;;;;;;;;;;:34;;:47;;;;:::i;:::-;9724:6;:18;9731:10;9724:18;;;;;;;;;;;;;;;:30;9743:10;9724:30;;;;;;;;;;;;;;;:80;;;;9852:17;9872:34;9897:8;;;;;;;;;;;9872:24;:34::i;:::-;9852:54;;9917:19;9939:16;:26;9956:8;;;;;;;;;;;9939:26;;;;;;;;;;;;;;;9917:48;;9983:6;9992:1;9983:10;;9978:300;9999:9;9995:1;:13;9978:300;;;10033:4;10038:1;10033:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;10029:238;;;10067:13;10083:43;10119:6;10083:31;10098:4;10103:1;10098:7;;;;;;;;;;;;;;;;;;;;:15;;;10083:10;:14;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;10067:59;;10204:47;10242:8;10204:6;:17;10211:9;10204:17;;;;;;;;;;;;;;;:33;10222:4;10227:1;10222:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;10204:33;;;;;;;;;;;;;;;;:37;;:47;;;;:::i;:::-;10168:6;:17;10175:9;10168:17;;;;;;;;;;;;;;;:33;10186:4;10191:1;10186:7;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;10168:33;;;;;;;;;;;;;;;:83;;;;10029:238;;10010:3;;;;;;;9978:300;;;;10297:97;10303:8;10313:5;10320:8;;;;;;;;;;;10330:9;10341:10;10353;10365:11;10378:10;10390:3;10297:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9083:1319;;;;;;;;;;:::o;10544:210::-;10640:1;10619:23;;:9;:23;;;;10611:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10708:9;10680:38;;10701:5;;;;;;;;;;;10680:38;;;;;;;;;;;;10737:9;10729:5;;:17;;;;;;;;;;;;;;;;;;10544:210;:::o;318:433::-;376:7;625:1;620;:6;616:47;;;650:1;643:8;;;;616:47;675:9;691:1;687;:5;675:17;;720:1;715;711;:5;;;;;;;;:10;703:19;;;;;;;;742:1;735:8;;;318:433;;;;;:::o;884:303::-;942:7;1041:1;1037;:5;1029:14;;;;;;;;1054:9;1070:1;1066;:5;;;;;;;;1054:17;;1178:1;1171:8;;;884:303;;;;:::o;3983:9708::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://77f531691e31af8093edebf7d669171a409cedf18dfa327573391c857265371f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.