ETH Price: $3,409.70 (-1.02%)
Gas: 2 Gwei

Token

iearn USDT (yUSDT)
 

Overview

Max Total Supply

2,159,472,999,090,562.139675 yUSDT

Holders

1,026 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.000065 yUSDT

Value
$0.00
0x87d3ee8cc75c3916e3b6f56e307aadcd3afeff68
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Simple auto interest rate switching tokens for Compound, Fulcrum, Aave, and dYdX.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
yUSDT

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-12
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 _totalSupply;
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface Compound {
    function mint ( uint256 mintAmount ) external returns ( uint256 );
    function redeem(uint256 redeemTokens) external returns (uint256);
    function exchangeRateStored() external view returns (uint);
}

interface Fulcrum {
    function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
    function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
    function assetBalanceOf(address _owner) external view returns (uint256 balance);
}

interface ILendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
}

interface Aave {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
}

interface AToken {
    function redeem(uint256 amount) external;
}

interface IIEarnManager {
    function recommend(address _token) external view returns (
      string memory choice,
      uint256 capr,
      uint256 iapr,
      uint256 aapr,
      uint256 dapr
    );
}

contract Structs {
    struct Val {
        uint256 value;
    }

    enum ActionType {
        Deposit,   // supply tokens
        Withdraw  // borrow tokens
    }

    enum AssetDenomination {
        Wei // the amount is denominated in wei
    }

    enum AssetReference {
        Delta // the amount is given as a delta from the current value
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

contract DyDx is Structs {
    function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory);
    function operate(Info[] memory, ActionArgs[] memory) public;
}

interface LendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
}

