ETH Price: $3,914.99 (+0.63%)

Contract

0xa2609B2b43AC0F5EbE27deB944d2a399C201E3dA
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve208128582024-09-23 11:03:3581 days ago1727089415IN
Yearn: yUSDC Token 2
0 ETH0.0008899718.8135011
Approve207201112024-09-10 12:07:3594 days ago1725970055IN
Yearn: yUSDC Token 2
0 ETH0.000450829.53007369
Approve207189602024-09-10 8:16:1194 days ago1725956171IN
Yearn: yUSDC Token 2
0 ETH0.000148423.13762809
Approve207189552024-09-10 8:15:1194 days ago1725956111IN
Yearn: yUSDC Token 2
0 ETH0.000141933.0003196
Approve207189282024-09-10 8:09:4794 days ago1725955787IN
Yearn: yUSDC Token 2
0 ETH0.000162433.43383409
Approve207189172024-09-10 8:07:3594 days ago1725955655IN
Yearn: yUSDC Token 2
0 ETH0.000187673.96734202
Approve207188832024-09-10 8:00:4794 days ago1725955247IN
Yearn: yUSDC Token 2
0 ETH0.000163293.45194939
Approve207188492024-09-10 7:53:3594 days ago1725954815IN
Yearn: yUSDC Token 2
0 ETH0.000146263.09192304
Approve207188332024-09-10 7:50:2394 days ago1725954623IN
Yearn: yUSDC Token 2
0 ETH0.000152243.21836453
Approve207188282024-09-10 7:49:2394 days ago1725954563IN
Yearn: yUSDC Token 2
0 ETH0.000153053.23640666
Approve207056192024-09-08 11:32:5996 days ago1725795179IN
Yearn: yUSDC Token 2
0 ETH0.00004150.87732611
Approve207055352024-09-08 11:16:1196 days ago1725794171IN
Yearn: yUSDC Token 2
0 ETH0.000042710.90296955
Approve207052992024-09-08 10:28:3596 days ago1725791315IN
Yearn: yUSDC Token 2
0 ETH0.000044890.94897432
Approve207052762024-09-08 10:23:5996 days ago1725791039IN
Yearn: yUSDC Token 2
0 ETH0.000046410.98112693
Approve207052072024-09-08 10:10:1196 days ago1725790211IN
Yearn: yUSDC Token 2
0 ETH0.000045040.95222454
Transfer115255292020-12-25 22:38:051449 days ago1608935885IN
Yearn: yUSDC Token 2
0 ETH0.0012837245.1
Redeem96769052020-03-15 15:26:401734 days ago1584286000IN
Yearn: yUSDC Token 2
0 ETH0.006597996
Redeem95814452020-02-29 22:40:371749 days ago1583016037IN
Yearn: yUSDC Token 2
0 ETH0.00448476
Redeem95575732020-02-26 6:45:511752 days ago1582699551IN
Yearn: yUSDC Token 2
0 ETH0.000860671
Redeem95536542020-02-25 16:22:291753 days ago1582647749IN
Yearn: yUSDC Token 2
0 ETH0.005165886
Redeem95131712020-02-19 10:39:391759 days ago1582108779IN
Yearn: yUSDC Token 2
0 ETH0.005104276
Redeem95037382020-02-17 23:59:201761 days ago1581983960IN
Yearn: yUSDC Token 2
0 ETH0.010808046
Rebalance94951522020-02-16 16:07:581762 days ago1581869278IN
Yearn: yUSDC Token 2
0 ETH0.006580818
Rebalance94951432020-02-16 16:06:041762 days ago1581869164IN
Yearn: yUSDC Token 2
0 ETH0.008364848
Redeem94950802020-02-16 15:52:111762 days ago1581868331IN
Yearn: yUSDC Token 2
0 ETH0.006713086
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
yUSDC

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-01-30
*/

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

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

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 yUSDC 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("yUSDC", "yUSDC", 6) {
    token = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    apr = address(0x318135fbD0b40D48fCEF431CCdF6C7926450edFB);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x9bA00D6856a4eDF4665BcA2C2309936572473B7E);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    dToken = 2;
    approveToken();
  }
  function set_new_AAVE(address _new_AAVE) public onlyOwner {
      aave = _new_AAVE;
  }
  function set_new_DYDX(address _new_DYDX) public onlyOwner {
      dydx = _new_DYDX;
  }
  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_ATOKEN(address _new_ATOKEN) public onlyOwner {
      aaveToken = _new_ATOKEN;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }

  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 == dapr) {
      newProvider = Lender.DYDX;
    }
    if (max == aapr) {
      newProvider = Lender.AAVE;
    }
    if (max == iapr) {
      newProvider = Lender.FULCRUM;
    }
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    }
    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 balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }

  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).approve(compound, uint(-1)); //also add to constructor
      IERC20(token).approve(dydx, uint(-1));
      IERC20(token).approve(getAave(), uint(-1));
      IERC20(token).approve(getAaveCore(), uint(-1));
      IERC20(token).approve(fulcrum, uint(-1));
  }

  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 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");
    uint256 amount = b.mul(_amount).div(bT);
    withdrawCompound(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) {
      withdrawFulcrum(_amount);
    }
  }

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

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

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        supplyDydx(balance());
      }
      if (newProvider == Lender.FULCRUM) {
        supplyFulcrum(balance());
      }
      if (newProvider == Lender.COMPOUND) {
        supplyCompound(balance());
      }
      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");
  }

  // Invest ETH
  function invest(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = calcPoolValueInToken();

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

      rebalance();

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

  // Invest self eth from external profits
  function investSelf()
      external
      nonReentrant
      onlyOwner
  {
      uint b = IERC20(token).balanceOf(address(this));
      require(b > 0, "deposit must be greater than 0");
      rebalance();
      pool = calcPoolValueInToken();
  }

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

  // Redeem any invested tokens from the pool
  function redeem(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 eth 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 ETH balance
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < r) {
        withdrawSome(r);
      }

      IERC20(token).transfer(msg.sender, r);

      rebalance();
      pool = calcPoolValueInToken();

  }

  // incase of half-way error
  function inCaseTokenGetsStuck(IERC20 _TokenAddress) onlyOwner public {
      uint qty = _TokenAddress.balanceOf(address(this));
      _TokenAddress.transfer(msg.sender, qty);
  }
  // incase of half-way error
  function inCaseETHGetsStuck() onlyOwner public{
      (bool result, ) = msg.sender.call.value(address(this).balance)("");
      require(result, "transfer of ETH failed");
  }
}

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":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":[],"name":"inCaseETHGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokenGetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"investSelf","outputs":[],"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 yUSDC.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 yUSDC.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AAVE","type":"address"}],"name":"set_new_AAVE","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_ATOKEN","type":"address"}],"name":"set_new_ATOKEN","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_DYDX","type":"address"}],"name":"set_new_DYDX","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"}]

