ETH Price: $3,304.17 (-1.08%)

Contract

0x10ee7DF446FA72e2E3b42a54b8fCCAdeBb4Edd53
 
Transaction Hash
Method
Block
From
To
Deposit Token119779662021-03-05 11:17:031388 days ago1614943023IN
0x10ee7DF4...eBb4Edd53
0 ETH0.0055912299
Deposit Token118465632021-02-13 5:55:441409 days ago1613195744IN
0x10ee7DF4...eBb4Edd53
0 ETH0.01074375125
Deposit Token118427772021-02-12 15:59:421409 days ago1613145582IN
0x10ee7DF4...eBb4Edd53
0 ETH0.02053636188
Deposit Token118410662021-02-12 9:45:551409 days ago1613123155IN
0x10ee7DF4...eBb4Edd53
0 ETH0.00922592.25
Deposit Token118410042021-02-12 9:29:161409 days ago1613122156IN
0x10ee7DF4...eBb4Edd53
0 ETH0.00922592.25
Deposit Token118409962021-02-12 9:27:461409 days ago1613122066IN
0x10ee7DF4...eBb4Edd53
0 ETH0.009797
Deposit Token118409872021-02-12 9:26:361409 days ago1613121996IN
0x10ee7DF4...eBb4Edd53
0 ETH0.0109109
Deposit Token118409792021-02-12 9:25:321409 days ago1613121932IN
0x10ee7DF4...eBb4Edd53
0 ETH0.0115115
Deposit Token118409752021-02-12 9:24:421409 days ago1613121882IN
0x10ee7DF4...eBb4Edd53
0 ETH0.0115115
Deposit Token118407652021-02-12 8:41:441409 days ago1613119304IN
0x10ee7DF4...eBb4Edd53
0 ETH0.00627726110
Deposit Token118342942021-02-11 8:54:281410 days ago1613033668IN
0x10ee7DF4...eBb4Edd53
0 ETH0.00756693105

Latest 11 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
119779662021-03-05 11:17:031388 days ago1614943023
0x10ee7DF4...eBb4Edd53
0 ETH
118465632021-02-13 5:55:441409 days ago1613195744
0x10ee7DF4...eBb4Edd53
0 ETH
118427772021-02-12 15:59:421409 days ago1613145582
0x10ee7DF4...eBb4Edd53
0 ETH
118410662021-02-12 9:45:551409 days ago1613123155
0x10ee7DF4...eBb4Edd53
0 ETH
118410042021-02-12 9:29:161409 days ago1613122156
0x10ee7DF4...eBb4Edd53
0 ETH
118409962021-02-12 9:27:461409 days ago1613122066
0x10ee7DF4...eBb4Edd53
0 ETH
118409872021-02-12 9:26:361409 days ago1613121996
0x10ee7DF4...eBb4Edd53
0 ETH
118409792021-02-12 9:25:321409 days ago1613121932
0x10ee7DF4...eBb4Edd53
0 ETH
118409752021-02-12 9:24:421409 days ago1613121882
0x10ee7DF4...eBb4Edd53
0 ETH
118407652021-02-12 8:41:441409 days ago1613119304
0x10ee7DF4...eBb4Edd53
0 ETH
118342942021-02-11 8:54:281410 days ago1613033668
0x10ee7DF4...eBb4Edd53
0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UnityDEX

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-11
*/

pragma solidity 0.5.13;  /*
 
 
 
 
    ___________________________________________________________________
      _      _                                        ______           
      |  |  /          /                                /              
    --|-/|-/-----__---/----__----__---_--_----__-------/-------__------
      |/ |/    /___) /   /   ' /   ) / /  ) /___)     /      /   )     
    __/__|____(___ _/___(___ _(___/_/_/__/_(___ _____/______(___/__o_o_
    
        
       

██╗   ██╗███╗   ██╗██╗████████╗██╗   ██╗    ██████╗ ███████╗██╗  ██╗
██║   ██║████╗  ██║██║╚══██╔══╝╚██╗ ██╔╝    ██╔══██╗██╔════╝╚██╗██╔╝
██║   ██║██╔██╗ ██║██║   ██║    ╚████╔╝     ██║  ██║█████╗   ╚███╔╝ 
██║   ██║██║╚██╗██║██║   ██║     ╚██╔╝      ██║  ██║██╔══╝   ██╔██╗ 
╚██████╔╝██║ ╚████║██║   ██║      ██║       ██████╔╝███████╗██╔╝ ██╗
 ╚═════╝ ╚═╝  ╚═══╝╚═╝   ╚═╝      ╚═╝       ╚═════╝ ╚══════╝╚═╝  ╚═╝
                                                                    




                                                                                     
                                                                                     
------------------------------------------------------------------------------------------------------
 Copyright (c) 2021 Onwards Unity DEX Inc. ( https://unity-dex.io )
 Contract designed with ❤ by EtherAuthority  ( https://EtherAuthority.io )
------------------------------------------------------------------------------------------------------
*/


//*******************************************************************
//------------------------ SafeMath Library -------------------------
//*******************************************************************
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

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

        return c;
    }

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


interface ERC20Essential 
{

    function transfer(address _to, uint256 _amount) external returns (bool);
    function transferFrom(address _from, address _to, uint256 _amount) external returns (bool);

}




//*******************************************************************//
//------------------ Contract to Manage Ownership -------------------//
//*******************************************************************//
    