contract yUSDT is ERC20, ERC20Detailed, ReentrancyGuard, Ownable, Structs {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;

  uint256 public pool;
  address public token;
  address public compound;
  address public fulcrum;
  address public aave;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;

  enum Lender {
      NONE,
      DYDX,
      COMPOUND,
      AAVE,
      FULCRUM
  }

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("iearn USDT", "yUSDT", 6) {
    token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x71fc860F7D3A592A4a98740e39dB31d25db65ae8);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 0;
    approveToken();
  }

  // Ownable setters incase of support in future for these systems
  function set_new_APR(address _new_APR) public onlyOwner {
      apr = _new_APR;
  }
  function set_new_FULCRUM(address _new_FULCRUM) public onlyOwner {
      fulcrum = _new_FULCRUM;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }

  // Quick swap low gas method for pool swaps
  function deposit(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = _calcPoolValueInToken();

      IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);

      // Calculate pool shares
      uint256 shares = 0;
      if (pool == 0) {
        shares = _amount;
        pool = _amount;
      } else {
        shares = (_amount.mul(_totalSupply)).div(pool);
      }
      pool = _calcPoolValueInToken();
      _mint(msg.sender, shares);
  }

  // No rebalance implementation for lower fees and faster swaps
  function withdraw(uint256 _shares)
      external
      nonReentrant
  {
      require(_shares > 0, "withdraw must be greater than 0");

      uint256 ibalance = balanceOf(msg.sender);
      require(_shares <= ibalance, "insufficient balance");

      // Could have over value from cTokens
      pool = _calcPoolValueInToken();
      // Calc to redeem before updating balances
      uint256 r = (pool.mul(_shares)).div(_totalSupply);


      _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
      _totalSupply = _totalSupply.sub(_shares);

      emit Transfer(msg.sender, address(0), _shares);

      // Check balance
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < r) {
        _withdrawSome(r.sub(b));
      }

      IERC20(token).safeTransfer(msg.sender, r);
      pool = _calcPoolValueInToken();
  }

  function() external payable {

  }

  function recommend() public view returns (Lender) {
    (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token);
    uint256 max = 0;
    if (capr > max) {
      max = capr;
    }
    if (iapr > max) {
      max = iapr;
    }
    if (aapr > max) {
      max = aapr;
    }
    if (dapr > max) {
      max = dapr;
    }

    Lender newProvider = Lender.NONE;
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    } else if (max == iapr) {
      newProvider = Lender.FULCRUM;
    } else if (max == aapr) {
      newProvider = Lender.AAVE;
    } else if (max == dapr) {
      newProvider = Lender.DYDX;
    }
    return newProvider;
  }

  function supplyDydx(uint256 amount) public returns(uint) {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Deposit;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function _withdrawDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Withdraw;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function getAave() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPool();
  }
  function getAaveCore() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPoolCore();
  }

  function approveToken() public {
      IERC20(token).safeApprove(compound, uint(-1)); //also add to constructor
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(-1));
  }

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function balanceDydx() public view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function balanceCompound() public view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function balanceCompoundInToken() public view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function balanceFulcrumInToken() public view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function balanceFulcrum() public view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _balance() internal view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  function _balanceDydx() internal view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function _balanceCompound() internal view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function _balanceCompoundInToken() internal view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function _balanceFulcrumInToken() internal view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function _balanceFulcrum() internal view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function _balanceAave() internal view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function _withdrawAll() internal {
    uint256 amount = _balanceCompound();
    if (amount > 0) {
      _withdrawCompound(amount);
    }
    amount = _balanceDydx();
    if (amount > 0) {
      _withdrawDydx(amount);
    }
    amount = _balanceFulcrum();
    if (amount > 0) {
      _withdrawFulcrum(amount);
    }
    amount = _balanceAave();
    if (amount > 0) {
      _withdrawAave(amount);
    }
  }

  function _withdrawSomeCompound(uint256 _amount) internal {
    uint256 b = balanceCompound();
    uint256 bT = balanceCompoundInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawCompound(amount);
  }

  // 1999999614570950845
  function _withdrawSomeFulcrum(uint256 _amount) internal {
    // Balance of fulcrum tokens, 1 iDAI = 1.00x DAI
    uint256 b = balanceFulcrum(); // 1970469086655766652
    // Balance of token in fulcrum
    uint256 bT = balanceFulcrumInToken(); // 2000000803224344406
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }

  function _withdrawSome(uint256 _amount) internal {
    if (provider == Lender.COMPOUND) {
      _withdrawSomeCompound(_amount);
    }
    if (provider == Lender.AAVE) {
      require(balanceAave() >= _amount, "insufficient funds");
      _withdrawAave(_amount);
    }
    if (provider == Lender.DYDX) {
      require(balanceDydx() >= _amount, "insufficient funds");
      _withdrawDydx(_amount);
    }
    if (provider == Lender.FULCRUM) {
      _withdrawSomeFulcrum(_amount);
    }
  }

  function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  // Internal only rebalance for better gas in redeem
  function _rebalance(Lender newProvider) internal {
    if (_balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(_balance());
      } else if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(_balance());
      } else if (newProvider == Lender.COMPOUND) {
        supplyCompound(_balance());
      } else if (newProvider == Lender.AAVE) {
        supplyAave(_balance());
      }
    }
    provider = newProvider;
  }

  function supplyAave(uint amount) public {
      Aave(getAave()).deposit(token, amount, 0);
  }
  function supplyFulcrum(uint amount) public {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function supplyCompound(uint amount) public {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _calcPoolValueInToken() internal view returns (uint) {
    return _balanceCompoundInToken()
      .add(_balanceFulcrumInToken())
      .add(_balanceDydx())
      .add(_balanceAave())
      .add(_balance());
  }

  function calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

  function getPricePerFullShare() public view returns (uint) {
    uint _pool = calcPoolValueInToken();
    return _pool.mul(1e18).div(_totalSupply);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yUSDT.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_FULCRUM","type":"address"}],"name":"set_new_FULCRUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000601060146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600a81526020017f696561726e2055534454000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f795553445400000000000000000000000000000000000000000000000000000081525060068260039080519060200190620000bd92919062000a9b565b508160049080519060200190620000d692919062000a9b565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d6200043b60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a373dac17f958d2ee523a2206206994597c13d831ec7600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd6d648c991f7d47454354f4ef326b04025a48a8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f013406a0b1d544238083df0b93ad0d2cbe0f65f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507371fc860f7d3a592a4a98740e39db31d25db65ae8600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f81905550620004356200044360201b60201c565b62000fb0565b600033905090565b620004d9600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068a60201b6200341b179092919060201c565b6200056f600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068a60201b6200341b179092919060201c565b620005f2620005836200081560201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068a60201b6200341b179092919060201c565b62000688600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200068a60201b6200341b179092919060201c565b565b60008114806200072a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620006d492919062000dd9565b60206040518083038186803b158015620006ed57600080fd5b505afa15801562000702573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000728919081019062000be7565b145b6200076c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007639062000e77565b60405180910390fd5b62000810838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401620007a792919062000e06565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050620008c060201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200088057600080fd5b505afa15801562000895573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620008bb919081019062000b8f565b905090565b620008ec8273ffffffffffffffffffffffffffffffffffffffff1662000a4f60201b6200462a1760201c565b6200092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009259062000e99565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000959919062000dc0565b6000604051808303816000865af19150503d806000811462000998576040519150601f19603f3d011682016040523d82523d6000602084013e6200099d565b606091505b509150915081620009e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009dc9062000e33565b60405180910390fd5b60008151111562000a49578080602001905162000a06919081019062000bbb565b62000a48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3f9062000e55565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000a925750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ade57805160ff191683800117855562000b0f565b8280016001018555821562000b0f579182015b8281111562000b0e57825182559160200191906001019062000af1565b5b50905062000b1e919062000b22565b5090565b62000b4791905b8082111562000b4357600081600090555060010162000b29565b5090565b90565b60008151905062000b5b8162000f62565b92915050565b60008151905062000b728162000f7c565b92915050565b60008151905062000b898162000f96565b92915050565b60006020828403121562000ba257600080fd5b600062000bb28482850162000b4a565b91505092915050565b60006020828403121562000bce57600080fd5b600062000bde8482850162000b61565b91505092915050565b60006020828403121562000bfa57600080fd5b600062000c0a8482850162000b78565b91505092915050565b62000c1e8162000ee2565b82525050565b600062000c318262000ebb565b62000c3d818562000ec6565b935062000c4f81856020860162000f2c565b80840191505092915050565b600062000c6a60208362000ed1565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000cac602a8362000ed1565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000d1460368362000ed1565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000d7c601f8362000ed1565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000dba8162000f22565b82525050565b600062000dce828462000c24565b915081905092915050565b600060408201905062000df0600083018562000c13565b62000dff602083018462000c13565b9392505050565b600060408201905062000e1d600083018562000c13565b62000e2c602083018462000daf565b9392505050565b6000602082019050818103600083015262000e4e8162000c5b565b9050919050565b6000602082019050818103600083015262000e708162000c9d565b9050919050565b6000602082019050818103600083015262000e928162000d05565b9050919050565b6000602082019050818103600083015262000eb48162000d6d565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600062000eef8262000f02565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f4c57808201518184015260208101905062000f2f565b8381111562000f5c576000848401525b50505050565b62000f6d8162000ee2565b811462000f7957600080fd5b50565b62000f878162000ef6565b811462000f9357600080fd5b50565b62000fa18162000f22565b811462000fad57600080fd5b50565b615e948062000fc06000396000f3fe6080604052600436106102ae5760003560e01c8063819faf7b11610175578063b6b55f25116100dc578063f2fde38b11610095578063f69e20461161006f578063f69e204614610a7f578063f7c1ec7714610aaa578063f82ce27d14610ad5578063fc0c546a14610b00576102ae565b8063f2fde38b14610a02578063f5a41dea14610a2b578063f5ff191614610a56576102ae565b8063b6b55f25146108f4578063bbf316441461091d578063cf8ca42614610946578063d9d7858a14610971578063dd62ed3e1461099c578063e849d659146109d9576102ae565b80639ff011b91161012e5780639ff011b9146107d0578063a160176d146107f9578063a457c2d714610824578063a728797114610861578063a9059cbb1461088c578063b69ef8a8146108c9576102ae565b8063819faf7b146106e25780638da5cb5b1461070d5780638e4ec6ef146107385780638f32d59b1461076357806395d89b411461078e57806399b71d5c146107b9576102ae565b806339c0a7e11161021957806370a08231116101d257806370a08231146105f85780637137ef9914610635578063715018a61461066057806377c7b8fc146106775780637d7c2a1c146106a25780638124955c146106b9576102ae565b806339c0a7e1146104fa578063463574731461052557806357ded9c91461054e57806358782c211461057957806361c1ec55146105a457806365aab749146105cf576102ae565b806316f0115b1161026b57806316f0115b146103d657806318160ddd1461040157806323b872dd1461042c5780632e1a7d4d14610469578063313ce5671461049257806339509351146104bd576102ae565b806306636c1c146102b057806306a3fe59146102ed57806306fdde0314610318578063085d488314610343578063095ea7b31461036e5780630eb2a267146103ab575b005b3480156102bc57600080fd5b506102d760048036036102d29190810190614b18565b610b2b565b6040516102e49190615a93565b60405180910390f35b3480156102f957600080fd5b50610302610d69565b60405161030f91906155fc565b60405180910390f35b34801561032457600080fd5b5061032d610d8f565b60405161033a9190615788565b60405180910390f35b34801561034f57600080fd5b50610358610e31565b604051610365919061576d565b60405180910390f35b34801561037a57600080fd5b50610395600480360361039091908101906149fb565b610e44565b6040516103a29190615752565b60405180910390f35b3480156103b757600080fd5b506103c0610e62565b6040516103cd9190615a93565b60405180910390f35b3480156103e257600080fd5b506103eb610f14565b6040516103f89190615a93565b60405180910390f35b34801561040d57600080fd5b50610416610f1a565b6040516104239190615a93565b60405180910390f35b34801561043857600080fd5b50610453600480360361044e91908101906149ac565b610f24565b6040516104609190615752565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190614b18565b610ffd565b005b34801561049e57600080fd5b506104a76113a7565b6040516104b49190615aae565b60405180910390f35b3480156104c957600080fd5b506104e460048036036104df91908101906149fb565b6113be565b6040516104f19190615752565b60405180910390f35b34801561050657600080fd5b5061050f611471565b60405161051c9190615a93565b60405180910390f35b34801561053157600080fd5b5061054c6004803603610547919081019061491e565b611561565b005b34801561055a57600080fd5b506105636115ec565b60405161057091906155fc565b60405180910390f35b34801561058557600080fd5b5061058e611612565b60405161059b91906155fc565b60405180910390f35b3480156105b057600080fd5b506105b9611638565b6040516105c69190615a93565b60405180910390f35b3480156105db57600080fd5b506105f660048036036105f19190810190614b18565b6116ea565b005b34801561060457600080fd5b5061061f600480360361061a919081019061491e565b611786565b60405161062c9190615a93565b60405180910390f35b34801561064157600080fd5b5061064a6117ce565b6040516106579190615a93565b60405180910390f35b34801561066c57600080fd5b50610675611841565b005b34801561068357600080fd5b5061068c611949565b6040516106999190615a93565b60405180910390f35b3480156106ae57600080fd5b506106b761198b565b005b3480156106c557600080fd5b506106e060048036036106db9190810190614b18565b611ad2565b005b3480156106ee57600080fd5b506106f7611bc6565b60405161070491906155fc565b60405180910390f35b34801561071957600080fd5b50610722611bec565b60405161072f91906155fc565b60405180910390f35b34801561074457600080fd5b5061074d611c16565b60405161075a91906155fc565b60405180910390f35b34801561076f57600080fd5b50610778611c3c565b6040516107859190615752565b60405180910390f35b34801561079a57600080fd5b506107a3611c9b565b6040516107b09190615788565b60405180910390f35b3480156107c557600080fd5b506107ce611d3d565b005b3480156107dc57600080fd5b506107f760048036036107f29190810190614b18565b611f60565b005b34801561080557600080fd5b5061080e611fb1565b60405161081b919061576d565b60405180910390f35b34801561083057600080fd5b5061084b600480360361084691908101906149fb565b61211d565b6040516108589190615752565b60405180910390f35b34801561086d57600080fd5b506108766121ea565b6040516108839190615a93565b60405180910390f35b34801561089857600080fd5b506108b360048036036108ae91908101906149fb565b6122d6565b6040516108c09190615752565b60405180910390f35b3480156108d557600080fd5b506108de6122f4565b6040516108eb9190615a93565b60405180910390f35b34801561090057600080fd5b5061091b60048036036109169190810190614b18565b6123a6565b005b34801561092957600080fd5b50610944600480360361093f919081019061491e565b61250a565b005b34801561095257600080fd5b5061095b612595565b6040516109689190615a93565b60405180910390f35b34801561097d57600080fd5b50610986612647565b6040516109939190615a93565b60405180910390f35b3480156109a857600080fd5b506109c360048036036109be9190810190614970565b61264d565b6040516109d09190615a93565b60405180910390f35b3480156109e557600080fd5b50610a0060048036036109fb9190810190614b18565b6126d4565b005b348015610a0e57600080fd5b50610a296004803603610a24919081019061491e565b6127c6565b005b348015610a3757600080fd5b50610a40612819565b604051610a4d9190615a93565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603610a78919081019061491e565b6128e4565b005b348015610a8b57600080fd5b50610a9461296f565b604051610aa191906155fc565b60405180910390f35b348015610ab657600080fd5b50610abf612995565b604051610acc91906155fc565b60405180910390f35b348015610ae157600080fd5b50610aea612a3c565b604051610af791906155fc565b60405180910390f35b348015610b0c57600080fd5b50610b15612ae3565b604051610b2291906155fc565b60405180910390f35b600060606001604051908082528060200260200182016040528015610b6a57816020015b610b57614675565b815260200190600190039081610b4f5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110610ba657fe5b6020026020010181905250610bb96146a5565b6040518060800160405280600115158152602001600080811115610bd957fe5b8152602001600080811115610bea57fe5b8152602001858152509050610bfd6146e3565b600081600001906001811115610c0f57fe5b90816001811115610c1c57fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015610cb557816020015b610ca261474f565b815260200190600190039081610c9a5790505b5090508181600081518110610cc657fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401610d2e92919061571b565b600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b5050505050505050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b6000610e58610e51612b09565b8484612b11565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ebf9190615617565b60206040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f0f9190810190614b41565b905090565b60085481565b6000600254905090565b6000610f31848484612cdc565b610ff284610f3d612b09565b610fed85604051806060016040528060288152602001615e0560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fa3612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b612b11565b600190509392505050565b60016006600082825401925050819055506000600654905060008211611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f9061590a565b60405180910390fd5b600061106333611786565b9050808311156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906158ea565b60405180910390fd5b6110b0612fc1565b60088190555060006110e16002546110d38660085461303490919063ffffffff16565b6130a490919063ffffffff16565b905061116b846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c2846002546130ee90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516112269190615a93565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128b9190615617565b60206040518083038186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112db9190810190614b41565b905081811015611301576113006112fb82846130ee90919063ffffffff16565b613138565b5b61134e3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132ae9092919063ffffffff16565b611356612fc1565b60088190555050505060065481146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a906159ea565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006114676113cb612b09565b8461146285600160006113dc612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b612b11565b6001905092915050565b600061147b6147bb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b8152600401611505929190615a6a565b604080518083038186803b15801561151c57600080fd5b505afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115549190810190614aef565b9050806020015191505090565b611569611c3c565b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906158ca565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116959190615617565b60206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116e59190810190614b41565b905090565b6116f2612995565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401611751939291906156e4565b600060405180830381600087803b15801561176b57600080fd5b505af115801561177f573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061183c6117db6122f4565b61182e6117e6612595565b6118206117f1611471565b6118126117fc612819565b6118046121ea565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b905090565b611849611c3c565b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906158ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806119546117ce565b9050611985600254611977670de0b6b3a76400008461303490919063ffffffff16565b6130a490919063ffffffff16565b91505090565b6000611995611fb1565b9050601060149054906101000a900460ff1660048111156119b257fe5b8160048111156119be57fe5b146119cc576119cb6133a2565b5b60006119d66122f4565b1115611aac57600160048111156119e957fe5b8160048111156119f557fe5b1415611a1157611a0b611a066122f4565b610b2b565b50611aab565b600480811115611a1d57fe5b816004811115611a2957fe5b1415611a4457611a3f611a3a6122f4565b611ad2565b611aaa565b60026004811115611a5157fe5b816004811115611a5d57fe5b1415611a7857611a73611a6e6122f4565b6126d4565b611aa9565b60036004811115611a8557fe5b816004811115611a9157fe5b1415611aa857611aa7611aa26122f4565b6116ea565b5b5b5b5b5b80601060146101000a81548160ff02191690836004811115611aca57fe5b021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401611b31929190615632565b602060405180830381600087803b158015611b4b57600080fd5b505af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b839190810190614b41565b11611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba906159aa565b60405180910390fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c7f612b09565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d335780601f10611d0857610100808354040283529160200191611d33565b820191906000526020600020905b815481529060010190602001808311611d1657829003601f168201915b5050505050905090565b611dcc600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611e5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611ecf611e66612a3c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611f5e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b565b611f68611c3c565b611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e906158ca565b60405180910390fd5b80600f8190555050565b6000806000806000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161203691906155fc565b60006040518083038186803b15801561204e57600080fd5b505afa158015612062573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061208b9190810190614a60565b9450945094509450506000809050808511156120a5578490505b808411156120b1578390505b808311156120bd578290505b808211156120c9578190505b6000809050858214156120df5760029050612111565b848214156120f05760049050612110565b83821415612101576003905061210f565b8282141561210e57600190505b5b5b5b80965050505050505090565b60006121e061212a612b09565b846121db85604051806060016040528060258152602001615e2d6025913960016000612154612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b612b11565b6001905092915050565b6000806121f5611638565b905060008111156122cf576122cc670de0b6b3a76400006122be600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122af9190810190614b41565b8461303490919063ffffffff16565b6130a490919063ffffffff16565b90505b8091505090565b60006122ea6122e3612b09565b8484612cdc565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123519190615617565b60206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123a19190810190614b41565b905090565b60016006600082825401925050819055506000600654905060008211612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061598a565b60405180910390fd5b612409612fc1565b60088190555061245e333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613592909392919063ffffffff16565b60008090506000600854141561247d57829050826008819055506124a9565b6124a66008546124986002548661303490919063ffffffff16565b6130a490919063ffffffff16565b90505b6124b1612fc1565b6008819055506124c13382613634565b506006548114612506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fd906159ea565b60405180910390fd5b5050565b612512611c3c565b612551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612548906158ca565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125f29190615617565b60206040518083038186803b15801561260a57600080fd5b505afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126429190810190614b41565b905090565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b81526004016127319190615a93565b602060405180830381600087803b15801561274b57600080fd5b505af115801561275f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127839190810190614b41565b146127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba9061582a565b60405180910390fd5b50565b6127ce611c3c565b61280d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612804906158ca565b60405180910390fd5b612816816137bc565b50565b600080612824610e62565b905060008111156128dd57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b815260040161288a9190615617565b60206040518083038186803b1580156128a257600080fd5b505afa1580156128b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128da9190810190614b41565b90505b8091505090565b6128ec611c3c565b61292b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612922906158ca565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ff57600080fd5b505afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a379190810190614947565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612aa657600080fd5b505afa158015612aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ade9190810190614947565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061596a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89061580a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ccf9190615a93565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d439061592a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db3906157aa565b60405180910390fd5b612e2781604051806060016040528060268152602001615ddf602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eba816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f599190615a93565b60405180910390a3505050565b6000838311158290612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa59190615788565b60405180910390fd5b5060008385039050809150509392505050565b600061302f612fce6138ec565b613021612fd961399e565b613013612fe4613a50565b613005612fef613b40565b612ff7613c0b565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b905090565b600080831415613047576000905061309e565b600082840290508284828161305857fe5b0414613099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130909061588a565b60405180910390fd5b809150505b92915050565b60006130e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cf7565b905092915050565b600061313083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f66565b905092915050565b6002600481111561314557fe5b601060149054906101000a900460ff16600481111561316057fe5b14156131705761316f81613d58565b5b6003600481111561317d57fe5b601060149054906101000a900460ff16600481111561319857fe5b14156131f257806131a7612595565b10156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df9061594a565b60405180910390fd5b6131f181613dfe565b5b600160048111156131ff57fe5b601060149054906101000a900460ff16600481111561321a57fe5b14156132745780613229611471565b101561326a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132619061594a565b60405180910390fd5b61327381613e8e565b5b60048081111561328057fe5b601060149054906101000a900460ff16600481111561329b57fe5b14156132ab576132aa816140c8565b5b50565b613348838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b84846040516024016132e69291906156bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b505050565b600080828401905083811015613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f9061584a565b60405180910390fd5b8091505092915050565b60006133ac6142e0565b905060008111156133c1576133c081614392565b5b6133c9613a50565b905060008111156133de576133dd81613e8e565b5b6133e6614484565b905060008111156133fb576133fa81614536565b5b61340361399e565b905060008111156134185761341781613dfe565b5b50565b60008114806134b4575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161346292919061565b565b60206040518083038186803b15801561347a57600080fd5b505afa15801561348e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134b29190810190614b41565b145b6134f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea90615a0a565b60405180910390fd5b61358d838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b848460405160240161352b9291906156bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b505050565b61362e848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b8585856040516024016135cc93929190615684565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369b90615a4a565b60405180910390fd5b6136b98160025461334d90919063ffffffff16565b600281905550613710816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b09190615a93565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561382c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613823906157ea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139499190615617565b60206040518083038186803b15801561396157600080fd5b505afa158015613975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506139999190810190614b41565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139fb9190615617565b60206040518083038186803b158015613a1357600080fd5b505afa158015613a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a4b9190810190614b41565b905090565b6000613a5a6147bb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b8152600401613ae4929190615a6a565b604080518083038186803b158015613afb57600080fd5b505afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b339190810190614aef565b9050806020015191505090565b600080613b4b610e62565b90506000811115613c0457600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401613bb19190615617565b60206040518083038186803b158015613bc957600080fd5b505afa158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613c019190810190614b41565b90505b8091505090565b600080613c16611638565b90506000811115613cf057613ced670de0b6b3a7640000613cdf600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015613c9857600080fd5b505afa158015613cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613cd09190810190614b41565b8461303490919063ffffffff16565b6130a490919063ffffffff16565b90505b8091505090565b60008083118290613d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d359190615788565b60405180910390fd5b506000838581613d4a57fe5b049050809150509392505050565b6000613d62611638565b90506000613d6e6121ea565b905082811015613db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daa9061594a565b60405180910390fd5b6000613ded6001613ddf84613dd1888861303490919063ffffffff16565b6130a490919063ffffffff16565b61334d90919063ffffffff16565b9050613df881614392565b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613e599190615a93565b600060405180830381600087803b158015613e7357600080fd5b505af1158015613e87573d6000803e3d6000fd5b5050505050565b60606001604051908082528060200260200182016040528015613ecb57816020015b613eb8614675565b815260200190600190039081613eb05790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110613f0757fe5b6020026020010181905250613f1a6146a5565b6040518060800160405280600015158152602001600080811115613f3a57fe5b8152602001600080811115613f4b57fe5b8152602001848152509050613f5e6146e3565b600181600001906001811115613f7057fe5b90816001811115613f7d57fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600160405190808252806020026020018201604052801561401657816020015b61400361474f565b815260200190600190039081613ffb5790505b509050818160008151811061402757fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b815260040161408f92919061571b565b600060405180830381600087803b1580156140a957600080fd5b505af11580156140bd573d6000803e3d6000fd5b505050505050505050565b60006140d2610e62565b905060006140de612819565b905082811015614123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161411a9061594a565b60405180910390fd5b600061415d600161414f84614141888861303490919063ffffffff16565b6130a490919063ffffffff16565b61334d90919063ffffffff16565b905061416881614536565b50505050565b61418d8273ffffffffffffffffffffffffffffffffffffffff1661462a565b6141cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141c390615a2a565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516141f591906155e5565b6000604051808303816000865af19150503d8060008114614232576040519150601f19603f3d011682016040523d82523d6000602084013e614237565b606091505b50915091508161427c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142739061586a565b60405180910390fd5b6000815111156142da578080602001905161429a9190810190614a37565b6142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142d0906159ca565b60405180910390fd5b5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161433d9190615617565b60206040518083038186803b15801561435557600080fd5b505afa158015614369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061438d9190810190614b41565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016143ef9190615a93565b602060405180830381600087803b15801561440957600080fd5b505af115801561441d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506144419190810190614b41565b14614481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614478906157ca565b60405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016144e19190615617565b60206040518083038186803b1580156144f957600080fd5b505afa15801561450d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145319190810190614b41565b905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401614595929190615632565b602060405180830381600087803b1580156145af57600080fd5b505af11580156145c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145e79190810190614b41565b11614627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161461e906158aa565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561466c5750808214155b92505050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156146c557fe5b81526020016000808111156146d657fe5b8152602001600081525090565b604051806101000160405280600060018111156146fc57fe5b8152602001600081526020016147106147d7565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561476857fe5b81526020016000815260200161477c6147d7565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600015158152602001600081525090565b60405180608001604052806000151581526020016000808111156147f757fe5b815260200160008081111561480857fe5b8152602001600081525090565b60008135905061482481615d99565b92915050565b60008151905061483981615d99565b92915050565b60008151905061484e81615db0565b92915050565b600082601f83011261486557600080fd5b815161487861487382615af6565b615ac9565b9150808252602083016020830185838301111561489457600080fd5b61489f838284615d21565b50505092915050565b6000604082840312156148ba57600080fd5b6148c46040615ac9565b905060006148d48482850161483f565b60008301525060206148e884828501614909565b60208301525092915050565b60008135905061490381615dc7565b92915050565b60008151905061491881615dc7565b92915050565b60006020828403121561493057600080fd5b600061493e84828501614815565b91505092915050565b60006020828403121561495957600080fd5b60006149678482850161482a565b91505092915050565b6000806040838503121561498357600080fd5b600061499185828601614815565b92505060206149a285828601614815565b9150509250929050565b6000806000606084860312156149c157600080fd5b60006149cf86828701614815565b93505060206149e086828701614815565b92505060406149f1868287016148f4565b9150509250925092565b60008060408385031215614a0e57600080fd5b6000614a1c85828601614815565b9250506020614a2d858286016148f4565b9150509250929050565b600060208284031215614a4957600080fd5b6000614a578482850161483f565b91505092915050565b600080600080600060a08688031215614a7857600080fd5b600086015167ffffffffffffffff811115614a9257600080fd5b614a9e88828901614854565b9550506020614aaf88828901614909565b9450506040614ac088828901614909565b9350506060614ad188828901614909565b9250506080614ae288828901614909565b9150509295509295909350565b600060408284031215614b0157600080fd5b6000614b0f848285016148a8565b91505092915050565b600060208284031215614b2a57600080fd5b6000614b38848285016148f4565b91505092915050565b600060208284031215614b5357600080fd5b6000614b6184828501614909565b91505092915050565b6000614b768383615452565b905092915050565b6000614b8a838361555a565b60408301905092915050565b614b9f81615c91565b82525050565b614bae81615be2565b82525050565b614bbd81615be2565b82525050565b6000614bce82615b42565b614bd88185615b93565b935083602082028501614bea85615b22565b8060005b85811015614c265784840389528151614c078582614b6a565b9450614c1283615b79565b925060208a01995050600181019050614bee565b50829750879550505050505092915050565b6000614c4382615b4d565b614c4d8185615ba4565b9350614c5883615b32565b8060005b83811015614c89578151614c708882614b7e565b9750614c7b83615b86565b925050600181019050614c5c565b5085935050505092915050565b614c9f81615bf4565b82525050565b614cae81615bf4565b82525050565b6000614cbf82615b63565b614cc98185615bc6565b9350614cd9818560208601615d21565b80840191505092915050565b6000614cf082615b58565b614cfa8185615bb5565b9350614d0a818560208601615d21565b614d1381615d54565b840191505092915050565b614d2781615ca3565b82525050565b614d3681615cb5565b82525050565b614d4581615cc7565b82525050565b614d5481615cd9565b82525050565b614d6381615ceb565b82525050565b6000614d7482615b6e565b614d7e8185615bd1565b9350614d8e818560208601615d21565b614d9781615d54565b840191505092915050565b6000614daf602383615bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e15601983615bd1565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000614e55602683615bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ebb602283615bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f21601783615bd1565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614f61601b83615bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614fa1602083615bd1565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000614fe1602183615bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615047601883615bd1565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615087602083615bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006150c7601483615bd1565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000615107601f83615bd1565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615147602583615bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151ad601283615bd1565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006151ed602483615bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615253601e83615bd1565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000615293601683615bd1565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b60006152d3602a83615bd1565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615339601f83615bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615379603683615bd1565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b60006153df601f83615bd1565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b600061541f601f83615bd1565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006101608301600083015161546b6000860182614d1e565b50602083015161547e60208601826155b8565b5060408301516154916040860182615505565b5060608301516154a460c08601826155b8565b5060808301516154b760e08601826155b8565b5060a08301516154cb610100860182614ba5565b5060c08301516154df6101208601826155b8565b5060e08301518482036101408601526154f88282614ce5565b9150508091505092915050565b60808201600082015161551b6000850182614c96565b50602082015161552e6020850182614d2d565b5060408201516155416040850182614d3c565b50606082015161555460608501826155b8565b50505050565b6040820160008201516155706000850182614ba5565b50602082015161558360208501826155b8565b50505050565b60408201600082015161559f6000850182614ba5565b5060208201516155b260208501826155b8565b50505050565b6155c181615c7a565b82525050565b6155d081615c7a565b82525050565b6155df81615c84565b82525050565b60006155f18284614cb4565b915081905092915050565b60006020820190506156116000830184614bb4565b92915050565b600060208201905061562c6000830184614b96565b92915050565b60006040820190506156476000830185614b96565b61565460208301846155c7565b9392505050565b60006040820190506156706000830185614bb4565b61567d6020830184614bb4565b9392505050565b60006060820190506156996000830186614bb4565b6156a66020830185614bb4565b6156b360408301846155c7565b949350505050565b60006040820190506156d06000830185614bb4565b6156dd60208301846155c7565b9392505050565b60006060820190506156f96000830186614bb4565b61570660208301856155c7565b6157136040830184614d5a565b949350505050565b600060408201905081810360008301526157358185614c38565b905081810360208301526157498184614bc3565b90509392505050565b60006020820190506157676000830184614ca5565b92915050565b60006020820190506157826000830184614d4b565b92915050565b600060208201905081810360008301526157a28184614d69565b905092915050565b600060208201905081810360008301526157c381614da2565b9050919050565b600060208201905081810360008301526157e381614e08565b9050919050565b6000602082019050818103600083015261580381614e48565b9050919050565b6000602082019050818103600083015261582381614eae565b9050919050565b6000602082019050818103600083015261584381614f14565b9050919050565b6000602082019050818103600083015261586381614f54565b9050919050565b6000602082019050818103600083015261588381614f94565b9050919050565b600060208201905081810360008301526158a381614fd4565b9050919050565b600060208201905081810360008301526158c38161503a565b9050919050565b600060208201905081810360008301526158e38161507a565b9050919050565b60006020820190508181036000830152615903816150ba565b9050919050565b60006020820190508181036000830152615923816150fa565b9050919050565b600060208201905081810360008301526159438161513a565b9050919050565b60006020820190508181036000830152615963816151a0565b9050919050565b60006020820190508181036000830152615983816151e0565b9050919050565b600060208201905081810360008301526159a381615246565b9050919050565b600060208201905081810360008301526159c381615286565b9050919050565b600060208201905081810360008301526159e3816152c6565b9050919050565b60006020820190508181036000830152615a038161532c565b9050919050565b60006020820190508181036000830152615a238161536c565b9050919050565b60006020820190508181036000830152615a43816153d2565b9050919050565b60006020820190508181036000830152615a6381615412565b9050919050565b6000606082019050615a7f6000830185615589565b615a8c60408301846155c7565b9392505050565b6000602082019050615aa860008301846155c7565b92915050565b6000602082019050615ac360008301846155d6565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615aec57600080fd5b8060405250919050565b600067ffffffffffffffff821115615b0d57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615bed82615c5a565b9050919050565b60008115159050919050565b6000819050615c0e82615d65565b919050565b6000819050615c2182615d72565b919050565b6000819050615c3482615d7f565b919050565b6000819050615c4782615d8c565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615c9c82615cfd565b9050919050565b6000615cae82615c00565b9050919050565b6000615cc082615c13565b9050919050565b6000615cd282615c26565b9050919050565b6000615ce482615c39565b9050919050565b6000615cf682615c4c565b9050919050565b6000615d0882615d0f565b9050919050565b6000615d1a82615c5a565b9050919050565b60005b83811015615d3f578082015181840152602081019050615d24565b83811115615d4e576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615d6f57fe5b50565b60018110615d7c57fe5b50565b60018110615d8957fe5b50565b60058110615d9657fe5b50565b615da281615be2565b8114615dad57600080fd5b50565b615db981615bf4565b8114615dc457600080fd5b50565b615dd081615c7a565b8114615ddb57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158207de2b83f3c934cb99e26ab81a1fd17eb975cf993c919e81b4640cd7704a4e2c46c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c8063819faf7b11610175578063b6b55f25116100dc578063f2fde38b11610095578063f69e20461161006f578063f69e204614610a7f578063f7c1ec7714610aaa578063f82ce27d14610ad5578063fc0c546a14610b00576102ae565b8063f2fde38b14610a02578063f5a41dea14610a2b578063f5ff191614610a56576102ae565b8063b6b55f25146108f4578063bbf316441461091d578063cf8ca42614610946578063d9d7858a14610971578063dd62ed3e1461099c578063e849d659146109d9576102ae565b80639ff011b91161012e5780639ff011b9146107d0578063a160176d146107f9578063a457c2d714610824578063a728797114610861578063a9059cbb1461088c578063b69ef8a8146108c9576102ae565b8063819faf7b146106e25780638da5cb5b1461070d5780638e4ec6ef146107385780638f32d59b1461076357806395d89b411461078e57806399b71d5c146107b9576102ae565b806339c0a7e11161021957806370a08231116101d257806370a08231146105f85780637137ef9914610635578063715018a61461066057806377c7b8fc146106775780637d7c2a1c146106a25780638124955c146106b9576102ae565b806339c0a7e1146104fa578063463574731461052557806357ded9c91461054e57806358782c211461057957806361c1ec55146105a457806365aab749146105cf576102ae565b806316f0115b1161026b57806316f0115b146103d657806318160ddd1461040157806323b872dd1461042c5780632e1a7d4d14610469578063313ce5671461049257806339509351146104bd576102ae565b806306636c1c146102b057806306a3fe59146102ed57806306fdde0314610318578063085d488314610343578063095ea7b31461036e5780630eb2a267146103ab575b005b3480156102bc57600080fd5b506102d760048036036102d29190810190614b18565b610b2b565b6040516102e49190615a93565b60405180910390f35b3480156102f957600080fd5b50610302610d69565b60405161030f91906155fc565b60405180910390f35b34801561032457600080fd5b5061032d610d8f565b60405161033a9190615788565b60405180910390f35b34801561034f57600080fd5b50610358610e31565b604051610365919061576d565b60405180910390f35b34801561037a57600080fd5b50610395600480360361039091908101906149fb565b610e44565b6040516103a29190615752565b60405180910390f35b3480156103b757600080fd5b506103c0610e62565b6040516103cd9190615a93565b60405180910390f35b3480156103e257600080fd5b506103eb610f14565b6040516103f89190615a93565b60405180910390f35b34801561040d57600080fd5b50610416610f1a565b6040516104239190615a93565b60405180910390f35b34801561043857600080fd5b50610453600480360361044e91908101906149ac565b610f24565b6040516104609190615752565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190614b18565b610ffd565b005b34801561049e57600080fd5b506104a76113a7565b6040516104b49190615aae565b60405180910390f35b3480156104c957600080fd5b506104e460048036036104df91908101906149fb565b6113be565b6040516104f19190615752565b60405180910390f35b34801561050657600080fd5b5061050f611471565b60405161051c9190615a93565b60405180910390f35b34801561053157600080fd5b5061054c6004803603610547919081019061491e565b611561565b005b34801561055a57600080fd5b506105636115ec565b60405161057091906155fc565b60405180910390f35b34801561058557600080fd5b5061058e611612565b60405161059b91906155fc565b60405180910390f35b3480156105b057600080fd5b506105b9611638565b6040516105c69190615a93565b60405180910390f35b3480156105db57600080fd5b506105f660048036036105f19190810190614b18565b6116ea565b005b34801561060457600080fd5b5061061f600480360361061a919081019061491e565b611786565b60405161062c9190615a93565b60405180910390f35b34801561064157600080fd5b5061064a6117ce565b6040516106579190615a93565b60405180910390f35b34801561066c57600080fd5b50610675611841565b005b34801561068357600080fd5b5061068c611949565b6040516106999190615a93565b60405180910390f35b3480156106ae57600080fd5b506106b761198b565b005b3480156106c557600080fd5b506106e060048036036106db9190810190614b18565b611ad2565b005b3480156106ee57600080fd5b506106f7611bc6565b60405161070491906155fc565b60405180910390f35b34801561071957600080fd5b50610722611bec565b60405161072f91906155fc565b60405180910390f35b34801561074457600080fd5b5061074d611c16565b60405161075a91906155fc565b60405180910390f35b34801561076f57600080fd5b50610778611c3c565b6040516107859190615752565b60405180910390f35b34801561079a57600080fd5b506107a3611c9b565b6040516107b09190615788565b60405180910390f35b3480156107c557600080fd5b506107ce611d3d565b005b3480156107dc57600080fd5b506107f760048036036107f29190810190614b18565b611f60565b005b34801561080557600080fd5b5061080e611fb1565b60405161081b919061576d565b60405180910390f35b34801561083057600080fd5b5061084b600480360361084691908101906149fb565b61211d565b6040516108589190615752565b60405180910390f35b34801561086d57600080fd5b506108766121ea565b6040516108839190615a93565b60405180910390f35b34801561089857600080fd5b506108b360048036036108ae91908101906149fb565b6122d6565b6040516108c09190615752565b60405180910390f35b3480156108d557600080fd5b506108de6122f4565b6040516108eb9190615a93565b60405180910390f35b34801561090057600080fd5b5061091b60048036036109169190810190614b18565b6123a6565b005b34801561092957600080fd5b50610944600480360361093f919081019061491e565b61250a565b005b34801561095257600080fd5b5061095b612595565b6040516109689190615a93565b60405180910390f35b34801561097d57600080fd5b50610986612647565b6040516109939190615a93565b60405180910390f35b3480156109a857600080fd5b506109c360048036036109be9190810190614970565b61264d565b6040516109d09190615a93565b60405180910390f35b3480156109e557600080fd5b50610a0060048036036109fb9190810190614b18565b6126d4565b005b348015610a0e57600080fd5b50610a296004803603610a24919081019061491e565b6127c6565b005b348015610a3757600080fd5b50610a40612819565b604051610a4d9190615a93565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603610a78919081019061491e565b6128e4565b005b348015610a8b57600080fd5b50610a9461296f565b604051610aa191906155fc565b60405180910390f35b348015610ab657600080fd5b50610abf612995565b604051610acc91906155fc565b60405180910390f35b348015610ae157600080fd5b50610aea612a3c565b604051610af791906155fc565b60405180910390f35b348015610b0c57600080fd5b50610b15612ae3565b604051610b2291906155fc565b60405180910390f35b600060606001604051908082528060200260200182016040528015610b6a57816020015b610b57614675565b815260200190600190039081610b4f5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110610ba657fe5b6020026020010181905250610bb96146a5565b6040518060800160405280600115158152602001600080811115610bd957fe5b8152602001600080811115610bea57fe5b8152602001858152509050610bfd6146e3565b600081600001906001811115610c0f57fe5b90816001811115610c1c57fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015610cb557816020015b610ca261474f565b815260200190600190039081610c9a5790505b5090508181600081518110610cc657fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401610d2e92919061571b565b600060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b5050505050505050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b6000610e58610e51612b09565b8484612b11565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ebf9190615617565b60206040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f0f9190810190614b41565b905090565b60085481565b6000600254905090565b6000610f31848484612cdc565b610ff284610f3d612b09565b610fed85604051806060016040528060288152602001615e0560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fa3612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b612b11565b600190509392505050565b60016006600082825401925050819055506000600654905060008211611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f9061590a565b60405180910390fd5b600061106333611786565b9050808311156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906158ea565b60405180910390fd5b6110b0612fc1565b60088190555060006110e16002546110d38660085461303490919063ffffffff16565b6130a490919063ffffffff16565b905061116b846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111c2846002546130ee90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516112269190615a93565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128b9190615617565b60206040518083038186803b1580156112a357600080fd5b505afa1580156112b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112db9190810190614b41565b905081811015611301576113006112fb82846130ee90919063ffffffff16565b613138565b5b61134e3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166132ae9092919063ffffffff16565b611356612fc1565b60088190555050505060065481146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a906159ea565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006114676113cb612b09565b8461146285600160006113dc612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b612b11565b6001905092915050565b600061147b6147bb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b8152600401611505929190615a6a565b604080518083038186803b15801561151c57600080fd5b505afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115549190810190614aef565b9050806020015191505090565b611569611c3c565b6115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906158ca565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116959190615617565b60206040518083038186803b1580156116ad57600080fd5b505afa1580156116c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116e59190810190614b41565b905090565b6116f2612995565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401611751939291906156e4565b600060405180830381600087803b15801561176b57600080fd5b505af115801561177f573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061183c6117db6122f4565b61182e6117e6612595565b6118206117f1611471565b6118126117fc612819565b6118046121ea565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b905090565b611849611c3c565b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906158ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806119546117ce565b9050611985600254611977670de0b6b3a76400008461303490919063ffffffff16565b6130a490919063ffffffff16565b91505090565b6000611995611fb1565b9050601060149054906101000a900460ff1660048111156119b257fe5b8160048111156119be57fe5b146119cc576119cb6133a2565b5b60006119d66122f4565b1115611aac57600160048111156119e957fe5b8160048111156119f557fe5b1415611a1157611a0b611a066122f4565b610b2b565b50611aab565b600480811115611a1d57fe5b816004811115611a2957fe5b1415611a4457611a3f611a3a6122f4565b611ad2565b611aaa565b60026004811115611a5157fe5b816004811115611a5d57fe5b1415611a7857611a73611a6e6122f4565b6126d4565b611aa9565b60036004811115611a8557fe5b816004811115611a9157fe5b1415611aa857611aa7611aa26122f4565b6116ea565b5b5b5b5b5b80601060146101000a81548160ff02191690836004811115611aca57fe5b021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401611b31929190615632565b602060405180830381600087803b158015611b4b57600080fd5b505af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b839190810190614b41565b11611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba906159aa565b60405180910390fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c7f612b09565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d335780601f10611d0857610100808354040283529160200191611d33565b820191906000526020600020905b815481529060010190602001808311611d1657829003601f168201915b5050505050905090565b611dcc600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611e5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611ecf611e66612a3c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b611f5e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661341b9092919063ffffffff16565b565b611f68611c3c565b611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e906158ca565b60405180910390fd5b80600f8190555050565b6000806000806000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161203691906155fc565b60006040518083038186803b15801561204e57600080fd5b505afa158015612062573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061208b9190810190614a60565b9450945094509450506000809050808511156120a5578490505b808411156120b1578390505b808311156120bd578290505b808211156120c9578190505b6000809050858214156120df5760029050612111565b848214156120f05760049050612110565b83821415612101576003905061210f565b8282141561210e57600190505b5b5b5b80965050505050505090565b60006121e061212a612b09565b846121db85604051806060016040528060258152602001615e2d6025913960016000612154612b09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b612b11565b6001905092915050565b6000806121f5611638565b905060008111156122cf576122cc670de0b6b3a76400006122be600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122af9190810190614b41565b8461303490919063ffffffff16565b6130a490919063ffffffff16565b90505b8091505090565b60006122ea6122e3612b09565b8484612cdc565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123519190615617565b60206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123a19190810190614b41565b905090565b60016006600082825401925050819055506000600654905060008211612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061598a565b60405180910390fd5b612409612fc1565b60088190555061245e333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613592909392919063ffffffff16565b60008090506000600854141561247d57829050826008819055506124a9565b6124a66008546124986002548661303490919063ffffffff16565b6130a490919063ffffffff16565b90505b6124b1612fc1565b6008819055506124c13382613634565b506006548114612506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fd906159ea565b60405180910390fd5b5050565b612512611c3c565b612551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612548906158ca565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125f29190615617565b60206040518083038186803b15801561260a57600080fd5b505afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126429190810190614b41565b905090565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b81526004016127319190615a93565b602060405180830381600087803b15801561274b57600080fd5b505af115801561275f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127839190810190614b41565b146127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba9061582a565b60405180910390fd5b50565b6127ce611c3c565b61280d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612804906158ca565b60405180910390fd5b612816816137bc565b50565b600080612824610e62565b905060008111156128dd57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b815260040161288a9190615617565b60206040518083038186803b1580156128a257600080fd5b505afa1580156128b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128da9190810190614b41565b90505b8091505090565b6128ec611c3c565b61292b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612922906158ca565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ff57600080fd5b505afa158015612a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a379190810190614947565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612aa657600080fd5b505afa158015612aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ade9190810190614947565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b789061596a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89061580a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ccf9190615a93565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d439061592a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db3906157aa565b60405180910390fd5b612e2781604051806060016040528060268152602001615ddf602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f669092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eba816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f599190615a93565b60405180910390a3505050565b6000838311158290612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa59190615788565b60405180910390fd5b5060008385039050809150509392505050565b600061302f612fce6138ec565b613021612fd961399e565b613013612fe4613a50565b613005612fef613b40565b612ff7613c0b565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b61334d90919063ffffffff16565b905090565b600080831415613047576000905061309e565b600082840290508284828161305857fe5b0414613099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130909061588a565b60405180910390fd5b809150505b92915050565b60006130e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cf7565b905092915050565b600061313083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f66565b905092915050565b6002600481111561314557fe5b601060149054906101000a900460ff16600481111561316057fe5b14156131705761316f81613d58565b5b6003600481111561317d57fe5b601060149054906101000a900460ff16600481111561319857fe5b14156131f257806131a7612595565b10156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df9061594a565b60405180910390fd5b6131f181613dfe565b5b600160048111156131ff57fe5b601060149054906101000a900460ff16600481111561321a57fe5b14156132745780613229611471565b101561326a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132619061594a565b60405180910390fd5b61327381613e8e565b5b60048081111561328057fe5b601060149054906101000a900460ff16600481111561329b57fe5b14156132ab576132aa816140c8565b5b50565b613348838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b84846040516024016132e69291906156bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b505050565b600080828401905083811015613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f9061584a565b60405180910390fd5b8091505092915050565b60006133ac6142e0565b905060008111156133c1576133c081614392565b5b6133c9613a50565b905060008111156133de576133dd81613e8e565b5b6133e6614484565b905060008111156133fb576133fa81614536565b5b61340361399e565b905060008111156134185761341781613dfe565b5b50565b60008114806134b4575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161346292919061565b565b60206040518083038186803b15801561347a57600080fd5b505afa15801561348e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134b29190810190614b41565b145b6134f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea90615a0a565b60405180910390fd5b61358d838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b848460405160240161352b9291906156bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b505050565b61362e848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b8585856040516024016135cc93929190615684565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061416e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369b90615a4a565b60405180910390fd5b6136b98160025461334d90919063ffffffff16565b600281905550613710816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b09190615a93565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561382c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613823906157ea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139499190615617565b60206040518083038186803b15801561396157600080fd5b505afa158015613975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506139999190810190614b41565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139fb9190615617565b60206040518083038186803b158015613a1357600080fd5b505afa158015613a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a4b9190810190614b41565b905090565b6000613a5a6147bb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b8152600401613ae4929190615a6a565b604080518083038186803b158015613afb57600080fd5b505afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b339190810190614aef565b9050806020015191505090565b600080613b4b610e62565b90506000811115613c0457600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401613bb19190615617565b60206040518083038186803b158015613bc957600080fd5b505afa158015613bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613c019190810190614b41565b90505b8091505090565b600080613c16611638565b90506000811115613cf057613ced670de0b6b3a7640000613cdf600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015613c9857600080fd5b505afa158015613cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613cd09190810190614b41565b8461303490919063ffffffff16565b6130a490919063ffffffff16565b90505b8091505090565b60008083118290613d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d359190615788565b60405180910390fd5b506000838581613d4a57fe5b049050809150509392505050565b6000613d62611638565b90506000613d6e6121ea565b905082811015613db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daa9061594a565b60405180910390fd5b6000613ded6001613ddf84613dd1888861303490919063ffffffff16565b6130a490919063ffffffff16565b61334d90919063ffffffff16565b9050613df881614392565b50505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613e599190615a93565b600060405180830381600087803b158015613e7357600080fd5b505af1158015613e87573d6000803e3d6000fd5b5050505050565b60606001604051908082528060200260200182016040528015613ecb57816020015b613eb8614675565b815260200190600190039081613eb05790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110613f0757fe5b6020026020010181905250613f1a6146a5565b6040518060800160405280600015158152602001600080811115613f3a57fe5b8152602001600080811115613f4b57fe5b8152602001848152509050613f5e6146e3565b600181600001906001811115613f7057fe5b90816001811115613f7d57fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600160405190808252806020026020018201604052801561401657816020015b61400361474f565b815260200190600190039081613ffb5790505b509050818160008151811061402757fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b815260040161408f92919061571b565b600060405180830381600087803b1580156140a957600080fd5b505af11580156140bd573d6000803e3d6000fd5b505050505050505050565b60006140d2610e62565b905060006140de612819565b905082811015614123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161411a9061594a565b60405180910390fd5b600061415d600161414f84614141888861303490919063ffffffff16565b6130a490919063ffffffff16565b61334d90919063ffffffff16565b905061416881614536565b50505050565b61418d8273ffffffffffffffffffffffffffffffffffffffff1661462a565b6141cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141c390615a2a565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516141f591906155e5565b6000604051808303816000865af19150503d8060008114614232576040519150601f19603f3d011682016040523d82523d6000602084013e614237565b606091505b50915091508161427c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142739061586a565b60405180910390fd5b6000815111156142da578080602001905161429a9190810190614a37565b6142d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142d0906159ca565b60405180910390fd5b5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161433d9190615617565b60206040518083038186803b15801561435557600080fd5b505afa158015614369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061438d9190810190614b41565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016143ef9190615a93565b602060405180830381600087803b15801561440957600080fd5b505af115801561441d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506144419190810190614b41565b14614481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614478906157ca565b60405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016144e19190615617565b60206040518083038186803b1580156144f957600080fd5b505afa15801561450d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145319190810190614b41565b905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401614595929190615632565b602060405180830381600087803b1580156145af57600080fd5b505af11580156145c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145e79190810190614b41565b11614627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161461e906158aa565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561466c5750808214155b92505050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156146c557fe5b81526020016000808111156146d657fe5b8152602001600081525090565b604051806101000160405280600060018111156146fc57fe5b8152602001600081526020016147106147d7565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561476857fe5b81526020016000815260200161477c6147d7565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600015158152602001600081525090565b60405180608001604052806000151581526020016000808111156147f757fe5b815260200160008081111561480857fe5b8152602001600081525090565b60008135905061482481615d99565b92915050565b60008151905061483981615d99565b92915050565b60008151905061484e81615db0565b92915050565b600082601f83011261486557600080fd5b815161487861487382615af6565b615ac9565b9150808252602083016020830185838301111561489457600080fd5b61489f838284615d21565b50505092915050565b6000604082840312156148ba57600080fd5b6148c46040615ac9565b905060006148d48482850161483f565b60008301525060206148e884828501614909565b60208301525092915050565b60008135905061490381615dc7565b92915050565b60008151905061491881615dc7565b92915050565b60006020828403121561493057600080fd5b600061493e84828501614815565b91505092915050565b60006020828403121561495957600080fd5b60006149678482850161482a565b91505092915050565b6000806040838503121561498357600080fd5b600061499185828601614815565b92505060206149a285828601614815565b9150509250929050565b6000806000606084860312156149c157600080fd5b60006149cf86828701614815565b93505060206149e086828701614815565b92505060406149f1868287016148f4565b9150509250925092565b60008060408385031215614a0e57600080fd5b6000614a1c85828601614815565b9250506020614a2d858286016148f4565b9150509250929050565b600060208284031215614a4957600080fd5b6000614a578482850161483f565b91505092915050565b600080600080600060a08688031215614a7857600080fd5b600086015167ffffffffffffffff811115614a9257600080fd5b614a9e88828901614854565b9550506020614aaf88828901614909565b9450506040614ac088828901614909565b9350506060614ad188828901614909565b9250506080614ae288828901614909565b9150509295509295909350565b600060408284031215614b0157600080fd5b6000614b0f848285016148a8565b91505092915050565b600060208284031215614b2a57600080fd5b6000614b38848285016148f4565b91505092915050565b600060208284031215614b5357600080fd5b6000614b6184828501614909565b91505092915050565b6000614b768383615452565b905092915050565b6000614b8a838361555a565b60408301905092915050565b614b9f81615c91565b82525050565b614bae81615be2565b82525050565b614bbd81615be2565b82525050565b6000614bce82615b42565b614bd88185615b93565b935083602082028501614bea85615b22565b8060005b85811015614c265784840389528151614c078582614b6a565b9450614c1283615b79565b925060208a01995050600181019050614bee565b50829750879550505050505092915050565b6000614c4382615b4d565b614c4d8185615ba4565b9350614c5883615b32565b8060005b83811015614c89578151614c708882614b7e565b9750614c7b83615b86565b925050600181019050614c5c565b5085935050505092915050565b614c9f81615bf4565b82525050565b614cae81615bf4565b82525050565b6000614cbf82615b63565b614cc98185615bc6565b9350614cd9818560208601615d21565b80840191505092915050565b6000614cf082615b58565b614cfa8185615bb5565b9350614d0a818560208601615d21565b614d1381615d54565b840191505092915050565b614d2781615ca3565b82525050565b614d3681615cb5565b82525050565b614d4581615cc7565b82525050565b614d5481615cd9565b82525050565b614d6381615ceb565b82525050565b6000614d7482615b6e565b614d7e8185615bd1565b9350614d8e818560208601615d21565b614d9781615d54565b840191505092915050565b6000614daf602383615bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e15601983615bd1565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000614e55602683615bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ebb602283615bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f21601783615bd1565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614f61601b83615bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614fa1602083615bd1565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000614fe1602183615bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615047601883615bd1565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615087602083615bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006150c7601483615bd1565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000615107601f83615bd1565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615147602583615bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151ad601283615bd1565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006151ed602483615bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615253601e83615bd1565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000615293601683615bd1565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b60006152d3602a83615bd1565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615339601f83615bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615379603683615bd1565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b60006153df601f83615bd1565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b600061541f601f83615bd1565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b60006101608301600083015161546b6000860182614d1e565b50602083015161547e60208601826155b8565b5060408301516154916040860182615505565b5060608301516154a460c08601826155b8565b5060808301516154b760e08601826155b8565b5060a08301516154cb610100860182614ba5565b5060c08301516154df6101208601826155b8565b5060e08301518482036101408601526154f88282614ce5565b9150508091505092915050565b60808201600082015161551b6000850182614c96565b50602082015161552e6020850182614d2d565b5060408201516155416040850182614d3c565b50606082015161555460608501826155b8565b50505050565b6040820160008201516155706000850182614ba5565b50602082015161558360208501826155b8565b50505050565b60408201600082015161559f6000850182614ba5565b5060208201516155b260208501826155b8565b50505050565b6155c181615c7a565b82525050565b6155d081615c7a565b82525050565b6155df81615c84565b82525050565b60006155f18284614cb4565b915081905092915050565b60006020820190506156116000830184614bb4565b92915050565b600060208201905061562c6000830184614b96565b92915050565b60006040820190506156476000830185614b96565b61565460208301846155c7565b9392505050565b60006040820190506156706000830185614bb4565b61567d6020830184614bb4565b9392505050565b60006060820190506156996000830186614bb4565b6156a66020830185614bb4565b6156b360408301846155c7565b949350505050565b60006040820190506156d06000830185614bb4565b6156dd60208301846155c7565b9392505050565b60006060820190506156f96000830186614bb4565b61570660208301856155c7565b6157136040830184614d5a565b949350505050565b600060408201905081810360008301526157358185614c38565b905081810360208301526157498184614bc3565b90509392505050565b60006020820190506157676000830184614ca5565b92915050565b60006020820190506157826000830184614d4b565b92915050565b600060208201905081810360008301526157a28184614d69565b905092915050565b600060208201905081810360008301526157c381614da2565b9050919050565b600060208201905081810360008301526157e381614e08565b9050919050565b6000602082019050818103600083015261580381614e48565b9050919050565b6000602082019050818103600083015261582381614eae565b9050919050565b6000602082019050818103600083015261584381614f14565b9050919050565b6000602082019050818103600083015261586381614f54565b9050919050565b6000602082019050818103600083015261588381614f94565b9050919050565b600060208201905081810360008301526158a381614fd4565b9050919050565b600060208201905081810360008301526158c38161503a565b9050919050565b600060208201905081810360008301526158e38161507a565b9050919050565b60006020820190508181036000830152615903816150ba565b9050919050565b60006020820190508181036000830152615923816150fa565b9050919050565b600060208201905081810360008301526159438161513a565b9050919050565b60006020820190508181036000830152615963816151a0565b9050919050565b60006020820190508181036000830152615983816151e0565b9050919050565b600060208201905081810360008301526159a381615246565b9050919050565b600060208201905081810360008301526159c381615286565b9050919050565b600060208201905081810360008301526159e3816152c6565b9050919050565b60006020820190508181036000830152615a038161532c565b9050919050565b60006020820190508181036000830152615a238161536c565b9050919050565b60006020820190508181036000830152615a43816153d2565b9050919050565b60006020820190508181036000830152615a6381615412565b9050919050565b6000606082019050615a7f6000830185615589565b615a8c60408301846155c7565b9392505050565b6000602082019050615aa860008301846155c7565b92915050565b6000602082019050615ac360008301846155d6565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615aec57600080fd5b8060405250919050565b600067ffffffffffffffff821115615b0d57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615bed82615c5a565b9050919050565b60008115159050919050565b6000819050615c0e82615d65565b919050565b6000819050615c2182615d72565b919050565b6000819050615c3482615d7f565b919050565b6000819050615c4782615d8c565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615c9c82615cfd565b9050919050565b6000615cae82615c00565b9050919050565b6000615cc082615c13565b9050919050565b6000615cd282615c26565b9050919050565b6000615ce482615c39565b9050919050565b6000615cf682615c4c565b9050919050565b6000615d0882615d0f565b9050919050565b6000615d1a82615c5a565b9050919050565b60005b83811015615d3f578082015181840152602081019050615d24565b83811115615d4e576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615d6f57fe5b50565b60018110615d7c57fe5b50565b60018110615d8957fe5b50565b60058110615d9657fe5b50565b615da281615be2565b8114615dad57600080fd5b50565b615db981615bf4565b8114615dc457600080fd5b50565b615dd081615c7a565b8114615ddb57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158207de2b83f3c934cb99e26ab81a1fd17eb975cf993c919e81b4640cd7704a4e2c46c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode Sourcemap

13652:12078:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17576:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17576:579:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13953:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13953:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;5991:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5991:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;14152:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14152:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;3011:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3011:152:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20148:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20148:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;13825:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13825:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;2494:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2494:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;3169:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3169:304:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15917:899;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15917:899:0;;;;;;;;;;;;;;;;:::i;:::-;;6173:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6173:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;3479:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3479:210:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19395:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19395:166:0;;;:::i;:::-;;;;;;;;;;;;;;;;14842:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14842:85:0;;;;;;;;;;;;;;;;:::i;:::-;;14032:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14032:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;13902:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13902:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;19565:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19565:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;24345:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24345:96:0;;;;;;;;;;;;;;;;:::i;:::-;;2591:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2591:110:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25350:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25350:217:0;;;:::i;:::-;;;;;;;;;;;;;;;;1769:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1769:140:0;;;:::i;:::-;;25573:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25573:154:0;;;:::i;:::-;;;;;;;;;;;;;;;;23277:543;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23277:543:0;;;:::i;:::-;;24445:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24445:141:0;;;;;;;;;;;;;;;;:::i;:::-;;13929:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13929:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;1472:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1472:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;13982:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13982:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;1669:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1669:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;6080:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6080:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;18997:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18997:279:0;;;:::i;:::-;;15145:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15145:97:0;;;;;;;;;;;;;;;;:::i;:::-;;16864:706;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16864:706:0;;;:::i;:::-;;;;;;;;;;;;;;;;3695:261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3695:261:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19689:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19689:248:0;;;:::i;:::-;;;;;;;;;;;;;;;;2707:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2707:158:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19282:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19282:107:0;;;:::i;:::-;;;;;;;;;;;;;;;;15295:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15295:550:0;;;;;;;;;;;;;;;;:::i;:::-;;14931:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14931:101:0;;;;;;;;;;;;;;;;:::i;:::-;;20268:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20268:115:0;;;:::i;:::-;;;;;;;;;;;;;;;;14006:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14006:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;2871:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2871:134:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24590:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24590:131:0;;;;;;;;;;;;;;;;:::i;:::-;;1915:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1915:109:0;;;;;;;;;;;;;;;;:::i;:::-;;19941:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19941:203:0;;;:::i;:::-;;;;;;;;;;;;;;;;15036:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15036:105:0;;;;;;;;;;;;;;;;:::i;:::-;;13874:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13874:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;18739:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18739:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;18863:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18863:128:0;;;:::i;:::-;;;;;;;;;;;;;;;;13849:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13849:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;17576:579;17627:4;17642:19;17675:1;17664:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17642:35;;17697:22;;;;;;;;17710:4;17697:22;;;;;;17717:1;17697:22;;;17686:5;17692:1;17686:8;;;;;;;;;;;;;:33;;;;17730:22;;:::i;:::-;17755:70;;;;;;;;17767:4;17755:70;;;;;;17773:21;17755:70;;;;;;;;;;;;17796:20;17755:70;;;;;;;;;;;;17818:6;17755:70;;;17730:95;;17834:21;;:::i;:::-;17881:18;17864:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;17924:1;17908:3;:13;;:17;;;;;17947:3;17934;:10;;:16;;;;17981:6;;17959:3;:19;;:28;;;;;18023:4;17996:3;:16;;:32;;;;;;;;;;;18039:24;18083:1;18066:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18039:46;;18104:3;18094:4;18099:1;18094:7;;;;;;;;;;;;;:13;;;;18123:4;;;;;;;;;;;18118:18;;;18137:5;18144:4;18118:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18118:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18118:31:0;;;;17576:579;;;;;;;:::o;13953:24::-;;;;;;;;;;;;;:::o;5991:83::-;6028:13;6061:5;6054:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;:::o;14152:36::-;;;;;;;;;;;;;:::o;3011:152::-;3077:4;3094:39;3103:12;:10;:12::i;:::-;3117:7;3126:6;3094:8;:39::i;:::-;3151:4;3144:11;;3011:152;;;;:::o;20148:116::-;20195:7;20225;;;;;;;;;;;20218:25;;;20252:4;20218:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20218:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20218:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20218:40:0;;;;;;;;;20211:47;;20148:116;:::o;13825:19::-;;;;:::o;2494:91::-;2538:7;2565:12;;2558:19;;2494:91;:::o;3169:304::-;3258:4;3275:36;3285:6;3293:9;3304:6;3275:9;:36::i;:::-;3322:121;3331:6;3339:12;:10;:12::i;:::-;3353:89;3391:6;3353:89;;;;;;;;;;;;;;;;;:11;:19;3365:6;3353:19;;;;;;;;;;;;;;;:33;3373:12;:10;:12::i;:::-;3353:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3322:8;:121::i;:::-;3461:4;3454:11;;3169:304;;;;;:::o;15917:899::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;16018:1;16008:7;:11;16000:55;;;;;;;;;;;;;;;;;;;;;;16066:16;16085:21;16095:10;16085:9;:21::i;:::-;16066:40;;16134:8;16123:7;:19;;16115:52;;;;;;;;;;;;;;;;;;;;;;16230:23;:21;:23::i;:::-;16223:4;:30;;;;16312:9;16324:37;16348:12;;16325:17;16334:7;16325:4;;:8;;:17;;;;:::i;:::-;16324:23;;:37;;;;:::i;:::-;16312:49;;16398:67;16424:7;16398:67;;;;;;;;;;;;;;;;;:9;:21;16408:10;16398:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;16374:9;:21;16384:10;16374:21;;;;;;;;;;;;;;;:91;;;;16489:25;16506:7;16489:12;;:16;;:25;;;;:::i;:::-;16474:12;:40;;;;16559:1;16530:41;;16539:10;16530:41;;;16563:7;16530:41;;;;;;;;;;;;;;;16606:9;16625:5;;;;;;;;;;;16618:23;;;16650:4;16618:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16618:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16618:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16618:38:0;;;;;;;;;16606:50;;16673:1;16669;:5;16665:55;;;16687:23;16701:8;16707:1;16701;:5;;:8;;;;:::i;:::-;16687:13;:23::i;:::-;16665:55;16730:41;16757:10;16769:1;16737:5;;;;;;;;;;;16730:26;;;;:41;;;;;:::i;:::-;16787:23;:21;:23::i;:::-;16780:4;:30;;;;6512:1;;;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15917:899;;:::o;6173:83::-;6214:5;6239:9;;;;;;;;;;;6232:16;;6173:83;:::o;3479:210::-;3559:4;3576:83;3585:12;:10;:12::i;:::-;3599:7;3608:50;3647:10;3608:11;:25;3620:12;:10;:12::i;:::-;3608:25;;;;;;;;;;;;;;;:34;3634:7;3608:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3576:8;:83::i;:::-;3677:4;3670:11;;3479:210;;;;:::o;19395:166::-;19439:7;19457:14;;:::i;:::-;19479:4;;;;;;;;;;;19474:24;;;19499:22;;;;;;;;19512:4;19499:22;;;;;;19519:1;19499:22;;;19523:6;;19474:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19474:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19474:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19474:56:0;;;;;;;;;19457:73;;19546:3;:9;;;19539:16;;;19395:166;:::o;14842:85::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14913:8;14907:3;;:14;;;;;;;;;;;;;;;;;;14842:85;:::o;14032:18::-;;;;;;;;;;;;;:::o;13902:22::-;;;;;;;;;;;;;:::o;19565:120::-;19613:7;19645:8;;;;;;;;;;;19638:26;;;19673:4;19638:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19638:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19638:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19638:41:0;;;;;;;;;19631:48;;19565:120;:::o;24345:96::-;24399:9;:7;:9::i;:::-;24394:23;;;24418:5;;;;;;;;;;;24425:6;24433:1;24394:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24394:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24394:41:0;;;;24345:96;:::o;2591:110::-;2648:7;2675:9;:18;2685:7;2675:18;;;;;;;;;;;;;;;;2668:25;;2591:110;;;:::o;25350:217::-;25403:4;25423:138;25551:9;:7;:9::i;:::-;25423:115;25524:13;:11;:13::i;:::-;25423:88;25497:13;:11;:13::i;:::-;25423:61;25460:23;:21;:23::i;:::-;25423:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;25416:145;;25350:217;:::o;1769:140::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1868:1;1831:40;;1852:6;;;;;;;;;;;1831:40;;;;;;;;;;;;1899:1;1882:6;;:19;;;;;;;;;;;;;;;;;;1769:140::o;25573:154::-;25626:4;25639:10;25652:22;:20;:22::i;:::-;25639:35;;25688:33;25708:12;;25688:15;25698:4;25688:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25681:40;;;25573:154;:::o;23277:543::-;23312:18;23333:11;:9;:11::i;:::-;23312:32;;23372:8;;;;;;;;;;;23357:23;;;;;;;;:11;:23;;;;;;;;;23353:60;;23391:14;:12;:14::i;:::-;23353:60;23437:1;23425:9;:7;:9::i;:::-;:13;23421:363;;;23468:11;23453:26;;;;;;;;:11;:26;;;;;;;;;23449:328;;;23492:21;23503:9;:7;:9::i;:::-;23492:10;:21::i;:::-;;23449:328;;;23548:14;23533:29;;;;;;;;:11;:29;;;;;;;;;23529:248;;;23575:24;23589:9;:7;:9::i;:::-;23575:13;:24::i;:::-;23529:248;;;23634:15;23619:30;;;;;;;;:11;:30;;;;;;;;;23615:162;;;23662:25;23677:9;:7;:9::i;:::-;23662:14;:25::i;:::-;23615:162;;;23722:11;23707:26;;;;;;;;:11;:26;;;;;;;;;23703:74;;;23746:21;23757:9;:7;:9::i;:::-;23746:10;:21::i;:::-;23703:74;23615:162;23529:248;23449:328;23421:363;23803:11;23792:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;23277:543;:::o;24445:141::-;24552:1;24513:7;;;;;;;;;;;24505:21;;;24535:4;24542:6;24505:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24505:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24505:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24505:44:0;;;;;;;;;:48;24497:83;;;;;;;;;;;;;;;;;;;;;;24445:141;:::o;13929:19::-;;;;;;;;;;;;;:::o;1472:79::-;1510:7;1537:6;;;;;;;;;;;1530:13;;1472:79;:::o;13982:19::-;;;;;;;;;;;;;:::o;1669:94::-;1709:4;1749:6;;;;;;;;;;;1733:22;;:12;:10;:12::i;:::-;:22;;;1726:29;;1669:94;:::o;6080:87::-;6119:13;6152:7;6145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:87;:::o;18997:279::-;19037:45;19063:8;;;;;;;;;;;19078:2;19044:5;;;;;;;;;;;19037:25;;;;:45;;;;;:::i;:::-;19117:41;19143:4;;;;;;;;;;;19154:2;19124:5;;;;;;;;;;;19117:25;;;;:41;;;;;:::i;:::-;19167:50;19193:13;:11;:13::i;:::-;19213:2;19174:5;;;;;;;;;;;19167:25;;;;:50;;;;;:::i;:::-;19226:44;19252:7;;;;;;;;;;;19266:2;19233:5;;;;;;;;;;;19226:25;;;;:44;;;;;:::i;:::-;18997:279::o;15145:97::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15225:11;15216:6;:20;;;;15145:97;:::o;16864:706::-;16906:6;16923:12;16936;16949;16962;16992:3;;;;;;;;;;;16978:28;;;17007:5;;;;;;;;;;;16978:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16978:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16978:35:0;;;;;;39:16:-1;36:1;17:17;2:54;16978:35:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16978:35:0;;;;;;;;;16921:92;;;;;;;;;17020:11;17034:1;17020:15;;17053:3;17046:4;:10;17042:43;;;17073:4;17067:10;;17042:43;17102:3;17095:4;:10;17091:43;;;17122:4;17116:10;;17091:43;17151:3;17144:4;:10;17140:43;;;17171:4;17165:10;;17140:43;17200:3;17193:4;:10;17189:43;;;17220:4;17214:10;;17189:43;17240:18;17261:11;17240:32;;17290:4;17283:3;:11;17279:261;;;17319:15;17305:29;;17279:261;;;17359:4;17352:3;:11;17348:192;;;17388:14;17374:28;;17348:192;;;17427:4;17420:3;:11;17416:124;;;17456:11;17442:25;;17416:124;;;17492:4;17485:3;:11;17481:59;;;17521:11;17507:25;;17481:59;17416:124;17348:192;17279:261;17553:11;17546:18;;;;;;;;16864:706;:::o;3695:261::-;3780:4;3797:129;3806:12;:10;:12::i;:::-;3820:7;3829:96;3868:15;3829:96;;;;;;;;;;;;;;;;;:11;:25;3841:12;:10;:12::i;:::-;3829:25;;;;;;;;;;;;;;;:34;3855:7;3829:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3797:8;:129::i;:::-;3944:4;3937:11;;3695:261;;;;:::o;19689:248::-;19744:7;19793:9;19805:17;:15;:17::i;:::-;19793:29;;19837:1;19833;:5;19829:88;;;19853:56;19904:4;19853:46;19868:8;;;;;;;;;;;19859:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19859:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19859:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19859:39:0;;;;;;;;;19853:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;19849:60;;19829:88;19930:1;19923:8;;;19689:248;:::o;2707:158::-;2776:4;2793:42;2803:12;:10;:12::i;:::-;2817:9;2828:6;2793:9;:42::i;:::-;2853:4;2846:11;;2707:158;;;;:::o;19282:107::-;19322:7;19352:5;;;;;;;;;;;19345:23;;;19377:4;19345:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19345:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19345:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19345:38:0;;;;;;;;;19338:45;;19282:107;:::o;15295:550::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15395:1;15385:7;:11;15377:54;;;;;;;;;;;;;;;;;;;;;;15447:23;:21;:23::i;:::-;15440:4;:30;;;;15481:66;15512:10;15532:4;15539:7;15488:5;;;;;;;;;;;15481:30;;;;:66;;;;;;:::i;:::-;15590:14;15607:1;15590:18;;15629:1;15621:4;;:9;15617:150;;;15652:7;15643:16;;15677:7;15670:4;:14;;;;15617:150;;;15720:37;15752:4;;15721:25;15733:12;;15721:7;:11;;:25;;;;:::i;:::-;15720:31;;:37;;;;:::i;:::-;15711:46;;15617:150;15782:23;:21;:23::i;:::-;15775:4;:30;;;;15814:25;15820:10;15832:6;15814:5;:25::i;:::-;6512:1;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15295:550;;:::o;14931:101::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15014:12;15004:7;;:22;;;;;;;;;;;;;;;;;;14931:101;:::o;20268:115::-;20312:7;20342:9;;;;;;;;;;;20335:27;;;20371:4;20335:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20335:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20335:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20335:42:0;;;;;;;;;20328:49;;20268:115;:::o;14006:21::-;;;;:::o;2871:134::-;2943:7;2970:11;:18;2982:5;2970:18;;;;;;;;;;;;;;;:27;2989:7;2970:27;;;;;;;;;;;;;;;;2963:34;;2871:134;;;;:::o;24590:131::-;24686:1;24660:8;;;;;;;;;;;24651:23;;;24675:6;24651:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24651:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24651:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24651:31:0;;;;;;;;;:36;24643:72;;;;;;;;;;;;;;;;;;;;;;24590:131;:::o;1915:109::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1988:28;2007:8;1988:18;:28::i;:::-;1915:109;:::o;19941:203::-;19995:7;20011:9;20023:16;:14;:16::i;:::-;20011:28;;20054:1;20050;:5;20046:78;;;20078:7;;;;;;;;;;;20070:31;;;20110:4;20070:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20070:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20070:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20070:46:0;;;;;;;;;20066:50;;20046:78;20137:1;20130:8;;;19941:203;:::o;15036:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15122:13;15111:8;;:24;;;;;;;;;;;;;;;;;;15036:105;:::o;13874:23::-;;;;;;;;;;;;;:::o;18739:120::-;18779:7;18831:4;;;;;;;;;;;18802:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18802:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18802:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18802:51:0;;;;;;;;;18795:58;;18739:120;:::o;18863:128::-;18907:7;18959:4;;;;;;;;;;;18930:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18930:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18930:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18930:55:0;;;;;;;;;18923:62;;18863:128;:::o;13849:20::-;;;;;;;;;;;;;:::o;852:98::-;897:15;932:10;925:17;;852:98;:::o;5107:338::-;5218:1;5201:19;;:5;:19;;;;5193:68;;;;;;;;;;;;;;;;;;;;;;5299:1;5280:21;;:7;:21;;;;5272:68;;;;;;;;;;;;;;;;;;;;;;5383:6;5353:11;:18;5365:5;5353:18;;;;;;;;;;;;;;;:27;5372:7;5353:27;;;;;;;;;;;;;;;:36;;;;5421:7;5405:32;;5414:5;5405:32;;;5430:6;5405:32;;;;;;;;;;;;;;;5107:338;;;:::o;3962:471::-;4078:1;4060:20;;:6;:20;;;;4052:70;;;;;;;;;;;;;;;;;;;;;;4162:1;4141:23;;:9;:23;;;;4133:71;;;;;;;;;;;;;;;;;;;;;;4237;4259:6;4237:71;;;;;;;;;;;;;;;;;:9;:17;4247:6;4237:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4217:9;:17;4227:6;4217:17;;;;;;;;;;;;;;;:91;;;;4342:32;4367:6;4342:9;:20;4352:9;4342:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4319:9;:20;4329:9;4319:20;;;;;;;;;;;;;;;:55;;;;4407:9;4390:35;;4399:6;4390:35;;;4418:6;4390:35;;;;;;;;;;;;;;;3962:471;;;:::o;6965:192::-;7051:7;7084:1;7079;:6;;7087:12;7071:29;;;;;;;;;;;;;;;;;;;;;;;;;7111:9;7127:1;7123;:5;7111:17;;7148:1;7141:8;;;6965:192;;;;;:::o;25119:225::-;25175:4;25195:143;25327:10;:8;:10::i;:::-;25195:119;25299:14;:12;:14::i;:::-;25195:91;25271:14;:12;:14::i;:::-;25195:63;25233:24;:22;:24::i;:::-;25195:25;:23;:25::i;:::-;:37;;:63;;;;:::i;:::-;:75;;:91;;;;:::i;:::-;:103;;:119;;;;:::i;:::-;:131;;:143;;;;:::i;:::-;25188:150;;25119:225;:::o;7163:250::-;7221:7;7250:1;7245;:6;7241:47;;;7275:1;7268:8;;;;7241:47;7300:9;7316:1;7312;:5;7300:17;;7345:1;7340;7336;:5;;;;;;:10;7328:56;;;;;;;;;;;;;;;;;;;;;;7404:1;7397:8;;;7163:250;;;;;:::o;7419:132::-;7477:7;7504:39;7508:1;7511;7504:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7497:46;;7419:132;;;;:::o;6823:136::-;6881:7;6908:43;6912:1;6915;6908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6901:50;;6823:136;;;;:::o;22770:501::-;22842:15;22830:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;22826:80;;;22868:30;22890:7;22868:21;:30::i;:::-;22826:80;22928:11;22916:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;22912:132;;;22975:7;22958:13;:11;:13::i;:::-;:24;;22950:55;;;;;;;;;;;;;;;;;;;;;;23014:22;23028:7;23014:13;:22::i;:::-;22912:132;23066:11;23054:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;23050:132;;;23113:7;23096:13;:11;:13::i;:::-;:24;;23088:55;;;;;;;;;;;;;;;;;;;;;;23152:22;23166:7;23152:13;:22::i;:::-;23050:132;23204:14;23192:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;23188:78;;;23229:29;23250:7;23229:20;:29::i;:::-;23188:78;22770:501;:::o;9136:176::-;9219:85;9238:5;9268;:14;;;:23;;;;9293:2;9297:5;9245:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9245:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9245:58:0;9219:18;:85::i;:::-;9136:176;;;:::o;6636:181::-;6694:7;6714:9;6730:1;6726;:5;6714:17;;6755:1;6750;:6;;6742:46;;;;;;;;;;;;;;;;;;;;;;6808:1;6801:8;;;6636:181;;;;:::o;21517:421::-;21557:14;21574:18;:16;:18::i;:::-;21557:35;;21612:1;21603:6;:10;21599:58;;;21624:25;21642:6;21624:17;:25::i;:::-;21599:58;21672:14;:12;:14::i;:::-;21663:23;;21706:1;21697:6;:10;21693:54;;;21718:21;21732:6;21718:13;:21::i;:::-;21693:54;21762:17;:15;:17::i;:::-;21753:26;;21799:1;21790:6;:10;21786:57;;;21811:24;21828:6;21811:16;:24::i;:::-;21786:57;21858:14;:12;:14::i;:::-;21849:23;;21892:1;21883:6;:10;21879:54;;;21904:21;21918:6;21904:13;:21::i;:::-;21879:54;21517:421;:::o;9532:347::-;9637:1;9628:5;:10;9627:62;;;;9687:1;9644:5;:15;;;9668:4;9675:7;9644:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9644:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9644:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9644:39:0;;;;;;;;;:44;9627:62;9619:152;;;;;;;;;;;;;;;;;;;;;;9782:89;9801:5;9831;:13;;;:22;;;;9855:7;9864:5;9808:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9808:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9808:62:0;9782:18;:89::i;:::-;9532:347;;;:::o;9320:204::-;9421:95;9440:5;9470;:18;;;:27;;;;9499:4;9505:2;9509:5;9447:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9447:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9447:68:0;9421:18;:95::i;:::-;9320:204;;;;:::o;4439:308::-;4534:1;4515:21;;:7;:21;;;;4507:65;;;;;;;;;;;;;;;;;;;;;;4600:24;4617:6;4600:12;;:16;;:24;;;;:::i;:::-;4585:12;:39;;;;4656:30;4679:6;4656:9;:18;4666:7;4656:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;4635:9;:18;4645:7;4635:18;;;;;;;;;;;;;;;:51;;;;4723:7;4702:37;;4719:1;4702:37;;;4732:6;4702:37;;;;;;;;;;;;;;;4439:308;;:::o;2030:229::-;2124:1;2104:22;;:8;:22;;;;2096:73;;;;;;;;;;;;;;;;;;;;;;2214:8;2185:38;;2206:6;;;;;;;;;;;2185:38;;;;;;;;;;;;2243:8;2234:6;;:17;;;;;;;;;;;;;;;;;;2030:229;:::o;20389:110::-;20432:7;20462:5;;;;;;;;;;;20455:23;;;20487:4;20455:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20455:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20455:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20455:38:0;;;;;;;;;20448:45;;20389:110;:::o;21393:118::-;21440:7;21470:9;;;;;;;;;;;21463:27;;;21499:4;21463:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21463:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21463:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21463:42:0;;;;;;;;;21456:49;;21393:118;:::o;20505:169::-;20552:7;20570:14;;:::i;:::-;20592:4;;;;;;;;;;;20587:24;;;20612:22;;;;;;;;20625:4;20612:22;;;;;;20632:1;20612:22;;;20636:6;;20587:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20587:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20587:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20587:56:0;;;;;;;;;20570:73;;20659:3;:9;;;20652:16;;;20505:169;:::o;21060:206::-;21117:7;21133:9;21145:16;:14;:16::i;:::-;21133:28;;21176:1;21172;:5;21168:78;;;21200:7;;;;;;;;;;;21192:31;;;21232:4;21192:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21192:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21192:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21192:46:0;;;;;;;;;21188:50;;21168:78;21259:1;21252:8;;;21060:206;:::o;20805:251::-;20863:7;20912:9;20924:17;:15;:17::i;:::-;20912:29;;20956:1;20952;:5;20948:88;;;20972:56;21023:4;20972:46;20987:8;;;;;;;;;;;20978:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20978:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20978:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20978:39:0;;;;;;;;;20972:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;20968:60;;20948:88;21049:1;21042:8;;;20805:251;:::o;7557:258::-;7643:7;7742:1;7738;:5;7745:12;7730:28;;;;;;;;;;;;;;;;;;;;;;;;;7769:9;7785:1;7781;:5;;;;;;7769:17;;7806:1;7799:8;;;7557:258;;;;;:::o;21944:328::-;22008:9;22020:17;:15;:17::i;:::-;22008:29;;22044:10;22057:24;:22;:24::i;:::-;22044:37;;22102:7;22096:2;:13;;22088:44;;;;;;;;;;;;;;;;;;;;;;22186:14;22203:31;22232:1;22203:24;22224:2;22204:14;22210:7;22204:1;:5;;:14;;;;:::i;:::-;22203:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;22186:48;;22241:25;22259:6;22241:17;:25::i;:::-;21944:328;;;;:::o;24725:92::-;24786:9;;;;;;;;;;;24779:24;;;24804:6;24779:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24779:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24779:32:0;;;;24725:92;:::o;18161:572::-;18218:19;18251:1;18240:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18218:35;;18273:22;;;;;;;;18286:4;18273:22;;;;;;18293:1;18273:22;;;18262:5;18268:1;18262:8;;;;;;;;;;;;;:33;;;;18306:22;;:::i;:::-;18331:71;;;;;;;;18343:5;18331:71;;;;;;18350:21;18331:71;;;;;;;;;;;;18373:20;18331:71;;;;;;;;;;;;18395:6;18331:71;;;18306:96;;18411:21;;:::i;:::-;18458:19;18441:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;18502:1;18486:3;:13;;:17;;;;;18525:3;18512;:10;;:16;;;;18559:6;;18537:3;:19;;:28;;;;;18601:4;18574:3;:16;;:32;;;;;;;;;;;18617:24;18661:1;18644:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18617:46;;18682:3;18672:4;18677:1;18672:7;;;;;;;;;;;;;:13;;;;18701:4;;;;;;;;;;;18696:18;;;18715:5;18722:4;18696:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18696:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18696:31:0;;;;18161:572;;;;;:::o;22304:460::-;22421:9;22433:16;:14;:16::i;:::-;22421:28;;22515:10;22528:23;:21;:23::i;:::-;22515:36;;22595:7;22589:2;:13;;22581:44;;;;;;;;;;;;;;;;;;;;;;22679:14;22696:31;22725:1;22696:24;22717:2;22697:14;22703:7;22697:1;:5;;:14;;;;:::i;:::-;22696:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;22679:48;;22734:24;22751:6;22734:16;:24::i;:::-;22304:460;;;;:::o;10516:598::-;10604:27;10612:5;10604:25;;;:27::i;:::-;10596:71;;;;;;;;;;;;;;;;;;;;;;10741:12;10755:23;10790:5;10782:19;;10802:4;10782:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10740:67:0;;;;10826:7;10818:52;;;;;;;;;;;;;;;;;;;;;;10907:1;10887:10;:17;:21;10883:224;;;11029:10;11018:30;;;;;;;;;;;;;;11010:85;;;;;;;;;;;;;;;;;;;;;;10883:224;10516:598;;;;:::o;20678:123::-;20729:7;20761:8;;;;;;;;;;;20754:26;;;20789:4;20754:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20754:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20754:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20754:41:0;;;;;;;;;20747:48;;20678:123;:::o;24973:140::-;25076:1;25048:8;;;;;;;;;;;25039:25;;;25065:6;25039:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25039:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25039:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25039:33:0;;;;;;;;;:38;25031:76;;;;;;;;;;;;;;;;;;;;;;24973:140;:::o;21270:119::-;21320:7;21350;;;;;;;;;;;21343:25;;;21377:4;21343:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21343:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21343:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21343:40:0;;;;;;;;;21336:47;;21270:119;:::o;24821:148::-;24933:1;24894:7;;;;;;;;;;;24886:21;;;24916:4;24923:6;24886:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24886:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24886:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24886:44:0;;;;;;;;;:48;24878:85;;;;;;;;;;;;;;;;;;;;;;24821:148;:::o;8153:374::-;8213:4;8230:16;8257:19;8279:66;8257:88;;;;8448:7;8436:20;8424:32;;8488:3;8476:15;;:8;:15;;:42;;;;;8507:11;8495:8;:23;;8476:42;8468:51;;;;8153:374;;;:::o;13652:12078::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;419:444;;532:3;525:4;517:6;513:17;509:27;499:2;;550:1;547;540:12;499:2;580:6;574:13;602:65;617:49;659:6;617:49;;;602:65;;;593:74;;687:6;680:5;673:21;723:4;715:6;711:17;756:4;749:5;745:16;791:3;782:6;777:3;773:16;770:25;767:2;;;808:1;805;798:12;767:2;818:39;850:6;845:3;840;818:39;;;492:371;;;;;;;;896:493;;1017:4;1005:9;1000:3;996:19;992:30;989:2;;;1035:1;1032;1025:12;989:2;1053:20;1068:4;1053:20;;;1044:29;;1123:1;1154:57;1207:3;1198:6;1187:9;1183:22;1154:57;;;1148:3;1141:5;1137:15;1130:82;1083:140;1274:2;1307:60;1363:3;1354:6;1343:9;1339:22;1307:60;;;1300:4;1293:5;1289:16;1282:86;1233:146;983:406;;;;;1396:130;;1476:6;1463:20;1454:29;;1488:33;1515:5;1488:33;;;1448:78;;;;;1533:134;;1617:6;1611:13;1602:22;;1629:33;1656:5;1629:33;;;1596:71;;;;;1674:241;;1778:2;1766:9;1757:7;1753:23;1749:32;1746:2;;;1794:1;1791;1784:12;1746:2;1829:1;1846:53;1891:7;1882:6;1871:9;1867:22;1846:53;;;1836:63;;1808:97;1740:175;;;;;1922:263;;2037:2;2025:9;2016:7;2012:23;2008:32;2005:2;;;2053:1;2050;2043:12;2005:2;2088:1;2105:64;2161:7;2152:6;2141:9;2137:22;2105:64;;;2095:74;;2067:108;1999:186;;;;;2192:366;;;2313:2;2301:9;2292:7;2288:23;2284:32;2281:2;;;2329:1;2326;2319:12;2281:2;2364:1;2381:53;2426:7;2417:6;2406:9;2402:22;2381:53;;;2371:63;;2343:97;2471:2;2489:53;2534:7;2525:6;2514:9;2510:22;2489:53;;;2479:63;;2450:98;2275:283;;;;;;2565:491;;;;2703:2;2691:9;2682:7;2678:23;2674:32;2671:2;;;2719:1;2716;2709:12;2671:2;2754:1;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;;;2761:63;;2733:97;2861:2;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;;;2869:63;;2840:98;2969:2;2987:53;3032:7;3023:6;3012:9;3008:22;2987:53;;;2977:63;;2948:98;2665:391;;;;;;3063:366;;;3184:2;3172:9;3163:7;3159:23;3155:32;3152:2;;;3200:1;3197;3190:12;3152:2;3235:1;3252:53;3297:7;3288:6;3277:9;3273:22;3252:53;;;3242:63;;3214:97;3342:2;3360:53;3405:7;3396:6;3385:9;3381:22;3360:53;;;3350:63;;3321:98;3146:283;;;;;;3436:257;;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3564:1;3561;3554:12;3516:2;3599:1;3616:61;3669:7;3660:6;3649:9;3645:22;3616:61;;;3606:71;;3578:105;3510:183;;;;;3700:908;;;;;;3893:3;3881:9;3872:7;3868:23;3864:33;3861:2;;;3910:1;3907;3900:12;3861:2;3966:1;3955:9;3951:17;3945:24;3989:18;3981:6;3978:30;3975:2;;;4021:1;4018;4011:12;3975:2;4041:74;4107:7;4098:6;4087:9;4083:22;4041:74;;;4031:84;;3924:197;4152:2;4170:64;4226:7;4217:6;4206:9;4202:22;4170:64;;;4160:74;;4131:109;4271:2;4289:64;4345:7;4336:6;4325:9;4321:22;4289:64;;;4279:74;;4250:109;4390:2;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;;;4398:74;;4369:109;4509:3;4528:64;4584:7;4575:6;4564:9;4560:22;4528:64;;;4518:74;;4488:110;3855:753;;;;;;;;;4615:305;;4751:2;4739:9;4730:7;4726:23;4722:32;4719:2;;;4767:1;4764;4757:12;4719:2;4802:1;4819:85;4896:7;4887:6;4876:9;4872:22;4819:85;;;4809:95;;4781:129;4713:207;;;;;4927:241;;5031:2;5019:9;5010:7;5006:23;5002:32;4999:2;;;5047:1;5044;5037:12;4999:2;5082:1;5099:53;5144:7;5135:6;5124:9;5120:22;5099:53;;;5089:63;;5061:97;4993:175;;;;;5175:263;;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5341:1;5358:64;5414:7;5405:6;5394:9;5390:22;5358:64;;;5348:74;;5320:108;5252:186;;;;;5446:253;;5595:98;5689:3;5681:6;5595:98;;;5581:112;;5574:125;;;;;5708:249;;5831:86;5913:3;5905:6;5831:86;;;5946:4;5941:3;5937:14;5923:28;;5824:133;;;;;5965:142;6056:45;6095:5;6056:45;;;6051:3;6044:58;6038:69;;;6114:103;6187:24;6205:5;6187:24;;;6182:3;6175:37;6169:48;;;6224:113;6307:24;6325:5;6307:24;;;6302:3;6295:37;6289:48;;;6411:1040;;6604:78;6676:5;6604:78;;;6695:110;6798:6;6793:3;6695:110;;;6688:117;;6828:3;6870:4;6862:6;6858:17;6853:3;6849:27;6897:80;6971:5;6897:80;;;6997:7;7025:1;7010:402;7035:6;7032:1;7029:13;7010:402;;;7097:9;7091:4;7087:20;7082:3;7075:33;7142:6;7136:13;7164:112;7271:4;7256:13;7164:112;;;7156:120;;7293:84;7370:6;7293:84;;;7283:94;;7400:4;7395:3;7391:14;7384:21;;7067:345;7057:1;7054;7050:9;7045:14;;7010:402;;;7014:14;7425:4;7418:11;;7442:3;7435:10;;6583:868;;;;;;;;;;7514:834;;7695:72;7761:5;7695:72;;;7780:104;7877:6;7872:3;7780:104;;;7773:111;;7905:74;7973:5;7905:74;;;7999:7;8027:1;8012:314;8037:6;8034:1;8031:13;8012:314;;;8104:6;8098:13;8125:99;8220:3;8205:13;8125:99;;;8118:106;;8241:78;8312:6;8241:78;;;8231:88;;8069:257;8059:1;8056;8052:9;8047:14;;8012:314;;;8016:14;8339:3;8332:10;;7674:674;;;;;;;;8356:94;8423:21;8438:5;8423:21;;;8418:3;8411:34;8405:45;;;8457:104;8534:21;8549:5;8534:21;;;8529:3;8522:34;8516:45;;;8568:356;;8696:38;8728:5;8696:38;;;8746:88;8827:6;8822:3;8746:88;;;8739:95;;8839:52;8884:6;8879:3;8872:4;8865:5;8861:16;8839:52;;;8912:6;8907:3;8903:16;8896:23;;8676:248;;;;;;8931:315;;9027:34;9055:5;9027:34;;;9073:60;9126:6;9121:3;9073:60;;;9066:67;;9138:52;9183:6;9178:3;9171:4;9164:5;9160:16;9138:52;;;9211:29;9233:6;9211:29;;;9206:3;9202:39;9195:46;;9007:239;;;;;;9253:142;9339:50;9383:5;9339:50;;;9334:3;9327:63;9321:74;;;9402:156;9495:57;9546:5;9495:57;;;9490:3;9483:70;9477:81;;;9565:150;9655:54;9703:5;9655:54;;;9650:3;9643:67;9637:78;;;9722:144;9814:46;9854:5;9814:46;;;9809:3;9802:59;9796:70;;;9873:140;9963:44;10001:5;9963:44;;;9958:3;9951:57;9945:68;;;10020:347;;10132:39;10165:5;10132:39;;;10183:71;10247:6;10242:3;10183:71;;;10176:78;;10259:52;10304:6;10299:3;10292:4;10285:5;10281:16;10259:52;;;10332:29;10354:6;10332:29;;;10327:3;10323:39;10316:46;;10112:255;;;;;;10375:465;;10535:67;10599:2;10594:3;10535:67;;;10528:74;;10635:66;10631:1;10626:3;10622:11;10615:87;10736:66;10731:2;10726:3;10722:12;10715:88;10831:2;10826:3;10822:12;10815:19;;10521:319;;;;10849:364;;11009:67;11073:2;11068:3;11009:67;;;11002:74;;11109:66;11105:1;11100:3;11096:11;11089:87;11204:2;11199:3;11195:12;11188:19;;10995:218;;;;11222:465;;11382:67;11446:2;11441:3;11382:67;;;11375:74;;11482:66;11478:1;11473:3;11469:11;11462:87;11583:66;11578:2;11573:3;11569:12;11562:88;11678:2;11673:3;11669:12;11662:19;;11368:319;;;;11696:465;;11856:67;11920:2;11915:3;11856:67;;;11849:74;;11956:66;11952:1;11947:3;11943:11;11936:87;12057:66;12052:2;12047:3;12043:12;12036:88;12152:2;12147:3;12143:12;12136:19;;11842:319;;;;12170:364;;12330:67;12394:2;12389:3;12330:67;;;12323:74;;12430:66;12426:1;12421:3;12417:11;12410:87;12525:2;12520:3;12516:12;12509:19;;12316:218;;;;12543:364;;12703:67;12767:2;12762:3;12703:67;;;12696:74;;12803:66;12799:1;12794:3;12790:11;12783:87;12898:2;12893:3;12889:12;12882:19;;12689:218;;;;12916:364;;13076:67;13140:2;13135:3;13076:67;;;13069:74;;13176:66;13172:1;13167:3;13163:11;13156:87;13271:2;13266:3;13262:12;13255:19;;13062:218;;;;13289:465;;13449:67;13513:2;13508:3;13449:67;;;13442:74;;13549:66;13545:1;13540:3;13536:11;13529:87;13650:66;13645:2;13640:3;13636:12;13629:88;13745:2;13740:3;13736:12;13729:19;;13435:319;;;;13763:364;;13923:67;13987:2;13982:3;13923:67;;;13916:74;;14023:66;14019:1;14014:3;14010:11;14003:87;14118:2;14113:3;14109:12;14102:19;;13909:218;;;;14136:364;;14296:67;14360:2;14355:3;14296:67;;;14289:74;;14396:66;14392:1;14387:3;14383:11;14376:87;14491:2;14486:3;14482:12;14475:19;;14282:218;;;;14509:364;;14669:67;14733:2;14728:3;14669:67;;;14662:74;;14769:66;14765:1;14760:3;14756:11;14749:87;14864:2;14859:3;14855:12;14848:19;;14655:218;;;;14882:364;;15042:67;15106:2;15101:3;15042:67;;;15035:74;;15142:66;15138:1;15133:3;15129:11;15122:87;15237:2;15232:3;15228:12;15221:19;;15028:218;;;;15255:465;;15415:67;15479:2;15474:3;15415:67;;;15408:74;;15515:66;15511:1;15506:3;15502:11;15495:87;15616:66;15611:2;15606:3;15602:12;15595:88;15711:2;15706:3;15702:12;15695:19;;15401:319;;;;15729:364;;15889:67;15953:2;15948:3;15889:67;;;15882:74;;15989:66;15985:1;15980:3;15976:11;15969:87;16084:2;16079:3;16075:12;16068:19;;15875:218;;;;16102:465;;16262:67;16326:2;16321:3;16262:67;;;16255:74;;16362:66;16358:1;16353:3;16349:11;16342:87;16463:66;16458:2;16453:3;16449:12;16442:88;16558:2;16553:3;16549:12;16542:19;;16248:319;;;;16576:364;;16736:67;16800:2;16795:3;16736:67;;;16729:74;;16836:66;16832:1;16827:3;16823:11;16816:87;16931:2;16926:3;16922:12;16915:19;;16722:218;;;;16949:364;;17109:67;17173:2;17168:3;17109:67;;;17102:74;;17209:66;17205:1;17200:3;17196:11;17189:87;17304:2;17299:3;17295:12;17288:19;;17095:218;;;;17322:465;;17482:67;17546:2;17541:3;17482:67;;;17475:74;;17582:66;17578:1;17573:3;17569:11;17562:87;17683:66;17678:2;17673:3;17669:12;17662:88;17778:2;17773:3;17769:12;17762:19;;17468:319;;;;17796:364;;17956:67;18020:2;18015:3;17956:67;;;17949:74;;18056:66;18052:1;18047:3;18043:11;18036:87;18151:2;18146:3;18142:12;18135:19;;17942:218;;;;18169:465;;18329:67;18393:2;18388:3;18329:67;;;18322:74;;18429:66;18425:1;18420:3;18416:11;18409:87;18530:66;18525:2;18520:3;18516:12;18509:88;18625:2;18620:3;18616:12;18609:19;;18315:319;;;;18643:364;;18803:67;18867:2;18862:3;18803:67;;;18796:74;;18903:66;18899:1;18894:3;18890:11;18883:87;18998:2;18993:3;18989:12;18982:19;;18789:218;;;;19016:364;;19176:67;19240:2;19235:3;19176:67;;;19169:74;;19276:66;19272:1;19267:3;19263:11;19256:87;19371:2;19366:3;19362:12;19355:19;;19162:218;;;;19449:1605;;19592:5;19587:3;19583:15;19682:3;19675:5;19671:15;19665:22;19693:75;19763:3;19758;19754:13;19740:12;19693:75;;;19613:161;19852:4;19845:5;19841:16;19835:23;19864:63;19921:4;19916:3;19912:14;19898:12;19864:63;;;19784:149;20008:4;20001:5;19997:16;19991:23;20020:117;20131:4;20126:3;20122:14;20108:12;20020:117;;;19943:200;20227:4;20220:5;20216:16;20210:23;20239:63;20296:4;20291:3;20287:14;20273:12;20239:63;;;20153:155;20394:4;20387:5;20383:16;20377:23;20406:63;20463:4;20458:3;20454:14;20440:12;20406:63;;;20318:157;20556:4;20549:5;20545:16;20539:23;20568:64;20625:5;20620:3;20616:15;20602:12;20568:64;;;20485:153;20721:4;20714:5;20710:16;20704:23;20733:64;20790:5;20785:3;20781:15;20767:12;20733:64;;;20648:155;20876:4;20869:5;20865:16;20859:23;20929:3;20923:4;20919:14;20911:5;20906:3;20902:15;20895:39;20949:67;21011:4;20997:12;20949:67;;;20941:75;;20813:215;21045:4;21038:11;;19565:1489;;;;;;21124:815;21261:4;21256:3;21252:14;21344:3;21337:5;21333:15;21327:22;21355:56;21406:3;21401;21397:13;21383:12;21355:56;;;21281:136;21498:4;21491:5;21487:16;21481:23;21510:83;21587:4;21582:3;21578:14;21564:12;21510:83;;;21427:172;21671:4;21664:5;21660:16;21654:23;21683:80;21757:4;21752:3;21748:14;21734:12;21683:80;;;21609:160;21843:4;21836:5;21832:16;21826:23;21855:63;21912:4;21907:3;21903:14;21889:12;21855:63;;;21779:145;21234:705;;;;21995:457;22118:4;22113:3;22109:14;22202:3;22195:5;22191:15;22185:22;22213:62;22270:3;22265;22261:13;22247:12;22213:62;;;22138:143;22356:4;22349:5;22345:16;22339:23;22368:63;22425:4;22420:3;22416:14;22402:12;22368:63;;;22291:146;22091:361;;;;22508:467;22641:4;22636:3;22632:14;22725:3;22718:5;22714:15;22708:22;22736:62;22793:3;22788;22784:13;22770:12;22736:62;;;22661:143;22879:4;22872:5;22868:16;22862:23;22891:63;22948:4;22943:3;22939:14;22925:12;22891:63;;;22814:146;22614:361;;;;22982:103;23055:24;23073:5;23055:24;;;23050:3;23043:37;23037:48;;;23092:113;23175:24;23193:5;23175:24;;;23170:3;23163:37;23157:48;;;23212:107;23291:22;23307:5;23291:22;;;23286:3;23279:35;23273:46;;;23326:262;;23470:93;23559:3;23550:6;23470:93;;;23463:100;;23580:3;23573:10;;23451:137;;;;;23595:213;;23713:2;23702:9;23698:18;23690:26;;23727:71;23795:1;23784:9;23780:17;23771:6;23727:71;;;23684:124;;;;;23815:229;;23941:2;23930:9;23926:18;23918:26;;23955:79;24031:1;24020:9;24016:17;24007:6;23955:79;;;23912:132;;;;;24051:340;;24205:2;24194:9;24190:18;24182:26;;24219:79;24295:1;24284:9;24280:17;24271:6;24219:79;;;24309:72;24377:2;24366:9;24362:18;24353:6;24309:72;;;24176:215;;;;;;24398:324;;24544:2;24533:9;24529:18;24521:26;;24558:71;24626:1;24615:9;24611:17;24602:6;24558:71;;;24640:72;24708:2;24697:9;24693:18;24684:6;24640:72;;;24515:207;;;;;;24729:435;;24903:2;24892:9;24888:18;24880:26;;24917:71;24985:1;24974:9;24970:17;24961:6;24917:71;;;24999:72;25067:2;25056:9;25052:18;25043:6;24999:72;;;25082;25150:2;25139:9;25135:18;25126:6;25082:72;;;24874:290;;;;;;;25171:324;;25317:2;25306:9;25302:18;25294:26;;25331:71;25399:1;25388:9;25384:17;25375:6;25331:71;;;25413:72;25481:2;25470:9;25466:18;25457:6;25413:72;;;25288:207;;;;;;25502:449;;25683:2;25672:9;25668:18;25660:26;;25697:71;25765:1;25754:9;25750:17;25741:6;25697:71;;;25779:72;25847:2;25836:9;25832:18;25823:6;25779:72;;;25862:79;25937:2;25926:9;25922:18;25913:6;25862:79;;;25654:297;;;;;;;25958:788;;26288:2;26277:9;26273:18;26265:26;;26338:9;26332:4;26328:20;26324:1;26313:9;26309:17;26302:47;26363:144;26502:4;26493:6;26363:144;;;26355:152;;26555:9;26549:4;26545:20;26540:2;26529:9;26525:18;26518:48;26580:156;26731:4;26722:6;26580:156;;;26572:164;;26259:487;;;;;;26753:201;;26865:2;26854:9;26850:18;26842:26;;26879:65;26941:1;26930:9;26926:17;26917:6;26879:65;;;26836:118;;;;;26961:231;;27088:2;27077:9;27073:18;27065:26;;27102:80;27179:1;27168:9;27164:17;27155:6;27102:80;;;27059:133;;;;;27199:301;;27337:2;27326:9;27322:18;27314:26;;27387:9;27381:4;27377:20;27373:1;27362:9;27358:17;27351:47;27412:78;27485:4;27476:6;27412:78;;;27404:86;;27308:192;;;;;27507:407;;27698:2;27687:9;27683:18;27675:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27773:131;27899:4;27773:131;;;27765:139;;27669:245;;;;27921:407;;28112:2;28101:9;28097:18;28089:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28187:131;28313:4;28187:131;;;28179:139;;28083:245;;;;28335:407;;28526:2;28515:9;28511:18;28503:26;;28576:9;28570:4;28566:20;28562:1;28551:9;28547:17;28540:47;28601:131;28727:4;28601:131;;;28593:139;;28497:245;;;;28749:407;;28940:2;28929:9;28925:18;28917:26;;28990:9;28984:4;28980:20;28976:1;28965:9;28961:17;28954:47;29015:131;29141:4;29015:131;;;29007:139;;28911:245;;;;29163:407;;29354:2;29343:9;29339:18;29331:26;;29404:9;29398:4;29394:20;29390:1;29379:9;29375:17;29368:47;29429:131;29555:4;29429:131;;;29421:139;;29325:245;;;;29577:407;;29768:2;29757:9;29753:18;29745:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29843:131;29969:4;29843:131;;;29835:139;;29739:245;;;;29991:407;;30182:2;30171:9;30167:18;30159:26;;30232:9;30226:4;30222:20;30218:1;30207:9;30203:17;30196:47;30257:131;30383:4;30257:131;;;30249:139;;30153:245;;;;30405:407;;30596:2;30585:9;30581:18;30573:26;;30646:9;30640:4;30636:20;30632:1;30621:9;30617:17;30610:47;30671:131;30797:4;30671:131;;;30663:139;;30567:245;;;;30819:407;;31010:2;30999:9;30995:18;30987:26;;31060:9;31054:4;31050:20;31046:1;31035:9;31031:17;31024:47;31085:131;31211:4;31085:131;;;31077:139;;30981:245;;;;31233:407;;31424:2;31413:9;31409:18;31401:26;;31474:9;31468:4;31464:20;31460:1;31449:9;31445:17;31438:47;31499:131;31625:4;31499:131;;;31491:139;;31395:245;;;;31647:407;;31838:2;31827:9;31823:18;31815:26;;31888:9;31882:4;31878:20;31874:1;31863:9;31859:17;31852:47;31913:131;32039:4;31913:131;;;31905:139;;31809:245;;;;32061:407;;32252:2;32241:9;32237:18;32229:26;;32302:9;32296:4;32292:20;32288:1;32277:9;32273:17;32266:47;32327:131;32453:4;32327:131;;;32319:139;;32223:245;;;;32475:407;;32666:2;32655:9;32651:18;32643:26;;32716:9;32710:4;32706:20;32702:1;32691:9;32687:17;32680:47;32741:131;32867:4;32741:131;;;32733:139;;32637:245;;;;32889:407;;33080:2;33069:9;33065:18;33057:26;;33130:9;33124:4;33120:20;33116:1;33105:9;33101:17;33094:47;33155:131;33281:4;33155:131;;;33147:139;;33051:245;;;;33303:407;;33494:2;33483:9;33479:18;33471:26;;33544:9;33538:4;33534:20;33530:1;33519:9;33515:17;33508:47;33569:131;33695:4;33569:131;;;33561:139;;33465:245;;;;33717:407;;33908:2;33897:9;33893:18;33885:26;;33958:9;33952:4;33948:20;33944:1;33933:9;33929:17;33922:47;33983:131;34109:4;33983:131;;;33975:139;;33879:245;;;;34131:407;;34322:2;34311:9;34307:18;34299:26;;34372:9;34366:4;34362:20;34358:1;34347:9;34343:17;34336:47;34397:131;34523:4;34397:131;;;34389:139;;34293:245;;;;34545:407;;34736:2;34725:9;34721:18;34713:26;;34786:9;34780:4;34776:20;34772:1;34761:9;34757:17;34750:47;34811:131;34937:4;34811:131;;;34803:139;;34707:245;;;;34959:407;;35150:2;35139:9;35135:18;35127:26;;35200:9;35194:4;35190:20;35186:1;35175:9;35171:17;35164:47;35225:131;35351:4;35225:131;;;35217:139;;35121:245;;;;35373:407;;35564:2;35553:9;35549:18;35541:26;;35614:9;35608:4;35604:20;35600:1;35589:9;35585:17;35578:47;35639:131;35765:4;35639:131;;;35631:139;;35535:245;;;;35787:407;;35978:2;35967:9;35963:18;35955:26;;36028:9;36022:4;36018:20;36014:1;36003:9;35999:17;35992:47;36053:131;36179:4;36053:131;;;36045:139;;35949:245;;;;36201:407;;36392:2;36381:9;36377:18;36369:26;;36442:9;36436:4;36432:20;36428:1;36417:9;36413:17;36406:47;36467:131;36593:4;36467:131;;;36459:139;;36363:245;;;;36615:404;;36801:2;36790:9;36786:18;36778:26;;36815:111;36923:1;36912:9;36908:17;36899:6;36815:111;;;36937:72;37005:2;36994:9;36990:18;36981:6;36937:72;;;36772:247;;;;;;37026:213;;37144:2;37133:9;37129:18;37121:26;;37158:71;37226:1;37215:9;37211:17;37202:6;37158:71;;;37115:124;;;;;37246:205;;37360:2;37349:9;37345:18;37337:26;;37374:67;37438:1;37427:9;37423:17;37414:6;37374:67;;;37331:120;;;;;37458:256;;37520:2;37514:9;37504:19;;37558:4;37550:6;37546:17;37657:6;37645:10;37642:22;37621:18;37609:10;37606:34;37603:62;37600:2;;;37678:1;37675;37668:12;37600:2;37698:10;37694:2;37687:22;37498:216;;;;;37721:322;;37865:18;37857:6;37854:30;37851:2;;;37897:1;37894;37887:12;37851:2;37964:4;37960:9;37953:4;37945:6;37941:17;37937:33;37929:41;;38028:4;38022;38018:15;38010:23;;37788:255;;;;38050:175;;38160:3;38152:11;;38198:4;38193:3;38189:14;38181:22;;38146:79;;;;38232:169;;38336:3;38328:11;;38374:4;38369:3;38365:14;38357:22;;38322:79;;;;38408:161;;38541:5;38535:12;38525:22;;38506:63;;;;38576:155;;38703:5;38697:12;38687:22;;38668:63;;;;38738:117;;38827:5;38821:12;38811:22;;38792:63;;;;38862:121;;38955:5;38949:12;38939:22;;38920:63;;;;38990:122;;39084:5;39078:12;39068:22;;39049:63;;;;39119:132;;39241:4;39236:3;39232:14;39224:22;;39218:33;;;;39258:126;;39374:4;39369:3;39365:14;39357:22;;39351:33;;;;39392:202;;39546:6;39541:3;39534:19;39583:4;39578:3;39574:14;39559:29;;39527:67;;;;;39603:196;;39751:6;39746:3;39739:19;39788:4;39783:3;39779:14;39764:29;;39732:67;;;;;39808:152;;39912:6;39907:3;39900:19;39949:4;39944:3;39940:14;39925:29;;39893:67;;;;;39969:144;;40104:3;40089:18;;40082:31;;;;;40122:163;;40237:6;40232:3;40225:19;40274:4;40269:3;40265:14;40250:29;;40218:67;;;;;40293:91;;40355:24;40373:5;40355:24;;;40344:35;;40338:46;;;;40391:85;;40464:5;40457:13;40450:21;40439:32;;40433:43;;;;40483:136;;40560:5;40549:16;;40566:48;40608:5;40566:48;;;40543:76;;;;40626:150;;40710:5;40699:16;;40716:55;40765:5;40716:55;;;40693:83;;;;40783:144;;40864:5;40853:16;;40870:52;40916:5;40870:52;;;40847:80;;;;40934:128;;41007:5;40996:16;;41013:44;41051:5;41013:44;;;40990:72;;;;41069:84;;41141:6;41134:5;41130:18;41119:29;;41113:40;;;;41160:121;;41233:42;41226:5;41222:54;41211:65;;41205:76;;;;41288:72;;41350:5;41339:16;;41333:27;;;;41367:81;;41438:4;41431:5;41427:16;41416:27;;41410:38;;;;41455:129;;41542:37;41573:5;41542:37;;;41529:50;;41523:61;;;;41591:136;;41683:39;41716:5;41683:39;;;41670:52;;41664:63;;;;41734:150;;41833:46;41873:5;41833:46;;;41820:59;;41814:70;;;;41891:144;;41987:43;42024:5;41987:43;;;41974:56;;41968:67;;;;42042:128;;42130:35;42159:5;42130:35;;;42117:48;;42111:59;;;;42177:114;;42263:23;42280:5;42263:23;;;42250:36;;42244:47;;;;42298:121;;42377:37;42408:5;42377:37;;;42364:50;;42358:61;;;;42426:108;;42505:24;42523:5;42505:24;;;42492:37;;42486:48;;;;42542:268;42607:1;42614:101;42628:6;42625:1;42622:13;42614:101;;;42704:1;42699:3;42695:11;42689:18;42685:1;42680:3;42676:11;42669:39;42650:2;42647:1;42643:10;42638:15;;42614:101;;;42730:6;42727:1;42724:13;42721:2;;;42795:1;42786:6;42781:3;42777:16;42770:27;42721:2;42591:219;;;;;42818:97;;42906:2;42902:7;42897:2;42890:5;42886:14;42882:28;42872:38;;42866:49;;;;42923:106;43007:1;43000:5;42997:12;42987:2;;43013:9;42987:2;42981:48;;43036:113;43127:1;43120:5;43117:12;43107:2;;43133:9;43107:2;43101:48;;43156:110;43244:1;43237:5;43234:12;43224:2;;43250:9;43224:2;43218:48;;43273:102;43353:1;43346:5;43343:12;43333:2;;43359:9;43333:2;43327:48;;43382:117;43451:24;43469:5;43451:24;;;43444:5;43441:35;43431:2;;43490:1;43487;43480:12;43431:2;43425:74;;43506:111;43572:21;43587:5;43572:21;;;43565:5;43562:32;43552:2;;43608:1;43605;43598:12;43552:2;43546:71;;43624:117;43693:24;43711:5;43693:24;;;43686:5;43683:35;43673:2;;43732:1;43729;43722:12;43673:2;43667:74;

Swarm Source

bzzr://7de2b83f3c934cb99e26ab81a1fd17eb975cf993c919e81b4640cd7704a4e2c4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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