60806040526000601060146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600581526020017f79555344430000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f795553444300000000000000000000000000000000000000000000000000000081525060068260039080519060200190620000bd92919062000a4d565b508160049080519060200190620000d692919062000a4d565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d6200043b60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a373a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073318135fbd0b40d48fcef431ccdf6c7926450edfb601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f013406a0b1d544238083df0b93ad0d2cbe0f65f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739ba00d6856a4edf4665bca2c2309936572473b7e600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600f81905550620004356200044360201b60201c565b62000c4f565b600033905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620004e492919062000ba4565b602060405180830381600087803b158015620004ff57600080fd5b505af115801562000514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200053a919081019062000b56565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005dc92919062000ba4565b602060405180830381600087803b158015620005f757600080fd5b505af11580156200060c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000632919081019062000b56565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b362000681620008f760201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620006c192919062000ba4565b602060405180830381600087803b158015620006dc57600080fd5b505af1158015620006f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000717919081019062000b56565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b362000766620009a260201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620007a692919062000ba4565b602060405180830381600087803b158015620007c157600080fd5b505af1158015620007d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620007fc919081019062000b56565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200089e92919062000ba4565b602060405180830381600087803b158015620008b957600080fd5b505af1158015620008ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620008f4919081019062000b56565b50565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200096257600080fd5b505afa15801562000977573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200099d919081019062000b2a565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a0d57600080fd5b505afa15801562000a22573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000a48919081019062000b2a565b905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000a9057805160ff191683800117855562000ac1565b8280016001018555821562000ac1579182015b8281111562000ac057825182559160200191906001019062000aa3565b5b50905062000ad0919062000ad4565b5090565b62000af991905b8082111562000af557600081600090555060010162000adb565b5090565b90565b60008151905062000b0d8162000c1b565b92915050565b60008151905062000b248162000c35565b92915050565b60006020828403121562000b3d57600080fd5b600062000b4d8482850162000afc565b91505092915050565b60006020828403121562000b6957600080fd5b600062000b798482850162000b13565b91505092915050565b62000b8d8162000bd1565b82525050565b62000b9e8162000c11565b82525050565b600060408201905062000bbb600083018562000b82565b62000bca602083018462000b93565b9392505050565b600062000bde8262000bf1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b62000c268162000bd1565b811462000c3257600080fd5b50565b62000c408162000be5565b811462000c4c57600080fd5b50565b615c728062000c5f6000396000f3fe6080604052600436106103505760003560e01c8063812adb06116101c6578063bbf31644116100f7578063f5a41dea11610095578063f69e20461161006f578063f69e204614610bf3578063f7c1ec7714610c1e578063f82ce27d14610c49578063fc0c546a14610c7457610350565b8063f5a41dea14610b88578063f5ff191614610bb3578063f60a15ed14610bdc57610350565b8063db006a75116100d1578063db006a7514610ad0578063dd62ed3e14610af9578063e849d65914610b36578063f2fde38b14610b5f57610350565b8063bbf3164414610a51578063cf8ca42614610a7a578063d9d7858a14610aa557610350565b80639ff011b911610164578063a72879711161013e578063a728797114610995578063a9059cbb146109c0578063a9de245b146109fd578063b69ef8a814610a2657610350565b80639ff011b914610904578063a160176d1461092d578063a457c2d71461095857610350565b80638e4ec6ef116101a05780638e4ec6ef1461086c5780638f32d59b1461089757806395d89b41146108c257806399b71d5c146108ed57610350565b8063812adb06146107ed578063819faf7b146108165780638da5cb5b1461084157610350565b806339509351116102a057806365aab7491161023e578063715018a611610218578063715018a61461076b57806377c7b8fc146107825780637d7c2a1c146107ad5780638124955c146107c457610350565b806365aab749146106da57806370a08231146107035780637137ef991461074057610350565b8063463574731161027a578063463574731461063057806357ded9c91461065957806358782c211461068457806361c1ec55146106af57610350565b806339509351146105b15780633990ab4f146105ee57806339c0a7e11461060557610350565b806316f0115b1161030d5780632afcf480116102e75780632afcf4801461050b5780632c7a5ae4146105345780632e8d6e181461055d578063313ce5671461058657610350565b806316f0115b1461047857806318160ddd146104a357806323b872dd146104ce57610350565b806306636c1c1461035257806306a3fe591461038f57806306fdde03146103ba578063085d4883146103e5578063095ea7b3146104105780630eb2a2671461044d575b005b34801561035e57600080fd5b5061037960048036036103749190810190614a86565b610c9f565b6040516103869190615853565b60405180910390f35b34801561039b57600080fd5b506103a4610edd565b6040516103b19190615445565b60405180910390f35b3480156103c657600080fd5b506103cf610f03565b6040516103dc91906155a8565b60405180910390f35b3480156103f157600080fd5b506103fa610fa5565b604051610407919061558d565b60405180910390f35b34801561041c57600080fd5b5061043760048036036104329190810190614940565b610fb8565b6040516104449190615572565b60405180910390f35b34801561045957600080fd5b50610462610fd6565b60405161046f9190615853565b60405180910390f35b34801561048457600080fd5b5061048d611088565b60405161049a9190615853565b60405180910390f35b3480156104af57600080fd5b506104b861108e565b6040516104c59190615853565b60405180910390f35b3480156104da57600080fd5b506104f560048036036104f091908101906148f1565b611098565b6040516105029190615572565b60405180910390f35b34801561051757600080fd5b50610532600480360361052d9190810190614a86565b611171565b005b34801561054057600080fd5b5061055b60048036036105569190810190614863565b611340565b005b34801561056957600080fd5b50610584600480360361057f91908101906149a5565b6113cb565b005b34801561059257600080fd5b5061059b611531565b6040516105a8919061586e565b60405180910390f35b3480156105bd57600080fd5b506105d860048036036105d39190810190614940565b611548565b6040516105e59190615572565b60405180910390f35b3480156105fa57600080fd5b506106036115fb565b005b34801561061157600080fd5b5061061a6117aa565b6040516106279190615853565b60405180910390f35b34801561063c57600080fd5b5061065760048036036106529190810190614863565b61189a565b005b34801561066557600080fd5b5061066e611925565b60405161067b9190615445565b60405180910390f35b34801561069057600080fd5b5061069961194b565b6040516106a69190615445565b60405180910390f35b3480156106bb57600080fd5b506106c4611971565b6040516106d19190615853565b60405180910390f35b3480156106e657600080fd5b5061070160048036036106fc9190810190614a86565b611a23565b005b34801561070f57600080fd5b5061072a60048036036107259190810190614863565b611abf565b6040516107379190615853565b60405180910390f35b34801561074c57600080fd5b50610755611b07565b6040516107629190615853565b60405180910390f35b34801561077757600080fd5b50610780611b7a565b005b34801561078e57600080fd5b50610797611c82565b6040516107a49190615853565b60405180910390f35b3480156107b957600080fd5b506107c2611cc4565b005b3480156107d057600080fd5b506107eb60048036036107e69190810190614a86565b611dfc565b005b3480156107f957600080fd5b50610814600480360361080f9190810190614863565b611ef0565b005b34801561082257600080fd5b5061082b611f7b565b6040516108389190615445565b60405180910390f35b34801561084d57600080fd5b50610856611fa1565b6040516108639190615445565b60405180910390f35b34801561087857600080fd5b50610881611fcb565b60405161088e9190615445565b60405180910390f35b3480156108a357600080fd5b506108ac611ff1565b6040516108b99190615572565b60405180910390f35b3480156108ce57600080fd5b506108d7612050565b6040516108e491906155a8565b60405180910390f35b3480156108f957600080fd5b506109026120f2565b005b34801561091057600080fd5b5061092b60048036036109269190810190614a86565b612578565b005b34801561093957600080fd5b506109426125c9565b60405161094f919061558d565b60405180910390f35b34801561096457600080fd5b5061097f600480360361097a9190810190614940565b612726565b60405161098c9190615572565b60405180910390f35b3480156109a157600080fd5b506109aa6127f3565b6040516109b79190615853565b60405180910390f35b3480156109cc57600080fd5b506109e760048036036109e29190810190614940565b6128df565b6040516109f49190615572565b60405180910390f35b348015610a0957600080fd5b50610a246004803603610a1f9190810190614863565b6128fd565b005b348015610a3257600080fd5b50610a3b612988565b604051610a489190615853565b60405180910390f35b348015610a5d57600080fd5b50610a786004803603610a739190810190614863565b612a3a565b005b348015610a8657600080fd5b50610a8f612ac5565b604051610a9c9190615853565b60405180910390f35b348015610ab157600080fd5b50610aba612b77565b604051610ac79190615853565b60405180910390f35b348015610adc57600080fd5b50610af76004803603610af29190810190614a86565b612b7d565b005b348015610b0557600080fd5b50610b206004803603610b1b91908101906148b5565b612f80565b604051610b2d9190615853565b60405180910390f35b348015610b4257600080fd5b50610b5d6004803603610b589190810190614a86565b613007565b005b348015610b6b57600080fd5b50610b866004803603610b819190810190614863565b6130f9565b005b348015610b9457600080fd5b50610b9d61314c565b604051610baa9190615853565b60405180910390f35b348015610bbf57600080fd5b50610bda6004803603610bd59190810190614863565b613217565b005b348015610be857600080fd5b50610bf16132a2565b005b348015610bff57600080fd5b50610c086133af565b604051610c159190615445565b60405180910390f35b348015610c2a57600080fd5b50610c336133d5565b604051610c409190615445565b60405180910390f35b348015610c5557600080fd5b50610c5e61347c565b604051610c6b9190615445565b60405180910390f35b348015610c8057600080fd5b50610c89613523565b604051610c969190615445565b60405180910390f35b600060606001604051908082528060200260200182016040528015610cde57816020015b610ccb6145a5565b815260200190600190039081610cc35790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110610d1a57fe5b6020026020010181905250610d2d6145d5565b6040518060800160405280600115158152602001600080811115610d4d57fe5b8152602001600080811115610d5e57fe5b8152602001858152509050610d71614613565b600081600001906001811115610d8357fe5b90816001811115610d9057fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015610e2957816020015b610e1661467f565b815260200190600190039081610e0e5790505b5090508181600081518110610e3a57fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401610ea292919061553b565b600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b5050505050505050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f9b5780601f10610f7057610100808354040283529160200191610f9b565b820191906000526020600020905b815481529060010190602001808311610f7e57829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b6000610fcc610fc5613549565b8484613551565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110339190615460565b60206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110839190810190614aaf565b905090565b60085481565b6000600254905090565b60006110a584848461371c565b611166846110b1613549565b61116185604051806060016040528060288152602001615be360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611117613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b613551565b600190509392505050565b600160066000828254019250508190555060006006549050600082116111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c3906157aa565b60405180910390fd5b6111d4611b07565b600881905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016112399392919061547b565b602060405180830381600087803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128b919081019061497c565b50611294611cc4565b6000809050600060085414156112b357829050826008819055506112df565b6112dc6008546112ce60025486613a0190919063ffffffff16565b613a7190919063ffffffff16565b90505b6112e7611b07565b6008819055506112f73382613abb565b50600654811461133c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611333906157ea565b60405180910390fd5b5050565b611348611ff1565b611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906156ea565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d3611ff1565b611412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611409906156ea565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161144d9190615460565b60206040518083038186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061149d9190810190614aaf565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114da9291906154b2565b602060405180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152c919081019061497c565b505050565b6000600560009054906101000a900460ff16905090565b60006115f1611555613549565b846115ec8560016000611566613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b613551565b6001905092915050565b60016006600082825401925050819055506000600654905061161b611ff1565b61165a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611651906156ea565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116b79190615460565b60206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117079190810190614aaf565b90506000811161174c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611743906157aa565b60405180910390fd5b611754611cc4565b61175c611b07565b6008819055505060065481146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e906157ea565b60405180910390fd5b50565b60006117b46146eb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b815260040161183e92919061582a565b604080518083038186803b15801561185557600080fd5b505afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061188d9190810190614a5d565b9050806020015191505090565b6118a2611ff1565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d8906156ea565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ce9190615460565b60206040518083038186803b1580156119e657600080fd5b505afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a1e9190810190614aaf565b905090565b611a2b6133d5565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401611a8a93929190615504565b600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611b75611b14612988565b611b67611b1f612ac5565b611b59611b2a6117aa565b611b4b611b3561314c565b611b3d6127f3565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b905090565b611b82611ff1565b611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb8906156ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611c8d611b07565b9050611cbe600254611cb0670de0b6b3a764000084613a0190919063ffffffff16565b613a7190919063ffffffff16565b91505090565b6000611cce6125c9565b9050601060149054906101000a900460ff166004811115611ceb57fe5b816004811115611cf757fe5b14611d0557611d04613c98565b5b6000611d0f612988565b1115611dd65760016004811115611d2257fe5b816004811115611d2e57fe5b1415611d4657611d44611d3f612988565b610c9f565b505b600480811115611d5257fe5b816004811115611d5e57fe5b1415611d7557611d74611d6f612988565b611dfc565b5b60026004811115611d8257fe5b816004811115611d8e57fe5b1415611da557611da4611d9f612988565b613007565b5b60036004811115611db257fe5b816004811115611dbe57fe5b1415611dd557611dd4611dcf612988565b611a23565b5b5b80601060146101000a81548160ff02191690836004811115611df457fe5b021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401611e5b9291906154b2565b602060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ead9190810190614aaf565b11611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906157ca565b60405180910390fd5b50565b611ef8611ff1565b611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906156ea565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612034613549565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e85780601f106120bd576101008083540402835291602001916120e8565b820191906000526020600020905b8154815290600101906020018083116120cb57829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121919291906154db565b602060405180830381600087803b1580156121ab57600080fd5b505af11580156121bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121e3919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122839291906154db565b602060405180830381600087803b15801561229d57600080fd5b505af11580156122b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d5919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b361231c6133d5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161235a9291906154db565b602060405180830381600087803b15801561237457600080fd5b505af1158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123ac919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b36123f361347c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124319291906154db565b602060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612483919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016125239291906154db565b602060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612575919081019061497c565b50565b612580611ff1565b6125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b6906156ea565b60405180910390fd5b80600f8190555050565b6000806000806000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161264e9190615445565b60006040518083038186803b15801561266657600080fd5b505afa15801561267a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506126a391908101906149ce565b9450945094509450506000809050808511156126bd578490505b808411156126c9578390505b808311156126d5578290505b808211156126e1578190505b6000809050828214156126f357600190505b8382141561270057600390505b8482141561270d57600490505b8582141561271a57600290505b80965050505050505090565b60006127e9612733613549565b846127e485604051806060016040528060258152602001615c0b602591396001600061275d613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b613551565b6001905092915050565b6000806127fe611971565b905060008111156128d8576128d5670de0b6b3a76400006128c7600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561288057600080fd5b505afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128b89190810190614aaf565b84613a0190919063ffffffff16565b613a7190919063ffffffff16565b90505b8091505090565b60006128f36128ec613549565b848461371c565b6001905092915050565b612905611ff1565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906156ea565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129e59190615460565b60206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a359190810190614aaf565b905090565b612a42611ff1565b612a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a78906156ea565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b229190615460565b60206040518083038186803b158015612b3a57600080fd5b505afa158015612b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b729190810190614aaf565b905090565b600f5481565b60016006600082825401925050819055506000600654905060008211612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf9061572a565b60405180910390fd5b6000612be333611abf565b905080831115612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061570a565b60405180910390fd5b612c30611b07565b6008819055506000612c61600254612c5386600854613a0190919063ffffffff16565b613a7190919063ffffffff16565b9050612ceb846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4284600254613d1190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612da69190615853565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e0b9190615460565b60206040518083038186803b158015612e2357600080fd5b505afa158015612e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e5b9190810190614aaf565b905081811015612e6f57612e6e82613d5b565b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612ecc9291906154b2565b602060405180830381600087803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f1e919081019061497c565b50612f27611cc4565b612f2f611b07565b6008819055505050506006548114612f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f73906157ea565b60405180910390fd5b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b81526004016130649190615853565b602060405180830381600087803b15801561307e57600080fd5b505af1158015613092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130b69190810190614aaf565b146130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ed9061564a565b60405180910390fd5b50565b613101611ff1565b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906156ea565b60405180910390fd5b61314981613ed1565b50565b600080613157610fd6565b9050600081111561321057600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b81526004016131bd9190615460565b60206040518083038186803b1580156131d557600080fd5b505afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061320d9190810190614aaf565b90505b8091505090565b61321f611ff1565b61325e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613255906156ea565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6132aa611ff1565b6132e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e0906156ea565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff163160405161332690615430565b60006040518083038185875af1925050503d8060008114613363576040519150601f19603f3d011682016040523d82523d6000602084013e613368565b606091505b50509050806133ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a39061568a565b60405180910390fd5b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561343f57600080fd5b505afa158015613453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613477919081019061488c565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156134e657600080fd5b505afa1580156134fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061351e919081019061488c565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b89061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136289061562a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161370f9190615853565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137839061574a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f3906155ca565b60405180910390fd5b61386781604051806060016040528060268152602001615bbd602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139999190615853565b60405180910390a3505050565b60008383111582906139ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e591906155a8565b60405180910390fd5b5060008385039050809150509392505050565b600080831415613a145760009050613a6b565b6000828402905082848281613a2557fe5b0414613a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5d906156aa565b60405180910390fd5b809150505b92915050565b6000613ab383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614001565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b229061580a565b60405180910390fd5b613b4081600254613c4390919063ffffffff16565b600281905550613b97816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c379190615853565b60405180910390a35050565b600080828401905083811015613c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c859061566a565b60405180910390fd5b8091505092915050565b6000613ca2611971565b90506000811115613cb757613cb681614062565b5b613cbf6117aa565b90506000811115613cd457613cd381614154565b5b613cdc610fd6565b90506000811115613cf157613cf08161438e565b5b613cf9612ac5565b90506000811115613d0e57613d0d81614482565b5b50565b6000613d5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139a6565b905092915050565b60026004811115613d6857fe5b601060149054906101000a900460ff166004811115613d8357fe5b1415613d9357613d9281614512565b5b60036004811115613da057fe5b601060149054906101000a900460ff166004811115613dbb57fe5b1415613e155780613dca612ac5565b1015613e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e029061576a565b60405180910390fd5b613e1481614482565b5b60016004811115613e2257fe5b601060149054906101000a900460ff166004811115613e3d57fe5b1415613e975780613e4c6117aa565b1015613e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e849061576a565b60405180910390fd5b613e9681614154565b5b600480811115613ea357fe5b601060149054906101000a900460ff166004811115613ebe57fe5b1415613ece57613ecd8161438e565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f389061560a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161403f91906155a8565b60405180910390fd5b50600083858161405457fe5b049050809150509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016140bf9190615853565b602060405180830381600087803b1580156140d957600080fd5b505af11580156140ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141119190810190614aaf565b14614151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614148906155ea565b60405180910390fd5b50565b6060600160405190808252806020026020018201604052801561419157816020015b61417e6145a5565b8152602001906001900390816141765790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250816000815181106141cd57fe5b60200260200101819052506141e06145d5565b604051806080016040528060001515815260200160008081111561420057fe5b815260200160008081111561421157fe5b8152602001848152509050614224614613565b60018160000190600181111561423657fe5b9081600181111561424357fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156142dc57816020015b6142c961467f565b8152602001906001900390816142c15790505b50905081816000815181106142ed57fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b815260040161435592919061553b565b600060405180830381600087803b15801561436f57600080fd5b505af1158015614383573d6000803e3d6000fd5b505050505050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b81526004016143ed9291906154b2565b602060405180830381600087803b15801561440757600080fd5b505af115801561441b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061443f9190810190614aaf565b1161447f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614476906156ca565b60405180910390fd5b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b81526004016144dd9190615853565b600060405180830381600087803b1580156144f757600080fd5b505af115801561450b573d6000803e3d6000fd5b5050505050565b600061451c611971565b905060006145286127f3565b90508281101561456d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145649061576a565b60405180910390fd5b6000614594826145868686613a0190919063ffffffff16565b613a7190919063ffffffff16565b905061459f81614062565b50505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156145f557fe5b815260200160008081111561460657fe5b8152602001600081525090565b6040518061010001604052806000600181111561462c57fe5b815260200160008152602001614640614707565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561469857fe5b8152602001600081526020016146ac614707565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600015158152602001600081525090565b604051806080016040528060001515815260200160008081111561472757fe5b815260200160008081111561473857fe5b8152602001600081525090565b60008135905061475481615b60565b92915050565b60008151905061476981615b60565b92915050565b60008151905061477e81615b77565b92915050565b60008135905061479381615b8e565b92915050565b600082601f8301126147aa57600080fd5b81516147bd6147b8826158b6565b615889565b915080825260208301602083018583830111156147d957600080fd5b6147e4838284615ae8565b50505092915050565b6000604082840312156147ff57600080fd5b6148096040615889565b905060006148198482850161476f565b600083015250602061482d8482850161484e565b60208301525092915050565b60008135905061484881615ba5565b92915050565b60008151905061485d81615ba5565b92915050565b60006020828403121561487557600080fd5b600061488384828501614745565b91505092915050565b60006020828403121561489e57600080fd5b60006148ac8482850161475a565b91505092915050565b600080604083850312156148c857600080fd5b60006148d685828601614745565b92505060206148e785828601614745565b9150509250929050565b60008060006060848603121561490657600080fd5b600061491486828701614745565b935050602061492586828701614745565b925050604061493686828701614839565b9150509250925092565b6000806040838503121561495357600080fd5b600061496185828601614745565b925050602061497285828601614839565b9150509250929050565b60006020828403121561498e57600080fd5b600061499c8482850161476f565b91505092915050565b6000602082840312156149b757600080fd5b60006149c584828501614784565b91505092915050565b600080600080600060a086880312156149e657600080fd5b600086015167ffffffffffffffff811115614a0057600080fd5b614a0c88828901614799565b9550506020614a1d8882890161484e565b9450506040614a2e8882890161484e565b9350506060614a3f8882890161484e565b9250506080614a508882890161484e565b9150509295509295909350565b600060408284031215614a6f57600080fd5b6000614a7d848285016147ed565b91505092915050565b600060208284031215614a9857600080fd5b6000614aa684828501614839565b91505092915050565b600060208284031215614ac157600080fd5b6000614acf8482850161484e565b91505092915050565b6000614ae4838361529d565b905092915050565b6000614af883836153a5565b60408301905092915050565b614b0d81615a58565b82525050565b614b1c81615997565b82525050565b614b2b81615997565b82525050565b6000614b3c82615902565b614b468185615948565b935083602082028501614b58856158e2565b8060005b85811015614b945784840389528151614b758582614ad8565b9450614b808361592e565b925060208a01995050600181019050614b5c565b50829750879550505050505092915050565b6000614bb18261590d565b614bbb8185615959565b9350614bc6836158f2565b8060005b83811015614bf7578151614bde8882614aec565b9750614be98361593b565b925050600181019050614bca565b5085935050505092915050565b614c0d816159a9565b82525050565b614c1c816159a9565b82525050565b6000614c2d82615918565b614c37818561596a565b9350614c47818560208601615ae8565b614c5081615b1b565b840191505092915050565b614c6481615a6a565b82525050565b614c7381615a7c565b82525050565b614c8281615a8e565b82525050565b614c9181615aa0565b82525050565b614ca081615ab2565b82525050565b6000614cb182615923565b614cbb8185615986565b9350614ccb818560208601615ae8565b614cd481615b1b565b840191505092915050565b6000614cec602383615986565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d52601983615986565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000614d92602683615986565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614df8602283615986565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e5e601783615986565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614e9e601b83615986565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614ede601683615986565b91507f7472616e73666572206f6620455448206661696c6564000000000000000000006000830152602082019050919050565b6000614f1e602183615986565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f84601883615986565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000614fc4602083615986565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615004601483615986565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000615044601f83615986565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615084602583615986565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150ea60008361597b565b9150600082019050919050565b6000615104601283615986565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000615144602483615986565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151aa601e83615986565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b60006151ea601683615986565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b600061522a601f83615986565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061526a601f83615986565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516152b66000860182614c5b565b5060208301516152c96020860182615403565b5060408301516152dc6040860182615350565b5060608301516152ef60c0860182615403565b50608083015161530260e0860182615403565b5060a0830151615316610100860182614b13565b5060c083015161532a610120860182615403565b5060e08301518482036101408601526153438282614c22565b9150508091505092915050565b6080820160008201516153666000850182614c04565b5060208201516153796020850182614c6a565b50604082015161538c6040850182614c79565b50606082015161539f6060850182615403565b50505050565b6040820160008201516153bb6000850182614b13565b5060208201516153ce6020850182615403565b50505050565b6040820160008201516153ea6000850182614b13565b5060208201516153fd6020850182615403565b50505050565b61540c81615a41565b82525050565b61541b81615a41565b82525050565b61542a81615a4b565b82525050565b600061543b826150dd565b9150819050919050565b600060208201905061545a6000830184614b22565b92915050565b60006020820190506154756000830184614b04565b92915050565b60006060820190506154906000830186614b04565b61549d6020830185614b04565b6154aa6040830184615412565b949350505050565b60006040820190506154c76000830185614b04565b6154d46020830184615412565b9392505050565b60006040820190506154f06000830185614b22565b6154fd6020830184615412565b9392505050565b60006060820190506155196000830186614b22565b6155266020830185615412565b6155336040830184614c97565b949350505050565b600060408201905081810360008301526155558185614ba6565b905081810360208301526155698184614b31565b90509392505050565b60006020820190506155876000830184614c13565b92915050565b60006020820190506155a26000830184614c88565b92915050565b600060208201905081810360008301526155c28184614ca6565b905092915050565b600060208201905081810360008301526155e381614cdf565b9050919050565b6000602082019050818103600083015261560381614d45565b9050919050565b6000602082019050818103600083015261562381614d85565b9050919050565b6000602082019050818103600083015261564381614deb565b9050919050565b6000602082019050818103600083015261566381614e51565b9050919050565b6000602082019050818103600083015261568381614e91565b9050919050565b600060208201905081810360008301526156a381614ed1565b9050919050565b600060208201905081810360008301526156c381614f11565b9050919050565b600060208201905081810360008301526156e381614f77565b9050919050565b6000602082019050818103600083015261570381614fb7565b9050919050565b6000602082019050818103600083015261572381614ff7565b9050919050565b6000602082019050818103600083015261574381615037565b9050919050565b6000602082019050818103600083015261576381615077565b9050919050565b60006020820190508181036000830152615783816150f7565b9050919050565b600060208201905081810360008301526157a381615137565b9050919050565b600060208201905081810360008301526157c38161519d565b9050919050565b600060208201905081810360008301526157e3816151dd565b9050919050565b600060208201905081810360008301526158038161521d565b9050919050565b600060208201905081810360008301526158238161525d565b9050919050565b600060608201905061583f60008301856153d4565b61584c6040830184615412565b9392505050565b60006020820190506158686000830184615412565b92915050565b60006020820190506158836000830184615421565b92915050565b6000604051905081810181811067ffffffffffffffff821117156158ac57600080fd5b8060405250919050565b600067ffffffffffffffff8211156158cd57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006159a282615a21565b9050919050565b60008115159050919050565b60006159c082615997565b9050919050565b60008190506159d582615b2c565b919050565b60008190506159e882615b39565b919050565b60008190506159fb82615b46565b919050565b6000819050615a0e82615b53565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615a6382615ac4565b9050919050565b6000615a75826159c7565b9050919050565b6000615a87826159da565b9050919050565b6000615a99826159ed565b9050919050565b6000615aab82615a00565b9050919050565b6000615abd82615a13565b9050919050565b6000615acf82615ad6565b9050919050565b6000615ae182615a21565b9050919050565b60005b83811015615b06578082015181840152602081019050615aeb565b83811115615b15576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615b3657fe5b50565b60018110615b4357fe5b50565b60018110615b5057fe5b50565b60058110615b5d57fe5b50565b615b6981615997565b8114615b7457600080fd5b50565b615b80816159a9565b8114615b8b57600080fd5b50565b615b97816159b5565b8114615ba257600080fd5b50565b615bae81615a41565b8114615bb957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820e69df7ac1fd5f99098499da2cf98d6b121d4545ea2868bcb01383d1c61b523e86c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode

0x6080604052600436106103505760003560e01c8063812adb06116101c6578063bbf31644116100f7578063f5a41dea11610095578063f69e20461161006f578063f69e204614610bf3578063f7c1ec7714610c1e578063f82ce27d14610c49578063fc0c546a14610c7457610350565b8063f5a41dea14610b88578063f5ff191614610bb3578063f60a15ed14610bdc57610350565b8063db006a75116100d1578063db006a7514610ad0578063dd62ed3e14610af9578063e849d65914610b36578063f2fde38b14610b5f57610350565b8063bbf3164414610a51578063cf8ca42614610a7a578063d9d7858a14610aa557610350565b80639ff011b911610164578063a72879711161013e578063a728797114610995578063a9059cbb146109c0578063a9de245b146109fd578063b69ef8a814610a2657610350565b80639ff011b914610904578063a160176d1461092d578063a457c2d71461095857610350565b80638e4ec6ef116101a05780638e4ec6ef1461086c5780638f32d59b1461089757806395d89b41146108c257806399b71d5c146108ed57610350565b8063812adb06146107ed578063819faf7b146108165780638da5cb5b1461084157610350565b806339509351116102a057806365aab7491161023e578063715018a611610218578063715018a61461076b57806377c7b8fc146107825780637d7c2a1c146107ad5780638124955c146107c457610350565b806365aab749146106da57806370a08231146107035780637137ef991461074057610350565b8063463574731161027a578063463574731461063057806357ded9c91461065957806358782c211461068457806361c1ec55146106af57610350565b806339509351146105b15780633990ab4f146105ee57806339c0a7e11461060557610350565b806316f0115b1161030d5780632afcf480116102e75780632afcf4801461050b5780632c7a5ae4146105345780632e8d6e181461055d578063313ce5671461058657610350565b806316f0115b1461047857806318160ddd146104a357806323b872dd146104ce57610350565b806306636c1c1461035257806306a3fe591461038f57806306fdde03146103ba578063085d4883146103e5578063095ea7b3146104105780630eb2a2671461044d575b005b34801561035e57600080fd5b5061037960048036036103749190810190614a86565b610c9f565b6040516103869190615853565b60405180910390f35b34801561039b57600080fd5b506103a4610edd565b6040516103b19190615445565b60405180910390f35b3480156103c657600080fd5b506103cf610f03565b6040516103dc91906155a8565b60405180910390f35b3480156103f157600080fd5b506103fa610fa5565b604051610407919061558d565b60405180910390f35b34801561041c57600080fd5b5061043760048036036104329190810190614940565b610fb8565b6040516104449190615572565b60405180910390f35b34801561045957600080fd5b50610462610fd6565b60405161046f9190615853565b60405180910390f35b34801561048457600080fd5b5061048d611088565b60405161049a9190615853565b60405180910390f35b3480156104af57600080fd5b506104b861108e565b6040516104c59190615853565b60405180910390f35b3480156104da57600080fd5b506104f560048036036104f091908101906148f1565b611098565b6040516105029190615572565b60405180910390f35b34801561051757600080fd5b50610532600480360361052d9190810190614a86565b611171565b005b34801561054057600080fd5b5061055b60048036036105569190810190614863565b611340565b005b34801561056957600080fd5b50610584600480360361057f91908101906149a5565b6113cb565b005b34801561059257600080fd5b5061059b611531565b6040516105a8919061586e565b60405180910390f35b3480156105bd57600080fd5b506105d860048036036105d39190810190614940565b611548565b6040516105e59190615572565b60405180910390f35b3480156105fa57600080fd5b506106036115fb565b005b34801561061157600080fd5b5061061a6117aa565b6040516106279190615853565b60405180910390f35b34801561063c57600080fd5b5061065760048036036106529190810190614863565b61189a565b005b34801561066557600080fd5b5061066e611925565b60405161067b9190615445565b60405180910390f35b34801561069057600080fd5b5061069961194b565b6040516106a69190615445565b60405180910390f35b3480156106bb57600080fd5b506106c4611971565b6040516106d19190615853565b60405180910390f35b3480156106e657600080fd5b5061070160048036036106fc9190810190614a86565b611a23565b005b34801561070f57600080fd5b5061072a60048036036107259190810190614863565b611abf565b6040516107379190615853565b60405180910390f35b34801561074c57600080fd5b50610755611b07565b6040516107629190615853565b60405180910390f35b34801561077757600080fd5b50610780611b7a565b005b34801561078e57600080fd5b50610797611c82565b6040516107a49190615853565b60405180910390f35b3480156107b957600080fd5b506107c2611cc4565b005b3480156107d057600080fd5b506107eb60048036036107e69190810190614a86565b611dfc565b005b3480156107f957600080fd5b50610814600480360361080f9190810190614863565b611ef0565b005b34801561082257600080fd5b5061082b611f7b565b6040516108389190615445565b60405180910390f35b34801561084d57600080fd5b50610856611fa1565b6040516108639190615445565b60405180910390f35b34801561087857600080fd5b50610881611fcb565b60405161088e9190615445565b60405180910390f35b3480156108a357600080fd5b506108ac611ff1565b6040516108b99190615572565b60405180910390f35b3480156108ce57600080fd5b506108d7612050565b6040516108e491906155a8565b60405180910390f35b3480156108f957600080fd5b506109026120f2565b005b34801561091057600080fd5b5061092b60048036036109269190810190614a86565b612578565b005b34801561093957600080fd5b506109426125c9565b60405161094f919061558d565b60405180910390f35b34801561096457600080fd5b5061097f600480360361097a9190810190614940565b612726565b60405161098c9190615572565b60405180910390f35b3480156109a157600080fd5b506109aa6127f3565b6040516109b79190615853565b60405180910390f35b3480156109cc57600080fd5b506109e760048036036109e29190810190614940565b6128df565b6040516109f49190615572565b60405180910390f35b348015610a0957600080fd5b50610a246004803603610a1f9190810190614863565b6128fd565b005b348015610a3257600080fd5b50610a3b612988565b604051610a489190615853565b60405180910390f35b348015610a5d57600080fd5b50610a786004803603610a739190810190614863565b612a3a565b005b348015610a8657600080fd5b50610a8f612ac5565b604051610a9c9190615853565b60405180910390f35b348015610ab157600080fd5b50610aba612b77565b604051610ac79190615853565b60405180910390f35b348015610adc57600080fd5b50610af76004803603610af29190810190614a86565b612b7d565b005b348015610b0557600080fd5b50610b206004803603610b1b91908101906148b5565b612f80565b604051610b2d9190615853565b60405180910390f35b348015610b4257600080fd5b50610b5d6004803603610b589190810190614a86565b613007565b005b348015610b6b57600080fd5b50610b866004803603610b819190810190614863565b6130f9565b005b348015610b9457600080fd5b50610b9d61314c565b604051610baa9190615853565b60405180910390f35b348015610bbf57600080fd5b50610bda6004803603610bd59190810190614863565b613217565b005b348015610be857600080fd5b50610bf16132a2565b005b348015610bff57600080fd5b50610c086133af565b604051610c159190615445565b60405180910390f35b348015610c2a57600080fd5b50610c336133d5565b604051610c409190615445565b60405180910390f35b348015610c5557600080fd5b50610c5e61347c565b604051610c6b9190615445565b60405180910390f35b348015610c8057600080fd5b50610c89613523565b604051610c969190615445565b60405180910390f35b600060606001604051908082528060200260200182016040528015610cde57816020015b610ccb6145a5565b815260200190600190039081610cc35790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110610d1a57fe5b6020026020010181905250610d2d6145d5565b6040518060800160405280600115158152602001600080811115610d4d57fe5b8152602001600080811115610d5e57fe5b8152602001858152509050610d71614613565b600081600001906001811115610d8357fe5b90816001811115610d9057fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015610e2957816020015b610e1661467f565b815260200190600190039081610e0e5790505b5090508181600081518110610e3a57fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401610ea292919061553b565b600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b5050505050505050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f9b5780601f10610f7057610100808354040283529160200191610f9b565b820191906000526020600020905b815481529060010190602001808311610f7e57829003601f168201915b5050505050905090565b601060149054906101000a900460ff1681565b6000610fcc610fc5613549565b8484613551565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110339190615460565b60206040518083038186803b15801561104b57600080fd5b505afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110839190810190614aaf565b905090565b60085481565b6000600254905090565b60006110a584848461371c565b611166846110b1613549565b61116185604051806060016040528060288152602001615be360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611117613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b613551565b600190509392505050565b600160066000828254019250508190555060006006549050600082116111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c3906157aa565b60405180910390fd5b6111d4611b07565b600881905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016112399392919061547b565b602060405180830381600087803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128b919081019061497c565b50611294611cc4565b6000809050600060085414156112b357829050826008819055506112df565b6112dc6008546112ce60025486613a0190919063ffffffff16565b613a7190919063ffffffff16565b90505b6112e7611b07565b6008819055506112f73382613abb565b50600654811461133c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611333906157ea565b60405180910390fd5b5050565b611348611ff1565b611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906156ea565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d3611ff1565b611412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611409906156ea565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161144d9190615460565b60206040518083038186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061149d9190810190614aaf565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114da9291906154b2565b602060405180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061152c919081019061497c565b505050565b6000600560009054906101000a900460ff16905090565b60006115f1611555613549565b846115ec8560016000611566613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b613551565b6001905092915050565b60016006600082825401925050819055506000600654905061161b611ff1565b61165a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611651906156ea565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116b79190615460565b60206040518083038186803b1580156116cf57600080fd5b505afa1580156116e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117079190810190614aaf565b90506000811161174c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611743906157aa565b60405180910390fd5b611754611cc4565b61175c611b07565b6008819055505060065481146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e906157ea565b60405180910390fd5b50565b60006117b46146eb565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f546040518363ffffffff1660e01b815260040161183e92919061582a565b604080518083038186803b15801561185557600080fd5b505afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061188d9190810190614a5d565b9050806020015191505090565b6118a2611ff1565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d8906156ea565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ce9190615460565b60206040518083038186803b1580156119e657600080fd5b505afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a1e9190810190614aaf565b905090565b611a2b6133d5565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401611a8a93929190615504565b600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611b75611b14612988565b611b67611b1f612ac5565b611b59611b2a6117aa565b611b4b611b3561314c565b611b3d6127f3565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b613c4390919063ffffffff16565b905090565b611b82611ff1565b611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb8906156ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611c8d611b07565b9050611cbe600254611cb0670de0b6b3a764000084613a0190919063ffffffff16565b613a7190919063ffffffff16565b91505090565b6000611cce6125c9565b9050601060149054906101000a900460ff166004811115611ceb57fe5b816004811115611cf757fe5b14611d0557611d04613c98565b5b6000611d0f612988565b1115611dd65760016004811115611d2257fe5b816004811115611d2e57fe5b1415611d4657611d44611d3f612988565b610c9f565b505b600480811115611d5257fe5b816004811115611d5e57fe5b1415611d7557611d74611d6f612988565b611dfc565b5b60026004811115611d8257fe5b816004811115611d8e57fe5b1415611da557611da4611d9f612988565b613007565b5b60036004811115611db257fe5b816004811115611dbe57fe5b1415611dd557611dd4611dcf612988565b611a23565b5b5b80601060146101000a81548160ff02191690836004811115611df457fe5b021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401611e5b9291906154b2565b602060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ead9190810190614aaf565b11611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906157ca565b60405180910390fd5b50565b611ef8611ff1565b611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906156ea565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612034613549565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e85780601f106120bd576101008083540402835291602001916120e8565b820191906000526020600020905b8154815290600101906020018083116120cb57829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121919291906154db565b602060405180830381600087803b1580156121ab57600080fd5b505af11580156121bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121e3919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122839291906154db565b602060405180830381600087803b15801561229d57600080fd5b505af11580156122b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d5919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b361231c6133d5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161235a9291906154db565b602060405180830381600087803b15801561237457600080fd5b505af1158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123ac919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b36123f361347c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124319291906154db565b602060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612483919081019061497c565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016125239291906154db565b602060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612575919081019061497c565b50565b612580611ff1565b6125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b6906156ea565b60405180910390fd5b80600f8190555050565b6000806000806000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161264e9190615445565b60006040518083038186803b15801561266657600080fd5b505afa15801561267a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506126a391908101906149ce565b9450945094509450506000809050808511156126bd578490505b808411156126c9578390505b808311156126d5578290505b808211156126e1578190505b6000809050828214156126f357600190505b8382141561270057600390505b8482141561270d57600490505b8582141561271a57600290505b80965050505050505090565b60006127e9612733613549565b846127e485604051806060016040528060258152602001615c0b602591396001600061275d613549565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b613551565b6001905092915050565b6000806127fe611971565b905060008111156128d8576128d5670de0b6b3a76400006128c7600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561288057600080fd5b505afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128b89190810190614aaf565b84613a0190919063ffffffff16565b613a7190919063ffffffff16565b90505b8091505090565b60006128f36128ec613549565b848461371c565b6001905092915050565b612905611ff1565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906156ea565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129e59190615460565b60206040518083038186803b1580156129fd57600080fd5b505afa158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a359190810190614aaf565b905090565b612a42611ff1565b612a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a78906156ea565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b229190615460565b60206040518083038186803b158015612b3a57600080fd5b505afa158015612b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b729190810190614aaf565b905090565b600f5481565b60016006600082825401925050819055506000600654905060008211612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf9061572a565b60405180910390fd5b6000612be333611abf565b905080831115612c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f9061570a565b60405180910390fd5b612c30611b07565b6008819055506000612c61600254612c5386600854613a0190919063ffffffff16565b613a7190919063ffffffff16565b9050612ceb846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4284600254613d1190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612da69190615853565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e0b9190615460565b60206040518083038186803b158015612e2357600080fd5b505afa158015612e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e5b9190810190614aaf565b905081811015612e6f57612e6e82613d5b565b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612ecc9291906154b2565b602060405180830381600087803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f1e919081019061497c565b50612f27611cc4565b612f2f611b07565b6008819055505050506006548114612f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f73906157ea565b60405180910390fd5b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b81526004016130649190615853565b602060405180830381600087803b15801561307e57600080fd5b505af1158015613092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130b69190810190614aaf565b146130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ed9061564a565b60405180910390fd5b50565b613101611ff1565b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906156ea565b60405180910390fd5b61314981613ed1565b50565b600080613157610fd6565b9050600081111561321057600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b81526004016131bd9190615460565b60206040518083038186803b1580156131d557600080fd5b505afa1580156131e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061320d9190810190614aaf565b90505b8091505090565b61321f611ff1565b61325e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613255906156ea565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6132aa611ff1565b6132e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e0906156ea565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff163160405161332690615430565b60006040518083038185875af1925050503d8060008114613363576040519150601f19603f3d011682016040523d82523d6000602084013e613368565b606091505b50509050806133ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a39061568a565b60405180910390fd5b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561343f57600080fd5b505afa158015613453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613477919081019061488c565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156134e657600080fd5b505afa1580156134fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061351e919081019061488c565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b89061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136289061562a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161370f9190615853565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137839061574a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f3906155ca565b60405180910390fd5b61386781604051806060016040528060268152602001615bbd602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139999190615853565b60405180910390a3505050565b60008383111582906139ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e591906155a8565b60405180910390fd5b5060008385039050809150509392505050565b600080831415613a145760009050613a6b565b6000828402905082848281613a2557fe5b0414613a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5d906156aa565b60405180910390fd5b809150505b92915050565b6000613ab383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614001565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b229061580a565b60405180910390fd5b613b4081600254613c4390919063ffffffff16565b600281905550613b97816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c4390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c379190615853565b60405180910390a35050565b600080828401905083811015613c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c859061566a565b60405180910390fd5b8091505092915050565b6000613ca2611971565b90506000811115613cb757613cb681614062565b5b613cbf6117aa565b90506000811115613cd457613cd381614154565b5b613cdc610fd6565b90506000811115613cf157613cf08161438e565b5b613cf9612ac5565b90506000811115613d0e57613d0d81614482565b5b50565b6000613d5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139a6565b905092915050565b60026004811115613d6857fe5b601060149054906101000a900460ff166004811115613d8357fe5b1415613d9357613d9281614512565b5b60036004811115613da057fe5b601060149054906101000a900460ff166004811115613dbb57fe5b1415613e155780613dca612ac5565b1015613e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e029061576a565b60405180910390fd5b613e1481614482565b5b60016004811115613e2257fe5b601060149054906101000a900460ff166004811115613e3d57fe5b1415613e975780613e4c6117aa565b1015613e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e849061576a565b60405180910390fd5b613e9681614154565b5b600480811115613ea357fe5b601060149054906101000a900460ff166004811115613ebe57fe5b1415613ece57613ecd8161438e565b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f389061560a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161403f91906155a8565b60405180910390fd5b50600083858161405457fe5b049050809150509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016140bf9190615853565b602060405180830381600087803b1580156140d957600080fd5b505af11580156140ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141119190810190614aaf565b14614151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614148906155ea565b60405180910390fd5b50565b6060600160405190808252806020026020018201604052801561419157816020015b61417e6145a5565b8152602001906001900390816141765790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250816000815181106141cd57fe5b60200260200101819052506141e06145d5565b604051806080016040528060001515815260200160008081111561420057fe5b815260200160008081111561421157fe5b8152602001848152509050614224614613565b60018160000190600181111561423657fe5b9081600181111561424357fe5b815250506000816020018181525050818160400181905250600f54816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156142dc57816020015b6142c961467f565b8152602001906001900390816142c15790505b50905081816000815181106142ed57fe5b6020026020010181905250600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b815260040161435592919061553b565b600060405180830381600087803b15801561436f57600080fd5b505af1158015614383573d6000803e3d6000fd5b505050505050505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b81526004016143ed9291906154b2565b602060405180830381600087803b15801561440757600080fd5b505af115801561441b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061443f9190810190614aaf565b1161447f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614476906156ca565b60405180910390fd5b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b81526004016144dd9190615853565b600060405180830381600087803b1580156144f757600080fd5b505af115801561450b573d6000803e3d6000fd5b5050505050565b600061451c611971565b905060006145286127f3565b90508281101561456d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145649061576a565b60405180910390fd5b6000614594826145868686613a0190919063ffffffff16565b613a7190919063ffffffff16565b905061459f81614062565b50505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156145f557fe5b815260200160008081111561460657fe5b8152602001600081525090565b6040518061010001604052806000600181111561462c57fe5b815260200160008152602001614640614707565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561469857fe5b8152602001600081526020016146ac614707565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060400160405280600015158152602001600081525090565b604051806080016040528060001515815260200160008081111561472757fe5b815260200160008081111561473857fe5b8152602001600081525090565b60008135905061475481615b60565b92915050565b60008151905061476981615b60565b92915050565b60008151905061477e81615b77565b92915050565b60008135905061479381615b8e565b92915050565b600082601f8301126147aa57600080fd5b81516147bd6147b8826158b6565b615889565b915080825260208301602083018583830111156147d957600080fd5b6147e4838284615ae8565b50505092915050565b6000604082840312156147ff57600080fd5b6148096040615889565b905060006148198482850161476f565b600083015250602061482d8482850161484e565b60208301525092915050565b60008135905061484881615ba5565b92915050565b60008151905061485d81615ba5565b92915050565b60006020828403121561487557600080fd5b600061488384828501614745565b91505092915050565b60006020828403121561489e57600080fd5b60006148ac8482850161475a565b91505092915050565b600080604083850312156148c857600080fd5b60006148d685828601614745565b92505060206148e785828601614745565b9150509250929050565b60008060006060848603121561490657600080fd5b600061491486828701614745565b935050602061492586828701614745565b925050604061493686828701614839565b9150509250925092565b6000806040838503121561495357600080fd5b600061496185828601614745565b925050602061497285828601614839565b9150509250929050565b60006020828403121561498e57600080fd5b600061499c8482850161476f565b91505092915050565b6000602082840312156149b757600080fd5b60006149c584828501614784565b91505092915050565b600080600080600060a086880312156149e657600080fd5b600086015167ffffffffffffffff811115614a0057600080fd5b614a0c88828901614799565b9550506020614a1d8882890161484e565b9450506040614a2e8882890161484e565b9350506060614a3f8882890161484e565b9250506080614a508882890161484e565b9150509295509295909350565b600060408284031215614a6f57600080fd5b6000614a7d848285016147ed565b91505092915050565b600060208284031215614a9857600080fd5b6000614aa684828501614839565b91505092915050565b600060208284031215614ac157600080fd5b6000614acf8482850161484e565b91505092915050565b6000614ae4838361529d565b905092915050565b6000614af883836153a5565b60408301905092915050565b614b0d81615a58565b82525050565b614b1c81615997565b82525050565b614b2b81615997565b82525050565b6000614b3c82615902565b614b468185615948565b935083602082028501614b58856158e2565b8060005b85811015614b945784840389528151614b758582614ad8565b9450614b808361592e565b925060208a01995050600181019050614b5c565b50829750879550505050505092915050565b6000614bb18261590d565b614bbb8185615959565b9350614bc6836158f2565b8060005b83811015614bf7578151614bde8882614aec565b9750614be98361593b565b925050600181019050614bca565b5085935050505092915050565b614c0d816159a9565b82525050565b614c1c816159a9565b82525050565b6000614c2d82615918565b614c37818561596a565b9350614c47818560208601615ae8565b614c5081615b1b565b840191505092915050565b614c6481615a6a565b82525050565b614c7381615a7c565b82525050565b614c8281615a8e565b82525050565b614c9181615aa0565b82525050565b614ca081615ab2565b82525050565b6000614cb182615923565b614cbb8185615986565b9350614ccb818560208601615ae8565b614cd481615b1b565b840191505092915050565b6000614cec602383615986565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d52601983615986565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000614d92602683615986565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614df8602283615986565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e5e601783615986565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614e9e601b83615986565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614ede601683615986565b91507f7472616e73666572206f6620455448206661696c6564000000000000000000006000830152602082019050919050565b6000614f1e602183615986565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f84601883615986565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000614fc4602083615986565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615004601483615986565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000615044601f83615986565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615084602583615986565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150ea60008361597b565b9150600082019050919050565b6000615104601283615986565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000615144602483615986565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151aa601e83615986565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b60006151ea601683615986565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b600061522a601f83615986565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061526a601f83615986565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516152b66000860182614c5b565b5060208301516152c96020860182615403565b5060408301516152dc6040860182615350565b5060608301516152ef60c0860182615403565b50608083015161530260e0860182615403565b5060a0830151615316610100860182614b13565b5060c083015161532a610120860182615403565b5060e08301518482036101408601526153438282614c22565b9150508091505092915050565b6080820160008201516153666000850182614c04565b5060208201516153796020850182614c6a565b50604082015161538c6040850182614c79565b50606082015161539f6060850182615403565b50505050565b6040820160008201516153bb6000850182614b13565b5060208201516153ce6020850182615403565b50505050565b6040820160008201516153ea6000850182614b13565b5060208201516153fd6020850182615403565b50505050565b61540c81615a41565b82525050565b61541b81615a41565b82525050565b61542a81615a4b565b82525050565b600061543b826150dd565b9150819050919050565b600060208201905061545a6000830184614b22565b92915050565b60006020820190506154756000830184614b04565b92915050565b60006060820190506154906000830186614b04565b61549d6020830185614b04565b6154aa6040830184615412565b949350505050565b60006040820190506154c76000830185614b04565b6154d46020830184615412565b9392505050565b60006040820190506154f06000830185614b22565b6154fd6020830184615412565b9392505050565b60006060820190506155196000830186614b22565b6155266020830185615412565b6155336040830184614c97565b949350505050565b600060408201905081810360008301526155558185614ba6565b905081810360208301526155698184614b31565b90509392505050565b60006020820190506155876000830184614c13565b92915050565b60006020820190506155a26000830184614c88565b92915050565b600060208201905081810360008301526155c28184614ca6565b905092915050565b600060208201905081810360008301526155e381614cdf565b9050919050565b6000602082019050818103600083015261560381614d45565b9050919050565b6000602082019050818103600083015261562381614d85565b9050919050565b6000602082019050818103600083015261564381614deb565b9050919050565b6000602082019050818103600083015261566381614e51565b9050919050565b6000602082019050818103600083015261568381614e91565b9050919050565b600060208201905081810360008301526156a381614ed1565b9050919050565b600060208201905081810360008301526156c381614f11565b9050919050565b600060208201905081810360008301526156e381614f77565b9050919050565b6000602082019050818103600083015261570381614fb7565b9050919050565b6000602082019050818103600083015261572381614ff7565b9050919050565b6000602082019050818103600083015261574381615037565b9050919050565b6000602082019050818103600083015261576381615077565b9050919050565b60006020820190508181036000830152615783816150f7565b9050919050565b600060208201905081810360008301526157a381615137565b9050919050565b600060208201905081810360008301526157c38161519d565b9050919050565b600060208201905081810360008301526157e3816151dd565b9050919050565b600060208201905081810360008301526158038161521d565b9050919050565b600060208201905081810360008301526158238161525d565b9050919050565b600060608201905061583f60008301856153d4565b61584c6040830184615412565b9392505050565b60006020820190506158686000830184615412565b92915050565b60006020820190506158836000830184615421565b92915050565b6000604051905081810181811067ffffffffffffffff821117156158ac57600080fd5b8060405250919050565b600067ffffffffffffffff8211156158cd57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006159a282615a21565b9050919050565b60008115159050919050565b60006159c082615997565b9050919050565b60008190506159d582615b2c565b919050565b60008190506159e882615b39565b919050565b60008190506159fb82615b46565b919050565b6000819050615a0e82615b53565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615a6382615ac4565b9050919050565b6000615a75826159c7565b9050919050565b6000615a87826159da565b9050919050565b6000615a99826159ed565b9050919050565b6000615aab82615a00565b9050919050565b6000615abd82615a13565b9050919050565b6000615acf82615ad6565b9050919050565b6000615ae182615a21565b9050919050565b60005b83811015615b06578082015181840152602081019050615aeb565b83811115615b15576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615b3657fe5b50565b60018110615b4357fe5b50565b60018110615b5057fe5b50565b60058110615b5d57fe5b50565b615b6981615997565b8114615b7457600080fd5b50565b615b80816159a9565b8114615b8b57600080fd5b50565b615b97816159b5565b8114615ba257600080fd5b50565b615bae81615a41565b8114615bb957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820e69df7ac1fd5f99098499da2cf98d6b121d4545ea2868bcb01383d1c61b523e86c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode Sourcemap