contract owned {
    address public owner;
    address private newOwner;


    event OwnershipTransferred(uint256 curTime, address indexed _from, address indexed _to);

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

    modifier onlyOwner {
        require(msg.sender == owner, 'Only owner can call this function');
        _;
    }


    function onlyOwnerTransferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    //this flow is to prevent transferring ownership to wrong wallet by mistake
    function acceptOwnership() public {
        require(msg.sender == newOwner, 'Only new owner can call this function');
        emit OwnershipTransferred(now, owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}



contract UnityDEX is owned {
  using SafeMath for uint256;
  bool public safeGuard; // To hault all non owner functions in case of imergency - by default false
  address public feeAccount; //the account that will receive fees
  uint public tradingFee = 300; // 300 = 0.3%
  
  //referrals
  uint256 public refPercent = 10;  // percent to calculate referal bonous - by default 10% of trading fee
  
  mapping (address => mapping (address => uint)) public tokens; //mapping of token addresses to mapping of account balances (token=0 means Ether)
  mapping (address => mapping (bytes32 => bool)) public orders; //mapping of user accounts to mapping of order hashes to booleans (true = submitted by user, equivalent to offchain signature)
  mapping (address => mapping (bytes32 => uint)) public orderFills; //mapping of user accounts to mapping of order hashes to uints (amount of order that has been filled)
  
  /* Mapping to track referrer. The second address is the address of referrer, the Up-line/ Sponsor */
  mapping (address => address) public referrers;
  /* Mapping to track referrer bonus for all the referrers */
  mapping (address => uint) public referrerBonusBalance;
  
  event Order(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires,  address user);
  event Cancel(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s);
  event Trade( uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, address get, address give, uint256 orderBookID);
  event Deposit(uint256 curTime, address token, address user, uint amount, uint balance);
  event Withdraw(uint256 curTime, address token, address user, uint amount, uint balance);
  event OwnerWithdrawCommission(address indexed owner, address indexed tokenAddress, uint256 amount);
  
  // Events to track ether transfer to referrers
  event ReferrerBonus(address indexed referer, address indexed trader, uint256 referralBonus, uint256 timestamp );
  event ReferrerBonusWithdrawn(address indexed referrer, uint256 indexed amount);

  

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

    function changeSafeguardStatus() onlyOwner public
    {
        if (safeGuard == false)
        {
            safeGuard = true;
        }
        else
        {
            safeGuard = false;    
        }
    }

    //Calculate percent and return result
    function calculatePercentage(uint256 PercentOf, uint256 percentTo ) internal pure returns (uint256) 
    {
        uint256 factor = 100000;    //so to make 1000 = 1%
        require(percentTo <= factor, 'percentTo must be less than factor');
        uint256 c = PercentOf.mul(percentTo).div(factor);
        return c;
    }  



    
  // contract accepts incoming ether -  this needed in case owner want to fund refPool
  function() payable external {  }


  function changeFeeAccount(address feeAccount_) public onlyOwner {
    feeAccount = feeAccount_;
  }

  function changetradingFee(uint tradingFee_) public onlyOwner{
    require(tradingFee_ <= 10000, 'trading fee can not be more than 100%');
    tradingFee = tradingFee_;
  }
  
  function availableOwnerCommissionEther() public view returns(uint256){
      //assress 0x0 only holds ether as fee
      return tokens[address(0)][feeAccount];
  }
  
  function availableOwnerCommissionToken(address tokenAddress) public view returns(uint256){
      //assress 0x0 only holds ether as fee
      return tokens[tokenAddress][feeAccount];
  }
  
  function withdrawOwnerCommissoinEther() public  returns (string memory){
      require(msg.sender == feeAccount, 'Invalid caller');
      uint256 amount = availableOwnerCommissionEther();
      require (amount > 0, 'Nothing to withdraw');
      tokens[address(0)][feeAccount] = 0;
      msg.sender.transfer(amount);
      emit OwnerWithdrawCommission(msg.sender, address(0), amount);
      return "Ether withdrawn successfully";
  }
  
  function withdrawOwnerCommissoinToken(address tokenAddress) public  returns (string memory){
      require(msg.sender == feeAccount, 'Invalid caller');
      uint256 amount = availableOwnerCommissionToken(tokenAddress);
      require (amount > 0, 'Nothing to withdraw');
      tokens[tokenAddress][feeAccount] = 0;
      ERC20Essential(tokenAddress).transfer(msg.sender, amount);
      emit OwnerWithdrawCommission(msg.sender, tokenAddress, amount);
      return "Token withdrawn successfully";
  }

  function deposit() public payable {
    tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].add(msg.value);
    emit Deposit(now, address(0), msg.sender, msg.value, tokens[address(0)][msg.sender]);
  }

  function withdraw(uint amount) public {
    require(!safeGuard,"System Paused by Admin");
    require(tokens[address(0)][msg.sender] >= amount, 'Not enough balance');
    tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].sub(amount);
    msg.sender.transfer(amount);
    emit Withdraw(now, address(0), msg.sender, amount, tokens[address(0)][msg.sender]);
  }

  function depositToken(address token, uint amount) public {
    //remember to call Token(address).approve(address(this), amount) or this contract will not be able to do the transfer on your behalf.
    require(token!=address(0), 'Invalid token address');
    require(ERC20Essential(token).transferFrom(msg.sender, address(this), amount), 'tokens could not be transferred');
    tokens[token][msg.sender] = tokens[token][msg.sender].add(amount);
    emit Deposit(now, token, msg.sender, amount, tokens[token][msg.sender]);
  }
	
  function withdrawToken(address token, uint amount) public {
    require(!safeGuard,"System Paused by Admin");
    require(token!=address(0), 'Invalid token address');
    require(tokens[token][msg.sender] >= amount, 'not enough token balance');
    tokens[token][msg.sender] = tokens[token][msg.sender].sub(amount);
	  ERC20Essential(token).transfer(msg.sender, amount);
    emit Withdraw(now, token, msg.sender, amount, tokens[token][msg.sender]);
  }

  function balanceOf(address token, address user) public view returns (uint) {
    return tokens[token][user];
  }

  function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires) public {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    orders[msg.sender][hash] = true;
    emit Order(now, tokenGet, amountGet, tokenGive, amountGive, expires, msg.sender);
  }


    /* address[4] addressArray elements
        0 = tokenGet
        1 = tokenGive
        2 = tradeMaker
        3 = referrer
    */
  function trade(address[4] memory addressArray, uint amountGet, uint amountGive, uint expires, uint8 v, bytes32 r, bytes32 s, uint amount, uint orderBookID) public {
    require(!safeGuard,"System Paused by Admin");
    //amount is in amountGet terms
    bytes32 hash = keccak256(abi.encodePacked(address(this), addressArray[0], amountGet, addressArray[1], amountGive, expires));
    require(orders[addressArray[2]][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == addressArray[2], 'Invalid trade parameters');
    require(block.number <= expires, 'Trade is expired');
    require(orderFills[addressArray[2]][hash].add(amount) <= amountGet, 'Trade order is filled');

    tradeBalances(addressArray, amountGet, amountGive, amount );
    orderFills[addressArray[2]][hash] = orderFills[addressArray[2]][hash].add(amount);
    
    emit Trade(now, addressArray[0], amount, addressArray[1], amountGive * amount / amountGet, addressArray[2], msg.sender, orderBookID);
  }
    
    /**
        addressArray array elements
        0 = tokenGet
        1 = tokenGive
        2 = user
        3 = referrer
    */
  function tradeBalances(address[4] memory addressArray, uint amountGet, uint amountGive, uint amount) internal {
    
    uint tradingFeeXfer = calculatePercentage(amount,tradingFee);
    
    //processing referrers bonus - which is % of the trading fee
    processReferrerBonus(addressArray[3], tradingFeeXfer);

    tokens[addressArray[0]][msg.sender] = tokens[addressArray[0]][msg.sender].sub(amount.add(tradingFeeXfer));
    tokens[addressArray[0]][addressArray[2]] = tokens[addressArray[0]][addressArray[2]].add(amount);
    tokens[addressArray[0]][feeAccount] = tokens[addressArray[0]][feeAccount].add(tradingFeeXfer);

    tokens[addressArray[1]][addressArray[2]] = tokens[addressArray[1]][addressArray[2]].sub(amountGive.mul(amount) / amountGet);
    tokens[addressArray[1]][msg.sender] = tokens[addressArray[1]][msg.sender].add(amountGive.mul(amount) / amountGet);
  }
  
  

  function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) public view returns(bool) {
    
    if (!(
      tokens[tokenGet][sender] >= amount &&
      availableVolume(tokenGet, amountGet, tokenGive, amountGive, expires, user, v, r, s) >= amount
    )) return false;
    return true;
  }
  
  function testVRS(address tokenGet, uint256 amountGet, address tokenGive, uint256 amountGive, uint256 expires, uint8 v, bytes32 r, bytes32 s ) public view returns(address){
      
      bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
     
      return ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s);
    
  }

  function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    uint available1;
    if (!(
      (orders[user][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == user) &&
      block.number <= expires
    )) return 0;
    available1 = tokens[tokenGive][user].mul(amountGet) / amountGive;
    
    if (amountGet.sub(orderFills[user][hash])<available1) return amountGet.sub(orderFills[user][hash]);
    return available1;
    
  }

  function amountFilled(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    return orderFills[user][hash];
  }

  function cancelOrder(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint8 v, bytes32 r, bytes32 s) public {
    require(!safeGuard,"System Paused by Admin");
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    require(orders[msg.sender][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == msg.sender, 'Invalid trade order');
    orderFills[msg.sender][hash] = amountGet;
    emit Cancel(now, tokenGet, amountGet, tokenGive, amountGive, expires, msg.sender, v, r, s);
  }



//==================================================//
//              REFERRAL SECTION CODE               //
//==================================================//

function processReferrerBonus(address _referrer, uint256 _tradingFeeLocal) internal {
      
      address existingReferrer = referrers[msg.sender];
      
      if(_referrer != address(0) && existingReferrer != address(0) ){
        referrerBonusBalance[existingReferrer] += _tradingFeeLocal * refPercent / 100;
        emit ReferrerBonus(_referrer, msg.sender, _tradingFeeLocal * refPercent / 100, now );
      }
      else if(_referrer != address(0) && existingReferrer == address(0) ){
        //no referrer exist, but provided in trade function call
        referrerBonusBalance[_referrer] += _tradingFeeLocal * refPercent / 100;
        referrers[msg.sender] = _referrer;
        emit ReferrerBonus(_referrer, msg.sender, _tradingFeeLocal * refPercent / 100, now );
      }
  }
  
  function changeRefPercent(uint256 newRefPercent) public onlyOwner returns (string memory){
      require(newRefPercent <= 100, 'newRefPercent can not be more than 100');
      refPercent = newRefPercent;
      return "refPool fee updated successfully";
  }
  
  /**
        * Function will allow users to withdraw their referrer bonus  
    */
    function claimReferrerBonus() public returns(bool) {
        
        address payable msgSender = msg.sender;
        
        uint256 referralBonus = referrerBonusBalance[msgSender];
        
        require(referralBonus > 0, 'Insufficient referrer bonus');
        referrerBonusBalance[msgSender] = 0;
        
        
        //transfer the referrer bonus
        msgSender.transfer(referralBonus);
        
        //fire event
        emit ReferrerBonusWithdrawn(msgSender, referralBonus);
        
        return true;
    }








}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"v","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"r","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OwnerWithdrawCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referer","type":"address"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"referralBonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ReferrerBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferrerBonusWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"address","name":"get","type":"address"},{"indexed":false,"internalType":"address","name":"give","type":"address"},{"indexed":false,"internalType":"uint256","name":"orderBookID","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"amountFilled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"availableOwnerCommissionEther","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"availableOwnerCommissionToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"availableVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"feeAccount_","type":"address"}],"name":"changeFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newRefPercent","type":"uint256"}],"name":"changeRefPercent","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"changeSafeguardStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tradingFee_","type":"uint256"}],"name":"changetradingFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimReferrerBonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"onlyOwnerTransferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"order","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrerBonusBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"safeGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"testTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"testVRS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[4]","name":"addressArray","type":"address[4]"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"orderBookID","type":"uint256"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawOwnerCommissoinEther","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawOwnerCommissoinToken","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405261012c600355600a60045534801561001b57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615567806100ac6000396000f3fe6080604052600436106101ee5760003560e01c806379279fd11161010d5780639ff67fd8116100a0578063c5d9a28f1161006f578063c5d9a28f14610e54578063d0e30db014610ea5578063f70b83e914610eaf578063f7888aec14610f75578063fd37503f14610ffa576101ee565b80639ff67fd814610c0a578063bb5f462914610cef578063bd91645214610d62578063bf52f1cf14610d91576101ee565b806389130700116100dc57806389130700146109dd5780638da5cb5b14610aa7578063982371b414610afe5780639e281a9814610baf576101ee565b806379279fd1146107f257806379ba509714610821578063865505a414610838578063889126b2146108ec576101ee565b8063508493bc116101855780635be07a45116101545780635be07a451461068057806365e17c9d146106e5578063700f8e181461073c57806371ffcb16146107a1576101ee565b8063508493bc1461051657806356f433521461059b57806359d5335b146105c65780635ae11d5d146105f1576101ee565b8063338b5dea116101c1578063338b5dea146103e85780633d3a02e3146104435780634a3b68cc1461046e5780634bec8335146104ff576101ee565b806303d19637146101f057806319774d431461022b5780632e1a7d4d1461029a5780633176fb37146102d5575b005b3480156101fc57600080fd5b506102296004803603602081101561021357600080fd5b810190808035906020019092919050505061108a565b005b34801561023757600080fd5b506102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611194565b6040518082815260200191505060405180910390f35b3480156102a657600080fd5b506102d3600480360360208110156102bd57600080fd5b81019080803590602001909291905050506111b9565b005b3480156102e157600080fd5b506103ce60048036036101608110156102f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b3565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b506104416004803603604081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611672565b005b34801561044f57600080fd5b50610458611abb565b6040518082815260200191505060405180910390f35b34801561047a57600080fd5b506104bd6004803603602081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050b57600080fd5b50610514611b94565b005b34801561052257600080fd5b506105856004803603604081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c92565b6040518082815260200191505060405180910390f35b3480156105a757600080fd5b506105b0611cb7565b6040518082815260200191505060405180910390f35b3480156105d257600080fd5b506105db611cbd565b6040518082815260200191505060405180910390f35b3480156105fd57600080fd5b5061067e600480360360a081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611cc3565b005b34801561068c57600080fd5b506106cf600480360360208110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eff565b6040518082815260200191505060405180910390f35b3480156106f157600080fd5b506106fa611f17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074857600080fd5b5061078b6004803603602081101561075f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3d565b6040518082815260200191505060405180910390f35b3480156107ad57600080fd5b506107f0600480360360208110156107c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe5565b005b3480156107fe57600080fd5b506108076120ce565b604051808215151515815260200191505060405180910390f35b34801561082d57600080fd5b506108366120e1565b005b34801561084457600080fd5b506108716004803603602081101561085b57600080fd5b81019080803590602001909291905050506122d5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108b1578082015181840152602081019050610896565b50505050905090810190601f1680156108de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108f857600080fd5b5061099b600480360361010081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061241a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e957600080fd5b50610a2c60048036036020811015610a0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a6c578082015181840152602081019050610a51565b50505050905090810190601f168015610a995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ab357600080fd5b50610abc612911565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b0a57600080fd5b50610bad6004803603610100811015610b2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612936565b005b348015610bbb57600080fd5b50610c0860048036036040811015610bd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dbc565b005b348015610c1657600080fd5b50610cd96004803603610120811015610c2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506132d5565b6040518082815260200191505060405180910390f35b348015610cfb57600080fd5b50610d4860048036036040811015610d1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061369e565b604051808215151515815260200191505060405180910390f35b348015610d6e57600080fd5b50610d776136cd565b604051808215151515815260200191505060405180910390f35b348015610d9d57600080fd5b50610e3e600480360360c0811015610db457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613866565b6040518082815260200191505060405180910390f35b348015610e6057600080fd5b50610ea360048036036020811015610e7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139a5565b005b610ead613a8e565b005b348015610ebb57600080fd5b50610f736004803603610180811015610ed357600080fd5b8101908080608001906004806020026040519081016040528092919082600460200280828437600081840152601f19601f8201169050808301925050505050509192919290803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613ccb565b005b348015610f8157600080fd5b50610fe460048036036040811015610f9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506143d9565b6040518082815260200191505060405180910390f35b34801561100657600080fd5b5061100f614460565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561104f578082015181840152602081019050611034565b50505050905090810190601f16801561107c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b61271081111561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061550e6025913960400191505060405180910390fd5b8060038190555050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600160149054906101000a900460ff161561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b80600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b6113bd81600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611483573d6000803e3d6000fd5b507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b684260003384600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150565b600082600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561165157508261164e8d8d8d8d8d8d8d8d8d6132d5565b10155b61165e5760009050611663565b600190505b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b505050506040513d60208110156117fa57600080fd5b810190808051906020019092919050505061187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f746f6b656e7320636f756c64206e6f74206265207472616e736665727265640081525060200191505060405180910390fd5b61190c81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a242833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b60001515600160149054906101000a900460ff1615151415611c745760018060146101000a81548160ff021916908315150217905550611c90565b6000600160146101000a81548160ff0219169083151502179055505b565b6005602052816000526040600020602052806000526040600020600091509150505481565b60035481565b60045481565b6000308686868686604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2ae64188d341c174f829e49eb8d8afa1a3d0046543735b227b25c12248dd8cfe42878787878733604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a1505050505050565b60096020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612187576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e96025913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec0426040518082815260200191505060405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b60648211156123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154c36026913960400191505060405180910390fd5b816004819055506040518060400160405280602081526020017f726566506f6f6c206665652075706461746564207375636365737366756c6c798152509050919050565b600080308a8a8a8a8a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060018160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156125a6573d6000803e3d6000fd5b5050506020604051035191505098975050505050505050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b600061268f83611f3d565b905060008111612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561283257600080fd5b505af1158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f546f6b656e2077697468647261776e207375636365737366756c6c7900000000815250915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff16156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308989898989604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680612be157503373ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612bbf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b612c53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b87600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f995eb7430c4fb84f593f4997dc830fb16d98063346a1a4bec4fc97a97d6c6a1f428a8a8a8a8a338b8b8b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff1681526020018381526020018281526020019a505050505050505050505060405180910390a1505050505050505050565b600160149054906101000a900460ff1615612e3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ee2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f7420656e6f75676820746f6b656e2062616c616e6365000000000000000081525060200191505060405180910390fd5b61306381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561316a57600080fd5b505af115801561317e573d6000803e3d6000fd5b505050506040513d602081101561319457600080fd5b8101908080519060200190929190505050507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b6842833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b600080308b8b8b8b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff168061350057508673ffffffffffffffffffffffffffffffffffffffff1660018360405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156134de573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b801561350c5750874311155b61351b57600092505050613691565b886135ab8c600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461484590919063ffffffff16565b816135b257fe5b04905080613619600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020548d61473490919063ffffffff16565b101561368b57613682600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548c61473490919063ffffffff16565b92505050613691565b80925050505b9998505050505050505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000803390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161378d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e7420726566657272657220626f6e7573000000000081525060200191505060405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613818573d6000803e3d6000fd5b50808273ffffffffffffffffffffffffffffffffffffffff167ff4ffb88912befdda9584c7fa33955c025a821b46a044d73dd1314c656274f5ba60405160405180910390a360019250505090565b600080308888888888604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020549150509695505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613b1d34600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a24260003334600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a1565b600160149054906101000a900460ff1615613d4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308a600060048110613d5e57fe5b60200201518a8c600160048110613d7157fe5b60200201518b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600660008b600260048110613e6157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680613fba575089600260048110613ed257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613f98573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b61402c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420747261646520706172616d6574657273000000000000000081525060200191505060405180910390fd5b864311156140a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f547261646520697320657870697265640000000000000000000000000000000081525060200191505060405180910390fd5b8861411784600760008e6002600481106140b857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546147bd90919063ffffffff16565b111561418b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5472616465206f726465722069732066696c6c6564000000000000000000000081525060200191505060405180910390fd5b6141978a8a8a866148cb565b61420b83600760008d6002600481106141ac57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020546147bd90919063ffffffff16565b600760008c60026004811061421c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f35cc15ad16b95a9d45fadedd6ecbbd89858ec4bfedf144506f3f531d3eb63509428b60006004811061429f57fe5b6020020151858d6001600481106142b257fe5b60200201518d888e02816142c257fe5b048f6002600481106142d057fe5b60200201513389604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a150505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b600061452f611abb565b9050600081116145a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614691573d6000803e3d6000fd5b50600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f45746865722077697468647261776e207375636365737366756c6c790000000081525091505090565b6000828211156147ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008082840190508381101561483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561485857600090506148c5565b600082840290508284828161486957fe5b04146148c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154a26021913960400191505060405180910390fd5b809150505b92915050565b60006148d982600354614fc2565b90506148f6856003600481106148eb57fe5b602002015182615058565b6149a861490c82846147bd90919063ffffffff16565b600560008860006004811061491d57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b60056000876000600481106149b957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aea826005600088600060048110614a4e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614a9c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600060048110614afb57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614b4957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c4e816005600088600060048110614ba157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600060048110614c5f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dcd84614d18848661484590919063ffffffff16565b81614d1f57fe5b046005600088600160048110614d3157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614d7f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b6005600087600160048110614dde57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614e2c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f2a84614e86848661484590919063ffffffff16565b81614e8d57fe5b046005600088600160048110614e9f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600160048110614f3b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080620186a0905080831115615024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154806022913960400191505060405180910390fd5b600061504b8261503d868861484590919063ffffffff16565b6153cf90919063ffffffff16565b9050809250505092915050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156151265750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561520657606460045483028161513957fe5b04600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646004548602816151e357fe5b0442604051808381526020018281526020019250505060405180910390a36153ca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561526f5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156153c957606460045483028161528257fe5b04600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646004548602816153aa57fe5b0442604051808381526020018281526020019250505060405180910390a35b5b505050565b6000808211615446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b600082848161545157fe5b049050809150509291505056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e70657263656e74546f206d757374206265206c657373207468616e20666163746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776e657752656650657263656e742063616e206e6f74206265206d6f7265207468616e203130304f6e6c79206e6577206f776e65722063616e2063616c6c20746869732066756e6374696f6e74726164696e67206665652063616e206e6f74206265206d6f7265207468616e2031303025a265627a7a7231582039b5efe9a083b63d43a6f524a43a5d2aa828dace2f671f2e473b36a6a2ad991f64736f6c634300050d0032

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c806379279fd11161010d5780639ff67fd8116100a0578063c5d9a28f1161006f578063c5d9a28f14610e54578063d0e30db014610ea5578063f70b83e914610eaf578063f7888aec14610f75578063fd37503f14610ffa576101ee565b80639ff67fd814610c0a578063bb5f462914610cef578063bd91645214610d62578063bf52f1cf14610d91576101ee565b806389130700116100dc57806389130700146109dd5780638da5cb5b14610aa7578063982371b414610afe5780639e281a9814610baf576101ee565b806379279fd1146107f257806379ba509714610821578063865505a414610838578063889126b2146108ec576101ee565b8063508493bc116101855780635be07a45116101545780635be07a451461068057806365e17c9d146106e5578063700f8e181461073c57806371ffcb16146107a1576101ee565b8063508493bc1461051657806356f433521461059b57806359d5335b146105c65780635ae11d5d146105f1576101ee565b8063338b5dea116101c1578063338b5dea146103e85780633d3a02e3146104435780634a3b68cc1461046e5780634bec8335146104ff576101ee565b806303d19637146101f057806319774d431461022b5780632e1a7d4d1461029a5780633176fb37146102d5575b005b3480156101fc57600080fd5b506102296004803603602081101561021357600080fd5b810190808035906020019092919050505061108a565b005b34801561023757600080fd5b506102846004803603604081101561024e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611194565b6040518082815260200191505060405180910390f35b3480156102a657600080fd5b506102d3600480360360208110156102bd57600080fd5b81019080803590602001909291905050506111b9565b005b3480156102e157600080fd5b506103ce60048036036101608110156102f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b3565b604051808215151515815260200191505060405180910390f35b3480156103f457600080fd5b506104416004803603604081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611672565b005b34801561044f57600080fd5b50610458611abb565b6040518082815260200191505060405180910390f35b34801561047a57600080fd5b506104bd6004803603602081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050b57600080fd5b50610514611b94565b005b34801561052257600080fd5b506105856004803603604081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c92565b6040518082815260200191505060405180910390f35b3480156105a757600080fd5b506105b0611cb7565b6040518082815260200191505060405180910390f35b3480156105d257600080fd5b506105db611cbd565b6040518082815260200191505060405180910390f35b3480156105fd57600080fd5b5061067e600480360360a081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611cc3565b005b34801561068c57600080fd5b506106cf600480360360208110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eff565b6040518082815260200191505060405180910390f35b3480156106f157600080fd5b506106fa611f17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074857600080fd5b5061078b6004803603602081101561075f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3d565b6040518082815260200191505060405180910390f35b3480156107ad57600080fd5b506107f0600480360360208110156107c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe5565b005b3480156107fe57600080fd5b506108076120ce565b604051808215151515815260200191505060405180910390f35b34801561082d57600080fd5b506108366120e1565b005b34801561084457600080fd5b506108716004803603602081101561085b57600080fd5b81019080803590602001909291905050506122d5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108b1578082015181840152602081019050610896565b50505050905090810190601f1680156108de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108f857600080fd5b5061099b600480360361010081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061241a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e957600080fd5b50610a2c60048036036020811015610a0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a6c578082015181840152602081019050610a51565b50505050905090810190601f168015610a995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ab357600080fd5b50610abc612911565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b0a57600080fd5b50610bad6004803603610100811015610b2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612936565b005b348015610bbb57600080fd5b50610c0860048036036040811015610bd257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dbc565b005b348015610c1657600080fd5b50610cd96004803603610120811015610c2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506132d5565b6040518082815260200191505060405180910390f35b348015610cfb57600080fd5b50610d4860048036036040811015610d1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061369e565b604051808215151515815260200191505060405180910390f35b348015610d6e57600080fd5b50610d776136cd565b604051808215151515815260200191505060405180910390f35b348015610d9d57600080fd5b50610e3e600480360360c0811015610db457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613866565b6040518082815260200191505060405180910390f35b348015610e6057600080fd5b50610ea360048036036020811015610e7757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139a5565b005b610ead613a8e565b005b348015610ebb57600080fd5b50610f736004803603610180811015610ed357600080fd5b8101908080608001906004806020026040519081016040528092919082600460200280828437600081840152601f19601f8201169050808301925050505050509192919290803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613ccb565b005b348015610f8157600080fd5b50610fe460048036036040811015610f9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506143d9565b6040518082815260200191505060405180910390f35b34801561100657600080fd5b5061100f614460565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561104f578082015181840152602081019050611034565b50505050905090810190601f16801561107c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b61271081111561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061550e6025913960400191505060405180910390fd5b8060038190555050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600160149054906101000a900460ff161561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b80600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b6113bd81600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611483573d6000803e3d6000fd5b507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b684260003384600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150565b600082600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561165157508261164e8d8d8d8d8d8d8d8d8d6132d5565b10155b61165e5760009050611663565b600190505b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b505050506040513d60208110156117fa57600080fd5b810190808051906020019092919050505061187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f746f6b656e7320636f756c64206e6f74206265207472616e736665727265640081525060200191505060405180910390fd5b61190c81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a242833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b60001515600160149054906101000a900460ff1615151415611c745760018060146101000a81548160ff021916908315150217905550611c90565b6000600160146101000a81548160ff0219169083151502179055505b565b6005602052816000526040600020602052806000526040600020600091509150505481565b60035481565b60045481565b6000308686868686604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2ae64188d341c174f829e49eb8d8afa1a3d0046543735b227b25c12248dd8cfe42878787878733604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a1505050505050565b60096020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612187576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e96025913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec0426040518082815260200191505060405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b60648211156123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154c36026913960400191505060405180910390fd5b816004819055506040518060400160405280602081526020017f726566506f6f6c206665652075706461746564207375636365737366756c6c798152509050919050565b600080308a8a8a8a8a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060018160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156125a6573d6000803e3d6000fd5b5050506020604051035191505098975050505050505050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b600061268f83611f3d565b905060008111612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561283257600080fd5b505af1158015612846573d6000803e3d6000fd5b505050506040513d602081101561285c57600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f546f6b656e2077697468647261776e207375636365737366756c6c7900000000815250915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff16156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308989898989604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680612be157503373ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612bbf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b612c53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b87600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f995eb7430c4fb84f593f4997dc830fb16d98063346a1a4bec4fc97a97d6c6a1f428a8a8a8a8a338b8b8b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff1681526020018381526020018281526020019a505050505050505050505060405180910390a1505050505050505050565b600160149054906101000a900460ff1615612e3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ee2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f7420656e6f75676820746f6b656e2062616c616e6365000000000000000081525060200191505060405180910390fd5b61306381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561316a57600080fd5b505af115801561317e573d6000803e3d6000fd5b505050506040513d602081101561319457600080fd5b8101908080519060200190929190505050507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b6842833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b600080308b8b8b8b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff168061350057508673ffffffffffffffffffffffffffffffffffffffff1660018360405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156134de573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b801561350c5750874311155b61351b57600092505050613691565b886135ab8c600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461484590919063ffffffff16565b816135b257fe5b04905080613619600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020548d61473490919063ffffffff16565b101561368b57613682600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548c61473490919063ffffffff16565b92505050613691565b80925050505b9998505050505050505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000803390506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811161378d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e7420726566657272657220626f6e7573000000000081525060200191505060405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613818573d6000803e3d6000fd5b50808273ffffffffffffffffffffffffffffffffffffffff167ff4ffb88912befdda9584c7fa33955c025a821b46a044d73dd1314c656274f5ba60405160405180910390a360019250505090565b600080308888888888604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020549150509695505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061545f6021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613b1d34600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a24260003334600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a1565b600160149054906101000a900460ff1615613d4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308a600060048110613d5e57fe5b60200201518a8c600160048110613d7157fe5b60200201518b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600660008b600260048110613e6157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680613fba575089600260048110613ed257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613f98573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b61402c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420747261646520706172616d6574657273000000000000000081525060200191505060405180910390fd5b864311156140a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f547261646520697320657870697265640000000000000000000000000000000081525060200191505060405180910390fd5b8861411784600760008e6002600481106140b857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546147bd90919063ffffffff16565b111561418b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5472616465206f726465722069732066696c6c6564000000000000000000000081525060200191505060405180910390fd5b6141978a8a8a866148cb565b61420b83600760008d6002600481106141ac57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020546147bd90919063ffffffff16565b600760008c60026004811061421c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f35cc15ad16b95a9d45fadedd6ecbbd89858ec4bfedf144506f3f531d3eb63509428b60006004811061429f57fe5b6020020151858d6001600481106142b257fe5b60200201518d888e02816142c257fe5b048f6002600481106142d057fe5b60200201513389604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a150505050505050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b600061452f611abb565b9050600081116145a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614691573d6000803e3d6000fd5b50600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f45746865722077697468647261776e207375636365737366756c6c790000000081525091505090565b6000828211156147ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008082840190508381101561483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561485857600090506148c5565b600082840290508284828161486957fe5b04146148c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154a26021913960400191505060405180910390fd5b809150505b92915050565b60006148d982600354614fc2565b90506148f6856003600481106148eb57fe5b602002015182615058565b6149a861490c82846147bd90919063ffffffff16565b600560008860006004811061491d57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b60056000876000600481106149b957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614aea826005600088600060048110614a4e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614a9c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600060048110614afb57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614b4957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c4e816005600088600060048110614ba157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600060048110614c5f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614dcd84614d18848661484590919063ffffffff16565b81614d1f57fe5b046005600088600160048110614d3157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614d7f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461473490919063ffffffff16565b6005600087600160048110614dde57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614e2c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f2a84614e86848661484590919063ffffffff16565b81614e8d57fe5b046005600088600160048110614e9f57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bd90919063ffffffff16565b6005600087600160048110614f3b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080620186a0905080831115615024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154806022913960400191505060405180910390fd5b600061504b8261503d868861484590919063ffffffff16565b6153cf90919063ffffffff16565b9050809250505092915050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156151265750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561520657606460045483028161513957fe5b04600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646004548602816151e357fe5b0442604051808381526020018281526020019250505060405180910390a36153ca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561526f5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156153c957606460045483028161528257fe5b04600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646004548602816153aa57fe5b0442604051808381526020018281526020019250505060405180910390a35b5b505050565b6000808211615446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b600082848161545157fe5b049050809150509291505056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e70657263656e74546f206d757374206265206c657373207468616e20666163746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776e657752656650657263656e742063616e206e6f74206265206d6f7265207468616e203130304f6e6c79206e6577206f776e65722063616e2063616c6c20746869732066756e6374696f6e74726164696e67206665652063616e206e6f74206265206d6f7265207468616e2031303025a265627a7a7231582039b5efe9a083b63d43a6f524a43a5d2aa828dace2f671f2e473b36a6a2ad991f64736f6c634300050d0032

