ETH Price: $2,284.61 (+0.90%)

Token

ERC20 ***
 

Overview

Max Total Supply

4,409.78120905552369536 ERC20 ***

Holders

5

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 ERC20 ***

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ycDAI

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-05-10
*/

// MIT License Copyright (c) 2020 iearn
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

    mapping (address => uint256) _balances;

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

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

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

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

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

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

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

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

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Structs {
    struct Val {
        uint256 value;
    }

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

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

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

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

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

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

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

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

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

contract ycDAI is ERC20, ERC20Detailed, ReentrancyGuard, Structs, Ownable {
  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 aavePool;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;
  address public chai;
  uint16 public aaveRef;

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

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("Curve (iearn fork) DAI", "ycDAI", 18) {
    token = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);
    apr = address(0x4100FB8d05e37a897ACB686AAc833DD7e49aa591);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
    fulcrum = address(0x493C57C4763932315A328269E1ADaD09653B9081);
    aaveToken = address(0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d);
    compound = address(0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643);
    chai = address(0x06AF07097C9Eeb7fD685c692751D5C66dB49c215);
    dToken = 3;
    approveToken();
  }

  function set_aaveRef(uint16 _ref) public onlyOwner {
    aaveRef = _ref;
  }

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

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

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

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

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

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


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

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

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

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

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

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

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

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

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }
  function balanceDydxAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(dydx);
  }
  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 balanceFulcrumAvailable() public view returns (uint256) {
      return IERC20(chai).balanceOf(fulcrum);
  }
  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 balanceAaveAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(aavePool);
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

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

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

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        _supplyDydx(balance());
      } 
      // else if (newProvider == Lender.FULCRUM) {
      //   _supplyFulcrum(balance());
      // }
      else if (newProvider == Lender.COMPOUND) {
        _supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        _supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  function _withdrawAll() internal {
    uint256 amount = balanceCompound();
    if (amount > 0) {
      _withdrawSomeCompound(balanceCompoundInToken().sub(1));
    }
    amount = balanceDydx();
    if (amount > 0) {
      if (amount > balanceDydxAvailable()) {
        amount = balanceDydxAvailable();
      }
      _withdrawDydx(amount);
    }
    amount = balanceFulcrum();
    if (amount > 0) {
      if (amount > balanceFulcrumAvailable().sub(1)) {
        amount = balanceFulcrumAvailable().sub(1);
      }
      _withdrawSomeFulcrum(amount);
    }
    amount = balanceAave();
    if (amount > 0) {
      if (amount > balanceAaveAvailable()) {
        amount = balanceAaveAvailable();
      }
      _withdrawAave(amount);
    }
  }

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

  function _withdrawSomeFulcrum(uint256 _amount) internal {
    uint256 b = balanceFulcrum();
    uint256 bT = balanceFulcrumInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }


  function _withdrawSome(uint256 _amount) internal returns (bool) {
    uint256 origAmount = _amount;

    uint256 amount = balanceCompound();
    if (amount > 0) {
      if (_amount > balanceCompoundInToken().sub(1)) {
        _withdrawSomeCompound(balanceCompoundInToken().sub(1));
        _amount = origAmount.sub(IERC20(token).balanceOf(address(this)));
      } else {
        _withdrawSomeCompound(_amount);
        return true;
      }
    }

    amount = balanceDydx();
    if (amount > 0) {
      if (_amount > balanceDydxAvailable()) {
        _withdrawDydx(balanceDydxAvailable());
        _amount = origAmount.sub(IERC20(token).balanceOf(address(this)));
      } else {
        _withdrawDydx(_amount);
        return true;
      }
    }

    amount = balanceFulcrum();
    if (amount > 0) {
      if (_amount > balanceFulcrumAvailable().sub(1)) {
        amount = balanceFulcrumAvailable().sub(1);
        _withdrawSomeFulcrum(balanceFulcrumAvailable().sub(1));
        _amount = origAmount.sub(IERC20(token).balanceOf(address(this)));
      } else {
        _withdrawSomeFulcrum(amount);
        return true;
      }
    }

    amount = balanceAave();
    if (amount > 0) {
      if (_amount > balanceAaveAvailable()) {
        _withdrawAave(balanceAaveAvailable());
        _amount = origAmount.sub(IERC20(token).balanceOf(address(this)));
      } else {
        _withdrawAave(_amount);
        return true;
      }
    }

    return true;
  }

  function _supplyDydx(uint256 amount) internal {
      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 _supplyAave(uint amount) internal {
      Aave(getAave()).deposit(token, amount, aaveRef);
  }
  function _supplyFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function _supplyCompound(uint amount) internal {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _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 calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aavePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveRef","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"balanceAaveAvailable","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":"balanceDydxAvailable","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":"balanceFulcrumAvailable","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":"chai","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum ycDAI.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 ycDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_ref","type":"uint16"}],"name":"set_aaveRef","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000601260166101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280601681526020017f43757276652028696561726e20666f726b2920444149000000000000000000008152506040518060400160405280600581526020017f796344414900000000000000000000000000000000000000000000000000000081525060128260039080519060200190620000bd92919062000b45565b508160049080519060200190620000d692919062000b45565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d620004e560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3736b175474e89094c44da98b954eedeac495271d0f600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734100fb8d05e37a897acb686aac833dd7e49aa591601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073493c57c4763932315a328269e1adad09653b9081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fc1e690f61efd961294b3e1ce3313fbd8aa4f85d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d3a536e4d6dbd6114cc1ead35777bab948e3643600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507306af07097c9eeb7fd685c692751d5c66db49c215601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003601081905550620004df620004ed60201b60201c565b6200105a565b600033905090565b62000583600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b620034cf179092919060201c565b62000619600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b620034cf179092919060201c565b6200069c6200062d620008bf60201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b620034cf179092919060201c565b62000732600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b620034cf179092919060201c565b565b6000811480620007d4575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016200077e92919062000e83565b60206040518083038186803b1580156200079757600080fd5b505afa158015620007ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620007d2919081019062000c91565b145b62000816576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080d9062000f21565b60405180910390fd5b620008ba838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016200085192919062000eb0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200096a60201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200092a57600080fd5b505afa1580156200093f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000965919081019062000c39565b905090565b620009968273ffffffffffffffffffffffffffffffffffffffff1662000af960201b6200416f1760201c565b620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf9062000f43565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000a03919062000e6a565b6000604051808303816000865af19150503d806000811462000a42576040519150601f19603f3d011682016040523d82523d6000602084013e62000a47565b606091505b50915091508162000a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a869062000edd565b60405180910390fd5b60008151111562000af3578080602001905162000ab0919081019062000c65565b62000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae99062000eff565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000b3c5750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000b8857805160ff191683800117855562000bb9565b8280016001018555821562000bb9579182015b8281111562000bb857825182559160200191906001019062000b9b565b5b50905062000bc8919062000bcc565b5090565b62000bf191905b8082111562000bed57600081600090555060010162000bd3565b5090565b90565b60008151905062000c05816200100c565b92915050565b60008151905062000c1c8162001026565b92915050565b60008151905062000c338162001040565b92915050565b60006020828403121562000c4c57600080fd5b600062000c5c8482850162000bf4565b91505092915050565b60006020828403121562000c7857600080fd5b600062000c888482850162000c0b565b91505092915050565b60006020828403121562000ca457600080fd5b600062000cb48482850162000c22565b91505092915050565b62000cc88162000f8c565b82525050565b600062000cdb8262000f65565b62000ce7818562000f70565b935062000cf981856020860162000fd6565b80840191505092915050565b600062000d1460208362000f7b565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000d56602a8362000f7b565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000dbe60368362000f7b565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000e26601f8362000f7b565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000e648162000fcc565b82525050565b600062000e78828462000cce565b915081905092915050565b600060408201905062000e9a600083018562000cbd565b62000ea9602083018462000cbd565b9392505050565b600060408201905062000ec7600083018562000cbd565b62000ed6602083018462000e59565b9392505050565b6000602082019050818103600083015262000ef88162000d05565b9050919050565b6000602082019050818103600083015262000f1a8162000d47565b9050919050565b6000602082019050818103600083015262000f3c8162000daf565b9050919050565b6000602082019050818103600083015262000f5e8162000e17565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600062000f998262000fac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ff657808201518184015260208101905062000fd9565b8381111562001006576000848401525b50505050565b620010178162000f8c565b81146200102357600080fd5b50565b620010318162000fa0565b81146200103d57600080fd5b50565b6200104b8162000fcc565b81146200105757600080fd5b50565b61594e806200106a6000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80638e4ec6ef11610167578063b69ef8a8116100ce578063f2fde38b11610087578063f2fde38b146107cd578063f5a41dea146107e9578063f69e204614610807578063f7c1ec7714610825578063f82ce27d14610843578063fc0c546a14610861576102a0565b8063b69ef8a814610709578063b6b55f2514610727578063cf8ca42614610743578063d54e324414610761578063d9d7858a1461077f578063dd62ed3e1461079d576102a0565b8063a160176d11610120578063a160176d14610631578063a457c2d71461064f578063a72879711461067f578063a9059cbb1461069d578063b098fc80146106cd578063b69d0456146106eb576102a0565b80638e4ec6ef146105915780638f32d59b146105af5780638f9225ca146105cd57806395d89b41146105eb57806399b71d5c14610609578063a03e4bc314610613576102a0565b806339c0a7e11161020b5780637137ef99116101c45780637137ef9914610505578063715018a61461052357806377c7b8fc1461052d5780637d7c2a1c1461054b578063819faf7b146105555780638da5cb5b14610573576102a0565b806339c0a7e11461043f57806357ded9c91461045d57806358782c211461047b57806361c1ec551461049957806365639132146104b757806370a08231146104d5576102a0565b806318160ddd1161025d57806318160ddd1461036b57806323b872dd146103895780632bf8c42b146103b95780632e1a7d4d146103d5578063313ce567146103f1578063395093511461040f576102a0565b806306a3fe59146102a557806306fdde03146102c3578063085d4883146102e1578063095ea7b3146102ff5780630eb2a2671461032f57806316f0115b1461034d575b600080fd5b6102ad61087f565b6040516102ba9190615130565b60405180910390f35b6102cb6108a5565b6040516102d89190615278565b60405180910390f35b6102e9610947565b6040516102f6919061525d565b60405180910390f35b61031960048036036103149190810190614555565b61095a565b6040516103269190615242565b60405180910390f35b610337610978565b604051610344919061557e565b60405180910390f35b610355610a2a565b604051610362919061557e565b60405180910390f35b610373610a30565b604051610380919061557e565b60405180910390f35b6103a3600480360361039e9190810190614506565b610a3a565b6040516103b09190615242565b60405180910390f35b6103d360048036036103ce9190810190614672565b610b13565b005b6103ef60048036036103ea919081019061469b565b610b7a565b005b6103f9610f25565b6040516104069190615599565b60405180910390f35b61042960048036036104249190810190614555565b610f3c565b6040516104369190615242565b60405180910390f35b610447610fef565b604051610454919061557e565b60405180910390f35b6104656110df565b6040516104729190615130565b60405180910390f35b610483611105565b6040516104909190615130565b60405180910390f35b6104a161112b565b6040516104ae919061557e565b60405180910390f35b6104bf6111dd565b6040516104cc9190615563565b60405180910390f35b6104ef60048036036104ea9190810190614478565b6111f1565b6040516104fc919061557e565b60405180910390f35b61050d611239565b60405161051a919061557e565b60405180910390f35b61052b6112ac565b005b6105356113b4565b604051610542919061557e565b60405180910390f35b6105536113f6565b005b61055d611508565b60405161056a9190615130565b60405180910390f35b61057b61152e565b6040516105889190615130565b60405180910390f35b610599611558565b6040516105a69190615130565b60405180910390f35b6105b761157e565b6040516105c49190615242565b60405180910390f35b6105d56115dd565b6040516105e2919061557e565b60405180910390f35b6105f36116b1565b6040516106009190615278565b60405180910390f35b610611611753565b005b61061b611976565b6040516106289190615130565b60405180910390f35b61063961199c565b604051610646919061525d565b60405180910390f35b61066960048036036106649190810190614555565b611ae6565b6040516106769190615242565b60405180910390f35b610687611bb3565b604051610694919061557e565b60405180910390f35b6106b760048036036106b29190810190614555565b611c9f565b6040516106c49190615242565b60405180910390f35b6106d5611cbd565b6040516106e2919061557e565b60405180910390f35b6106f3611d91565b6040516107009190615130565b60405180910390f35b610711611db7565b60405161071e919061557e565b60405180910390f35b610741600480360361073c919081019061469b565b611e69565b005b61074b611fcd565b604051610758919061557e565b60405180910390f35b61076961207f565b604051610776919061557e565b60405180910390f35b610787612153565b604051610794919061557e565b60405180910390f35b6107b760048036036107b291908101906144ca565b612159565b6040516107c4919061557e565b60405180910390f35b6107e760048036036107e29190810190614478565b6121e0565b005b6107f1612233565b6040516107fe919061557e565b60405180910390f35b61080f6122fe565b60405161081c9190615130565b60405180910390f35b61082d612324565b60405161083a9190615130565b60405180910390f35b61084b6123cb565b6040516108589190615130565b60405180910390f35b610869612472565b6040516108769190615130565b60405180910390f35b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b601260169054906101000a900460ff1681565b600061096e610967612498565b84846124a0565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109d59190615130565b60206040518083038186803b1580156109ed57600080fd5b505afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2591908101906146c4565b905090565b60085481565b6000600254905090565b6000610a4784848461266b565b610b0884610a53612498565b610b03856040518060600160405280602881526020016158bf60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab9612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6124a0565b600190509392505050565b610b1b61157e565b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b51906153ba565b60405180910390fd5b80601260146101000a81548161ffff021916908361ffff16021790555050565b60016006600082825401925050819055506000600654905060008211610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906153fa565b60405180910390fd5b6000610be0336111f1565b905080831115610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906153da565b60405180910390fd5b610c2d611239565b6008819055506000610c5e600254610c508660085461295090919063ffffffff16565b6129c090919063ffffffff16565b9050610ce8846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d3f84600254612a0a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610da3919061557e565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e089190615130565b60206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e5891908101906146c4565b905081811015610e7f57610e7d610e788284612a0a90919063ffffffff16565b612a54565b505b610ecc3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612efd9092919063ffffffff16565b610ed4611239565b6008819055505050506006548114610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906154ba565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b6000610fe5610f49612498565b84610fe08560016000610f5a612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6124a0565b6001905092915050565b6000610ff96141ba565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b815260040161108392919061553a565b604080518083038186803b15801561109a57600080fd5b505afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110d29190810190614649565b9050806020015191505090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111889190615130565b60206040518083038186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111d891908101906146c4565b905090565b601260149054906101000a900461ffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a7611246611db7565b611299611251611fcd565b61128b61125c610fef565b61127d611267612233565b61126f611bb3565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b905090565b6112b461157e565b6112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea906153ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806113bf611239565b90506113f06002546113e2670de0b6b3a76400008461295090919063ffffffff16565b6129c090919063ffffffff16565b91505090565b600061140061199c565b9050601260169054906101000a900460ff16600481111561141d57fe5b81600481111561142957fe5b1461143757611436612ff1565b5b6000611441611db7565b11156114e2576001600481111561145457fe5b81600481111561146057fe5b141561147b57611476611471611db7565b6130f8565b6114e1565b6002600481111561148857fe5b81600481111561149457fe5b14156114af576114aa6114a5611db7565b613332565b6114e0565b600360048111156114bc57fe5b8160048111156114c857fe5b14156114df576114de6114d9611db7565b613424565b5b5b5b5b80601260166101000a81548160ff0219169083600481111561150057fe5b021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115c1612498565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161165c9190615130565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ac91908101906146c4565b905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117495780601f1061171e57610100808354040283529160200191611749565b820191906000526020600020905b81548152906001019060200180831161172c57829003601f168201915b5050505050905090565b6117e2600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b611871600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b6118e561187c6123cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b611974600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611a1f9190615130565b60006040518083038186803b158015611a3757600080fd5b505afa158015611a4b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611a7491908101906145ba565b9450945050935050600080905080841115611a8d578390505b80831115611a99578290505b80821115611aa5578190505b600080905084821415611abb5760029050611adb565b83821415611acc5760039050611ada565b82821415611ad957600190505b5b5b809550505050505090565b6000611ba9611af3612498565b84611ba4856040518060600160405280602581526020016158e76025913960016000611b1d612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6124a0565b6001905092915050565b600080611bbe61112b565b90506000811115611c9857611c95670de0b6b3a7640000611c87600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7891908101906146c4565b8461295090919063ffffffff16565b6129c090919063ffffffff16565b90505b8091505090565b6000611cb3611cac612498565b848461266b565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d3c9190615130565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d8c91908101906146c4565b905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e149190615130565b60206040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e6491908101906146c4565b905090565b60016006600082825401925050819055506000600654905060008211611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb9061547a565b60405180910390fd5b611ecc611239565b600881905550611f21333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613646909392919063ffffffff16565b600080905060006008541415611f405782905082600881905550611f6c565b611f69600854611f5b6002548661295090919063ffffffff16565b6129c090919063ffffffff16565b90505b611f74611239565b600881905550611f8433826136e8565b506006548114611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906154ba565b60405180910390fd5b5050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161202a9190615130565b60206040518083038186803b15801561204257600080fd5b505afa158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061207a91908101906146c4565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120fe9190615130565b60206040518083038186803b15801561211657600080fd5b505afa15801561212a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061214e91908101906146c4565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121e861157e565b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906153ba565b60405180910390fd5b61223081613870565b50565b60008061223e610978565b905060008111156122f757600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b81526004016122a49190615130565b60206040518083038186803b1580156122bc57600080fd5b505afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122f491908101906146c4565b90505b8091505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561238e57600080fd5b505afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123c691908101906144a1565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246d91908101906144a1565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125079061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612577906152fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161265e919061557e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d29061541a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127429061529a565b60405180910390fd5b6127b681604051806060016040528060268152602001615899602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612849816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e8919061557e565b60405180910390a3505050565b600083831115829061293d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129349190615278565b60405180910390fd5b5060008385039050809150509392505050565b60008083141561296357600090506129ba565b600082840290508284828161297457fe5b04146129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac9061537a565b60405180910390fd5b809150505b92915050565b6000612a0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a0565b905092915050565b6000612a4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128f5565b905092915050565b6000808290506000612a6461112b565b90506000811115612b8d57612a8a6001612a7c611bb3565b612a0a90919063ffffffff16565b841115612b7857612ab4612aaf6001612aa1611bb3565b612a0a90919063ffffffff16565b613a01565b612b71600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b129190615130565b60206040518083038186803b158015612b2a57600080fd5b505afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b6291908101906146c4565b83612a0a90919063ffffffff16565b9350612b8c565b612b8184613a01565b600192505050612ef8565b5b612b95610fef565b90506000811115612c9857612ba861207f565b841115612c8357612bbf612bba61207f565b613aa7565b612c7c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c1d9190615130565b60206040518083038186803b158015612c3557600080fd5b505afa158015612c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c6d91908101906146c4565b83612a0a90919063ffffffff16565b9350612c97565b612c8c84613aa7565b600192505050612ef8565b5b612ca0610978565b90506000811115612de657612cc66001612cb86115dd565b612a0a90919063ffffffff16565b841115612dd157612ce86001612cda6115dd565b612a0a90919063ffffffff16565b9050612d0d612d086001612cfa6115dd565b612a0a90919063ffffffff16565b613ce1565b612dca600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d6b9190615130565b60206040518083038186803b158015612d8357600080fd5b505afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dbb91908101906146c4565b83612a0a90919063ffffffff16565b9350612de5565b612dda81613ce1565b600192505050612ef8565b5b612dee611fcd565b90506000811115612ef157612e01611cbd565b841115612edc57612e18612e13611cbd565b613d87565b612ed5600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e769190615130565b60206040518083038186803b158015612e8e57600080fd5b505afa158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ec691908101906146c4565b83612a0a90919063ffffffff16565b9350612ef0565b612ee584613d87565b600192505050612ef8565b5b6001925050505b919050565b612f97838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401612f359291906151ab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b505050565b600080828401905083811015612fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fde9061533a565b60405180910390fd5b8091505092915050565b6000612ffb61112b565b9050600081111561302a576130296130246001613016611bb3565b612a0a90919063ffffffff16565b613a01565b5b613032610fef565b905060008111156130615761304561207f565b8111156130575761305461207f565b90505b61306081613aa7565b5b613069610978565b905060008111156130be5761308f60016130816115dd565b612a0a90919063ffffffff16565b8111156130b4576130b160016130a36115dd565b612a0a90919063ffffffff16565b90505b6130bd81613ce1565b5b6130c6611fcd565b905060008111156130f5576130d9611cbd565b8111156130eb576130e8611cbd565b90505b6130f481613d87565b5b50565b6060600160405190808252806020026020018201604052801561313557816020015b6131226141d6565b81526020019060019003908161311a5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508160008151811061317157fe5b6020026020010181905250613184614206565b60405180608001604052806001151581526020016000808111156131a457fe5b81526020016000808111156131b557fe5b81526020018481525090506131c8614244565b6000816000019060018111156131da57fe5b908160018111156131e757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600160405190808252806020026020018201604052801561328057816020015b61326d6142b0565b8152602001906001900390816132655790505b509050818160008151811061329157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b81526004016132f992919061520b565b600060405180830381600087803b15801561331357600080fd5b505af1158015613327573d6000803e3d6000fd5b505050505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040161338f919061557e565b602060405180830381600087803b1580156133a957600080fd5b505af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133e191908101906146c4565b14613421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134189061531a565b60405180910390fd5b50565b61342c612324565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683601260149054906101000a900461ffff166040518463ffffffff1660e01b815260040161349a939291906151d4565b600060405180830381600087803b1580156134b457600080fd5b505af11580156134c8573d6000803e3d6000fd5b5050505050565b6000811480613568575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161351692919061514b565b60206040518083038186803b15801561352e57600080fd5b505afa158015613542573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061356691908101906146c4565b145b6135a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359e906154da565b60405180910390fd5b613641838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016135df9291906151ab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b505050565b6136e2848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161368093929190615174565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f9061551a565b60405180910390fd5b61376d81600254612f9c90919063ffffffff16565b6002819055506137c4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613864919061557e565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d7906152da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831182906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de9190615278565b60405180910390fd5b5060008385816139f357fe5b049050809150509392505050565b6000613a0b61112b565b90506000613a17611bb3565b905082811015613a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a539061543a565b60405180910390fd5b6000613a966001613a8884613a7a888861295090919063ffffffff16565b6129c090919063ffffffff16565b612f9c90919063ffffffff16565b9050613aa181613f89565b50505050565b60606001604051908082528060200260200182016040528015613ae457816020015b613ad16141d6565b815260200190600190039081613ac95790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110613b2057fe5b6020026020010181905250613b33614206565b6040518060800160405280600015158152602001600080811115613b5357fe5b8152602001600080811115613b6457fe5b8152602001848152509050613b77614244565b600181600001906001811115613b8957fe5b90816001811115613b9657fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015613c2f57816020015b613c1c6142b0565b815260200190600190039081613c145790505b5090508181600081518110613c4057fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613ca892919061520b565b600060405180830381600087803b158015613cc257600080fd5b505af1158015613cd6573d6000803e3d6000fd5b505050505050505050565b6000613ceb610978565b90506000613cf7612233565b905082811015613d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d339061543a565b60405180910390fd5b6000613d766001613d6884613d5a888861295090919063ffffffff16565b6129c090919063ffffffff16565b612f9c90919063ffffffff16565b9050613d818161407b565b50505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613de2919061557e565b600060405180830381600087803b158015613dfc57600080fd5b505af1158015613e10573d6000803e3d6000fd5b5050505050565b613e368273ffffffffffffffffffffffffffffffffffffffff1661416f565b613e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6c906154fa565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051613e9e9190615119565b6000604051808303816000865af19150503d8060008114613edb576040519150601f19603f3d011682016040523d82523d6000602084013e613ee0565b606091505b509150915081613f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1c9061535a565b60405180910390fd5b600081511115613f835780806020019051613f439190810190614591565b613f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f799061549a565b60405180910390fd5b5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b8152600401613fe6919061557e565b602060405180830381600087803b15801561400057600080fd5b505af1158015614014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061403891908101906146c4565b14614078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406f906152ba565b60405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b81526004016140da9291906151ab565b602060405180830381600087803b1580156140f457600080fd5b505af1158015614108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061412c91908101906146c4565b1161416c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141639061539a565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156141b15750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b604051806080016040528060001515815260200160008081111561422657fe5b815260200160008081111561423757fe5b8152602001600081525090565b6040518061010001604052806000600181111561425d57fe5b81526020016000815260200161427161431c565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604051806101000160405280600060018111156142c957fe5b8152602001600081526020016142dd61431c565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604051806080016040528060001515815260200160008081111561433c57fe5b815260200160008081111561434d57fe5b8152602001600081525090565b6000813590506143698161583c565b92915050565b60008151905061437e8161583c565b92915050565b60008151905061439381615853565b92915050565b600082601f8301126143aa57600080fd5b81516143bd6143b8826155e1565b6155b4565b915080825260208301602083018583830111156143d957600080fd5b6143e48382846157c4565b50505092915050565b6000604082840312156143ff57600080fd5b61440960406155b4565b9050600061441984828501614384565b600083015250602061442d84828501614463565b60208301525092915050565b6000813590506144488161586a565b92915050565b60008135905061445d81615881565b92915050565b60008151905061447281615881565b92915050565b60006020828403121561448a57600080fd5b60006144988482850161435a565b91505092915050565b6000602082840312156144b357600080fd5b60006144c18482850161436f565b91505092915050565b600080604083850312156144dd57600080fd5b60006144eb8582860161435a565b92505060206144fc8582860161435a565b9150509250929050565b60008060006060848603121561451b57600080fd5b60006145298682870161435a565b935050602061453a8682870161435a565b925050604061454b8682870161444e565b9150509250925092565b6000806040838503121561456857600080fd5b60006145768582860161435a565b92505060206145878582860161444e565b9150509250929050565b6000602082840312156145a357600080fd5b60006145b184828501614384565b91505092915050565b600080600080600060a086880312156145d257600080fd5b600086015167ffffffffffffffff8111156145ec57600080fd5b6145f888828901614399565b955050602061460988828901614463565b945050604061461a88828901614463565b935050606061462b88828901614463565b925050608061463c88828901614463565b9150509295509295909350565b60006040828403121561465b57600080fd5b6000614669848285016143ed565b91505092915050565b60006020828403121561468457600080fd5b600061469284828501614439565b91505092915050565b6000602082840312156146ad57600080fd5b60006146bb8482850161444e565b91505092915050565b6000602082840312156146d657600080fd5b60006146e484828501614463565b91505092915050565b60006146f98383614f77565b905092915050565b600061470d838361507f565b60408301905092915050565b614722816156cd565b82525050565b614731816156cd565b82525050565b60006147428261562d565b61474c818561567e565b93508360208202850161475e8561560d565b8060005b8581101561479a578484038952815161477b85826146ed565b945061478683615664565b925060208a01995050600181019050614762565b50829750879550505050505092915050565b60006147b782615638565b6147c1818561568f565b93506147cc8361561d565b8060005b838110156147fd5781516147e48882614701565b97506147ef83615671565b9250506001810190506147d0565b5085935050505092915050565b614813816156df565b82525050565b614822816156df565b82525050565b60006148338261564e565b61483d81856156b1565b935061484d8185602086016157c4565b80840191505092915050565b600061486482615643565b61486e81856156a0565b935061487e8185602086016157c4565b614887816157f7565b840191505092915050565b61489b8161577c565b82525050565b6148aa8161578e565b82525050565b6148b9816157a0565b82525050565b6148c8816157b2565b82525050565b60006148d982615659565b6148e381856156bc565b93506148f38185602086016157c4565b6148fc816157f7565b840191505092915050565b60006149146023836156bc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061497a6019836156bc565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b60006149ba6026836156bc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a206022836156bc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a866017836156bc565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614ac6601b836156bc565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614b066020836156bc565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000614b466021836156bc565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614bac6018836156bc565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000614bec6020836156bc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614c2c6014836156bc565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000614c6c601f836156bc565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000614cac6025836156bc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d126012836156bc565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000614d526024836156bc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614db8601e836156bc565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000614df8602a836156bc565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e5e601f836156bc565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614e9e6036836156bc565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000614f04601f836156bc565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b6000614f44601f836156bc565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b600061016083016000830151614f906000860182614892565b506020830151614fa360208601826150ec565b506040830151614fb6604086018261502a565b506060830151614fc960c08601826150ec565b506080830151614fdc60e08601826150ec565b5060a0830151614ff0610100860182614719565b5060c08301516150046101208601826150ec565b5060e083015184820361014086015261501d8282614859565b9150508091505092915050565b608082016000820151615040600085018261480a565b50602082015161505360208501826148a1565b50604082015161506660408501826148b0565b50606082015161507960608501826150ec565b50505050565b6040820160008201516150956000850182614719565b5060208201516150a860208501826150ec565b50505050565b6040820160008201516150c46000850182614719565b5060208201516150d760208501826150ec565b50505050565b6150e681615737565b82525050565b6150f581615765565b82525050565b61510481615765565b82525050565b6151138161576f565b82525050565b60006151258284614828565b915081905092915050565b60006020820190506151456000830184614728565b92915050565b60006040820190506151606000830185614728565b61516d6020830184614728565b9392505050565b60006060820190506151896000830186614728565b6151966020830185614728565b6151a360408301846150fb565b949350505050565b60006040820190506151c06000830185614728565b6151cd60208301846150fb565b9392505050565b60006060820190506151e96000830186614728565b6151f660208301856150fb565b61520360408301846150dd565b949350505050565b6000604082019050818103600083015261522581856147ac565b905081810360208301526152398184614737565b90509392505050565b60006020820190506152576000830184614819565b92915050565b600060208201905061527260008301846148bf565b92915050565b6000602082019050818103600083015261529281846148ce565b905092915050565b600060208201905081810360008301526152b381614907565b9050919050565b600060208201905081810360008301526152d38161496d565b9050919050565b600060208201905081810360008301526152f3816149ad565b9050919050565b6000602082019050818103600083015261531381614a13565b9050919050565b6000602082019050818103600083015261533381614a79565b9050919050565b6000602082019050818103600083015261535381614ab9565b9050919050565b6000602082019050818103600083015261537381614af9565b9050919050565b6000602082019050818103600083015261539381614b39565b9050919050565b600060208201905081810360008301526153b381614b9f565b9050919050565b600060208201905081810360008301526153d381614bdf565b9050919050565b600060208201905081810360008301526153f381614c1f565b9050919050565b6000602082019050818103600083015261541381614c5f565b9050919050565b6000602082019050818103600083015261543381614c9f565b9050919050565b6000602082019050818103600083015261545381614d05565b9050919050565b6000602082019050818103600083015261547381614d45565b9050919050565b6000602082019050818103600083015261549381614dab565b9050919050565b600060208201905081810360008301526154b381614deb565b9050919050565b600060208201905081810360008301526154d381614e51565b9050919050565b600060208201905081810360008301526154f381614e91565b9050919050565b6000602082019050818103600083015261551381614ef7565b9050919050565b6000602082019050818103600083015261553381614f37565b9050919050565b600060608201905061554f60008301856150ae565b61555c60408301846150fb565b9392505050565b600060208201905061557860008301846150dd565b92915050565b600060208201905061559360008301846150fb565b92915050565b60006020820190506155ae600083018461510a565b92915050565b6000604051905081810181811067ffffffffffffffff821117156155d757600080fd5b8060405250919050565b600067ffffffffffffffff8211156155f857600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006156d882615745565b9050919050565b60008115159050919050565b60008190506156f982615808565b919050565b600081905061570c82615815565b919050565b600081905061571f82615822565b919050565b60008190506157328261582f565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615787826156eb565b9050919050565b6000615799826156fe565b9050919050565b60006157ab82615711565b9050919050565b60006157bd82615724565b9050919050565b60005b838110156157e25780820151818401526020810190506157c7565b838111156157f1576000848401525b50505050565b6000601f19601f8301169050919050565b6002811061581257fe5b50565b6001811061581f57fe5b50565b6001811061582c57fe5b50565b6005811061583957fe5b50565b615845816156cd565b811461585057600080fd5b50565b61585c816156df565b811461586757600080fd5b50565b61587381615737565b811461587e57600080fd5b50565b61588a81615765565b811461589557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158203ef971ca9b50b55a9132b8d1030f9dbecff0c3c0344644129bfe89dc406f7a786c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102a05760003560e01c80638e4ec6ef11610167578063b69ef8a8116100ce578063f2fde38b11610087578063f2fde38b146107cd578063f5a41dea146107e9578063f69e204614610807578063f7c1ec7714610825578063f82ce27d14610843578063fc0c546a14610861576102a0565b8063b69ef8a814610709578063b6b55f2514610727578063cf8ca42614610743578063d54e324414610761578063d9d7858a1461077f578063dd62ed3e1461079d576102a0565b8063a160176d11610120578063a160176d14610631578063a457c2d71461064f578063a72879711461067f578063a9059cbb1461069d578063b098fc80146106cd578063b69d0456146106eb576102a0565b80638e4ec6ef146105915780638f32d59b146105af5780638f9225ca146105cd57806395d89b41146105eb57806399b71d5c14610609578063a03e4bc314610613576102a0565b806339c0a7e11161020b5780637137ef99116101c45780637137ef9914610505578063715018a61461052357806377c7b8fc1461052d5780637d7c2a1c1461054b578063819faf7b146105555780638da5cb5b14610573576102a0565b806339c0a7e11461043f57806357ded9c91461045d57806358782c211461047b57806361c1ec551461049957806365639132146104b757806370a08231146104d5576102a0565b806318160ddd1161025d57806318160ddd1461036b57806323b872dd146103895780632bf8c42b146103b95780632e1a7d4d146103d5578063313ce567146103f1578063395093511461040f576102a0565b806306a3fe59146102a557806306fdde03146102c3578063085d4883146102e1578063095ea7b3146102ff5780630eb2a2671461032f57806316f0115b1461034d575b600080fd5b6102ad61087f565b6040516102ba9190615130565b60405180910390f35b6102cb6108a5565b6040516102d89190615278565b60405180910390f35b6102e9610947565b6040516102f6919061525d565b60405180910390f35b61031960048036036103149190810190614555565b61095a565b6040516103269190615242565b60405180910390f35b610337610978565b604051610344919061557e565b60405180910390f35b610355610a2a565b604051610362919061557e565b60405180910390f35b610373610a30565b604051610380919061557e565b60405180910390f35b6103a3600480360361039e9190810190614506565b610a3a565b6040516103b09190615242565b60405180910390f35b6103d360048036036103ce9190810190614672565b610b13565b005b6103ef60048036036103ea919081019061469b565b610b7a565b005b6103f9610f25565b6040516104069190615599565b60405180910390f35b61042960048036036104249190810190614555565b610f3c565b6040516104369190615242565b60405180910390f35b610447610fef565b604051610454919061557e565b60405180910390f35b6104656110df565b6040516104729190615130565b60405180910390f35b610483611105565b6040516104909190615130565b60405180910390f35b6104a161112b565b6040516104ae919061557e565b60405180910390f35b6104bf6111dd565b6040516104cc9190615563565b60405180910390f35b6104ef60048036036104ea9190810190614478565b6111f1565b6040516104fc919061557e565b60405180910390f35b61050d611239565b60405161051a919061557e565b60405180910390f35b61052b6112ac565b005b6105356113b4565b604051610542919061557e565b60405180910390f35b6105536113f6565b005b61055d611508565b60405161056a9190615130565b60405180910390f35b61057b61152e565b6040516105889190615130565b60405180910390f35b610599611558565b6040516105a69190615130565b60405180910390f35b6105b761157e565b6040516105c49190615242565b60405180910390f35b6105d56115dd565b6040516105e2919061557e565b60405180910390f35b6105f36116b1565b6040516106009190615278565b60405180910390f35b610611611753565b005b61061b611976565b6040516106289190615130565b60405180910390f35b61063961199c565b604051610646919061525d565b60405180910390f35b61066960048036036106649190810190614555565b611ae6565b6040516106769190615242565b60405180910390f35b610687611bb3565b604051610694919061557e565b60405180910390f35b6106b760048036036106b29190810190614555565b611c9f565b6040516106c49190615242565b60405180910390f35b6106d5611cbd565b6040516106e2919061557e565b60405180910390f35b6106f3611d91565b6040516107009190615130565b60405180910390f35b610711611db7565b60405161071e919061557e565b60405180910390f35b610741600480360361073c919081019061469b565b611e69565b005b61074b611fcd565b604051610758919061557e565b60405180910390f35b61076961207f565b604051610776919061557e565b60405180910390f35b610787612153565b604051610794919061557e565b60405180910390f35b6107b760048036036107b291908101906144ca565b612159565b6040516107c4919061557e565b60405180910390f35b6107e760048036036107e29190810190614478565b6121e0565b005b6107f1612233565b6040516107fe919061557e565b60405180910390f35b61080f6122fe565b60405161081c9190615130565b60405180910390f35b61082d612324565b60405161083a9190615130565b60405180910390f35b61084b6123cb565b6040516108589190615130565b60405180910390f35b610869612472565b6040516108769190615130565b60405180910390f35b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561093d5780601f106109125761010080835404028352916020019161093d565b820191906000526020600020905b81548152906001019060200180831161092057829003601f168201915b5050505050905090565b601260169054906101000a900460ff1681565b600061096e610967612498565b84846124a0565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109d59190615130565b60206040518083038186803b1580156109ed57600080fd5b505afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2591908101906146c4565b905090565b60085481565b6000600254905090565b6000610a4784848461266b565b610b0884610a53612498565b610b03856040518060600160405280602881526020016158bf60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab9612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6124a0565b600190509392505050565b610b1b61157e565b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b51906153ba565b60405180910390fd5b80601260146101000a81548161ffff021916908361ffff16021790555050565b60016006600082825401925050819055506000600654905060008211610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906153fa565b60405180910390fd5b6000610be0336111f1565b905080831115610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906153da565b60405180910390fd5b610c2d611239565b6008819055506000610c5e600254610c508660085461295090919063ffffffff16565b6129c090919063ffffffff16565b9050610ce8846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d3f84600254612a0a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610da3919061557e565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e089190615130565b60206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e5891908101906146c4565b905081811015610e7f57610e7d610e788284612a0a90919063ffffffff16565b612a54565b505b610ecc3383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612efd9092919063ffffffff16565b610ed4611239565b6008819055505050506006548114610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906154ba565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b6000610fe5610f49612498565b84610fe08560016000610f5a612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6124a0565b6001905092915050565b6000610ff96141ba565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b815260040161108392919061553a565b604080518083038186803b15801561109a57600080fd5b505afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110d29190810190614649565b9050806020015191505090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111889190615130565b60206040518083038186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111d891908101906146c4565b905090565b601260149054906101000a900461ffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a7611246611db7565b611299611251611fcd565b61128b61125c610fef565b61127d611267612233565b61126f611bb3565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b612f9c90919063ffffffff16565b905090565b6112b461157e565b6112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea906153ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000806113bf611239565b90506113f06002546113e2670de0b6b3a76400008461295090919063ffffffff16565b6129c090919063ffffffff16565b91505090565b600061140061199c565b9050601260169054906101000a900460ff16600481111561141d57fe5b81600481111561142957fe5b1461143757611436612ff1565b5b6000611441611db7565b11156114e2576001600481111561145457fe5b81600481111561146057fe5b141561147b57611476611471611db7565b6130f8565b6114e1565b6002600481111561148857fe5b81600481111561149457fe5b14156114af576114aa6114a5611db7565b613332565b6114e0565b600360048111156114bc57fe5b8160048111156114c857fe5b14156114df576114de6114d9611db7565b613424565b5b5b5b5b80601260166101000a81548160ff0219169083600481111561150057fe5b021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115c1612498565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161165c9190615130565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ac91908101906146c4565b905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117495780601f1061171e57610100808354040283529160200191611749565b820191906000526020600020905b81548152906001019060200180831161172c57829003601f168201915b5050505050905090565b6117e2600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b611871600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b6118e561187c6123cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b611974600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134cf9092919063ffffffff16565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611a1f9190615130565b60006040518083038186803b158015611a3757600080fd5b505afa158015611a4b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611a7491908101906145ba565b9450945050935050600080905080841115611a8d578390505b80831115611a99578290505b80821115611aa5578190505b600080905084821415611abb5760029050611adb565b83821415611acc5760039050611ada565b82821415611ad957600190505b5b5b809550505050505090565b6000611ba9611af3612498565b84611ba4856040518060600160405280602581526020016158e76025913960016000611b1d612498565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6124a0565b6001905092915050565b600080611bbe61112b565b90506000811115611c9857611c95670de0b6b3a7640000611c87600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7891908101906146c4565b8461295090919063ffffffff16565b6129c090919063ffffffff16565b90505b8091505090565b6000611cb3611cac612498565b848461266b565b6001905092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d3c9190615130565b60206040518083038186803b158015611d5457600080fd5b505afa158015611d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d8c91908101906146c4565b905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e149190615130565b60206040518083038186803b158015611e2c57600080fd5b505afa158015611e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e6491908101906146c4565b905090565b60016006600082825401925050819055506000600654905060008211611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb9061547a565b60405180910390fd5b611ecc611239565b600881905550611f21333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613646909392919063ffffffff16565b600080905060006008541415611f405782905082600881905550611f6c565b611f69600854611f5b6002548661295090919063ffffffff16565b6129c090919063ffffffff16565b90505b611f74611239565b600881905550611f8433826136e8565b506006548114611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906154ba565b60405180910390fd5b5050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161202a9190615130565b60206040518083038186803b15801561204257600080fd5b505afa158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061207a91908101906146c4565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120fe9190615130565b60206040518083038186803b15801561211657600080fd5b505afa15801561212a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061214e91908101906146c4565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121e861157e565b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906153ba565b60405180910390fd5b61223081613870565b50565b60008061223e610978565b905060008111156122f757600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b81526004016122a49190615130565b60206040518083038186803b1580156122bc57600080fd5b505afa1580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122f491908101906146c4565b90505b8091505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561238e57600080fd5b505afa1580156123a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123c691908101906144a1565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246d91908101906144a1565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125079061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612577906152fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161265e919061557e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d29061541a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127429061529a565b60405180910390fd5b6127b681604051806060016040528060268152602001615899602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612849816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128e8919061557e565b60405180910390a3505050565b600083831115829061293d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129349190615278565b60405180910390fd5b5060008385039050809150509392505050565b60008083141561296357600090506129ba565b600082840290508284828161297457fe5b04146129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac9061537a565b60405180910390fd5b809150505b92915050565b6000612a0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139a0565b905092915050565b6000612a4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128f5565b905092915050565b6000808290506000612a6461112b565b90506000811115612b8d57612a8a6001612a7c611bb3565b612a0a90919063ffffffff16565b841115612b7857612ab4612aaf6001612aa1611bb3565b612a0a90919063ffffffff16565b613a01565b612b71600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b129190615130565b60206040518083038186803b158015612b2a57600080fd5b505afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b6291908101906146c4565b83612a0a90919063ffffffff16565b9350612b8c565b612b8184613a01565b600192505050612ef8565b5b612b95610fef565b90506000811115612c9857612ba861207f565b841115612c8357612bbf612bba61207f565b613aa7565b612c7c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c1d9190615130565b60206040518083038186803b158015612c3557600080fd5b505afa158015612c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c6d91908101906146c4565b83612a0a90919063ffffffff16565b9350612c97565b612c8c84613aa7565b600192505050612ef8565b5b612ca0610978565b90506000811115612de657612cc66001612cb86115dd565b612a0a90919063ffffffff16565b841115612dd157612ce86001612cda6115dd565b612a0a90919063ffffffff16565b9050612d0d612d086001612cfa6115dd565b612a0a90919063ffffffff16565b613ce1565b612dca600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d6b9190615130565b60206040518083038186803b158015612d8357600080fd5b505afa158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dbb91908101906146c4565b83612a0a90919063ffffffff16565b9350612de5565b612dda81613ce1565b600192505050612ef8565b5b612dee611fcd565b90506000811115612ef157612e01611cbd565b841115612edc57612e18612e13611cbd565b613d87565b612ed5600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e769190615130565b60206040518083038186803b158015612e8e57600080fd5b505afa158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ec691908101906146c4565b83612a0a90919063ffffffff16565b9350612ef0565b612ee584613d87565b600192505050612ef8565b5b6001925050505b919050565b612f97838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401612f359291906151ab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b505050565b600080828401905083811015612fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fde9061533a565b60405180910390fd5b8091505092915050565b6000612ffb61112b565b9050600081111561302a576130296130246001613016611bb3565b612a0a90919063ffffffff16565b613a01565b5b613032610fef565b905060008111156130615761304561207f565b8111156130575761305461207f565b90505b61306081613aa7565b5b613069610978565b905060008111156130be5761308f60016130816115dd565b612a0a90919063ffffffff16565b8111156130b4576130b160016130a36115dd565b612a0a90919063ffffffff16565b90505b6130bd81613ce1565b5b6130c6611fcd565b905060008111156130f5576130d9611cbd565b8111156130eb576130e8611cbd565b90505b6130f481613d87565b5b50565b6060600160405190808252806020026020018201604052801561313557816020015b6131226141d6565b81526020019060019003908161311a5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508160008151811061317157fe5b6020026020010181905250613184614206565b60405180608001604052806001151581526020016000808111156131a457fe5b81526020016000808111156131b557fe5b81526020018481525090506131c8614244565b6000816000019060018111156131da57fe5b908160018111156131e757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506060600160405190808252806020026020018201604052801561328057816020015b61326d6142b0565b8152602001906001900390816132655790505b509050818160008151811061329157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b81526004016132f992919061520b565b600060405180830381600087803b15801561331357600080fd5b505af1158015613327573d6000803e3d6000fd5b505050505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040161338f919061557e565b602060405180830381600087803b1580156133a957600080fd5b505af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133e191908101906146c4565b14613421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134189061531a565b60405180910390fd5b50565b61342c612324565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683601260149054906101000a900461ffff166040518463ffffffff1660e01b815260040161349a939291906151d4565b600060405180830381600087803b1580156134b457600080fd5b505af11580156134c8573d6000803e3d6000fd5b5050505050565b6000811480613568575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161351692919061514b565b60206040518083038186803b15801561352e57600080fd5b505afa158015613542573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061356691908101906146c4565b145b6135a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359e906154da565b60405180910390fd5b613641838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016135df9291906151ab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b505050565b6136e2848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161368093929190615174565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e17565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374f9061551a565b60405180910390fd5b61376d81600254612f9c90919063ffffffff16565b6002819055506137c4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613864919061557e565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d7906152da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831182906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de9190615278565b60405180910390fd5b5060008385816139f357fe5b049050809150509392505050565b6000613a0b61112b565b90506000613a17611bb3565b905082811015613a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a539061543a565b60405180910390fd5b6000613a966001613a8884613a7a888861295090919063ffffffff16565b6129c090919063ffffffff16565b612f9c90919063ffffffff16565b9050613aa181613f89565b50505050565b60606001604051908082528060200260200182016040528015613ae457816020015b613ad16141d6565b815260200190600190039081613ac95790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110613b2057fe5b6020026020010181905250613b33614206565b6040518060800160405280600015158152602001600080811115613b5357fe5b8152602001600080811115613b6457fe5b8152602001848152509050613b77614244565b600181600001906001811115613b8957fe5b90816001811115613b9657fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015613c2f57816020015b613c1c6142b0565b815260200190600190039081613c145790505b5090508181600081518110613c4057fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613ca892919061520b565b600060405180830381600087803b158015613cc257600080fd5b505af1158015613cd6573d6000803e3d6000fd5b505050505050505050565b6000613ceb610978565b90506000613cf7612233565b905082811015613d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d339061543a565b60405180910390fd5b6000613d766001613d6884613d5a888861295090919063ffffffff16565b6129c090919063ffffffff16565b612f9c90919063ffffffff16565b9050613d818161407b565b50505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613de2919061557e565b600060405180830381600087803b158015613dfc57600080fd5b505af1158015613e10573d6000803e3d6000fd5b5050505050565b613e368273ffffffffffffffffffffffffffffffffffffffff1661416f565b613e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6c906154fa565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051613e9e9190615119565b6000604051808303816000865af19150503d8060008114613edb576040519150601f19603f3d011682016040523d82523d6000602084013e613ee0565b606091505b509150915081613f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1c9061535a565b60405180910390fd5b600081511115613f835780806020019051613f439190810190614591565b613f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f799061549a565b60405180910390fd5b5b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b8152600401613fe6919061557e565b602060405180830381600087803b15801561400057600080fd5b505af1158015614014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061403891908101906146c4565b14614078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406f906152ba565b60405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b81526004016140da9291906151ab565b602060405180830381600087803b1580156140f457600080fd5b505af1158015614108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061412c91908101906146c4565b1161416c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141639061539a565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156141b15750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b604051806080016040528060001515815260200160008081111561422657fe5b815260200160008081111561423757fe5b8152602001600081525090565b6040518061010001604052806000600181111561425d57fe5b81526020016000815260200161427161431c565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604051806101000160405280600060018111156142c957fe5b8152602001600081526020016142dd61431c565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604051806080016040528060001515815260200160008081111561433c57fe5b815260200160008081111561434d57fe5b8152602001600081525090565b6000813590506143698161583c565b92915050565b60008151905061437e8161583c565b92915050565b60008151905061439381615853565b92915050565b600082601f8301126143aa57600080fd5b81516143bd6143b8826155e1565b6155b4565b915080825260208301602083018583830111156143d957600080fd5b6143e48382846157c4565b50505092915050565b6000604082840312156143ff57600080fd5b61440960406155b4565b9050600061441984828501614384565b600083015250602061442d84828501614463565b60208301525092915050565b6000813590506144488161586a565b92915050565b60008135905061445d81615881565b92915050565b60008151905061447281615881565b92915050565b60006020828403121561448a57600080fd5b60006144988482850161435a565b91505092915050565b6000602082840312156144b357600080fd5b60006144c18482850161436f565b91505092915050565b600080604083850312156144dd57600080fd5b60006144eb8582860161435a565b92505060206144fc8582860161435a565b9150509250929050565b60008060006060848603121561451b57600080fd5b60006145298682870161435a565b935050602061453a8682870161435a565b925050604061454b8682870161444e565b9150509250925092565b6000806040838503121561456857600080fd5b60006145768582860161435a565b92505060206145878582860161444e565b9150509250929050565b6000602082840312156145a357600080fd5b60006145b184828501614384565b91505092915050565b600080600080600060a086880312156145d257600080fd5b600086015167ffffffffffffffff8111156145ec57600080fd5b6145f888828901614399565b955050602061460988828901614463565b945050604061461a88828901614463565b935050606061462b88828901614463565b925050608061463c88828901614463565b9150509295509295909350565b60006040828403121561465b57600080fd5b6000614669848285016143ed565b91505092915050565b60006020828403121561468457600080fd5b600061469284828501614439565b91505092915050565b6000602082840312156146ad57600080fd5b60006146bb8482850161444e565b91505092915050565b6000602082840312156146d657600080fd5b60006146e484828501614463565b91505092915050565b60006146f98383614f77565b905092915050565b600061470d838361507f565b60408301905092915050565b614722816156cd565b82525050565b614731816156cd565b82525050565b60006147428261562d565b61474c818561567e565b93508360208202850161475e8561560d565b8060005b8581101561479a578484038952815161477b85826146ed565b945061478683615664565b925060208a01995050600181019050614762565b50829750879550505050505092915050565b60006147b782615638565b6147c1818561568f565b93506147cc8361561d565b8060005b838110156147fd5781516147e48882614701565b97506147ef83615671565b9250506001810190506147d0565b5085935050505092915050565b614813816156df565b82525050565b614822816156df565b82525050565b60006148338261564e565b61483d81856156b1565b935061484d8185602086016157c4565b80840191505092915050565b600061486482615643565b61486e81856156a0565b935061487e8185602086016157c4565b614887816157f7565b840191505092915050565b61489b8161577c565b82525050565b6148aa8161578e565b82525050565b6148b9816157a0565b82525050565b6148c8816157b2565b82525050565b60006148d982615659565b6148e381856156bc565b93506148f38185602086016157c4565b6148fc816157f7565b840191505092915050565b60006149146023836156bc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061497a6019836156bc565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b60006149ba6026836156bc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a206022836156bc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a866017836156bc565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b6000614ac6601b836156bc565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614b066020836156bc565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b6000614b466021836156bc565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614bac6018836156bc565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000614bec6020836156bc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614c2c6014836156bc565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b6000614c6c601f836156bc565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000614cac6025836156bc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d126012836156bc565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000614d526024836156bc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614db8601e836156bc565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000614df8602a836156bc565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e5e601f836156bc565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614e9e6036836156bc565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000614f04601f836156bc565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b6000614f44601f836156bc565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b600061016083016000830151614f906000860182614892565b506020830151614fa360208601826150ec565b506040830151614fb6604086018261502a565b506060830151614fc960c08601826150ec565b506080830151614fdc60e08601826150ec565b5060a0830151614ff0610100860182614719565b5060c08301516150046101208601826150ec565b5060e083015184820361014086015261501d8282614859565b9150508091505092915050565b608082016000820151615040600085018261480a565b50602082015161505360208501826148a1565b50604082015161506660408501826148b0565b50606082015161507960608501826150ec565b50505050565b6040820160008201516150956000850182614719565b5060208201516150a860208501826150ec565b50505050565b6040820160008201516150c46000850182614719565b5060208201516150d760208501826150ec565b50505050565b6150e681615737565b82525050565b6150f581615765565b82525050565b61510481615765565b82525050565b6151138161576f565b82525050565b60006151258284614828565b915081905092915050565b60006020820190506151456000830184614728565b92915050565b60006040820190506151606000830185614728565b61516d6020830184614728565b9392505050565b60006060820190506151896000830186614728565b6151966020830185614728565b6151a360408301846150fb565b949350505050565b60006040820190506151c06000830185614728565b6151cd60208301846150fb565b9392505050565b60006060820190506151e96000830186614728565b6151f660208301856150fb565b61520360408301846150dd565b949350505050565b6000604082019050818103600083015261522581856147ac565b905081810360208301526152398184614737565b90509392505050565b60006020820190506152576000830184614819565b92915050565b600060208201905061527260008301846148bf565b92915050565b6000602082019050818103600083015261529281846148ce565b905092915050565b600060208201905081810360008301526152b381614907565b9050919050565b600060208201905081810360008301526152d38161496d565b9050919050565b600060208201905081810360008301526152f3816149ad565b9050919050565b6000602082019050818103600083015261531381614a13565b9050919050565b6000602082019050818103600083015261533381614a79565b9050919050565b6000602082019050818103600083015261535381614ab9565b9050919050565b6000602082019050818103600083015261537381614af9565b9050919050565b6000602082019050818103600083015261539381614b39565b9050919050565b600060208201905081810360008301526153b381614b9f565b9050919050565b600060208201905081810360008301526153d381614bdf565b9050919050565b600060208201905081810360008301526153f381614c1f565b9050919050565b6000602082019050818103600083015261541381614c5f565b9050919050565b6000602082019050818103600083015261543381614c9f565b9050919050565b6000602082019050818103600083015261545381614d05565b9050919050565b6000602082019050818103600083015261547381614d45565b9050919050565b6000602082019050818103600083015261549381614dab565b9050919050565b600060208201905081810360008301526154b381614deb565b9050919050565b600060208201905081810360008301526154d381614e51565b9050919050565b600060208201905081810360008301526154f381614e91565b9050919050565b6000602082019050818103600083015261551381614ef7565b9050919050565b6000602082019050818103600083015261553381614f37565b9050919050565b600060608201905061554f60008301856150ae565b61555c60408301846150fb565b9392505050565b600060208201905061557860008301846150dd565b92915050565b600060208201905061559360008301846150fb565b92915050565b60006020820190506155ae600083018461510a565b92915050565b6000604051905081810181811067ffffffffffffffff821117156155d757600080fd5b8060405250919050565b600067ffffffffffffffff8211156155f857600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006156d882615745565b9050919050565b60008115159050919050565b60008190506156f982615808565b919050565b600081905061570c82615815565b919050565b600081905061571f82615822565b919050565b60008190506157328261582f565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615787826156eb565b9050919050565b6000615799826156fe565b9050919050565b60006157ab82615711565b9050919050565b60006157bd82615724565b9050919050565b60005b838110156157e25780820151818401526020810190506157c7565b838111156157f1576000848401525b50505050565b6000601f19601f8301169050919050565b6002811061581257fe5b50565b6001811061581f57fe5b50565b6001811061582c57fe5b50565b6005811061583957fe5b50565b615845816156cd565b811461585057600080fd5b50565b61585c816156df565b811461586757600080fd5b50565b61587381615737565b811461587e57600080fd5b50565b61588a81615765565b811461589557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158203ef971ca9b50b55a9132b8d1030f9dbecff0c3c0344644129bfe89dc406f7a786c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode Sourcemap

13693:11506:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13693:11506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14022:24;;;:::i;:::-;;;;;;;;;;;;;;;;6032:83;;;:::i;:::-;;;;;;;;;;;;;;;;14271:36;;;:::i;:::-;;;;;;;;;;;;;;;;3052:152;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18997:116;;;:::i;:::-;;;;;;;;;;;;;;;;13866:19;;;:::i;:::-;;;;;;;;;;;;;;;;2535:91;;;:::i;:::-;;;;;;;;;;;;;;;;3210:304;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15040:78;;;;;;;;;;;;;;;;:::i;:::-;;15744:897;;;;;;;;;;;;;;;;:::i;:::-;;6214:83;;;:::i;:::-;;;;;;;;;;;;;;;;3520:210;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18122:166;;;:::i;:::-;;;;;;;;;;;;;;;;14101:18;;;:::i;:::-;;;;;;;;;;;;;;;;13943:22;;;:::i;:::-;;;;;;;;;;;;;;;;18292:120;;;:::i;:::-;;;;;;;;;;;;;;;;14148:21;;;:::i;:::-;;;;;;;;;;;;;;;;2632:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24819:217;;;:::i;:::-;;;;;;;;;;;;;;;;1810:140;;;:::i;:::-;;25042:154;;;:::i;:::-;;;;;;;;;;;;;;;;19359:571;;;:::i;:::-;;13970:19;;;:::i;:::-;;;;;;;;;;;;;;;;1513:79;;;:::i;:::-;;;;;;;;;;;;;;;;14051:19;;;:::i;:::-;;;;;;;;;;;;;;;;1710:94;;;:::i;:::-;;;;;;;;;;;;;;;;18668:118;;;:::i;:::-;;;;;;;;;;;;;;;;6121:87;;;:::i;:::-;;;;;;;;;;;;;;;;17635:253;;;:::i;:::-;;13994:23;;;:::i;:::-;;;;;;;;;;;;;;;;16647:724;;;:::i;:::-;;;;;;;;;;;;;;;;3736:261;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18416:248;;;:::i;:::-;;;;;;;;;;;;;;;;2748:158;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19117:117;;;:::i;:::-;;;;;;;;;;;;;;;;14124:19;;;:::i;:::-;;;;;;;;;;;;;;;;17894:107;;;:::i;:::-;;;;;;;;;;;;;;;;15124:548;;;;;;;;;;;;;;;;:::i;:::-;;19238:115;;;:::i;:::-;;;;;;;;;;;;;;;;18005:113;;;:::i;:::-;;;;;;;;;;;;;;;;14075:21;;;:::i;:::-;;;;;;;;;;;;;;;;2912:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1956:109;;;;;;;;;;;;;;;;:::i;:::-;;18790:203;;;:::i;:::-;;;;;;;;;;;;;;;;13915:23;;;:::i;:::-;;;;;;;;;;;;;;;;17377:120;;;:::i;:::-;;;;;;;;;;;;;;;;17501:128;;;:::i;:::-;;;;;;;;;;;;;;;;13890:20;;;:::i;:::-;;;;;;;;;;;;;;;;14022:24;;;;;;;;;;;;;:::o;6032:83::-;6069:13;6102:5;6095:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6032:83;:::o;14271:36::-;;;;;;;;;;;;;:::o;3052:152::-;3118:4;3135:39;3144:12;:10;:12::i;:::-;3158:7;3167:6;3135:8;:39::i;:::-;3192:4;3185:11;;3052:152;;;;:::o;18997:116::-;19044:7;19074;;;;;;;;;;;19067:25;;;19101:4;19067:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19067:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19067: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;19067:40:0;;;;;;;;;19060:47;;18997:116;:::o;13866:19::-;;;;:::o;2535:91::-;2579:7;2606:12;;2599:19;;2535:91;:::o;3210:304::-;3299:4;3316:36;3326:6;3334:9;3345:6;3316:9;:36::i;:::-;3363:121;3372:6;3380:12;:10;:12::i;:::-;3394:89;3432:6;3394:89;;;;;;;;;;;;;;;;;:11;:19;3406:6;3394:19;;;;;;;;;;;;;;;:33;3414:12;:10;:12::i;:::-;3394:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3363:8;:121::i;:::-;3502:4;3495:11;;3210:304;;;;;:::o;15040:78::-;1638:9;:7;:9::i;:::-;1630:54;;;;;;;;;;;;;;;;;;;;;;15108:4;15098:7;;:14;;;;;;;;;;;;;;;;;;15040:78;:::o;15744:897::-;6494:1;6477:13;;:18;;;;;;;;;;;6506:20;6529:13;;6506:36;;15845:1;15835:7;:11;15827:55;;;;;;;;;;;;;;;;;;;;;;15893:16;15912:21;15922:10;15912:9;:21::i;:::-;15893:40;;15961:8;15950:7;:19;;15942:52;;;;;;;;;;;;;;;;;;;;;;16057:22;:20;:22::i;:::-;16050:4;:29;;;;16138:9;16150:37;16174:12;;16151:17;16160:7;16151:4;;:8;;:17;;;;:::i;:::-;16150:23;;:37;;;;:::i;:::-;16138:49;;16224:67;16250:7;16224:67;;;;;;;;;;;;;;;;;:9;:21;16234:10;16224:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;16200:9;:21;16210:10;16200:21;;;;;;;;;;;;;;;:91;;;;16315:25;16332:7;16315:12;;:16;;:25;;;;:::i;:::-;16300:12;:40;;;;16385:1;16356:41;;16365:10;16356:41;;;16389:7;16356:41;;;;;;;;;;;;;;;16432:9;16451:5;;;;;;;;;;;16444:23;;;16476:4;16444:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16444:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16444: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;16444:38:0;;;;;;;;;16432:50;;16499:1;16495;:5;16491:55;;;16513:23;16527:8;16533:1;16527;:5;;:8;;;;:::i;:::-;16513:13;:23::i;:::-;;16491:55;16556:41;16583:10;16595:1;16563:5;;;;;;;;;;;16556:26;;;;:41;;;;;:::i;:::-;16613:22;:20;:22::i;:::-;16606:4;:29;;;;6553:1;;;6589:13;;6573:12;:29;6565:73;;;;;;;;;;;;;;;;;;;;;;15744:897;;:::o;6214:83::-;6255:5;6280:9;;;;;;;;;;;6273:16;;6214:83;:::o;3520:210::-;3600:4;3617:83;3626:12;:10;:12::i;:::-;3640:7;3649:50;3688:10;3649:11;:25;3661:12;:10;:12::i;:::-;3649:25;;;;;;;;;;;;;;;:34;3675:7;3649:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3617:8;:83::i;:::-;3718:4;3711:11;;3520:210;;;;:::o;18122:166::-;18166:7;18184:14;;:::i;:::-;18206:4;;;;;;;;;;;18201:24;;;18226:22;;;;;;;;18239:4;18226:22;;;;;;18246:1;18226:22;;;18250:6;;18201:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18201:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18201: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;18201:56:0;;;;;;;;;18184:73;;18273:3;:9;;;18266:16;;;18122:166;:::o;14101:18::-;;;;;;;;;;;;;:::o;13943:22::-;;;;;;;;;;;;;:::o;18292:120::-;18340:7;18372:8;;;;;;;;;;;18365:26;;;18400:4;18365:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18365:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18365: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;18365:41:0;;;;;;;;;18358:48;;18292:120;:::o;14148:21::-;;;;;;;;;;;;;:::o;2632:110::-;2689:7;2716:9;:18;2726:7;2716:18;;;;;;;;;;;;;;;;2709:25;;2632:110;;;:::o;24819:217::-;24872:4;24892:138;25020:9;:7;:9::i;:::-;24892:115;24993:13;:11;:13::i;:::-;24892:88;24966:13;:11;:13::i;:::-;24892:61;24929:23;:21;:23::i;:::-;24892:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;24885:145;;24819:217;:::o;1810:140::-;1638:9;:7;:9::i;:::-;1630:54;;;;;;;;;;;;;;;;;;;;;;1909:1;1872:40;;1893:6;;;;;;;;;;;1872:40;;;;;;;;;;;;1940:1;1923:6;;:19;;;;;;;;;;;;;;;;;;1810:140::o;25042:154::-;25095:4;25108:10;25121:22;:20;:22::i;:::-;25108:35;;25157:33;25177:12;;25157:15;25167:4;25157:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25150:40;;;25042:154;:::o;19359:571::-;19394:18;19415:11;:9;:11::i;:::-;19394:32;;19454:8;;;;;;;;;;;19439:23;;;;;;;;:11;:23;;;;;;;;;19435:60;;19473:14;:12;:14::i;:::-;19435:60;19519:1;19507:9;:7;:9::i;:::-;:13;19503:391;;;19550:11;19535:26;;;;;;;;:11;:26;;;;;;;;;19531:356;;;19574:22;19586:9;:7;:9::i;:::-;19574:11;:22::i;:::-;19531:356;;;19742:15;19727:30;;;;;;;;:11;:30;;;;;;;;;19723:164;;;19770:26;19786:9;:7;:9::i;:::-;19770:15;:26::i;:::-;19723:164;;;19831:11;19816:26;;;;;;;;:11;:26;;;;;;;;;19812:75;;;19855:22;19867:9;:7;:9::i;:::-;19855:11;:22::i;:::-;19812:75;19723:164;19531:356;19503:391;19913:11;19902:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;19359:571;:::o;13970:19::-;;;;;;;;;;;;;:::o;1513:79::-;1551:7;1578:6;;;;;;;;;;;1571:13;;1513:79;:::o;14051:19::-;;;;;;;;;;;;;:::o;1710:94::-;1750:4;1790:6;;;;;;;;;;;1774:22;;:12;:10;:12::i;:::-;:22;;;1767:29;;1710:94;:::o;18668:118::-;18724:7;18756:4;;;;;;;;;;;18749:22;;;18772:7;;;;;;;;;;;18749:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18749:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18749: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;18749:31:0;;;;;;;;;18742:38;;18668:118;:::o;6121:87::-;6160:13;6193:7;6186:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6121:87;:::o;17635:253::-;17675:45;17701:8;;;;;;;;;;;17716:2;17682:5;;;;;;;;;;;17675:25;;;;:45;;;;;:::i;:::-;17729:41;17755:4;;;;;;;;;;;17766:2;17736:5;;;;;;;;;;;17729:25;;;;:41;;;;;:::i;:::-;17779:50;17805:13;:11;:13::i;:::-;17825:2;17786:5;;;;;;;;;;;17779:25;;;;:50;;;;;:::i;:::-;17838:44;17864:7;;;;;;;;;;;17878:2;17845:5;;;;;;;;;;;17838:25;;;;:44;;;;;:::i;:::-;17635:253::o;13994:23::-;;;;;;;;;;;;;:::o;16647:724::-;16689:6;16706:12;16721;16734;16764:3;;;;;;;;;;;16750:28;;;16779:5;;;;;;;;;;;16750:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16750:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16750:35:0;;;;;;39:16:-1;36:1;17:17;2:54;16750: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;16750:35:0;;;;;;;;;16704:81;;;;;;;;16792:11;16806:1;16792:15;;16825:3;16818:4;:10;16814:43;;;16845:4;16839:10;;16814:43;16932:3;16925:4;:10;16921:43;;;16952:4;16946:10;;16921:43;16981:3;16974:4;:10;16970:43;;;17001:4;16995:10;;16970:43;17021:18;17042:11;17021:32;;17071:4;17064:3;:11;17060:281;;;17100:15;17086:29;;17060:281;;;17228:4;17221:3;:11;17217:124;;;17257:11;17243:25;;17217:124;;;17293:4;17286:3;:11;17282:59;;;17322:11;17308:25;;17282:59;17217:124;17060:281;17354:11;17347:18;;;;;;;16647:724;:::o;3736:261::-;3821:4;3838:129;3847:12;:10;:12::i;:::-;3861:7;3870:96;3909:15;3870:96;;;;;;;;;;;;;;;;;:11;:25;3882:12;:10;:12::i;:::-;3870:25;;;;;;;;;;;;;;;:34;3896:7;3870:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3838:8;:129::i;:::-;3985:4;3978:11;;3736:261;;;;:::o;18416:248::-;18471:7;18520:9;18532:17;:15;:17::i;:::-;18520:29;;18564:1;18560;:5;18556:88;;;18580:56;18631:4;18580:46;18595:8;;;;;;;;;;;18586:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18586:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18586: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;18586:39:0;;;;;;;;;18580:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;18576:60;;18556:88;18657:1;18650:8;;;18416:248;:::o;2748:158::-;2817:4;2834:42;2844:12;:10;:12::i;:::-;2858:9;2869:6;2834:9;:42::i;:::-;2894:4;2887:11;;2748:158;;;;:::o;19117:117::-;19170:7;19202:5;;;;;;;;;;;19195:23;;;19219:8;;;;;;;;;;;19195:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19195:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19195: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;19195:33:0;;;;;;;;;19188:40;;19117:117;:::o;14124:19::-;;;;;;;;;;;;;:::o;17894:107::-;17934:7;17964:5;;;;;;;;;;;17957:23;;;17989:4;17957:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17957:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17957: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;17957:38:0;;;;;;;;;17950:45;;17894:107;:::o;15124:548::-;6494:1;6477:13;;:18;;;;;;;;;;;6506:20;6529:13;;6506:36;;15224:1;15214:7;:11;15206:54;;;;;;;;;;;;;;;;;;;;;;15276:22;:20;:22::i;:::-;15269:4;:29;;;;15309:66;15340:10;15360:4;15367:7;15316:5;;;;;;;;;;;15309:30;;;;:66;;;;;;:::i;:::-;15418:14;15435:1;15418:18;;15457:1;15449:4;;:9;15445:150;;;15480:7;15471:16;;15505:7;15498:4;:14;;;;15445:150;;;15548:37;15580:4;;15549:25;15561:12;;15549:7;:11;;:25;;;;:::i;:::-;15548:31;;:37;;;;:::i;:::-;15539:46;;15445:150;15610:22;:20;:22::i;:::-;15603:4;:29;;;;15641:25;15647:10;15659:6;15641:5;:25::i;:::-;6553:1;6589:13;;6573:12;:29;6565:73;;;;;;;;;;;;;;;;;;;;;;15124:548;;:::o;19238:115::-;19282:7;19312:9;;;;;;;;;;;19305:27;;;19341:4;19305:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19305:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19305: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;19305:42:0;;;;;;;;;19298:49;;19238:115;:::o;18005:113::-;18058:7;18090:5;;;;;;;;;;;18083:23;;;18107:4;;;;;;;;;;;18083:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18083:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18083:29: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;18083:29:0;;;;;;;;;18076:36;;18005:113;:::o;14075:21::-;;;;:::o;2912:134::-;2984:7;3011:11;:18;3023:5;3011:18;;;;;;;;;;;;;;;:27;3030:7;3011:27;;;;;;;;;;;;;;;;3004:34;;2912:134;;;;:::o;1956:109::-;1638:9;:7;:9::i;:::-;1630:54;;;;;;;;;;;;;;;;;;;;;;2029:28;2048:8;2029:18;:28::i;:::-;1956:109;:::o;18790:203::-;18844:7;18860:9;18872:16;:14;:16::i;:::-;18860:28;;18903:1;18899;:5;18895:78;;;18927:7;;;;;;;;;;;18919:31;;;18959:4;18919:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18919:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18919: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;18919:46:0;;;;;;;;;18915:50;;18895:78;18986:1;18979:8;;;18790:203;:::o;13915:23::-;;;;;;;;;;;;;:::o;17377:120::-;17417:7;17469:4;;;;;;;;;;;17440:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17440:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17440: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;17440:51:0;;;;;;;;;17433:58;;17377:120;:::o;17501:128::-;17545:7;17597:4;;;;;;;;;;;17568:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17568:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17568: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;17568:55:0;;;;;;;;;17561:62;;17501:128;:::o;13890:20::-;;;;;;;;;;;;;:::o;893:98::-;938:15;973:10;966:17;;893:98;:::o;5148:338::-;5259:1;5242:19;;:5;:19;;;;5234:68;;;;;;;;;;;;;;;;;;;;;;5340:1;5321:21;;:7;:21;;;;5313:68;;;;;;;;;;;;;;;;;;;;;;5424:6;5394:11;:18;5406:5;5394:18;;;;;;;;;;;;;;;:27;5413:7;5394:27;;;;;;;;;;;;;;;:36;;;;5462:7;5446:32;;5455:5;5446:32;;;5471:6;5446:32;;;;;;;;;;;;;;;5148:338;;;:::o;4003:471::-;4119:1;4101:20;;:6;:20;;;;4093:70;;;;;;;;;;;;;;;;;;;;;;4203:1;4182:23;;:9;:23;;;;4174:71;;;;;;;;;;;;;;;;;;;;;;4278;4300:6;4278:71;;;;;;;;;;;;;;;;;:9;:17;4288:6;4278:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4258:9;:17;4268:6;4258:17;;;;;;;;;;;;;;;:91;;;;4383:32;4408:6;4383:9;:20;4393:9;4383:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4360:9;:20;4370:9;4360:20;;;;;;;;;;;;;;;:55;;;;4448:9;4431:35;;4440:6;4431:35;;;4459:6;4431:35;;;;;;;;;;;;;;;4003:471;;;:::o;7006:192::-;7092:7;7125:1;7120;:6;;7128:12;7112:29;;;;;;;;;;;;;;;;;;;;;;;;;7152:9;7168:1;7164;:5;7152:17;;7189:1;7182:8;;;7006:192;;;;;:::o;7204:250::-;7262:7;7291:1;7286;:6;7282:47;;;7316:1;7309:8;;;;7282:47;7341:9;7357:1;7353;:5;7341:17;;7386:1;7381;7377;:5;;;;;;:10;7369:56;;;;;;;;;;;;;;;;;;;;;;7445:1;7438:8;;;7204:250;;;;;:::o;7460:132::-;7518:7;7545:39;7549:1;7552;7545:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7538:46;;7460:132;;;;:::o;6864:136::-;6922:7;6949:43;6953:1;6956;6949:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6942:50;;6864:136;;;;:::o;21369:1503::-;21427:4;21440:18;21461:7;21440:28;;21477:14;21494:17;:15;:17::i;:::-;21477:34;;21531:1;21522:6;:10;21518:308;;;21557:31;21586:1;21557:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;21547:7;:41;21543:276;;;21601:54;21623:31;21652:1;21623:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;21601:21;:54::i;:::-;21676;21698:5;;;;;;;;;;;21691:23;;;21723:4;21691:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21691:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21691: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;21691:38:0;;;;;;;;;21676:10;:14;;:54;;;;:::i;:::-;21666:64;;21543:276;;;21757:30;21779:7;21757:21;:30::i;:::-;21805:4;21798:11;;;;;;21543:276;21518:308;21843:13;:11;:13::i;:::-;21834:22;;21876:1;21867:6;:10;21863:274;;;21902:22;:20;:22::i;:::-;21892:7;:32;21888:242;;;21937:37;21951:22;:20;:22::i;:::-;21937:13;:37::i;:::-;21995:54;22017:5;;;;;;;;;;;22010:23;;;22042:4;22010:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22010:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22010: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;22010:38:0;;;;;;;;;21995:10;:14;;:54;;;;:::i;:::-;21985:64;;21888:242;;;22076:22;22090:7;22076:13;:22::i;:::-;22116:4;22109:11;;;;;;21888:242;21863:274;22154:16;:14;:16::i;:::-;22145:25;;22190:1;22181:6;:10;22177:359;;;22216:32;22246:1;22216:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;22206:7;:42;22202:327;;;22270:32;22300:1;22270:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;22261:41;;22313:54;22334:32;22364:1;22334:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;22313:20;:54::i;:::-;22388;22410:5;;;;;;;;;;;22403:23;;;22435:4;22403:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22403:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22403: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;22403:38:0;;;;;;;;;22388:10;:14;;:54;;;;:::i;:::-;22378:64;;22202:327;;;22469:28;22490:6;22469:20;:28::i;:::-;22515:4;22508:11;;;;;;22202:327;22177:359;22553:13;:11;:13::i;:::-;22544:22;;22586:1;22577:6;:10;22573:274;;;22612:22;:20;:22::i;:::-;22602:7;:32;22598:242;;;22647:37;22661:22;:20;:22::i;:::-;22647:13;:37::i;:::-;22705:54;22727:5;;;;;;;;;;;22720:23;;;22752:4;22720:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22720:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22720: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;22720:38:0;;;;;;;;;22705:10;:14;;:54;;;;:::i;:::-;22695:64;;22598:242;;;22786:22;22800:7;22786:13;:22::i;:::-;22826:4;22819:11;;;;;;22598:242;22573:274;22862:4;22855:11;;;;21369:1503;;;;:::o;9177:176::-;9260:85;9279:5;9309;:14;;;:23;;;;9334:2;9338:5;9286:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9286:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9286:58:0;9260:18;:85::i;:::-;9177:176;;;:::o;6677:181::-;6735:7;6755:9;6771:1;6767;:5;6755:17;;6796:1;6791;:6;;6783:46;;;;;;;;;;;;;;;;;;;;;;6849:1;6842:8;;;6677:181;;;;:::o;19936:761::-;19976:14;19993:17;:15;:17::i;:::-;19976:34;;20030:1;20021:6;:10;20017:87;;;20042:54;20064:31;20093:1;20064:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;20042:21;:54::i;:::-;20017:87;20119:13;:11;:13::i;:::-;20110:22;;20152:1;20143:6;:10;20139:151;;;20177:22;:20;:22::i;:::-;20168:6;:31;20164:89;;;20221:22;:20;:22::i;:::-;20212:31;;20164:89;20261:21;20275:6;20261:13;:21::i;:::-;20139:151;20305:16;:14;:16::i;:::-;20296:25;;20341:1;20332:6;:10;20328:178;;;20366:32;20396:1;20366:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;20357:6;:41;20353:109;;;20420:32;20450:1;20420:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;20411:41;;20353:109;20470:28;20491:6;20470:20;:28::i;:::-;20328:178;20521:13;:11;:13::i;:::-;20512:22;;20554:1;20545:6;:10;20541:151;;;20579:22;:20;:22::i;:::-;20570:6;:31;20566:89;;;20623:22;:20;:22::i;:::-;20614:31;;20566:89;20663:21;20677:6;20663:13;:21::i;:::-;20541:151;19936:761;:::o;22878:568::-;22933:19;22966:1;22955:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22933:35;;22988:22;;;;;;;;23001:4;22988:22;;;;;;23008:1;22988:22;;;22977:5;22983:1;22977:8;;;;;;;;;;;;;:33;;;;23021:22;;:::i;:::-;23046:70;;;;;;;;23058:4;23046:70;;;;;;23064:21;23046:70;;;;;;;;;;;;23087:20;23046:70;;;;;;;;;;;;23109:6;23046:70;;;23021:95;;23125:21;;:::i;:::-;23172:18;23155:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;23215:1;23199:3;:13;;:17;;;;;23238:3;23225;:10;;:16;;;;23272:6;;23250:3;:19;;:28;;;;;23314:4;23287:3;:16;;:32;;;;;;;;;;;23330:24;23374:1;23357:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23330:46;;23395:3;23385:4;23390:1;23385:7;;;;;;;;;;;;;:13;;;;23414:4;;;;;;;;;;;23409:18;;;23428:5;23435:4;23409:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23409:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23409:31:0;;;;22878:568;;;;;:::o;23709:134::-;23808:1;23782:8;;;;;;;;;;;23773:23;;;23797:6;23773:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23773:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23773: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;23773:31:0;;;;;;;;;:36;23765:72;;;;;;;;;;;;;;;;;;;;;;23709:134;:::o;23452:105::-;23509:9;:7;:9::i;:::-;23504:23;;;23528:5;;;;;;;;;;;23535:6;23543:7;;;;;;;;;;;23504:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23504:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23504:47:0;;;;23452:105;:::o;9573:347::-;9678:1;9669:5;:10;9668:62;;;;9728:1;9685:5;:15;;;9709:4;9716:7;9685:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9685:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9685: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;9685:39:0;;;;;;;;;:44;9668:62;9660:152;;;;;;;;;;;;;;;;;;;;;;9823:89;9842:5;9872;:13;;;:22;;;;9896:7;9905:5;9849:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9849:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9849:62:0;9823:18;:89::i;:::-;9573:347;;;:::o;9361:204::-;9462:95;9481:5;9511;:18;;;:27;;;;9540:4;9546:2;9550:5;9488:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9488:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9488:68:0;9462:18;:95::i;:::-;9361:204;;;;:::o;4480:308::-;4575:1;4556:21;;:7;:21;;;;4548:65;;;;;;;;;;;;;;;;;;;;;;4641:24;4658:6;4641:12;;:16;;:24;;;;:::i;:::-;4626:12;:39;;;;4697:30;4720:6;4697:9;:18;4707:7;4697:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;4676:9;:18;4686:7;4676:18;;;;;;;;;;;;;;;:51;;;;4764:7;4743:37;;4760:1;4743:37;;;4773:6;4743:37;;;;;;;;;;;;;;;4480:308;;:::o;2071:229::-;2165:1;2145:22;;:8;:22;;;;2137:73;;;;;;;;;;;;;;;;;;;;;;2255:8;2226:38;;2247:6;;;;;;;;;;;2226:38;;;;;;;;;;;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2071:229;:::o;7598:258::-;7684:7;7783:1;7779;:5;7786:12;7771:28;;;;;;;;;;;;;;;;;;;;;;;;;7810:9;7826:1;7822;:5;;;;;;7810:17;;7847:1;7840:8;;;7598:258;;;;;:::o;20703:328::-;20767:9;20779:17;:15;:17::i;:::-;20767:29;;20803:10;20816:24;:22;:24::i;:::-;20803:37;;20861:7;20855:2;:13;;20847:44;;;;;;;;;;;;;;;;;;;;;;20945:14;20962:31;20991:1;20962:24;20983:2;20963:14;20969:7;20963:1;:5;;:14;;;;:::i;:::-;20962:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;20945:48;;21000:25;21018:6;21000:17;:25::i;:::-;20703:328;;;;:::o;24241:572::-;24298:19;24331:1;24320:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24298:35;;24353:22;;;;;;;;24366:4;24353:22;;;;;;24373:1;24353:22;;;24342:5;24348:1;24342:8;;;;;;;;;;;;;:33;;;;24386:22;;:::i;:::-;24411:71;;;;;;;;24423:5;24411:71;;;;;;24430:21;24411:71;;;;;;;;;;;;24453:20;24411:71;;;;;;;;;;;;24475:6;24411:71;;;24386:96;;24491:21;;:::i;:::-;24538:19;24521:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;24582:1;24566:3;:13;;:17;;;;;24605:3;24592;:10;;:16;;;;24639:6;;24617:3;:19;;:28;;;;;24681:4;24654:3;:16;;:32;;;;;;;;;;;24697:24;24741:1;24724:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24697:46;;24762:3;24752:4;24757:1;24752:7;;;;;;;;;;;;;:13;;;;24781:4;;;;;;;;;;;24776:18;;;24795:5;24802:4;24776:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24776:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24776:31:0;;;;24241:572;;;;;:::o;21037:324::-;21100:9;21112:16;:14;:16::i;:::-;21100:28;;21135:10;21148:23;:21;:23::i;:::-;21135:36;;21192:7;21186:2;:13;;21178:44;;;;;;;;;;;;;;;;;;;;;;21276:14;21293:31;21322:1;21293:24;21314:2;21294:14;21300:7;21294:1;:5;;:14;;;;:::i;:::-;21293:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;21276:48;;21331:24;21348:6;21331:16;:24::i;:::-;21037:324;;;;:::o;23847:92::-;23908:9;;;;;;;;;;;23901:24;;;23926:6;23901:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23901:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23901:32:0;;;;23847:92;:::o;10557:598::-;10645:27;10653:5;10645:25;;;:27::i;:::-;10637:71;;;;;;;;;;;;;;;;;;;;;;10782:12;10796:23;10831:5;10823:19;;10843:4;10823:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10781:67:0;;;;10867:7;10859:52;;;;;;;;;;;;;;;;;;;;;;10948:1;10928:10;:17;:21;10924:224;;;11070:10;11059:30;;;;;;;;;;;;;;11051:85;;;;;;;;;;;;;;;;;;;;;;10924:224;10557:598;;;;:::o;24095:140::-;24198:1;24170:8;;;;;;;;;;;24161:25;;;24187:6;24161:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24161:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24161: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;24161:33:0;;;;;;;;;:38;24153:76;;;;;;;;;;;;;;;;;;;;;;24095:140;:::o;23943:148::-;24055:1;24016:7;;;;;;;;;;;24008:21;;;24038:4;24045:6;24008:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24008:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24008: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;24008:44:0;;;;;;;;;:48;24000:85;;;;;;;;;;;;;;;;;;;;;;23943:148;:::o;8194:374::-;8254:4;8271:16;8298:19;8320:66;8298:88;;;;8489:7;8477:20;8465:32;;8529:3;8517:15;;:8;:15;;:42;;;;;8548:11;8536:8;:23;;8517:42;8509:51;;;;8194:374;;;:::o;13693:11506::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;419:444;;532:3;525:4;517:6;513:17;509:27;499:2;;550:1;547;540:12;499:2;580:6;574:13;602:65;617:49;659:6;617:49;;;602:65;;;593:74;;687:6;680:5;673:21;723:4;715:6;711:17;756:4;749:5;745:16;791:3;782:6;777:3;773:16;770:25;767:2;;;808:1;805;798:12;767:2;818:39;850:6;845:3;840;818:39;;;492:371;;;;;;;;896:493;;1017:4;1005:9;1000:3;996:19;992:30;989:2;;;1035:1;1032;1025:12;989:2;1053:20;1068:4;1053:20;;;1044:29;;1123:1;1154:57;1207:3;1198:6;1187:9;1183:22;1154:57;;;1148:3;1141:5;1137:15;1130:82;1083:140;1274:2;1307:60;1363:3;1354:6;1343:9;1339:22;1307:60;;;1300:4;1293:5;1289:16;1282:86;1233:146;983:406;;;;;1396:128;;1475:6;1462:20;1453:29;;1487:32;1513:5;1487:32;;;1447:77;;;;;1531:130;;1611:6;1598:20;1589:29;;1623:33;1650:5;1623:33;;;1583:78;;;;;1668:134;;1752:6;1746:13;1737:22;;1764:33;1791:5;1764:33;;;1731:71;;;;;1809:241;;1913:2;1901:9;1892:7;1888:23;1884:32;1881:2;;;1929:1;1926;1919:12;1881:2;1964:1;1981:53;2026:7;2017:6;2006:9;2002:22;1981:53;;;1971:63;;1943:97;1875:175;;;;;2057:263;;2172:2;2160:9;2151:7;2147:23;2143:32;2140:2;;;2188:1;2185;2178:12;2140:2;2223:1;2240:64;2296:7;2287:6;2276:9;2272:22;2240:64;;;2230:74;;2202:108;2134:186;;;;;2327:366;;;2448:2;2436:9;2427:7;2423:23;2419:32;2416:2;;;2464:1;2461;2454:12;2416:2;2499:1;2516:53;2561:7;2552:6;2541:9;2537:22;2516:53;;;2506:63;;2478:97;2606:2;2624:53;2669:7;2660:6;2649:9;2645:22;2624:53;;;2614:63;;2585:98;2410:283;;;;;;2700:491;;;;2838:2;2826:9;2817:7;2813:23;2809:32;2806:2;;;2854:1;2851;2844:12;2806:2;2889:1;2906:53;2951:7;2942:6;2931:9;2927:22;2906:53;;;2896:63;;2868:97;2996:2;3014:53;3059:7;3050:6;3039:9;3035:22;3014:53;;;3004:63;;2975:98;3104:2;3122:53;3167:7;3158:6;3147:9;3143:22;3122:53;;;3112:63;;3083:98;2800:391;;;;;;3198:366;;;3319:2;3307:9;3298:7;3294:23;3290:32;3287:2;;;3335:1;3332;3325:12;3287:2;3370:1;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;;;3377:63;;3349:97;3477:2;3495:53;3540:7;3531:6;3520:9;3516:22;3495:53;;;3485:63;;3456:98;3281:283;;;;;;3571:257;;3683:2;3671:9;3662:7;3658:23;3654:32;3651:2;;;3699:1;3696;3689:12;3651:2;3734:1;3751:61;3804:7;3795:6;3784:9;3780:22;3751:61;;;3741:71;;3713:105;3645:183;;;;;3835:908;;;;;;4028:3;4016:9;4007:7;4003:23;3999:33;3996:2;;;4045:1;4042;4035:12;3996:2;4101:1;4090:9;4086:17;4080:24;4124:18;4116:6;4113:30;4110:2;;;4156:1;4153;4146:12;4110:2;4176:74;4242:7;4233:6;4222:9;4218:22;4176:74;;;4166:84;;4059:197;4287:2;4305:64;4361:7;4352:6;4341:9;4337:22;4305:64;;;4295:74;;4266:109;4406:2;4424:64;4480:7;4471:6;4460:9;4456:22;4424:64;;;4414:74;;4385:109;4525:2;4543:64;4599:7;4590:6;4579:9;4575:22;4543:64;;;4533:74;;4504:109;4644:3;4663:64;4719:7;4710:6;4699:9;4695:22;4663:64;;;4653:74;;4623:110;3990:753;;;;;;;;;4750:305;;4886:2;4874:9;4865:7;4861:23;4857:32;4854:2;;;4902:1;4899;4892:12;4854:2;4937:1;4954:85;5031:7;5022:6;5011:9;5007:22;4954:85;;;4944:95;;4916:129;4848:207;;;;;5062:239;;5165:2;5153:9;5144:7;5140:23;5136:32;5133:2;;;5181:1;5178;5171:12;5133:2;5216:1;5233:52;5277:7;5268:6;5257:9;5253:22;5233:52;;;5223:62;;5195:96;5127:174;;;;;5308:241;;5412:2;5400:9;5391:7;5387:23;5383:32;5380:2;;;5428:1;5425;5418:12;5380:2;5463:1;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;;;5470:63;;5442:97;5374:175;;;;;5556:263;;5671:2;5659:9;5650:7;5646:23;5642:32;5639:2;;;5687:1;5684;5677:12;5639:2;5722:1;5739:64;5795:7;5786:6;5775:9;5771:22;5739:64;;;5729:74;;5701:108;5633:186;;;;;5827:253;;5976:98;6070:3;6062:6;5976:98;;;5962:112;;5955:125;;;;;6089:249;;6212:86;6294:3;6286:6;6212:86;;;6327:4;6322:3;6318:14;6304:28;;6205:133;;;;;6346:103;6419:24;6437:5;6419:24;;;6414:3;6407:37;6401:48;;;6456:113;6539:24;6557:5;6539:24;;;6534:3;6527:37;6521:48;;;6643:1040;;6836:78;6908:5;6836:78;;;6927:110;7030:6;7025:3;6927:110;;;6920:117;;7060:3;7102:4;7094:6;7090:17;7085:3;7081:27;7129:80;7203:5;7129:80;;;7229:7;7257:1;7242:402;7267:6;7264:1;7261:13;7242:402;;;7329:9;7323:4;7319:20;7314:3;7307:33;7374:6;7368:13;7396:112;7503:4;7488:13;7396:112;;;7388:120;;7525:84;7602:6;7525:84;;;7515:94;;7632:4;7627:3;7623:14;7616:21;;7299:345;7289:1;7286;7282:9;7277:14;;7242:402;;;7246:14;7657:4;7650:11;;7674:3;7667:10;;6815:868;;;;;;;;;;7746:834;;7927:72;7993:5;7927:72;;;8012:104;8109:6;8104:3;8012:104;;;8005:111;;8137:74;8205:5;8137:74;;;8231:7;8259:1;8244:314;8269:6;8266:1;8263:13;8244:314;;;8336:6;8330:13;8357:99;8452:3;8437:13;8357:99;;;8350:106;;8473:78;8544:6;8473:78;;;8463:88;;8301:257;8291:1;8288;8284:9;8279:14;;8244:314;;;8248:14;8571:3;8564:10;;7906:674;;;;;;;;8588:94;8655:21;8670:5;8655:21;;;8650:3;8643:34;8637:45;;;8689:104;8766:21;8781:5;8766:21;;;8761:3;8754:34;8748:45;;;8800:356;;8928:38;8960:5;8928:38;;;8978:88;9059:6;9054:3;8978:88;;;8971:95;;9071:52;9116:6;9111:3;9104:4;9097:5;9093:16;9071:52;;;9144:6;9139:3;9135:16;9128:23;;8908:248;;;;;;9163:315;;9259:34;9287:5;9259:34;;;9305:60;9358:6;9353:3;9305:60;;;9298:67;;9370:52;9415:6;9410:3;9403:4;9396:5;9392:16;9370:52;;;9443:29;9465:6;9443:29;;;9438:3;9434:39;9427:46;;9239:239;;;;;;9485:142;9571:50;9615:5;9571:50;;;9566:3;9559:63;9553:74;;;9634:156;9727:57;9778:5;9727:57;;;9722:3;9715:70;9709:81;;;9797:150;9887:54;9935:5;9887:54;;;9882:3;9875:67;9869:78;;;9954:144;10046:46;10086:5;10046:46;;;10041:3;10034:59;10028:70;;;10105:347;;10217:39;10250:5;10217:39;;;10268:71;10332:6;10327:3;10268:71;;;10261:78;;10344:52;10389:6;10384:3;10377:4;10370:5;10366:16;10344:52;;;10417:29;10439:6;10417:29;;;10412:3;10408:39;10401:46;;10197:255;;;;;;10460:465;;10620:67;10684:2;10679:3;10620:67;;;10613:74;;10720:66;10716:1;10711:3;10707:11;10700:87;10821:66;10816:2;10811:3;10807:12;10800:88;10916:2;10911:3;10907:12;10900:19;;10606:319;;;;10934:364;;11094:67;11158:2;11153:3;11094:67;;;11087:74;;11194:66;11190:1;11185:3;11181:11;11174:87;11289:2;11284:3;11280:12;11273:19;;11080:218;;;;11307:465;;11467:67;11531:2;11526:3;11467:67;;;11460:74;;11567:66;11563:1;11558:3;11554:11;11547:87;11668:66;11663:2;11658:3;11654:12;11647:88;11763:2;11758:3;11754:12;11747:19;;11453:319;;;;11781:465;;11941:67;12005:2;12000:3;11941:67;;;11934:74;;12041:66;12037:1;12032:3;12028:11;12021:87;12142:66;12137:2;12132:3;12128:12;12121:88;12237:2;12232:3;12228:12;12221:19;;11927:319;;;;12255:364;;12415:67;12479:2;12474:3;12415:67;;;12408:74;;12515:66;12511:1;12506:3;12502:11;12495:87;12610:2;12605:3;12601:12;12594:19;;12401:218;;;;12628:364;;12788:67;12852:2;12847:3;12788:67;;;12781:74;;12888:66;12884:1;12879:3;12875:11;12868:87;12983:2;12978:3;12974:12;12967:19;;12774:218;;;;13001:364;;13161:67;13225:2;13220:3;13161:67;;;13154:74;;13261:66;13257:1;13252:3;13248:11;13241:87;13356:2;13351:3;13347:12;13340:19;;13147:218;;;;13374:465;;13534:67;13598:2;13593:3;13534:67;;;13527:74;;13634:66;13630:1;13625:3;13621:11;13614:87;13735:66;13730:2;13725:3;13721:12;13714:88;13830:2;13825:3;13821:12;13814:19;;13520:319;;;;13848:364;;14008:67;14072:2;14067:3;14008:67;;;14001:74;;14108:66;14104:1;14099:3;14095:11;14088:87;14203:2;14198:3;14194:12;14187:19;;13994:218;;;;14221:364;;14381:67;14445:2;14440:3;14381:67;;;14374:74;;14481:66;14477:1;14472:3;14468:11;14461:87;14576:2;14571:3;14567:12;14560:19;;14367:218;;;;14594:364;;14754:67;14818:2;14813:3;14754:67;;;14747:74;;14854:66;14850:1;14845:3;14841:11;14834:87;14949:2;14944:3;14940:12;14933:19;;14740:218;;;;14967:364;;15127:67;15191:2;15186:3;15127:67;;;15120:74;;15227:66;15223:1;15218:3;15214:11;15207:87;15322:2;15317:3;15313:12;15306:19;;15113:218;;;;15340:465;;15500:67;15564:2;15559:3;15500:67;;;15493:74;;15600:66;15596:1;15591:3;15587:11;15580:87;15701:66;15696:2;15691:3;15687:12;15680:88;15796:2;15791:3;15787:12;15780:19;;15486:319;;;;15814:364;;15974:67;16038:2;16033:3;15974:67;;;15967:74;;16074:66;16070:1;16065:3;16061:11;16054:87;16169:2;16164:3;16160:12;16153:19;;15960:218;;;;16187:465;;16347:67;16411:2;16406:3;16347:67;;;16340:74;;16447:66;16443:1;16438:3;16434:11;16427:87;16548:66;16543:2;16538:3;16534:12;16527:88;16643:2;16638:3;16634:12;16627:19;;16333:319;;;;16661:364;;16821:67;16885:2;16880:3;16821:67;;;16814:74;;16921:66;16917:1;16912:3;16908:11;16901:87;17016:2;17011:3;17007:12;17000:19;;16807:218;;;;17034:465;;17194:67;17258:2;17253:3;17194:67;;;17187:74;;17294:66;17290:1;17285:3;17281:11;17274:87;17395:66;17390:2;17385:3;17381:12;17374:88;17490:2;17485:3;17481:12;17474:19;;17180:319;;;;17508:364;;17668:67;17732:2;17727:3;17668:67;;;17661:74;;17768:66;17764:1;17759:3;17755:11;17748:87;17863:2;17858:3;17854:12;17847:19;;17654:218;;;;17881:465;;18041:67;18105:2;18100:3;18041:67;;;18034:74;;18141:66;18137:1;18132:3;18128:11;18121:87;18242:66;18237:2;18232:3;18228:12;18221:88;18337:2;18332:3;18328:12;18321:19;;18027:319;;;;18355:364;;18515:67;18579:2;18574:3;18515:67;;;18508:74;;18615:66;18611:1;18606:3;18602:11;18595:87;18710:2;18705:3;18701:12;18694:19;;18501:218;;;;18728:364;;18888:67;18952:2;18947:3;18888:67;;;18881:74;;18988:66;18984:1;18979:3;18975:11;18968:87;19083:2;19078:3;19074:12;19067:19;;18874:218;;;;19161:1605;;19304:5;19299:3;19295:15;19394:3;19387:5;19383:15;19377:22;19405:75;19475:3;19470;19466:13;19452:12;19405:75;;;19325:161;19564:4;19557:5;19553:16;19547:23;19576:63;19633:4;19628:3;19624:14;19610:12;19576:63;;;19496:149;19720:4;19713:5;19709:16;19703:23;19732:117;19843:4;19838:3;19834:14;19820:12;19732:117;;;19655:200;19939:4;19932:5;19928:16;19922:23;19951:63;20008:4;20003:3;19999:14;19985:12;19951:63;;;19865:155;20106:4;20099:5;20095:16;20089:23;20118:63;20175:4;20170:3;20166:14;20152:12;20118:63;;;20030:157;20268:4;20261:5;20257:16;20251:23;20280:64;20337:5;20332:3;20328:15;20314:12;20280:64;;;20197:153;20433:4;20426:5;20422:16;20416:23;20445:64;20502:5;20497:3;20493:15;20479:12;20445:64;;;20360:155;20588:4;20581:5;20577:16;20571:23;20641:3;20635:4;20631:14;20623:5;20618:3;20614:15;20607:39;20661:67;20723:4;20709:12;20661:67;;;20653:75;;20525:215;20757:4;20750:11;;19277:1489;;;;;;20836:815;20973:4;20968:3;20964:14;21056:3;21049:5;21045:15;21039:22;21067:56;21118:3;21113;21109:13;21095:12;21067:56;;;20993:136;21210:4;21203:5;21199:16;21193:23;21222:83;21299:4;21294:3;21290:14;21276:12;21222:83;;;21139:172;21383:4;21376:5;21372:16;21366:23;21395:80;21469:4;21464:3;21460:14;21446:12;21395:80;;;21321:160;21555:4;21548:5;21544:16;21538:23;21567:63;21624:4;21619:3;21615:14;21601:12;21567:63;;;21491:145;20946:705;;;;21707:457;21830:4;21825:3;21821:14;21914:3;21907:5;21903:15;21897:22;21925:62;21982:3;21977;21973:13;21959:12;21925:62;;;21850:143;22068:4;22061:5;22057:16;22051:23;22080:63;22137:4;22132:3;22128:14;22114:12;22080:63;;;22003:146;21803:361;;;;22220:467;22353:4;22348:3;22344:14;22437:3;22430:5;22426:15;22420:22;22448:62;22505:3;22500;22496:13;22482:12;22448:62;;;22373:143;22591:4;22584:5;22580:16;22574:23;22603:63;22660:4;22655:3;22651:14;22637:12;22603:63;;;22526:146;22326:361;;;;22694:110;22775:23;22792:5;22775:23;;;22770:3;22763:36;22757:47;;;22811:103;22884:24;22902:5;22884:24;;;22879:3;22872:37;22866:48;;;22921:113;23004:24;23022:5;23004:24;;;22999:3;22992:37;22986:48;;;23041:107;23120:22;23136:5;23120:22;;;23115:3;23108:35;23102:46;;;23155:262;;23299:93;23388:3;23379:6;23299:93;;;23292:100;;23409:3;23402:10;;23280:137;;;;;23424:213;;23542:2;23531:9;23527:18;23519:26;;23556:71;23624:1;23613:9;23609:17;23600:6;23556:71;;;23513:124;;;;;23644:324;;23790:2;23779:9;23775:18;23767:26;;23804:71;23872:1;23861:9;23857:17;23848:6;23804:71;;;23886:72;23954:2;23943:9;23939:18;23930:6;23886:72;;;23761:207;;;;;;23975:435;;24149:2;24138:9;24134:18;24126:26;;24163:71;24231:1;24220:9;24216:17;24207:6;24163:71;;;24245:72;24313:2;24302:9;24298:18;24289:6;24245:72;;;24328;24396:2;24385:9;24381:18;24372:6;24328:72;;;24120:290;;;;;;;24417:324;;24563:2;24552:9;24548:18;24540:26;;24577:71;24645:1;24634:9;24630:17;24621:6;24577:71;;;24659:72;24727:2;24716:9;24712:18;24703:6;24659:72;;;24534:207;;;;;;24748:431;;24920:2;24909:9;24905:18;24897:26;;24934:71;25002:1;24991:9;24987:17;24978:6;24934:71;;;25016:72;25084:2;25073:9;25069:18;25060:6;25016:72;;;25099:70;25165:2;25154:9;25150:18;25141:6;25099:70;;;24891:288;;;;;;;25186:788;;25516:2;25505:9;25501:18;25493:26;;25566:9;25560:4;25556:20;25552:1;25541:9;25537:17;25530:47;25591:144;25730:4;25721:6;25591:144;;;25583:152;;25783:9;25777:4;25773:20;25768:2;25757:9;25753:18;25746:48;25808:156;25959:4;25950:6;25808:156;;;25800:164;;25487:487;;;;;;25981:201;;26093:2;26082:9;26078:18;26070:26;;26107:65;26169:1;26158:9;26154:17;26145:6;26107:65;;;26064:118;;;;;26189:231;;26316:2;26305:9;26301:18;26293:26;;26330:80;26407:1;26396:9;26392:17;26383:6;26330:80;;;26287:133;;;;;26427:301;;26565:2;26554:9;26550:18;26542:26;;26615:9;26609:4;26605:20;26601:1;26590:9;26586:17;26579:47;26640:78;26713:4;26704:6;26640:78;;;26632:86;;26536:192;;;;;26735:407;;26926:2;26915:9;26911:18;26903:26;;26976:9;26970:4;26966:20;26962:1;26951:9;26947:17;26940:47;27001:131;27127:4;27001:131;;;26993:139;;26897:245;;;;27149:407;;27340:2;27329:9;27325:18;27317:26;;27390:9;27384:4;27380:20;27376:1;27365:9;27361:17;27354:47;27415:131;27541:4;27415:131;;;27407:139;;27311:245;;;;27563:407;;27754:2;27743:9;27739:18;27731:26;;27804:9;27798:4;27794:20;27790:1;27779:9;27775:17;27768:47;27829:131;27955:4;27829:131;;;27821:139;;27725:245;;;;27977:407;;28168:2;28157:9;28153:18;28145:26;;28218:9;28212:4;28208:20;28204:1;28193:9;28189:17;28182:47;28243:131;28369:4;28243:131;;;28235:139;;28139:245;;;;28391:407;;28582:2;28571:9;28567:18;28559:26;;28632:9;28626:4;28622:20;28618:1;28607:9;28603:17;28596:47;28657:131;28783:4;28657:131;;;28649:139;;28553:245;;;;28805:407;;28996:2;28985:9;28981:18;28973:26;;29046:9;29040:4;29036:20;29032:1;29021:9;29017:17;29010:47;29071:131;29197:4;29071:131;;;29063:139;;28967:245;;;;29219:407;;29410:2;29399:9;29395:18;29387:26;;29460:9;29454:4;29450:20;29446:1;29435:9;29431:17;29424:47;29485:131;29611:4;29485:131;;;29477:139;;29381:245;;;;29633:407;;29824:2;29813:9;29809:18;29801:26;;29874:9;29868:4;29864:20;29860:1;29849:9;29845:17;29838:47;29899:131;30025:4;29899:131;;;29891:139;;29795:245;;;;30047:407;;30238:2;30227:9;30223:18;30215:26;;30288:9;30282:4;30278:20;30274:1;30263:9;30259:17;30252:47;30313:131;30439:4;30313:131;;;30305:139;;30209:245;;;;30461:407;;30652:2;30641:9;30637:18;30629:26;;30702:9;30696:4;30692:20;30688:1;30677:9;30673:17;30666:47;30727:131;30853:4;30727:131;;;30719:139;;30623:245;;;;30875:407;;31066:2;31055:9;31051:18;31043:26;;31116:9;31110:4;31106:20;31102:1;31091:9;31087:17;31080:47;31141:131;31267:4;31141:131;;;31133:139;;31037:245;;;;31289:407;;31480:2;31469:9;31465:18;31457:26;;31530:9;31524:4;31520:20;31516:1;31505:9;31501:17;31494:47;31555:131;31681:4;31555:131;;;31547:139;;31451:245;;;;31703:407;;31894:2;31883:9;31879:18;31871:26;;31944:9;31938:4;31934:20;31930:1;31919:9;31915:17;31908:47;31969:131;32095:4;31969:131;;;31961:139;;31865:245;;;;32117:407;;32308:2;32297:9;32293:18;32285:26;;32358:9;32352:4;32348:20;32344:1;32333:9;32329:17;32322:47;32383:131;32509:4;32383:131;;;32375:139;;32279:245;;;;32531:407;;32722:2;32711:9;32707:18;32699:26;;32772:9;32766:4;32762:20;32758:1;32747:9;32743:17;32736:47;32797:131;32923:4;32797:131;;;32789:139;;32693:245;;;;32945:407;;33136:2;33125:9;33121:18;33113:26;;33186:9;33180:4;33176:20;33172:1;33161:9;33157:17;33150:47;33211:131;33337:4;33211:131;;;33203:139;;33107:245;;;;33359:407;;33550:2;33539:9;33535:18;33527:26;;33600:9;33594:4;33590:20;33586:1;33575:9;33571:17;33564:47;33625:131;33751:4;33625:131;;;33617:139;;33521:245;;;;33773:407;;33964:2;33953:9;33949:18;33941:26;;34014:9;34008:4;34004:20;34000:1;33989:9;33985:17;33978:47;34039:131;34165:4;34039:131;;;34031:139;;33935:245;;;;34187:407;;34378:2;34367:9;34363:18;34355:26;;34428:9;34422:4;34418:20;34414:1;34403:9;34399:17;34392:47;34453:131;34579:4;34453:131;;;34445:139;;34349:245;;;;34601:407;;34792:2;34781:9;34777:18;34769:26;;34842:9;34836:4;34832:20;34828:1;34817:9;34813:17;34806:47;34867:131;34993:4;34867:131;;;34859:139;;34763:245;;;;35015:407;;35206:2;35195:9;35191:18;35183:26;;35256:9;35250:4;35246:20;35242:1;35231:9;35227:17;35220:47;35281:131;35407:4;35281:131;;;35273:139;;35177:245;;;;35429:404;;35615:2;35604:9;35600:18;35592:26;;35629:111;35737:1;35726:9;35722:17;35713:6;35629:111;;;35751:72;35819:2;35808:9;35804:18;35795:6;35751:72;;;35586:247;;;;;;35840:209;;35956:2;35945:9;35941:18;35933:26;;35970:69;36036:1;36025:9;36021:17;36012:6;35970:69;;;35927:122;;;;;36056:213;;36174:2;36163:9;36159:18;36151:26;;36188:71;36256:1;36245:9;36241:17;36232:6;36188:71;;;36145:124;;;;;36276:205;;36390:2;36379:9;36375:18;36367:26;;36404:67;36468:1;36457:9;36453:17;36444:6;36404:67;;;36361:120;;;;;36488:256;;36550:2;36544:9;36534:19;;36588:4;36580:6;36576:17;36687:6;36675:10;36672:22;36651:18;36639:10;36636:34;36633:62;36630:2;;;36708:1;36705;36698:12;36630:2;36728:10;36724:2;36717:22;36528:216;;;;;36751:322;;36895:18;36887:6;36884:30;36881:2;;;36927:1;36924;36917:12;36881:2;36994:4;36990:9;36983:4;36975:6;36971:17;36967:33;36959:41;;37058:4;37052;37048:15;37040:23;;36818:255;;;;37080:175;;37190:3;37182:11;;37228:4;37223:3;37219:14;37211:22;;37176:79;;;;37262:169;;37366:3;37358:11;;37404:4;37399:3;37395:14;37387:22;;37352:79;;;;37438:161;;37571:5;37565:12;37555:22;;37536:63;;;;37606:155;;37733:5;37727:12;37717:22;;37698:63;;;;37768:117;;37857:5;37851:12;37841:22;;37822:63;;;;37892:121;;37985:5;37979:12;37969:22;;37950:63;;;;38020:122;;38114:5;38108:12;38098:22;;38079:63;;;;38149:132;;38271:4;38266:3;38262:14;38254:22;;38248:33;;;;38288:126;;38404:4;38399:3;38395:14;38387:22;;38381:33;;;;38422:202;;38576:6;38571:3;38564:19;38613:4;38608:3;38604:14;38589:29;;38557:67;;;;;38633:196;;38781:6;38776:3;38769:19;38818:4;38813:3;38809:14;38794:29;;38762:67;;;;;38838:152;;38942:6;38937:3;38930:19;38979:4;38974:3;38970:14;38955:29;;38923:67;;;;;38999:144;;39134:3;39119:18;;39112:31;;;;;39152:163;;39267:6;39262:3;39255:19;39304:4;39299:3;39295:14;39280:29;;39248:67;;;;;39323:91;;39385:24;39403:5;39385:24;;;39374:35;;39368:46;;;;39421:85;;39494:5;39487:13;39480:21;39469:32;;39463:43;;;;39513:136;;39590:5;39579:16;;39596:48;39638:5;39596:48;;;39573:76;;;;39656:150;;39740:5;39729:16;;39746:55;39795:5;39746:55;;;39723:83;;;;39813:144;;39894:5;39883:16;;39900:52;39946:5;39900:52;;;39877:80;;;;39964:128;;40037:5;40026:16;;40043:44;40081:5;40043:44;;;40020:72;;;;40099:84;;40171:6;40164:5;40160:18;40149:29;;40143:40;;;;40190:121;;40263:42;40256:5;40252:54;40241:65;;40235:76;;;;40318:72;;40380:5;40369:16;;40363:27;;;;40397:81;;40468:4;40461:5;40457:16;40446:27;;40440:38;;;;40485:136;;40577:39;40610:5;40577:39;;;40564:52;;40558:63;;;;40628:150;;40727:46;40767:5;40727:46;;;40714:59;;40708:70;;;;40785:144;;40881:43;40918:5;40881:43;;;40868:56;;40862:67;;;;40936:128;;41024:35;41053:5;41024:35;;;41011:48;;41005:59;;;;41072:268;41137:1;41144:101;41158:6;41155:1;41152:13;41144:101;;;41234:1;41229:3;41225:11;41219:18;41215:1;41210:3;41206:11;41199:39;41180:2;41177:1;41173:10;41168:15;;41144:101;;;41260:6;41257:1;41254:13;41251:2;;;41325:1;41316:6;41311:3;41307:16;41300:27;41251:2;41121:219;;;;;41348:97;;41436:2;41432:7;41427:2;41420:5;41416:14;41412:28;41402:38;;41396:49;;;;41453:106;41537:1;41530:5;41527:12;41517:2;;41543:9;41517:2;41511:48;;41566:113;41657:1;41650:5;41647:12;41637:2;;41663:9;41637:2;41631:48;;41686:110;41774:1;41767:5;41764:12;41754:2;;41780:9;41754:2;41748:48;;41803:102;41883:1;41876:5;41873:12;41863:2;;41889:9;41863:2;41857:48;;41912:117;41981:24;41999:5;41981:24;;;41974:5;41971:35;41961:2;;42020:1;42017;42010:12;41961:2;41955:74;;42036:111;42102:21;42117:5;42102:21;;;42095:5;42092:32;42082:2;;42138:1;42135;42128:12;42082:2;42076:71;;42154:115;42222:23;42239:5;42222:23;;;42215:5;42212:34;42202:2;;42260:1;42257;42250:12;42202:2;42196:73;;42276:117;42345:24;42363:5;42345:24;;;42338:5;42335:35;42325:2;;42384:1;42381;42374:12;42325:2;42319:74;

Swarm Source

bzzr://3ef971ca9b50b55a9132b8d1030f9dbecff0c3c0344644129bfe89dc406f7a78
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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