13652:10600:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16217:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16217:579:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13953:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13953:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;4915:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4915:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;14152:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14152:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;1935:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1935:152:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18823:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18823:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;13825:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13825:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;1418:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1418:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;2093:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2093:304:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21596:565;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21596:565:0;;;;;;;;;;;;;;;;:::i;:::-;;14860:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14860:89:0;;;;;;;;;;;;;;;;:::i;:::-;;23856:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23856:181:0;;;;;;;;;;;;;;;;:::i;:::-;;5097:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5097:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;2403:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2403:210:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22211:255;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22211:255:0;;;:::i;:::-;;18070:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18070:166:0;;;:::i;:::-;;;;;;;;;;;;;;;;14953:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14953: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;:::-;;;;;;;;;;;;;;;;18240:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18240:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;20808:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20808:96:0;;;;;;;;;;;;;;;;:::i;:::-;;1515:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1515:110:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22472:219;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22472:219:0;;;:::i;:::-;;;;;;;;;;;;;;;;6115:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6115:140:0;;;:::i;:::-;;22697:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22697:154:0;;;:::i;:::-;;;;;;;;;;;;;;;;20256:546;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20256:546:0;;;:::i;:::-;;20908:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20908:141:0;;;;;;;;;;;;;;;;:::i;:::-;;14767:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14767:89:0;;;;;;;;;;;;;;;;:::i;:::-;;13929:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13929:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;5818:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5818:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;13982:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13982:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;6015:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6015:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;5004:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5004:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;17750:314;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17750:314:0;;;:::i;:::-;;15360:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15360:97:0;;;;;;;;;;;;;;;;:::i;:::-;;15505:706;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15505:706:0;;;:::i;:::-;;;;;;;;;;;;;;;;2619:261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2619:261:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18364:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18364:248:0;;;:::i;:::-;;;;;;;;;;;;;;;;1631:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1631:158:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15147:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15147:100:0;;;;;;;;;;;;;;;;:::i;:::-;;17379:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17379:107:0;;;:::i;:::-;;;;;;;;;;;;;;;;15042:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15042:101:0;;;;;;;;;;;;;;;;:::i;:::-;;18943:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18943:115:0;;;:::i;:::-;;;;;;;;;;;;;;;;14006:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14006:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;22904:915;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22904:915:0;;;;;;;;;;;;;;;;:::i;:::-;;1795:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1795:134:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21053:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21053:131:0;;;;;;;;;;;;;;;;:::i;:::-;;6261:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6261:109:0;;;;;;;;;;;;;;;;:::i;:::-;;18616:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18616:203:0;;;:::i;:::-;;;;;;;;;;;;;;;;15251:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15251:105:0;;;;;;;;;;;;;;;;:::i;:::-;;24072:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24072:177:0;;;:::i;:::-;;13874:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13874:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;17492:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17492:120:0;;;:::i;:::-;;;;;;;;;;;;;;;;17616:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17616:128:0;;;:::i;:::-;;;;;;;;;;;;;;;;13849:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13849:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;16217:579;16268:4;16283:19;16316:1;16305:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16283:35;;16338:22;;;;;;;;16351:4;16338:22;;;;;;16358:1;16338:22;;;16327:5;16333:1;16327:8;;;;;;;;;;;;;:33;;;;16371:22;;:::i;:::-;16396:70;;;;;;;;16408:4;16396:70;;;;;;16414:21;16396:70;;;;;;;;;;;;16437:20;16396:70;;;;;;;;;;;;16459:6;16396:70;;;16371:95;;16475:21;;:::i;:::-;16522:18;16505:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;16565:1;16549:3;:13;;:17;;;;;16588:3;16575;:10;;:16;;;;16622:6;;16600:3;:19;;:28;;;;;16664:4;16637:3;:16;;:32;;;;;;;;;;;16680:24;16724:1;16707:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16680:46;;16745:3;16735:4;16740:1;16735:7;;;;;;;;;;;;;:13;;;;16764:4;;;;;;;;;;;16759:18;;;16778:5;16785:4;16759:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16759:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16759:31:0;;;;16217:579;;;;;;;:::o;13953:24::-;;;;;;;;;;;;;:::o;4915:83::-;4952:13;4985:5;4978:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4915:83;:::o;14152:36::-;;;;;;;;;;;;;:::o;1935:152::-;2001:4;2018:39;2027:12;:10;:12::i;:::-;2041:7;2050:6;2018:8;:39::i;:::-;2075:4;2068:11;;1935:152;;;;:::o;18823:116::-;18870:7;18900;;;;;;;;;;;18893:25;;;18927:4;18893:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18893:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18893: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;18893:40:0;;;;;;;;;18886:47;;18823:116;:::o;13825:19::-;;;;:::o;1418:91::-;1462:7;1489:12;;1482:19;;1418:91;:::o;2093:304::-;2182:4;2199:36;2209:6;2217:9;2228:6;2199:9;:36::i;:::-;2246:121;2255:6;2263:12;:10;:12::i;:::-;2277:89;2315:6;2277:89;;;;;;;;;;;;;;;;;:11;:19;2289:6;2277:19;;;;;;;;;;;;;;;:33;2297:12;:10;:12::i;:::-;2277:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;2246:8;:121::i;:::-;2385:4;2378:11;;2093:304;;;;;:::o;21596:565::-;5377:1;5360:13;;:18;;;;;;;;;;;5389:20;5412:13;;5389:36;;21695:1;21685:7;:11;21677:54;;;;;;;;;;;;;;;;;;;;;;21747:22;:20;:22::i;:::-;21740:4;:29;;;;21787:5;;;;;;;;;;;21780:26;;;21807:10;21827:4;21834:7;21780:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21780:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21780:62: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;21780:62:0;;;;;;;;;;21853:11;:9;:11::i;:::-;21907:14;21924:1;21907:18;;21946:1;21938:4;;:9;21934:150;;;21969:7;21960:16;;21994:7;21987:4;:14;;;;21934:150;;;22037:37;22069:4;;22038:25;22050:12;;22038:7;:11;;:25;;;;:::i;:::-;22037:31;;:37;;;;:::i;:::-;22028:46;;21934:150;22099:22;:20;:22::i;:::-;22092:4;:29;;;;22130:25;22136:10;22148:6;22130:5;:25::i;:::-;5436:1;5472:13;;5456:12;:29;5448:73;;;;;;;;;;;;;;;;;;;;;;21596:565;;:::o;14860:89::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;14934:9;14927:4;;:16;;;;;;;;;;;;;;;;;;14860:89;:::o;23856:181::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;23934:8;23945:13;:23;;;23977:4;23945:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23945:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23945: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;23945:38:0;;;;;;;;;23934:49;;23992:13;:22;;;24015:10;24027:3;23992:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23992:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23992: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;23992:39:0;;;;;;;;;;6000:1;23856:181;:::o;5097:83::-;5138:5;5163:9;;;;;;;;;;;5156:16;;5097:83;:::o;2403:210::-;2483:4;2500:83;2509:12;:10;:12::i;:::-;2523:7;2532:50;2571:10;2532:11;:25;2544:12;:10;:12::i;:::-;2532:25;;;;;;;;;;;;;;;:34;2558:7;2532:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;2500:8;:83::i;:::-;2601:4;2594:11;;2403:210;;;;:::o;22211:255::-;5377:1;5360:13;;:18;;;;;;;;;;;5389:20;5412:13;;5389:36;;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;22298:6;22314:5;;;;;;;;;;;22307:23;;;22339:4;22307:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22307:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22307: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;22307:38:0;;;;;;;;;22298:47;;22366:1;22362;:5;22354:48;;;;;;;;;;;;;;;;;;;;;;22411:11;:9;:11::i;:::-;22438:22;:20;:22::i;:::-;22431:4;:29;;;;6000:1;5472:13;;5456:12;:29;5448:73;;;;;;;;;;;;;;;;;;;;;;22211:255;:::o;18070:166::-;18114:7;18132:14;;:::i;:::-;18154:4;;;;;;;;;;;18149:24;;;18174:22;;;;;;;;18187:4;18174:22;;;;;;18194:1;18174:22;;;18198:6;;18149:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18149:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18149: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;18149:56:0;;;;;;;;;18132:73;;18221:3;:9;;;18214:16;;;18070:166;:::o;14953:85::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;15024:8;15018:3;;:14;;;;;;;;;;;;;;;;;;14953:85;:::o;14032:18::-;;;;;;;;;;;;;:::o;13902:22::-;;;;;;;;;;;;;:::o;18240:120::-;18288:7;18320:8;;;;;;;;;;;18313:26;;;18348:4;18313:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18313:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18313: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;18313:41:0;;;;;;;;;18306:48;;18240:120;:::o;20808:96::-;20862:9;:7;:9::i;:::-;20857:23;;;20881:5;;;;;;;;;;;20888:6;20896:1;20857:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20857:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20857:41:0;;;;20808:96;:::o;1515:110::-;1572:7;1599:9;:18;1609:7;1599:18;;;;;;;;;;;;;;;;1592:25;;1515:110;;;:::o;22472:219::-;22525:4;22547:138;22675:9;:7;:9::i;:::-;22547:115;22648:13;:11;:13::i;:::-;22547:88;22621:13;:11;:13::i;:::-;22547:61;22584:23;:21;:23::i;:::-;22547:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;22540:145;;22472:219;:::o;6115:140::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;6214:1;6177:40;;6198:6;;;;;;;;;;;6177:40;;;;;;;;;;;;6245:1;6228:6;;:19;;;;;;;;;;;;;;;;;;6115:140::o;22697:154::-;22750:4;22763:10;22776:22;:20;:22::i;:::-;22763:35;;22812:33;22832:12;;22812:15;22822:4;22812:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;22805:40;;;22697:154;:::o;20256:546::-;20291:18;20312:11;:9;:11::i;:::-;20291:32;;20351:8;;;;;;;;;;;20336:23;;;;;;;;:11;:23;;;;;;;;;20332:59;;20370:13;:11;:13::i;:::-;20332:59;20415:1;20403:9;:7;:9::i;:::-;:13;20399:369;;;20446:11;20431:26;;;;;;;;:11;:26;;;;;;;;;20427:74;;;20470:21;20481:9;:7;:9::i;:::-;20470:10;:21::i;:::-;;20427:74;20528:14;20513:29;;;;;;;;:11;:29;;;;;;;;;20509:80;;;20555:24;20569:9;:7;:9::i;:::-;20555:13;:24::i;:::-;20509:80;20616:15;20601:30;;;;;;;;:11;:30;;;;;;;;;20597:82;;;20644:25;20659:9;:7;:9::i;:::-;20644:14;:25::i;:::-;20597:82;20706:11;20691:26;;;;;;;;:11;:26;;;;;;;;;20687:74;;;20730:21;20741:9;:7;:9::i;:::-;20730:10;:21::i;:::-;20687:74;20399:369;20785:11;20774:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;20256:546;:::o;20908:141::-;21015:1;20976:7;;;;;;;;;;;20968:21;;;20998:4;21005:6;20968:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20968:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20968: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;20968:44:0;;;;;;;;;:48;20960:83;;;;;;;;;;;;;;;;;;;;;;20908:141;:::o;14767:89::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;14841:9;14834:4;;:16;;;;;;;;;;;;;;;;;;14767:89;:::o;13929:19::-;;;;;;;;;;;;;:::o;5818:79::-;5856:7;5883:6;;;;;;;;;;;5876:13;;5818:79;:::o;13982:19::-;;;;;;;;;;;;;:::o;6015:94::-;6055:4;6095:6;;;;;;;;;;;6079:22;;:12;:10;:12::i;:::-;:22;;;6072:29;;6015:94;:::o;5004:87::-;5043:13;5076:7;5069:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5004:87;:::o;17750:314::-;17797:5;;;;;;;;;;;17790:21;;;17812:8;;;;;;;;;;;17827:2;17790:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17790:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17790: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;17790:41:0;;;;;;;;;;17873:5;;;;;;;;;;;17866:21;;;17888:4;;;;;;;;;;;17899:2;17866:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17866:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17866:37: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;17866:37:0;;;;;;;;;;17919:5;;;;;;;;;;;17912:21;;;17934:9;:7;:9::i;:::-;17950:2;17912:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17912:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17912: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;17912:42:0;;;;;;;;;;17970:5;;;;;;;;;;;17963:21;;;17985:13;:11;:13::i;:::-;18005:2;17963:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17963:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17963: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;17963:46:0;;;;;;;;;;18025:5;;;;;;;;;;;18018:21;;;18040:7;;;;;;;;;;;18054:2;18018:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18018:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18018: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;18018:40:0;;;;;;;;;;17750:314::o;15360:97::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;15440:11;15431:6;:20;;;;15360:97;:::o;15505:706::-;15547:6;15564:12;15577;15590;15603;15633:3;;;;;;;;;;;15619:28;;;15648:5;;;;;;;;;;;15619:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15619:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15619:35:0;;;;;;39:16:-1;36:1;17:17;2:54;15619: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;15619:35:0;;;;;;;;;15562:92;;;;;;;;;15661:11;15675:1;15661:15;;15694:3;15687:4;:10;15683:43;;;15714:4;15708:10;;15683:43;15743:3;15736:4;:10;15732:43;;;15763:4;15757:10;;15732:43;15792:3;15785:4;:10;15781:43;;;15812:4;15806:10;;15781:43;15841:3;15834:4;:10;15830:43;;;15861:4;15855:10;;15830:43;15881:18;15902:11;15881:32;;15931:4;15924:3;:11;15920:59;;;15960:11;15946:25;;15920:59;15996:4;15989:3;:11;15985:59;;;16025:11;16011:25;;15985:59;16061:4;16054:3;:11;16050:62;;;16090:14;16076:28;;16050:62;16129:4;16122:3;:11;16118:63;;;16158:15;16144:29;;16118:63;16194:11;16187:18;;;;;;;;15505:706;:::o;2619:261::-;2704:4;2721:129;2730:12;:10;:12::i;:::-;2744:7;2753:96;2792:15;2753:96;;;;;;;;;;;;;;;;;:11;:25;2765:12;:10;:12::i;:::-;2753:25;;;;;;;;;;;;;;;:34;2779:7;2753:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;2721:8;:129::i;:::-;2868:4;2861:11;;2619:261;;;;:::o;18364:248::-;18419:7;18468:9;18480:17;:15;:17::i;:::-;18468:29;;18512:1;18508;:5;18504:88;;;18528:56;18579:4;18528:46;18543:8;;;;;;;;;;;18534:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18534:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18534: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;18534:39:0;;;;;;;;;18528:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;18524:60;;18504:88;18605:1;18598:8;;;18364:248;:::o;1631:158::-;1700:4;1717:42;1727:12;:10;:12::i;:::-;1741:9;1752:6;1717:9;:42::i;:::-;1777:4;1770:11;;1631:158;;;;:::o;15147:100::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;15230:11;15218:9;;:23;;;;;;;;;;;;;;;;;;15147:100;:::o;17379:107::-;17419:7;17449:5;;;;;;;;;;;17442:23;;;17474:4;17442:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17442:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17442: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;17442:38:0;;;;;;;;;17435:45;;17379:107;:::o;15042:101::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;15125:12;15115:7;;:22;;;;;;;;;;;;;;;;;;15042:101;:::o;18943:115::-;18987:7;19017:9;;;;;;;;;;;19010:27;;;19046:4;19010:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19010:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19010: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;19010:42:0;;;;;;;;;19003:49;;18943:115;:::o;14006:21::-;;;;:::o;22904:915::-;5377:1;5360:13;;:18;;;;;;;;;;;5389:20;5412:13;;5389:36;;23003:1;22993:7;:11;22985:55;;;;;;;;;;;;;;;;;;;;;;23051:16;23070:21;23080:10;23070:9;:21::i;:::-;23051:40;;23119:8;23108:7;:19;;23100:52;;;;;;;;;;;;;;;;;;;;;;23215:22;:20;:22::i;:::-;23208:4;:29;;;;23300:9;23312:37;23336:12;;23313:17;23322:7;23313:4;;:8;;:17;;;;:::i;:::-;23312:23;;:37;;;;:::i;:::-;23300:49;;23386:67;23412:7;23386:67;;;;;;;;;;;;;;;;;:9;:21;23396:10;23386:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;23362:9;:21;23372:10;23362:21;;;;;;;;;;;;;;;:91;;;;23477:25;23494:7;23477:12;;:16;;:25;;;;:::i;:::-;23462:12;:40;;;;23547:1;23518:41;;23527:10;23518:41;;;23551:7;23518:41;;;;;;;;;;;;;;;23598:9;23617:5;;;;;;;;;;;23610:23;;;23642:4;23610:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23610:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23610: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;23610:38:0;;;;;;;;;23598:50;;23665:1;23661;:5;23657:47;;;23679:15;23692:1;23679:12;:15::i;:::-;23657:47;23721:5;;;;;;;;;;;23714:22;;;23737:10;23749:1;23714:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23714:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23714:37: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;23714:37:0;;;;;;;;;;23762:11;:9;:11::i;:::-;23789:22;:20;:22::i;:::-;23782:4;:29;;;;5436:1;;;5472:13;;5456:12;:29;5448:73;;;;;;;;;;;;;;;;;;;;;;22904:915;;:::o;1795:134::-;1867:7;1894:11;:18;1906:5;1894:18;;;;;;;;;;;;;;;:27;1913:7;1894:27;;;;;;;;;;;;;;;;1887:34;;1795:134;;;;:::o;21053:131::-;21149:1;21123:8;;;;;;;;;;;21114:23;;;21138:6;21114:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21114:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21114: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;21114:31:0;;;;;;;;;:36;21106:72;;;;;;;;;;;;;;;;;;;;;;21053:131;:::o;6261:109::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;6334:28;6353:8;6334:18;:28::i;:::-;6261:109;:::o;18616:203::-;18670:7;18686:9;18698:16;:14;:16::i;:::-;18686:28;;18729:1;18725;:5;18721:78;;;18753:7;;;;;;;;;;;18745:31;;;18785:4;18745:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18745:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18745: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;18745:46:0;;;;;;;;;18741:50;;18721:78;18812:1;18805:8;;;18616:203;:::o;15251:105::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;15337:13;15326:8;;:24;;;;;;;;;;;;;;;;;;15251:105;:::o;24072:177::-;5943:9;:7;:9::i;:::-;5935:54;;;;;;;;;;;;;;;;;;;;;;24128:11;24145:10;:15;;24175:4;24167:21;;;24145:48;;;;;;;;;;;;;;;;;;;;;;;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;;24127:66:0;;;24210:6;24202:41;;;;;;;;;;;;;;;;;;;;;;6000:1;24072:177::o;13874:23::-;;;;;;;;;;;;;:::o;17492:120::-;17532:7;17584:4;;;;;;;;;;;17555:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17555:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17555: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;17555:51:0;;;;;;;;;17548:58;;17492:120;:::o;17616:128::-;17660:7;17712:4;;;;;;;;;;;17683:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17683:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17683: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;17683:55:0;;;;;;;;;17676:62;;17616:128;:::o;13849:20::-;;;;;;;;;;;;;:::o;852:98::-;897:15;932:10;925:17;;852:98;:::o;4031:338::-;4142:1;4125:19;;:5;:19;;;;4117:68;;;;;;;;;;;;;;;;;;;;;;4223:1;4204:21;;:7;:21;;;;4196:68;;;;;;;;;;;;;;;;;;;;;;4307:6;4277:11;:18;4289:5;4277:18;;;;;;;;;;;;;;;:27;4296:7;4277:27;;;;;;;;;;;;;;;:36;;;;4345:7;4329:32;;4338:5;4329:32;;;4354:6;4329:32;;;;;;;;;;;;;;;4031:338;;;:::o;2886:471::-;3002:1;2984:20;;:6;:20;;;;2976:70;;;;;;;;;;;;;;;;;;;;;;3086:1;3065:23;;:9;:23;;;;3057:71;;;;;;;;;;;;;;;;;;;;;;3161;3183:6;3161:71;;;;;;;;;;;;;;;;;:9;:17;3171:6;3161:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;3141:9;:17;3151:6;3141:17;;;;;;;;;;;;;;;:91;;;;3266:32;3291:6;3266:9;:20;3276:9;3266:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;3243:9;:20;3253:9;3243:20;;;;;;;;;;;;;;;:55;;;;3331:9;3314:35;;3323:6;3314:35;;;3342:6;3314:35;;;;;;;;;;;;;;;2886: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;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;3363:308::-;3458:1;3439:21;;:7;:21;;;;3431:65;;;;;;;;;;;;;;;;;;;;;;3524:24;3541:6;3524:12;;:16;;:24;;;;:::i;:::-;3509:12;:39;;;;3580:30;3603:6;3580:9;:18;3590:7;3580:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;3559:9;:18;3569:7;3559:18;;;;;;;;;;;;;;;:51;;;;3647:7;3626:37;;3643:1;3626:37;;;3656:6;3626:37;;;;;;;;;;;;;;;3363:308;;:::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;19064:412::-;19103:14;19120:17;:15;:17::i;:::-;19103:34;;19157:1;19148:6;:10;19144:57;;;19169:24;19186:6;19169:16;:24::i;:::-;19144:57;19216:13;:11;:13::i;:::-;19207:22;;19249:1;19240:6;:10;19236:53;;;19261:20;19274:6;19261:12;:20::i;:::-;19236:53;19304:16;:14;:16::i;:::-;19295:25;;19340:1;19331:6;:10;19327:56;;;19352:23;19368:6;19352:15;:23::i;:::-;19327:56;19398:13;:11;:13::i;:::-;19389:22;;19431:1;19422:6;:10;19418:53;;;19443:20;19456:6;19443:12;:20::i;:::-;19418:53;19064:412;:::o;6823:136::-;6881:7;6908:43;6912:1;6915;6908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6901:50;;6823:136;;;;:::o;19758:492::-;19829:15;19817:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;19813:79;;;19855:29;19876:7;19855:20;:29::i;:::-;19813:79;19914:11;19902:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;19898:131;;;19961:7;19944:13;:11;:13::i;:::-;:24;;19936:55;;;;;;;;;;;;;;;;;;;;;;20000:21;20013:7;20000:12;:21::i;:::-;19898:131;20051:11;20039:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;20035:131;;;20098:7;20081:13;:11;:13::i;:::-;:24;;20073:55;;;;;;;;;;;;;;;;;;;;;;20137:21;20150:7;20137:12;:21::i;:::-;20035:131;20188:14;20176:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;20172:73;;;20213:24;20229:7;20213:15;:24::i;:::-;20172:73;19758:492;:::o;6376:229::-;6470:1;6450:22;;:8;:22;;;;6442:73;;;;;;;;;;;;;;;;;;;;;;6560:8;6531:38;;6552:6;;;;;;;;;;;6531:38;;;;;;;;;;;;6589:8;6580:6;;:17;;;;;;;;;;;;;;;;;;6376:229;:::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;21434:139::-;21536:1;21508:8;;;;;;;;;;;21499:25;;;21525:6;21499:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21499:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21499: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;21499:33:0;;;;;;;;;:38;21491:76;;;;;;;;;;;;;;;;;;;;;;21434:139;:::o;16802:571::-;16858:19;16891:1;16880:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16858:35;;16913:22;;;;;;;;16926:4;16913:22;;;;;;16933:1;16913:22;;;16902:5;16908:1;16902:8;;;;;;;;;;;;;:33;;;;16946:22;;:::i;:::-;16971:71;;;;;;;;16983:5;16971:71;;;;;;16990:21;16971:71;;;;;;;;;;;;17013:20;16971:71;;;;;;;;;;;;17035:6;16971:71;;;16946:96;;17051:21;;:::i;:::-;17098:19;17081:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;17142:1;17126:3;:13;;:17;;;;;17165:3;17152;:10;;:16;;;;17199:6;;17177:3;:19;;:28;;;;;17241:4;17214:3;:16;;:32;;;;;;;;;;;17257:24;17301:1;17284:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17257:46;;17322:3;17312:4;17317:1;17312:7;;;;;;;;;;;;;:13;;;;17341:4;;;;;;;;;;;17336:18;;;17355:5;17362:4;17336:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17336:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17336:31:0;;;;16802:571;;;;;:::o;21283:147::-;21394:1;21355:7;;;;;;;;;;;21347:21;;;21377:4;21384:6;21347:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21347:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21347: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;21347:44:0;;;;;;;;;:48;21339:85;;;;;;;;;;;;;;;;;;;;;;21283:147;:::o;21188:91::-;21248:9;;;;;;;;;;;21241:24;;;21266:6;21241:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21241:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21241:32:0;;;;21188:91;:::o;19482:270::-;19545:9;19557:17;:15;:17::i;:::-;19545:29;;19581:10;19594:24;:22;:24::i;:::-;19581:37;;19639:7;19633:2;:13;;19625:44;;;;;;;;;;;;;;;;;;;;;;19676:14;19693:22;19712:2;19693:14;19699:7;19693:1;:5;;:14;;;;:::i;:::-;:18;;:22;;;;:::i;:::-;19676:39;;19722:24;19739:6;19722:16;:24::i;:::-;19482:270;;;;:::o;13652:10600::-;;;;;;;;;;;;;;;;;;;;;:::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;;;;;418:156;;511:6;498:20;489:29;;523:46;563:5;523:46;;;483:91;;;;;582:444;;695:3;688:4;680:6;676:17;672:27;662:2;;713:1;710;703:12;662:2;743:6;737:13;765:65;780:49;822:6;780:49;;;765:65;;;756:74;;850:6;843:5;836:21;886:4;878:6;874:17;919:4;912:5;908:16;954:3;945:6;940:3;936:16;933:25;930:2;;;971:1;968;961:12;930:2;981:39;1013:6;1008:3;1003;981:39;;;655:371;;;;;;;;1059:493;;1180:4;1168:9;1163:3;1159:19;1155:30;1152:2;;;1198:1;1195;1188:12;1152:2;1216:20;1231:4;1216:20;;;1207:29;;1286:1;1317:57;1370:3;1361:6;1350:9;1346:22;1317:57;;;1311:3;1304:5;1300:15;1293:82;1246:140;1437:2;1470:60;1526:3;1517:6;1506:9;1502:22;1470:60;;;1463:4;1456:5;1452:16;1445:86;1396:146;1146:406;;;;;1559:130;;1639:6;1626:20;1617:29;;1651:33;1678:5;1651:33;;;1611:78;;;;;1696:134;;1780:6;1774:13;1765:22;;1792:33;1819:5;1792:33;;;1759:71;;;;;1837:241;;1941:2;1929:9;1920:7;1916:23;1912:32;1909:2;;;1957:1;1954;1947:12;1909:2;1992:1;2009:53;2054:7;2045:6;2034:9;2030:22;2009:53;;;1999:63;;1971:97;1903:175;;;;;2085:263;;2200:2;2188:9;2179:7;2175:23;2171:32;2168:2;;;2216:1;2213;2206:12;2168:2;2251:1;2268:64;2324:7;2315:6;2304:9;2300:22;2268:64;;;2258:74;;2230:108;2162:186;;;;;2355:366;;;2476:2;2464:9;2455:7;2451:23;2447:32;2444:2;;;2492:1;2489;2482:12;2444:2;2527:1;2544:53;2589:7;2580:6;2569:9;2565:22;2544:53;;;2534:63;;2506:97;2634:2;2652:53;2697:7;2688:6;2677:9;2673:22;2652:53;;;2642:63;;2613:98;2438:283;;;;;;2728:491;;;;2866:2;2854:9;2845:7;2841:23;2837:32;2834:2;;;2882:1;2879;2872:12;2834:2;2917:1;2934:53;2979:7;2970:6;2959:9;2955:22;2934:53;;;2924:63;;2896:97;3024:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;;;3032:63;;3003:98;3132:2;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;;;3140:63;;3111:98;2828:391;;;;;;3226:366;;;3347:2;3335:9;3326:7;3322:23;3318:32;3315:2;;;3363:1;3360;3353:12;3315:2;3398:1;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;;;3405:63;;3377:97;3505:2;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;;;3513:63;;3484:98;3309:283;;;;;;3599:257;;3711:2;3699:9;3690:7;3686:23;3682:32;3679:2;;;3727:1;3724;3717:12;3679:2;3762:1;3779:61;3832:7;3823:6;3812:9;3808:22;3779:61;;;3769:71;;3741:105;3673:183;;;;;3863:267;;3980:2;3968:9;3959:7;3955:23;3951:32;3948:2;;;3996:1;3993;3986:12;3948:2;4031:1;4048:66;4106:7;4097:6;4086:9;4082:22;4048:66;;;4038:76;;4010:110;3942:188;;;;;4137:908;;;;;;4330:3;4318:9;4309:7;4305:23;4301:33;4298:2;;;4347:1;4344;4337:12;4298:2;4403:1;4392:9;4388:17;4382:24;4426:18;4418:6;4415:30;4412:2;;;4458:1;4455;4448:12;4412:2;4478:74;4544:7;4535:6;4524:9;4520:22;4478:74;;;4468:84;;4361:197;4589:2;4607:64;4663:7;4654:6;4643:9;4639:22;4607:64;;;4597:74;;4568:109;4708:2;4726:64;4782:7;4773:6;4762:9;4758:22;4726:64;;;4716:74;;4687:109;4827:2;4845:64;4901:7;4892:6;4881:9;4877:22;4845:64;;;4835:74;;4806:109;4946:3;4965:64;5021:7;5012:6;5001:9;4997:22;4965:64;;;4955:74;;4925:110;4292:753;;;;;;;;;5052:305;;5188:2;5176:9;5167:7;5163:23;5159:32;5156:2;;;5204:1;5201;5194:12;5156:2;5239:1;5256:85;5333:7;5324:6;5313:9;5309:22;5256:85;;;5246:95;;5218:129;5150:207;;;;;5364:241;;5468:2;5456:9;5447:7;5443:23;5439:32;5436:2;;;5484:1;5481;5474:12;5436:2;5519:1;5536:53;5581:7;5572:6;5561:9;5557:22;5536:53;;;5526:63;;5498:97;5430:175;;;;;5612:263;;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5743:1;5740;5733:12;5695:2;5778:1;5795:64;5851:7;5842:6;5831:9;5827:22;5795:64;;;5785:74;;5757:108;5689:186;;;;;5883:253;;6032:98;6126:3;6118:6;6032:98;;;6018:112;;6011:125;;;;;6145:249;;6268:86;6350:3;6342:6;6268:86;;;6383:4;6378:3;6374:14;6360:28;;6261:133;;;;;6402:142;6493:45;6532:5;6493:45;;;6488:3;6481:58;6475:69;;;6551:103;6624:24;6642:5;6624:24;;;6619:3;6612:37;6606:48;;;6661:113;6744:24;6762:5;6744:24;;;6739:3;6732:37;6726:48;;;6848:1040;;7041:78;7113:5;7041:78;;;7132:110;7235:6;7230:3;7132:110;;;7125:117;;7265:3;7307:4;7299:6;7295:17;7290:3;7286:27;7334:80;7408:5;7334:80;;;7434:7;7462:1;7447:402;7472:6;7469:1;7466:13;7447:402;;;7534:9;7528:4;7524:20;7519:3;7512:33;7579:6;7573:13;7601:112;7708:4;7693:13;7601:112;;;7593:120;;7730:84;7807:6;7730:84;;;7720:94;;7837:4;7832:3;7828:14;7821:21;;7504:345;7494:1;7491;7487:9;7482:14;;7447:402;;;7451:14;7862:4;7855:11;;7879:3;7872:10;;7020:868;;;;;;;;;;7951:834;;8132:72;8198:5;8132:72;;;8217:104;8314:6;8309:3;8217:104;;;8210:111;;8342:74;8410:5;8342:74;;;8436:7;8464:1;8449:314;8474:6;8471:1;8468:13;8449:314;;;8541:6;8535:13;8562:99;8657:3;8642:13;8562:99;;;8555:106;;8678:78;8749:6;8678:78;;;8668:88;;8506:257;8496:1;8493;8489:9;8484:14;;8449:314;;;8453:14;8776:3;8769:10;;8111:674;;;;;;;;8793:94;8860:21;8875:5;8860:21;;;8855:3;8848:34;8842:45;;;8894:104;8971:21;8986:5;8971:21;;;8966:3;8959:34;8953:45;;;9005:315;;9101:34;9129:5;9101:34;;;9147:60;9200:6;9195:3;9147:60;;;9140:67;;9212:52;9257:6;9252:3;9245:4;9238:5;9234:16;9212:52;;;9285:29;9307:6;9285:29;;;9280:3;9276:39;9269:46;;9081:239;;;;;;9327:142;9413:50;9457:5;9413:50;;;9408:3;9401:63;9395:74;;;9476:156;9569:57;9620:5;9569:57;;;9564:3;9557:70;9551:81;;;9639:150;9729:54;9777:5;9729:54;;;9724:3;9717:67;9711:78;;;9796:144;9888:46;9928:5;9888:46;;;9883:3;9876:59;9870:70;;;9947:140;10037:44;10075:5;10037:44;;;10032:3;10025:57;10019:68;;;10094:347;;10206:39;10239:5;10206:39;;;10257:71;10321:6;10316:3;10257:71;;;10250:78;;10333:52;10378:6;10373:3;10366:4;10359:5;10355:16;10333:52;;;10406:29;10428:6;10406:29;;;10401:3;10397:39;10390:46;;10186:255;;;;;;10449:465;;10609:67;10673:2;10668:3;10609:67;;;10602:74;;10709:66;10705:1;10700:3;10696:11;10689:87;10810:66;10805:2;10800:3;10796:12;10789:88;10905:2;10900:3;10896:12;10889:19;;10595:319;;;;10923:364;;11083:67;11147:2;11142:3;11083:67;;;11076:74;;11183:66;11179:1;11174:3;11170:11;11163:87;11278:2;11273:3;11269:12;11262:19;;11069:218;;;;11296:465;;11456:67;11520:2;11515:3;11456:67;;;11449:74;;11556:66;11552:1;11547:3;11543:11;11536:87;11657:66;11652:2;11647:3;11643:12;11636:88;11752:2;11747:3;11743:12;11736:19;;11442:319;;;;11770:465;;11930:67;11994:2;11989:3;11930:67;;;11923:74;;12030:66;12026:1;12021:3;12017:11;12010:87;12131:66;12126:2;12121:3;12117:12;12110:88;12226:2;12221:3;12217:12;12210:19;;11916:319;;;;12244:364;;12404:67;12468:2;12463:3;12404:67;;;12397:74;;12504:66;12500:1;12495:3;12491:11;12484:87;12599:2;12594:3;12590:12;12583:19;;12390:218;;;;12617:364;;12777:67;12841:2;12836:3;12777:67;;;12770:74;;12877:66;12873:1;12868:3;12864:11;12857:87;12972:2;12967:3;12963:12;12956:19;;12763:218;;;;12990:364;;13150:67;13214:2;13209:3;13150:67;;;13143:74;;13250:66;13246:1;13241:3;13237:11;13230:87;13345:2;13340:3;13336:12;13329:19;;13136:218;;;;13363:465;;13523:67;13587:2;13582:3;13523:67;;;13516:74;;13623:66;13619:1;13614:3;13610:11;13603:87;13724:66;13719:2;13714:3;13710:12;13703:88;13819:2;13814:3;13810:12;13803:19;;13509:319;;;;13837:364;;13997:67;14061:2;14056:3;13997:67;;;13990:74;;14097:66;14093:1;14088:3;14084:11;14077:87;14192:2;14187:3;14183:12;14176:19;;13983:218;;;;14210:364;;14370:67;14434:2;14429:3;14370:67;;;14363:74;;14470:66;14466:1;14461:3;14457:11;14450:87;14565:2;14560:3;14556:12;14549:19;;14356:218;;;;14583:364;;14743:67;14807:2;14802:3;14743:67;;;14736:74;;14843:66;14839:1;14834:3;14830:11;14823:87;14938:2;14933:3;14929:12;14922:19;;14729:218;;;;14956:364;;15116:67;15180:2;15175:3;15116:67;;;15109:74;;15216:66;15212:1;15207:3;15203:11;15196:87;15311:2;15306:3;15302:12;15295:19;;15102:218;;;;15329:465;;15489:67;15553:2;15548:3;15489:67;;;15482:74;;15589:66;15585:1;15580:3;15576:11;15569:87;15690:66;15685:2;15680:3;15676:12;15669:88;15785:2;15780:3;15776:12;15769:19;;15475:319;;;;15803:296;;15980:83;16061:1;16056:3;15980:83;;;15973:90;;16091:1;16086:3;16082:11;16075:18;;15966:133;;;;16108:364;;16268:67;16332:2;16327:3;16268:67;;;16261:74;;16368:66;16364:1;16359:3;16355:11;16348:87;16463:2;16458:3;16454:12;16447:19;;16254:218;;;;16481:465;;16641:67;16705:2;16700:3;16641:67;;;16634:74;;16741:66;16737:1;16732:3;16728:11;16721:87;16842:66;16837:2;16832:3;16828:12;16821:88;16937:2;16932:3;16928:12;16921:19;;16627:319;;;;16955:364;;17115:67;17179:2;17174:3;17115:67;;;17108:74;;17215:66;17211:1;17206:3;17202:11;17195:87;17310:2;17305:3;17301:12;17294:19;;17101:218;;;;17328:364;;17488:67;17552:2;17547:3;17488:67;;;17481:74;;17588:66;17584:1;17579:3;17575:11;17568:87;17683:2;17678:3;17674:12;17667:19;;17474:218;;;;17701:364;;17861:67;17925:2;17920:3;17861:67;;;17854:74;;17961:66;17957:1;17952:3;17948:11;17941:87;18056:2;18051:3;18047:12;18040:19;;17847:218;;;;18074:364;;18234:67;18298:2;18293:3;18234:67;;;18227:74;;18334:66;18330:1;18325:3;18321:11;18314:87;18429:2;18424:3;18420:12;18413:19;;18220:218;;;;18507:1605;;18650:5;18645:3;18641:15;18740:3;18733:5;18729:15;18723:22;18751:75;18821:3;18816;18812:13;18798:12;18751:75;;;18671:161;18910:4;18903:5;18899:16;18893:23;18922:63;18979:4;18974:3;18970:14;18956:12;18922:63;;;18842:149;19066:4;19059:5;19055:16;19049:23;19078:117;19189:4;19184:3;19180:14;19166:12;19078:117;;;19001:200;19285:4;19278:5;19274:16;19268:23;19297:63;19354:4;19349:3;19345:14;19331:12;19297:63;;;19211:155;19452:4;19445:5;19441:16;19435:23;19464:63;19521:4;19516:3;19512:14;19498:12;19464:63;;;19376:157;19614:4;19607:5;19603:16;19597:23;19626:64;19683:5;19678:3;19674:15;19660:12;19626:64;;;19543:153;19779:4;19772:5;19768:16;19762:23;19791:64;19848:5;19843:3;19839:15;19825:12;19791:64;;;19706:155;19934:4;19927:5;19923:16;19917:23;19987:3;19981:4;19977:14;19969:5;19964:3;19960:15;19953:39;20007:67;20069:4;20055:12;20007:67;;;19999:75;;19871:215;20103:4;20096:11;;18623:1489;;;;;;20182:815;20319:4;20314:3;20310:14;20402:3;20395:5;20391:15;20385:22;20413:56;20464:3;20459;20455:13;20441:12;20413:56;;;20339:136;20556:4;20549:5;20545:16;20539:23;20568:83;20645:4;20640:3;20636:14;20622:12;20568:83;;;20485:172;20729:4;20722:5;20718:16;20712:23;20741:80;20815:4;20810:3;20806:14;20792:12;20741:80;;;20667:160;20901:4;20894:5;20890:16;20884:23;20913:63;20970:4;20965:3;20961:14;20947:12;20913:63;;;20837:145;20292:705;;;;21053:457;21176:4;21171:3;21167:14;21260:3;21253:5;21249:15;21243:22;21271:62;21328:3;21323;21319:13;21305:12;21271:62;;;21196:143;21414:4;21407:5;21403:16;21397:23;21426:63;21483:4;21478:3;21474:14;21460:12;21426:63;;;21349:146;21149:361;;;;21566:467;21699:4;21694:3;21690:14;21783:3;21776:5;21772:15;21766:22;21794:62;21851:3;21846;21842:13;21828:12;21794:62;;;21719:143;21937:4;21930:5;21926:16;21920:23;21949:63;22006:4;22001:3;21997:14;21983:12;21949:63;;;21872:146;21672:361;;;;22040:103;22113:24;22131:5;22113:24;;;22108:3;22101:37;22095:48;;;22150:113;22233:24;22251:5;22233:24;;;22228:3;22221:37;22215:48;;;22270:107;22349:22;22365:5;22349:22;;;22344:3;22337:35;22331:46;;;22384:370;;22582:147;22725:3;22582:147;;;22575:154;;22746:3;22739:10;;22563:191;;;;22761:213;;22879:2;22868:9;22864:18;22856:26;;22893:71;22961:1;22950:9;22946:17;22937:6;22893:71;;;22850:124;;;;;22981:229;;23107:2;23096:9;23092:18;23084:26;;23121:79;23197:1;23186:9;23182:17;23173:6;23121:79;;;23078:132;;;;;23217:467;;23407:2;23396:9;23392:18;23384:26;;23421:79;23497:1;23486:9;23482:17;23473:6;23421:79;;;23511:80;23587:2;23576:9;23572:18;23563:6;23511:80;;;23602:72;23670:2;23659:9;23655:18;23646:6;23602:72;;;23378:306;;;;;;;23691:340;;23845:2;23834:9;23830:18;23822:26;;23859:79;23935:1;23924:9;23920:17;23911:6;23859:79;;;23949:72;24017:2;24006:9;24002:18;23993:6;23949:72;;;23816:215;;;;;;24038:324;;24184:2;24173:9;24169:18;24161:26;;24198:71;24266:1;24255:9;24251:17;24242:6;24198:71;;;24280:72;24348:2;24337:9;24333:18;24324:6;24280:72;;;24155:207;;;;;;24369:449;;24550:2;24539:9;24535:18;24527:26;;24564:71;24632:1;24621:9;24617:17;24608:6;24564:71;;;24646:72;24714:2;24703:9;24699:18;24690:6;24646:72;;;24729:79;24804:2;24793:9;24789:18;24780:6;24729:79;;;24521:297;;;;;;;24825:788;;25155:2;25144:9;25140:18;25132:26;;25205:9;25199:4;25195:20;25191:1;25180:9;25176:17;25169:47;25230:144;25369:4;25360:6;25230:144;;;25222:152;;25422:9;25416:4;25412:20;25407:2;25396:9;25392:18;25385:48;25447:156;25598:4;25589:6;25447:156;;;25439:164;;25126:487;;;;;;25620:201;;25732:2;25721:9;25717:18;25709:26;;25746:65;25808:1;25797:9;25793:17;25784:6;25746:65;;;25703:118;;;;;25828:231;;25955:2;25944:9;25940:18;25932:26;;25969:80;26046:1;26035:9;26031:17;26022:6;25969:80;;;25926:133;;;;;26066:301;;26204:2;26193:9;26189:18;26181:26;;26254:9;26248:4;26244:20;26240:1;26229:9;26225:17;26218:47;26279:78;26352:4;26343:6;26279:78;;;26271:86;;26175:192;;;;;26374:407;;26565:2;26554:9;26550:18;26542:26;;26615:9;26609:4;26605:20;26601:1;26590:9;26586:17;26579:47;26640:131;26766:4;26640:131;;;26632:139;;26536:245;;;;26788:407;;26979:2;26968:9;26964:18;26956:26;;27029:9;27023:4;27019:20;27015:1;27004:9;27000:17;26993:47;27054:131;27180:4;27054:131;;;27046:139;;26950:245;;;;27202:407;;27393:2;27382:9;27378:18;27370:26;;27443:9;27437:4;27433:20;27429:1;27418:9;27414:17;27407:47;27468:131;27594:4;27468:131;;;27460:139;;27364:245;;;;27616:407;;27807:2;27796:9;27792:18;27784:26;;27857:9;27851:4;27847:20;27843:1;27832:9;27828:17;27821:47;27882:131;28008:4;27882:131;;;27874:139;;27778:245;;;;28030:407;;28221:2;28210:9;28206:18;28198:26;;28271:9;28265:4;28261:20;28257:1;28246:9;28242:17;28235:47;28296:131;28422:4;28296:131;;;28288:139;;28192:245;;;;28444:407;;28635:2;28624:9;28620:18;28612:26;;28685:9;28679:4;28675:20;28671:1;28660:9;28656:17;28649:47;28710:131;28836:4;28710:131;;;28702:139;;28606:245;;;;28858:407;;29049:2;29038:9;29034:18;29026:26;;29099:9;29093:4;29089:20;29085:1;29074:9;29070:17;29063:47;29124:131;29250:4;29124:131;;;29116:139;;29020:245;;;;29272:407;;29463:2;29452:9;29448:18;29440:26;;29513:9;29507:4;29503:20;29499:1;29488:9;29484:17;29477:47;29538:131;29664:4;29538:131;;;29530:139;;29434:245;;;;29686:407;;29877:2;29866:9;29862:18;29854:26;;29927:9;29921:4;29917:20;29913:1;29902:9;29898:17;29891:47;29952:131;30078:4;29952:131;;;29944:139;;29848:245;;;;30100:407;;30291:2;30280:9;30276:18;30268:26;;30341:9;30335:4;30331:20;30327:1;30316:9;30312:17;30305:47;30366:131;30492:4;30366:131;;;30358:139;;30262:245;;;;30514:407;;30705:2;30694:9;30690:18;30682:26;;30755:9;30749:4;30745:20;30741:1;30730:9;30726:17;30719:47;30780:131;30906:4;30780:131;;;30772:139;;30676:245;;;;30928:407;;31119:2;31108:9;31104:18;31096:26;;31169:9;31163:4;31159:20;31155:1;31144:9;31140:17;31133:47;31194:131;31320:4;31194:131;;;31186:139;;31090:245;;;;31342:407;;31533:2;31522:9;31518:18;31510:26;;31583:9;31577:4;31573:20;31569:1;31558:9;31554:17;31547:47;31608:131;31734:4;31608:131;;;31600:139;;31504:245;;;;31756:407;;31947:2;31936:9;31932:18;31924:26;;31997:9;31991:4;31987:20;31983:1;31972:9;31968:17;31961:47;32022:131;32148:4;32022:131;;;32014:139;;31918:245;;;;32170:407;;32361:2;32350:9;32346:18;32338:26;;32411:9;32405:4;32401:20;32397:1;32386:9;32382:17;32375:47;32436:131;32562:4;32436:131;;;32428:139;;32332:245;;;;32584:407;;32775:2;32764:9;32760:18;32752:26;;32825:9;32819:4;32815:20;32811:1;32800:9;32796:17;32789:47;32850:131;32976:4;32850:131;;;32842:139;;32746:245;;;;32998:407;;33189:2;33178:9;33174:18;33166:26;;33239:9;33233:4;33229:20;33225:1;33214:9;33210:17;33203:47;33264:131;33390:4;33264:131;;;33256:139;;33160:245;;;;33412:407;;33603:2;33592:9;33588:18;33580:26;;33653:9;33647:4;33643:20;33639:1;33628:9;33624:17;33617:47;33678:131;33804:4;33678:131;;;33670:139;;33574:245;;;;33826:407;;34017:2;34006:9;34002:18;33994:26;;34067:9;34061:4;34057:20;34053:1;34042:9;34038:17;34031:47;34092:131;34218:4;34092:131;;;34084:139;;33988:245;;;;34240:404;;34426:2;34415:9;34411:18;34403:26;;34440:111;34548:1;34537:9;34533:17;34524:6;34440:111;;;34562:72;34630:2;34619:9;34615:18;34606:6;34562:72;;;34397:247;;;;;;34651:213;;34769:2;34758:9;34754:18;34746:26;;34783:71;34851:1;34840:9;34836:17;34827:6;34783:71;;;34740:124;;;;;34871:205;;34985:2;34974:9;34970:18;34962:26;;34999:67;35063:1;35052:9;35048:17;35039:6;34999:67;;;34956:120;;;;;35083:256;;35145:2;35139:9;35129:19;;35183:4;35175:6;35171:17;35282:6;35270:10;35267:22;35246:18;35234:10;35231:34;35228:62;35225:2;;;35303:1;35300;35293:12;35225:2;35323:10;35319:2;35312:22;35123:216;;;;;35346:322;;35490:18;35482:6;35479:30;35476:2;;;35522:1;35519;35512:12;35476:2;35589:4;35585:9;35578:4;35570:6;35566:17;35562:33;35554:41;;35653:4;35647;35643:15;35635:23;;35413:255;;;;35675:175;;35785:3;35777:11;;35823:4;35818:3;35814:14;35806:22;;35771:79;;;;35857:169;;35961:3;35953:11;;35999:4;35994:3;35990:14;35982:22;;35947:79;;;;36033:161;;36166:5;36160:12;36150:22;;36131:63;;;;36201:155;;36328:5;36322:12;36312:22;;36293:63;;;;36363:117;;36452:5;36446:12;36436:22;;36417:63;;;;36487:122;;36581:5;36575:12;36565:22;;36546:63;;;;36616:132;;36738:4;36733:3;36729:14;36721:22;;36715:33;;;;36755:126;;36871:4;36866:3;36862:14;36854:22;;36848:33;;;;36889:202;;37043:6;37038:3;37031:19;37080:4;37075:3;37071:14;37056:29;;37024:67;;;;;37100:196;;37248:6;37243:3;37236:19;37285:4;37280:3;37276:14;37261:29;;37229:67;;;;;37305:152;;37409:6;37404:3;37397:19;37446:4;37441:3;37437:14;37422:29;;37390:67;;;;;37466:144;;37601:3;37586:18;;37579:31;;;;;37619:163;;37734:6;37729:3;37722:19;37771:4;37766:3;37762:14;37747:29;;37715:67;;;;;37790:91;;37852:24;37870:5;37852:24;;;37841:35;;37835:46;;;;37888:85;;37961:5;37954:13;37947:21;37936:32;;37930:43;;;;37980:104;;38055:24;38073:5;38055:24;;;38044:35;;38038:46;;;;38091:136;;38168:5;38157:16;;38174:48;38216:5;38174:48;;;38151:76;;;;38234:150;;38318:5;38307:16;;38324:55;38373:5;38324:55;;;38301:83;;;;38391:144;;38472:5;38461:16;;38478:52;38524:5;38478:52;;;38455:80;;;;38542:128;;38615:5;38604:16;;38621:44;38659:5;38621:44;;;38598:72;;;;38677:84;;38749:6;38742:5;38738:18;38727:29;;38721:40;;;;38768:121;;38841:42;38834:5;38830:54;38819:65;;38813:76;;;;38896:72;;38958:5;38947:16;;38941:27;;;;38975:81;;39046:4;39039:5;39035:16;39024:27;;39018:38;;;;39063:129;;39150:37;39181:5;39150:37;;;39137:50;;39131:61;;;;39199:136;;39291:39;39324:5;39291:39;;;39278:52;;39272:63;;;;39342:150;;39441:46;39481:5;39441:46;;;39428:59;;39422:70;;;;39499:144;;39595:43;39632:5;39595:43;;;39582:56;;39576:67;;;;39650:128;;39738:35;39767:5;39738:35;;;39725:48;;39719:59;;;;39785:114;;39871:23;39888:5;39871:23;;;39858:36;;39852:47;;;;39906:121;;39985:37;40016:5;39985:37;;;39972:50;;39966:61;;;;40034:108;;40113:24;40131:5;40113:24;;;40100:37;;40094:48;;;;40150:268;40215:1;40222:101;40236:6;40233:1;40230:13;40222:101;;;40312:1;40307:3;40303:11;40297:18;40293:1;40288:3;40284:11;40277:39;40258:2;40255:1;40251:10;40246:15;;40222:101;;;40338:6;40335:1;40332:13;40329:2;;;40403:1;40394:6;40389:3;40385:16;40378:27;40329:2;40199:219;;;;;40426:97;;40514:2;40510:7;40505:2;40498:5;40494:14;40490:28;40480:38;;40474:49;;;;40531:106;40615:1;40608:5;40605:12;40595:2;;40621:9;40595:2;40589:48;;40644:113;40735:1;40728:5;40725:12;40715:2;;40741:9;40715:2;40709:48;;40764:110;40852:1;40845:5;40842:12;40832:2;;40858:9;40832:2;40826:48;;40881:102;40961:1;40954:5;40951:12;40941:2;;40967:9;40941:2;40935:48;;40990:117;41059:24;41077:5;41059:24;;;41052:5;41049:35;41039:2;;41098:1;41095;41088:12;41039:2;41033:74;;41114:111;41180:21;41195:5;41180:21;;;41173:5;41170:32;41160:2;;41216:1;41213;41206:12;41160:2;41154:71;;41232:143;41314:37;41345:5;41314:37;;;41307:5;41304:48;41294:2;;41366:1;41363;41356:12;41294:2;41288:87;;41382:117;41451:24;41469:5;41451:24;;;41444:5;41441:35;41431:2;;41490:1;41487;41480:12;41431:2;41425:74;

Swarm Source

bzzr://e69df7ac1fd5f99098499da2cf98d6b121d4545ea2868bcb01383d1c61b523e8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

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

Validator Index Block Amount
View All Withdrawals

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

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