Deployed Bytecode Sourcemap

6650:13369:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9773:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9773:174:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9773:174:0;;;;;;;;;;;;;;;;;:::i;:::-;;7398:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7398:64:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7398:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11507:378;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11507:378:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11507:378:0;;;;;;;;;;;;;;;;;:::i;:::-;;15594:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15594:413:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;15594:413:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11891:530;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11891:530:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11891:530:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9955:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9955:166:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7677:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7677:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7677:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8919:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8919:221:0;;;:::i;:::-;;7059:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7059:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7059:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6882:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6882:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6948:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6948:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13013:354;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13013:354:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13013:354:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7790:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7790:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7790:53:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6815:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6815:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10129:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10129:188:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10129:188:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9666:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9666:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9666:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6713:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6713:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6397:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6397:242:0;;;:::i;:::-;;19094:260;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19094:260:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19094:260:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19094:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16015:418;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16015:418:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;16015:418:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10773:506;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10773:506:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10773:506:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10773:506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5848:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5848:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17483:628;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17483:628:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17483:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12428:459;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12428:459:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12428:459:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16439:727;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16439:727:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;16439:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7206:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7206:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7206:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19451:549;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19451:549:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17172:305;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17172:305:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17172:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6197:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6197:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6197:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11285:216;;;:::i;:::-;;13515:1027;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13515:1027:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13515:1027: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;;13515:1027:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12893:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12893:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12893:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10325:440;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10325:440:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10325:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9773:174;6124:5;;;;;;;;;;;6110:19;;:10;:19;;;6102:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9863:5;9848:11;:20;;9840:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9930:11;9917:10;:24;;;;9773:174;:::o;7398:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11507:378::-;11561:9;;;;;;;;;;;11560:10;11552:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11645:6;11611;:18;11626:1;11611:18;;;;;;;;;;;;;;;:30;11630:10;11611:30;;;;;;;;;;;;;;;;:40;;11603:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:42;11749:6;11714;:18;11729:1;11714:18;;;;;;;;;;;;;;;:30;11733:10;11714:30;;;;;;;;;;;;;;;;:34;;:42;;;;:::i;:::-;11681:6;:18;11696:1;11681:18;;;;;;;;;;;;;;;:30;11700:10;11681:30;;;;;;;;;;;;;;;:75;;;;11763:10;:19;;:27;11783:6;11763:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11763:27:0;11802:77;11811:3;11824:1;11828:10;11840:6;11848;:18;11863:1;11848:18;;;;;;;;;;;;;;;:30;11867:10;11848:30;;;;;;;;;;;;;;;;11802:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11507:378;:::o;15594:413::-;15791:4;15852:6;15824;:16;15831:8;15824:16;;;;;;;;;;;;;;;:24;15841:6;15824:24;;;;;;;;;;;;;;;;:34;;:138;;;;;15956:6;15869:83;15885:8;15895:9;15906;15917:10;15929:7;15938:4;15944:1;15947;15950;15869:15;:83::i;:::-;:93;;15824:138;15810:173;;15978:5;15971:12;;;;15810:173;15997:4;15990:11;;15594:413;;;;;;;;;;;;;;:::o;11891:530::-;12117:1;12102:17;;:5;:17;;;;12094:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12175:5;12160:34;;;12195:10;12215:4;12222:6;12160:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12160:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12160:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12160:69:0;;;;;;;;;;;;;;;;12152:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12300:37;12330:6;12300;:13;12307:5;12300:13;;;;;;;;;;;;;;;:25;12314:10;12300:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;12272:6;:13;12279:5;12272:13;;;;;;;;;;;;;;;:25;12286:10;12272:25;;;;;;;;;;;;;;;:65;;;;12349:66;12357:3;12362:5;12369:10;12381:6;12389;:13;12396:5;12389:13;;;;;;;;;;;;;;;:25;12403:10;12389:25;;;;;;;;;;;;;;;;12349:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11891:530;;:::o;9955:166::-;10016:7;10085:6;:18;10100:1;10085:18;;;;;;;;;;;;;;;:30;10104:10;;;;;;;;;;;10085:30;;;;;;;;;;;;;;;;10078:37;;9955:166;:::o;7677:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;8919:221::-;6124:5;;;;;;;;;;;6110:19;;:10;:19;;;6102:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9002:5;8989:18;;:9;;;;;;;;;;;:18;;;8985:148;;;9045:4;9033:9;;:16;;;;;;;;;;;;;;;;;;8985:148;;;9112:5;9100:9;;:17;;;;;;;;;;;;;;;;;;8985:148;8919:221::o;7059:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6882:28::-;;;;:::o;6948:30::-;;;;:::o;13013:354::-;13126:12;13176:4;13183:8;13193:9;13204;13215:10;13227:7;13151:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13151:84:0;;;13141:95;;;;;;13126:110;;13270:4;13243:6;:18;13250:10;13243:18;;;;;;;;;;;;;;;:24;13262:4;13243:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;13286:75;13292:3;13297:8;13307:9;13318;13329:10;13341:7;13350:10;13286:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13013:354;;;;;;:::o;7790:53::-;;;;;;;;;;;;;;;;;:::o;6815:25::-;;;;;;;;;;;;;:::o;10129:188::-;10210:7;10279:6;:20;10286:12;10279:20;;;;;;;;;;;;;;;:32;10300:10;;;;;;;;;;;10279:32;;;;;;;;;;;;;;;;10272:39;;10129:188;;;:::o;9666:101::-;6124:5;;;;;;;;;;;6110:19;;:10;:19;;;6102:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9750:11;9737:10;;:24;;;;;;;;;;;;;;;;;;9666:101;:::o;6713:21::-;;;;;;;;;;;;;:::o;6397:242::-;6464:8;;;;;;;;;;;6450:22;;:10;:22;;;6442:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6563:8;;;;;;;;;;;6530:42;;6556:5;;;;;;;;;;;6530:42;;;6551:3;6530:42;;;;;;;;;;;;;;;;;;6591:8;;;;;;;;;;;6583:5;;:16;;;;;;;;;;;;;;;;;;6629:1;6610:8;;:21;;;;;;;;;;;;;;;;;;6397:242::o;19094:260::-;19169:13;6124:5;;;;;;;;;;;6110:19;;:10;:19;;;6102:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19217:3;19200:13;:20;;19192:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19285:13;19272:10;:26;;;;19307:41;;;;;;;;;;;;;;;;;;;19094:260;;;:::o;16015:418::-;16177:7;16202:12;16252:4;16259:8;16269:9;16280;16291:10;16303:7;16227:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16227:84:0;;;16217:95;;;;;;16202:110;;16335:86;16408:4;16355:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16355:58:0;;;16345:69;;;;;;16415:1;16417;16419;16335:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16335:86:0;;;;;;;;16328:93;;;16015:418;;;;;;;;;;:::o;10773:506::-;10850:13;10895:10;;;;;;;;;;;10881:24;;:10;:24;;;10873:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10933:14;10950:43;10980:12;10950:29;:43::i;:::-;10933:60;;11020:1;11011:6;:10;11002:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11089:1;11054:6;:20;11061:12;11054:20;;;;;;;;;;;;;;;:32;11075:10;;;;;;;;;;;11054:32;;;;;;;;;;;;;;;:36;;;;11114:12;11099:37;;;11137:10;11149:6;11099:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11099:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11099:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11099:57:0;;;;;;;;;;;;;;;;;11206:12;11170:57;;11194:10;11170:57;;;11220:6;11170:57;;;;;;;;;;;;;;;;;;11236:37;;;;;;;;;;;;;;;;;;;;10773:506;;;:::o;5848:20::-;;;;;;;;;;;;;:::o;17483:628::-;17642:9;;;;;;;;;;;17641:10;17633:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17684:12;17734:4;17741:8;17751:9;17762;17773:10;17785:7;17709:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17709:84:0;;;17699:95;;;;;;17684:110;;17809:6;:18;17816:10;17809:18;;;;;;;;;;;;;;;:24;17828:4;17809:24;;;;;;;;;;;;;;;;;;;;;:128;;;;17927:10;17837:100;;:86;17910:4;17857:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17857:58:0;;;17847:69;;;;;;17917:1;17919;17921;17837:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17837:86:0;;;;;;;;:100;;;17809:128;17801:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17999:9;17968:10;:22;17979:10;17968:22;;;;;;;;;;;;;;;:28;17991:4;17968:28;;;;;;;;;;;:40;;;;18020:85;18027:3;18032:8;18042:9;18053;18064:10;18076:7;18085:10;18097:1;18100;18103;18020:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17483:628;;;;;;;;;:::o;12428:459::-;12502:9;;;;;;;;;;;12501:10;12493:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12567:1;12552:17;;:5;:17;;;;12544:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12639:6;12610;:13;12617:5;12610:13;;;;;;;;;;;;;;;:25;12624:10;12610:25;;;;;;;;;;;;;;;;:35;;12602:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12709:37;12739:6;12709;:13;12716:5;12709:13;;;;;;;;;;;;;;;:25;12723:10;12709:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;12681:6;:13;12688:5;12681:13;;;;;;;;;;;;;;;:25;12695:10;12681:25;;;;;;;;;;;;;;;:65;;;;12767:5;12752:30;;;12783:10;12795:6;12752:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12752:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12752:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12752:50:0;;;;;;;;;;;;;;;;;12814:67;12823:3;12828:5;12835:10;12847:6;12855;:13;12862:5;12855:13;;;;;;;;;;;;;;;:25;12869:10;12855:25;;;;;;;;;;;;;;;;12814:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12428:459;;:::o;16439:727::-;16613:4;16626:12;16676:4;16683:8;16693:9;16704;16715:10;16727:7;16651:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16651:84:0;;;16641:95;;;;;;16626:110;;16743:15;16780:6;:12;16787:4;16780:12;;;;;;;;;;;;;;;:18;16793:4;16780:18;;;;;;;;;;;;;;;;;;;;;:116;;;;16892:4;16802:94;;:86;16875:4;16822:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16822:58:0;;;16812:69;;;;;;16882:1;16884;16886;16802:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16802:86:0;;;;;;;;:94;;;16780:116;16779:152;;;;;16924:7;16908:12;:23;;16779:152;16765:183;;16947:1;16940:8;;;;;;16765:183;17009:10;16968:38;16996:9;16968:6;:17;16975:9;16968:17;;;;;;;;;;;;;;;:23;16986:4;16968:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;:51;;;;;;16955:64;;17074:10;17036:37;17050:10;:16;17061:4;17050:16;;;;;;;;;;;;;;;:22;17067:4;17050:22;;;;;;;;;;;;17036:9;:13;;:37;;;;:::i;:::-;:48;17032:98;;;17093:37;17107:10;:16;17118:4;17107:16;;;;;;;;;;;;;;;:22;17124:4;17107:22;;;;;;;;;;;;17093:9;:13;;:37;;;;:::i;:::-;17086:44;;;;;;17032:98;17144:10;17137:17;;;;16439:727;;;;;;;;;;;;:::o;7206:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19451:549::-;19496:4;19523:25;19551:10;19523:38;;19582:21;19606:20;:31;19627:9;19606:31;;;;;;;;;;;;;;;;19582:55;;19682:1;19666:13;:17;19658:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19760:1;19726:20;:31;19747:9;19726:31;;;;;;;;;;;;;;;:35;;;;19831:9;:18;;:33;19850:13;19831:33;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19831:33:0;19946:13;19935:9;19912:48;;;;;;;;;;;;19988:4;19981:11;;;;19451:549;:::o;17172:305::-;17312:4;17325:12;17375:4;17382:8;17392:9;17403;17414:10;17426:7;17350:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17350:84:0;;;17340:95;;;;;;17325:110;;17449:10;:16;17460:4;17449:16;;;;;;;;;;;;;;;:22;17466:4;17449:22;;;;;;;;;;;;17442:29;;;17172:305;;;;;;;;:::o;6197:111::-;6124:5;;;;;;;;;;;6110:19;;:10;:19;;;6102:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6291:9;6280:8;;:20;;;;;;;;;;;;;;;;;;6197:111;:::o;11285:216::-;11359:45;11394:9;11359:6;:18;11374:1;11359:18;;;;;;;;;;;;;;;:30;11378:10;11359:30;;;;;;;;;;;;;;;;:34;;:45;;;;:::i;:::-;11326:6;:18;11341:1;11326:18;;;;;;;;;;;;;;;:30;11345:10;11326:30;;;;;;;;;;;;;;;:78;;;;11416:79;11424:3;11437:1;11441:10;11453:9;11464:6;:18;11479:1;11464:18;;;;;;;;;;;;;;;:30;11483:10;11464:30;;;;;;;;;;;;;;;;11416:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11285:216::o;13515:1027::-;13694:9;;;;;;;;;;;13693:10;13685:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13772:12;13822:4;13829:12;13842:1;13829:15;;;;;;;;;;;13846:9;13857:12;13870:1;13857:15;;;;;;;;;;;13874:10;13886:7;13797:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13797:97:0;;;13787:108;;;;;;13772:123;;13910:6;:23;13917:12;13930:1;13917:15;;;;;;;;;;;13910:23;;;;;;;;;;;;;;;:29;13934:4;13910:29;;;;;;;;;;;;;;;;;;;;;:138;;;;14033:12;14046:1;14033:15;;;;;;;;;;;13943:105;;:86;14016:4;13963:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13963:58:0;;;13953:69;;;;;;14023:1;14025;14027;13943:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13943:86:0;;;;;;;;:105;;;13910:138;13902:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14108:7;14092:12;:23;;14084:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14200:9;14151:45;14189:6;14151:10;:27;14162:12;14175:1;14162:15;;;;;;;;;;;14151:27;;;;;;;;;;;;;;;:33;14179:4;14151:33;;;;;;;;;;;;:37;;:45;;;;:::i;:::-;:58;;14143:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14244:59;14258:12;14272:9;14283:10;14295:6;14244:13;:59::i;:::-;14346:45;14384:6;14346:10;:27;14357:12;14370:1;14357:15;;;;;;;;;;;14346:27;;;;;;;;;;;;;;;:33;14374:4;14346:33;;;;;;;;;;;;:37;;:45;;;;:::i;:::-;14310:10;:27;14321:12;14334:1;14321:15;;;;;;;;;;;14310:27;;;;;;;;;;;;;;;:33;14338:4;14310:33;;;;;;;;;;;:81;;;;14409:127;14415:3;14420:12;14433:1;14420:15;;;;;;;;;;;14437:6;14445:12;14458:1;14445:15;;;;;;;;;;;14484:9;14475:6;14462:10;:19;:31;;;;;;14495:12;14508:1;14495:15;;;;;;;;;;;14512:10;14524:11;14409:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13515:1027;;;;;;;;;;:::o;12893:114::-;12962:4;12982:6;:13;12989:5;12982:13;;;;;;;;;;;;;;;:19;12996:4;12982:19;;;;;;;;;;;;;;;;12975:26;;12893:114;;;;:::o;10325:440::-;10382:13;10427:10;;;;;;;;;;;10413:24;;:10;:24;;;10405:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10465:14;10482:31;:29;:31::i;:::-;10465:48;;10540:1;10531:6;:10;10522:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10607:1;10574:6;:18;10589:1;10574:18;;;;;;;;;;;;;;;:30;10593:10;;;;;;;;;;;10574:30;;;;;;;;;;;;;;;:34;;;;10617:10;:19;;:27;10637:6;10617:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10617:27:0;10702:1;10658:55;;10682:10;10658:55;;;10706:6;10658:55;;;;;;;;;;;;;;;;;;10722:37;;;;;;;;;;;;;;;;;;;;10325:440;:::o;3057:184::-;3115:7;3148:1;3143;:6;;3135:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3195:9;3211:1;3207;:5;3195:17;;3232:1;3225:8;;;3057:184;;;;:::o;2601:181::-;2659:7;2679:9;2695:1;2691;:5;2679:17;;2720:1;2715;:6;;2707:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2773:1;2766:8;;;2601:181;;;;:::o;3492:470::-;3550:7;3799:1;3794;:6;3790:47;;;3824:1;3817:8;;;;3790:47;3849:9;3865:1;3861;:5;3849:17;;3894:1;3889;3885;:5;;;;;;:10;3877:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3953:1;3946:8;;;3492:470;;;;;:::o;14691:889::-;14814:19;14836:38;14856:6;14863:10;;14836:19;:38::i;:::-;14814:60;;14953:53;14974:12;14987:1;14974:15;;;;;;;;;;;14991:14;14953:20;:53::i;:::-;15053:67;15093:26;15104:14;15093:6;:10;;:26;;;;:::i;:::-;15053:6;:23;15060:12;15073:1;15060:15;;;;;;;;;;;15053:23;;;;;;;;;;;;;;;:35;15077:10;15053:35;;;;;;;;;;;;;;;;:39;;:67;;;;:::i;:::-;15015:6;:23;15022:12;15035:1;15022:15;;;;;;;;;;;15015:23;;;;;;;;;;;;;;;:35;15039:10;15015:35;;;;;;;;;;;;;;;:105;;;;15170:52;15215:6;15170;:23;15177:12;15190:1;15177:15;;;;;;;;;;;15170:23;;;;;;;;;;;;;;;:40;15194:12;15207:1;15194:15;;;;;;;;;;;15170:40;;;;;;;;;;;;;;;;:44;;:52;;;;:::i;:::-;15127:6;:23;15134:12;15147:1;15134:15;;;;;;;;;;;15127:23;;;;;;;;;;;;;;;:40;15151:12;15164:1;15151:15;;;;;;;;;;;15127:40;;;;;;;;;;;;;;;:95;;;;15267:55;15307:14;15267:6;:23;15274:12;15287:1;15274:15;;;;;;;;;;;15267:23;;;;;;;;;;;;;;;:35;15291:10;;;;;;;;;;;15267:35;;;;;;;;;;;;;;;;:39;;:55;;;;:::i;:::-;15229:6;:23;15236:12;15249:1;15236:15;;;;;;;;;;;15229:23;;;;;;;;;;;;;;;:35;15253:10;;;;;;;;;;;15229:35;;;;;;;;;;;;;;;:93;;;;15374:80;15444:9;15419:22;15434:6;15419:10;:14;;:22;;;;:::i;:::-;:34;;;;;;15374:6;:23;15381:12;15394:1;15381:15;;;;;;;;;;;15374:23;;;;;;;;;;;;;;;:40;15398:12;15411:1;15398:15;;;;;;;;;;;15374:40;;;;;;;;;;;;;;;;:44;;:80;;;;:::i;:::-;15331:6;:23;15338:12;15351:1;15338:15;;;;;;;;;;;15331:23;;;;;;;;;;;;;;;:40;15355:12;15368:1;15355:15;;;;;;;;;;;15331:40;;;;;;;;;;;;;;;:123;;;;15499:75;15564:9;15539:22;15554:6;15539:10;:14;;:22;;;;:::i;:::-;:34;;;;;;15499:6;:23;15506:12;15519:1;15506:15;;;;;;;;;;;15499:23;;;;;;;;;;;;;;;:35;15523:10;15499:35;;;;;;;;;;;;;;;;:39;;:75;;;;:::i;:::-;15461:6;:23;15468:12;15481:1;15468:15;;;;;;;;;;;15461:23;;;;;;;;;;;;;;;:35;15485:10;15461:35;;;;;;;;;;;;;;;:113;;;;14691:889;;;;;:::o;9191:329::-;9282:7;9308:14;9325:6;9308:23;;9389:6;9376:9;:19;;9368:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:9;9457:36;9486:6;9457:24;9471:9;9457;:13;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;9445:48;;9511:1;9504:8;;;;9191:329;;;;:::o;18289:797::-;18390:24;18417:9;:21;18427:10;18417:21;;;;;;;;;;;;;;;;;;;;;;;;;18390:48;;18479:1;18458:23;;:9;:23;;;;:57;;;;;18513:1;18485:30;;:16;:30;;;;18458:57;18455:626;;;18602:3;18589:10;;18570:16;:29;:35;;;;;;18528:20;:38;18549:16;18528:38;;;;;;;;;;;;;;;;:77;;;;;;;;;;;18646:10;18621:79;;18635:9;18621:79;;;18690:3;18677:10;;18658:16;:29;:35;;;;;;18695:3;18621:79;;;;;;;;;;;;;;;;;;;;;;;;18455:626;;;18747:1;18726:23;;:9;:23;;;;:57;;;;;18781:1;18753:30;;:16;:30;;;18726:57;18723:358;;;18929:3;18916:10;;18897:16;:29;:35;;;;;;18862:20;:31;18883:9;18862:31;;;;;;;;;;;;;;;;:70;;;;;;;;;;;18967:9;18943;:21;18953:10;18943:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19017:10;18992:79;;19006:9;18992:79;;;19061:3;19048:10;;19029:16;:29;:35;;;;;;19066:3;18992:79;;;;;;;;;;;;;;;;;;;;;;;;18723:358;18455:626;18289:797;;;:::o;4430:333::-;4488:7;4587:1;4583;:5;4575:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:9;4646:1;4642;:5;;;;;;4630:17;;4754:1;4747:8;;;4430:333;;;;:::o

Swarm Source

bzzr://39b5efe9a083b63d43a6f524a43a5d2aa828dace2f671f2e473b36a6a2ad991f

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.