ETH Price: $3,627.06 (-2.35%)

Token

FrogeX (FROGEX)
 

Overview

Max Total Supply

410,758,768,899.150067678 FROGEX

Holders

568 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$138,253.60

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
238,651,761.827788182 FROGEX

Value
$80.33 ( ~0.0221474005998065 Eth) [0.0581%]
0x53fe1376e947a3a165aa13c5f6fecb95c30c7b2d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

FrogeX is an ETH reflection (rewards) ERC20 Token contract, but features a 40-70% reduction in base transaction costs (gas usage) from competitors , making it the undisputed champion of ETH reflection tokens; as user-friendly to trade with as USDT.

Market

Volume (24H):$48.54
Market Capitalization:$0.00
Circulating Supply:411.00 FROGEX
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0X5FA54FDDF1870C344DBFABB37DFAB8700EC0DEF1-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.00
0.0000000 Eth
$46.04
144,226,464.503 0X5FA54FDDF1870C344DBFABB37DFAB8700EC0DEF1
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
FrogeX

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-23
*/

// SPDX-License-Identifier: NONE

/** This file's constructs, patterns, and usages are proprietary.
    No licenses are granted for any use without the
    written permission of Todd Andrew Durica (@MooncoHodlings).
    Any unlicensed use will be followed up by a law suit.
*/
//  ███████╗██████╗  ██████╗  ██████╗ ███████╗██╗  ██╗
//  ██╔════╝██╔══██╗██╔═══██╗██╔════╝ ██╔════╝╚██╗██╔╝
//  █████╗  ██████╔╝██║   ██║██║  ███╗█████╗   ╚███╔╝
//  ██╔══╝  ██╔══██╗██║   ██║██║   ██║██╔══╝   ██╔██╗
//  ██║     ██║  ██║╚██████╔╝╚██████╔╝███████╗██╔╝ ██╗
//  ╚═╝     ╚═╝  ╚═╝ ╚═════╝  ╚═════╝ ╚══════╝╚═╝  ╚═╝
//    A (far) more efficient ETH Reflection ERC20!
//              Save our rainforests,
//                our biodiversity!
//                Froge revolution.

pragma solidity 0.8.10;

interface IWETH {
  function deposit() external payable;
  function transfer(address to, uint value) external returns (bool);
  function withdraw(uint) external;
}
interface IERC20 {
  function balanceOf(address owner) external view returns (uint);
}
interface IUniV2Factory {
  event PairCreated(address indexed token0, address indexed token1, address pair, uint);
  function getPair(address tokenA, address tokenB) external view returns (address pair);
  function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniV2Pair {
  event Approval(address indexed owner, address indexed spender, uint value);
  event Transfer(address indexed from, address indexed to, uint value);
  function name() external pure returns (string memory);
  function symbol() external pure returns (string memory);
  function decimals() external pure returns (uint8);
  function totalSupply() external view returns (uint);
  function balanceOf(address owner) external view returns (uint);
  function allowance(address owner, address spender) external view returns (uint);
  function approve(address spender, uint value) external returns (bool);
  function transfer(address to, uint value) external returns (bool);
  function transferFrom(address from, address to, uint value) external returns (bool);
  function nonces(address owner) external view returns (uint);
  function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
  event Mint(address indexed sender, uint amount0, uint amount1);
  event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
  event Swap(address indexed sender,uint amount0In,uint amount1In,uint amount0Out,uint amount1Out,address indexed to);
  event Sync(uint112 reserve0, uint112 reserve1);
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function initialize(address, address) external;
}
interface IUniV2Router {
  function factory() external pure returns (address);
  function WETH() external pure returns (address);
  function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
  function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
  function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
  function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
  /*END 01, BEGIN 02*/
  function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IFrogeX {
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event HopEvt(uint256 indexed fxOut,uint256 indexed weiIn);
  event LqtyEvt(uint256 indexed fxOut,uint256 indexed weiOut);
  event MktgEvt(uint256 indexed weiOut);
  event ChtyEvt(uint256 indexed weiOut);
  event SetFees(
    uint16 indexed _ttlFeePctBuys,
    uint16 indexed _ttlFeePctSells,
    uint8 _ethPtnChty,
    uint8 _ethPtnMktg,
    uint8 _tknPtnLqty,
    uint8 _ethPtnLqty,
    uint8 _ethPtnRwds
  );
  event ExcludeFromFees(address indexed account);
  event ExcludeFromRewards(address indexed account);
  event SetBlacklist(address indexed account, bool indexed toggle);
  event SetLockerUnlockDate(uint32 indexed oldUnlockDate,uint32 indexed newUnlockDate);
  event SetMinClaimableDivs(uint64 indexed newMinClaimableDivs);
  event LockerExternalAddLiquidityETH(uint256 indexed fxTokenAmount);
  event LockerExternalRemoveLiquidityETH(uint256 indexed lpTokenAmount);
  event XClaim(address indexed user, uint256 indexed amount);
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  function name() external view returns (string memory);
  function symbol() external view returns (string memory);
  function decimals() external view returns (uint8);
  function balanceOf(address account) external view returns (uint256);
  function totalSupply() external view returns (uint72);
  function xTotalSupply() external view returns (uint72);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function approve(address spender, uint256 amount) external returns (bool);
  function allowance(address owner_, address spender_) external view returns (uint256);
  function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
  function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
  function getUniV2Pair() external view returns (address);
  function getUniV2Router() external view returns (address);
  function getFXSwap() external view returns (address);
  function getConfig() external view returns (
    uint64 _hopThreshold, uint64 _lqtyThreshold, uint32 _lockerUnlockDate,
    uint16 _xGasForClaim, uint64 _xMinClaimableDivs, bool   _tradingEnabled,
    uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint16 _ethPtnChty, uint16 _ethPtnMktg, uint16 _tknPtnLqty,
    uint16 _ethPtnLqty, uint16 _ethPtnRwds
  );
  function getAccount(address account) external view returns (
    uint256 _balance, uint256 _xDivsAvailable, uint256 _xDivsEarnedToDate, uint256 _xDivsWithdrawnToDate,
    bool _isAMMPair, bool _isBlackListedBot, bool _isExcludedFromRwds, bool _isExcludedFromFees
  );
  function xGetDivsAvailable(address acct) external view returns (uint256);
  function xGetDivsEarnedToDate(address acct) external view returns (uint256);
  function xGetDivsWithdrawnToDate(address account) external view returns (uint88);
  function xGetDivsGlobalTotalDist() external view returns (uint88);
  function withdrawCharityFunds(address payable charityBeneficiary) external;
  function withdrawMarketingFunds(address payable marketingBeneficiary) external;
  function lockerAdvanceLock(uint32 nSeconds) external;
  function lockerExternalAddLiquidityETH(uint256 fxTokenAmount) external payable;
  function lockerExternalRemoveLiquidityETH(uint256 lpTokenAmount) external;
  function activate() external;
  function setHopThreshold(uint64 tokenAmt) external;
  function setLqtyThreshold(uint64 weiAmt) external;
  function setAutomatedMarketMakerPair(address pairAddr, bool toggle) external;
  function excludeFromFees(address account) external;
  function excludeFromRewards(address account) external;
  function setBlackList(address account, bool toggle) external;
  function setGasForClaim(uint16 newGasForClaim) external;
  function burnOwnerTokens(uint256 amount) external;
  function renounceOwnership() external;
  function transferOwnership(address newOwner) external;
  function xClaim() external;
  function fxAddAirdrop (
    address[] calldata accts, uint256[] calldata addAmts,
    uint256 tsIncrease, uint256 xtsIncrease
  ) external;
  function fxSubAirdrop (
    address[] calldata accts, uint256[] calldata subAmts,
    uint256 tsDecrease, uint256 xtsDecrease
  ) external;
}
//interface IFXSwap {
//  function swapExactTokensForETHSFOTT(uint amountIn) external;
//  function lockerExternalRemoveLiquidityETHReceiver(uint256 lpTokenAmount, address _owner) external;
//}
contract FXSwap {
  IFrogeX private FX;
  IUniV2Router private UniV2Router;
  IUniV2Pair private UniV2Pair;
  IWETH private WETH;
  bool immutable private orderIsFxWeth;//always sort to FX,WETH
  modifier onlyFX(){require(msg.sender == address(FX), "FXSwap: caller must be FX"); _;}
  constructor(address _FX,address _UniV2Router,address _UniV2Pair,address _WETH){
    FX = IFrogeX(_FX);
    UniV2Router = IUniV2Router(_UniV2Router);
    UniV2Pair = IUniV2Pair(_UniV2Pair);
    WETH = IWETH(_WETH);
    orderIsFxWeth = _FX<_WETH?true:false;
  }
  receive() external payable {
    require(msg.sender == address(WETH), "FXSwap only accepts WETHs ETH");
  }

  // fetches and sorts the reserves for a pair
  function getReserves() private view returns (uint reserveA, uint reserveB) {
    (reserveA, reserveB,) = UniV2Pair.getReserves();
    if(!orderIsFxWeth){(reserveA, reserveB)=(reserveB, reserveA);}
  }

  // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
  function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) private pure returns (uint amountOut) {
    require(amountIn > 0, "FXSwap: INSUFFICIENT_INPUT_AMOUNT");
    require(reserveIn > 0 && reserveOut > 0, "FXSwap: INSUFFICIENT_LIQUIDITY");
    uint amountInWithFee = (amountIn * 997);
    uint numerator = amountInWithFee * reserveOut;
    uint denominator = (reserveIn * 1000) + amountInWithFee;
    amountOut = numerator / denominator;
  }

  function swapExactTokensForETHSFOTT() external onlyFX returns(uint amountOut){
    (uint reserveInput, uint reserveOutput) = getReserves();
    uint amountInput = FX.balanceOf(address(UniV2Pair)) - reserveInput;
    uint amountOutput = getAmountOut(amountInput, reserveInput, reserveOutput);
    UniV2Pair.swap(uint(0), amountOutput, address(this), new bytes(0));
    amountOut = IERC20(address(WETH)).balanceOf(address(this));
    WETH.withdraw(amountOut);
    require(address(this).balance >= amountOut, "FXSwap:sendValue: insuff.bal");
    (bool success,) = address(FX).call{value:amountOut}("");
    require(success, "FXSwap:ETH_TRANSFER_FAILED");
  }

  function lockerExternalRemoveLiquidityETHReceiver(uint256 lpTokenAmount, address _owner) external onlyFX {
    require(UniV2Pair.balanceOf(address(FX)) >= lpTokenAmount, "FXSwap: insuff. lpt bal");
    UniV2Pair.transferFrom(address(FX),address(UniV2Pair), lpTokenAmount);
    //pair.burn() here sends both tokens to this contract (contrast nonETH direct to caller)
    (uint amt0, uint amt1) = UniV2Pair.burn(address(this));
    (uint amtFX, uint amtETH) = address(this) < address(WETH) ? (amt0, amt1) : (amt1, amt0);
    require(FX.balanceOf(address(this)) >= amtFX, "FXSwap: insuff. frogex tokens");
    FX.transfer(_owner,  amtFX);
    WETH.withdraw(amtETH);
    require(address(this).balance >= amtETH, "FXSwap:sendValue: insuff.bal");
    (bool success,) = _owner.call{value:amtETH}("");
    require(success, "FXSwap:ETH_TRANSFER_FAILED");
  }

}


/*
  2**8     0:               256.0
  2**16    0:            65_536.0  (65.5k)
  2**24    0:        16_777_216.0  (16.7mn)
  2**32    0:     4_294_967_296.0  (4.2bn)

  2**32   -9:                 4.294967296
  2**32  -18:                 0.000000004294967296
  2**48   -9:           281_474.976710656
  2**48  -18:                 0.000281474976710656
  2**56   -9:        72_057_594.037927936
  2**56  -18:                 0.072057594037927936
  2**64   -9:    18_446_744_073.709551616         (18.4bn)
  2**64  -18:                18.446744073709551616
  2**72   -9: 4_722_366_482_869.645213696         (4.7tr)
          338824521750836606685 000000000
  2**72  -18:             4_722.366482869645213696

  2**80   -9:                   1_208_925_819_614_629.174706176           (1.2 quadrillion)
  2**80  -18:                               1_208_925.819614629174706176
  2**88   -9:                 309_485_009_821_345_068.724781056           (309 quadrillion)
  2**88  -18:                             309_485_009.821345068724781056  (309.4mn)
  2**96   -9:              79_228_162_514_264_337_593.543950336           (79.2 quintillion)
  2**96  -18:                          79_228_162_514.264337593543950336  (79.2bn)
  2**128  -9: 340_282_366_920_938_463_463_374_607_431.768211456           (some crazy number)
  2**128 -18:             340_282_366_920_938_463_463.374607431768211456  (340 quintillion)
  2**256 115792089237316195423570985008687907853269984665640564039457584007913129639935
*/

contract FrogeX is IFrogeX {
  struct AcctInfo {
    uint128 _balance;
    uint88 xDivsWithdrawnToDate;
    bool isAMMPair;
    bool isBlackListedBot;
    bool isExcludedFromRwds;
    bool isExcludedFromFees;//also exempts max sell limit
    //^^ 248
  }
  struct Config {
    uint64 hopThreshold;
    uint64 lqtyThreshold;
    uint32 lockerUnlockDate;
    uint16 xGasForClaim;//65536 max
    uint64 xMinClaimableDivs;//18.4 ETH max setting
    bool tradingEnabled;// u8
    //^^ 248

    uint16 ttlFeePctBuys;  // 500
    uint16 ttlFeePctSells; // 800
    uint8 ethPtnChty;    // 200
    uint8 ethPtnMktg;    // 100
    uint8 tknPtnLqty; // 40
    uint8 ethPtnLqty;    // 100
    uint8 ethPtnRwds;    // 400
    //^^ 112
  }
  uint256 private xDivsPerShare;

  uint72 private _totalSupply;//must be 72+
  uint72 private _xTotalSupply;//must be 72+
  uint88 private xDivsGlobalTotalDist;//needs 80 or higher
  uint8 private constant _FALSE = 1;
  uint8 private constant _TRUE = 2;
  uint8 private sellEvtEntrancy;
  //^^ 256

  uint136 private constant xMagnitude = 2**128;
  uint48 private constant xMinForDivs = 100000 * (10**9);//100k fx, u48~281_474 max
  uint72 private pond_HOPPING_POWER;
  //^^ 256

  uint72 private pond_ES_CHTY_LILY;
  uint72 private pond_ES_MKTG_LILY;
  uint72 private pond_ES_LQTY_LILY;//can be 64 if certain never over 18.4eth
  //^^ 216

  uint64 private pond_TS_LQTY_LILY;
  address private _owner;
  //^^ 224

  IUniV2Router private UniV2Router;
  IUniV2Pair private UniV2Pair;
  IWETH private WETH;
  FXSwap private FxSwap;

  Config private config;

  mapping(address=>AcctInfo) private _a;
  mapping(address => mapping(address => uint256)) private _allowances;
  mapping(address => int256) private xDivsCorrections;

  modifier onlyOwner(){require(_owner == msg.sender,"onlyOwner"); _;}

  constructor (address routerAddress, uint72 initLqtyAmt) {
    _transferOwnership(msg.sender);
    sellEvtEntrancy = _FALSE;
    unchecked{config.hopThreshold = 100_000_000 * (10**9);}//100mn fx
    unchecked{config.lqtyThreshold = 25 * (10**16);}//.25 eth
    //to be advanced upon successful launch
    config.lockerUnlockDate = uint32(block.timestamp);
    config.xGasForClaim = 3000;
    config.xMinClaimableDivs = 600_000_000_000_000;//about 5.5 USD at time of deployment
    config.ttlFeePctBuys  =  500;
    config.ttlFeePctSells = 800;

    config.ethPtnChty     = 20;
    config.ethPtnMktg     = 10;
    config.tknPtnLqty     = 6;
    config.ethPtnLqty     = 9;
    config.ethPtnRwds     = 40;

    IUniV2Router _uniswapV2Router = IUniV2Router(routerAddress);
    UniV2Router = _uniswapV2Router;
    address wethAddr = _uniswapV2Router.WETH();
    WETH = IWETH(wethAddr);

    // Create uniswap pair
    address pairAddr = IUniV2Factory(_uniswapV2Router.factory()).createPair(address(this), wethAddr);
    UniV2Pair = IUniV2Pair(pairAddr);
    _a[pairAddr].isAMMPair = true;

    FxSwap = new FXSwap(address(this),routerAddress,pairAddr,wethAddr);

    // exclude from receiving dividends
    _a[pairAddr].isExcludedFromRwds = true;
    _a[address(this)].isExcludedFromRwds = true;
    _a[address(FxSwap)].isExcludedFromRwds = true;
    _a[address(_uniswapV2Router)].isExcludedFromRwds = true;
    _a[address(0x000000000000000000000000000000000000dEaD)].isExcludedFromRwds = true;
    _a[address(0)].isExcludedFromRwds = true;

    // exclude from paying fees or having max transaction amount
    _a[address(this)].isExcludedFromFees = true;
    _a[address(FxSwap)].isExcludedFromFees = true;
    /* _mint for liquidity pool, after which _owner tokens are burned */
    unchecked{_totalSupply += initLqtyAmt;}
    unchecked{_a[_owner]._balance += uint128(initLqtyAmt);}
  }

  function withdrawCharityFunds(address payable charityBeneficiary) external onlyOwner{
    require(charityBeneficiary != address(0), "zero address disallowed");
    emit ChtyEvt(pond_ES_CHTY_LILY);
    (bool success,) = charityBeneficiary.call{value: pond_ES_CHTY_LILY}("");
    require(success, "call to beneficiary failed");
    pond_ES_CHTY_LILY = 0;
  }
  function withdrawMarketingFunds(address payable marketingBeneficiary) external onlyOwner{
    require(marketingBeneficiary != address(0), "zero address disallowed");
    emit MktgEvt(pond_ES_MKTG_LILY);
    (bool success,) = marketingBeneficiary.call{value: pond_ES_MKTG_LILY}("");
    require(success, "call to beneficiary failed");
    pond_ES_MKTG_LILY = 0;
  }

  function _transfer(address from, address to, uint256 amount) internal {
    require(_a[from]._balance >= amount, "insuff. balance for transfer");

    Config memory c = config;
    require(amount > 0,"amount must be above zero");
    require(from != address(0),"from cannot be zero address");
    require(to != address(0),"to cannot be zero address");
    require(!_a[to].isBlackListedBot, "nobots");
    require(!_a[msg.sender].isBlackListedBot, "nobots");
    require(!_a[from].isBlackListedBot, "nobots");

    // 0:buys, 1: sells, 2: xfers
    uint txType = _a[from].isAMMPair ? 0 : _a[to].isAMMPair ? 1 : 2;

    //hardstop check
    require(c.tradingEnabled || msg.sender == _owner, "tradingEnabled hardstop");

    // HOP / ADDLIQUIDITY
    if(txType==1 && sellEvtEntrancy != _TRUE){
      sellEvtEntrancy = _TRUE;
      if(pond_ES_LQTY_LILY >= c.lqtyThreshold){
        uint _pond_TS_LQTY = pond_TS_LQTY_LILY;
        uint _pond_ES_LQTY = pond_ES_LQTY_LILY;
        if(_pond_TS_LQTY == 0){
          pond_ES_MKTG_LILY += uint72(_pond_ES_LQTY);
          pond_ES_LQTY_LILY = 0;
        }else{
          lockerInternalAddLiquidityETHBlind(_pond_TS_LQTY,_pond_ES_LQTY);
          pond_TS_LQTY_LILY = 0;
          pond_ES_LQTY_LILY = 0;
          emit LqtyEvt(_pond_TS_LQTY, _pond_ES_LQTY);
        }
      }
      // FROGE HOP EVENT
      else {
        uint HOPPING_POWER = pond_HOPPING_POWER;
        if (HOPPING_POWER >= c.hopThreshold) {
          uint _ethPtnTotal;
          uint _ovlPtnTotal;
        unchecked{_ethPtnTotal = c.ethPtnChty + c.ethPtnMktg + c.ethPtnLqty + c.ethPtnRwds;}
        unchecked{_ovlPtnTotal = _ethPtnTotal + c.tknPtnLqty;}
          /* Set aside some tokens for liquidity.*/
          uint magLqTknPct = (uint(c.tknPtnLqty) * 10000) / _ovlPtnTotal;
          uint lqtyTokenAside = (HOPPING_POWER * magLqTknPct) / 10000;
          pond_TS_LQTY_LILY += uint64(lqtyTokenAside);

          // contract itself sells its tokens and recieves ETH,
          _transferSuper(address(this), address(UniV2Pair), (HOPPING_POWER - lqtyTokenAside));
          uint createdEth = FxSwap.swapExactTokensForETHSFOTT();
          emit HopEvt(HOPPING_POWER, createdEth);

          uint pond_ES_CHTY = (createdEth * c.ethPtnChty) / _ethPtnTotal;
          uint pond_ES_MKTG = (createdEth * c.ethPtnMktg) / _ethPtnTotal;
          uint pond_ES_LQTY = (createdEth * c.ethPtnLqty) / _ethPtnTotal;
          uint pond_ES_RWDS = createdEth - pond_ES_CHTY - pond_ES_MKTG - pond_ES_LQTY;

          //rewards has no LILY - we assign the ETH immediately
          xDivsPerShare += ((pond_ES_RWDS * xMagnitude) / _xTotalSupply);
          xDivsGlobalTotalDist += uint88(pond_ES_RWDS);

          pond_ES_CHTY_LILY += uint72(pond_ES_CHTY);
          pond_ES_MKTG_LILY += uint72(pond_ES_MKTG);
          pond_ES_LQTY_LILY += uint72(pond_ES_LQTY);

          pond_HOPPING_POWER = 0;
        }
      }
      // END: FROGE HOP EVENT
      sellEvtEntrancy = _FALSE;
    }
    // SEND

    /* fees are collected as tokens held by the contract until a threshold is met.
       fees are only split into portions during the liquidation*/
    if (txType!=2//no fees on simple transfers
    && !_a[from].isExcludedFromFees
    && !_a[to].isExcludedFromFees) {
      uint feePct = txType==0 ? c.ttlFeePctBuys : c.ttlFeePctSells;
      uint feesAmount = (amount * feePct)/10000;
      amount -= feesAmount;
      pond_HOPPING_POWER += uint72(feesAmount);
      //xTotalSupply may or may not be adjusted here
      // depending on rewards eligibility for "from" address
      //No xmint - contract is always excluded from rewards
      xBurn(from, feesAmount);
      //give our contract some tokens as a fee
      _transferSuper(from, address(this), feesAmount);
    }

    //perform the intended transfer, where amount may or may not have been modified via applyFees
    xBurn(from, amount);
    xMint(to, amount);
    _transferSuper(from, to, amount);

    xProcessAccount(payable(from));
    xProcessAccount(payable(to));
  }
  /* END transfer() */

  /* BEGIN LOCKER & LIQUIDITY OPS  */
  function lockerAdvanceLock(uint32 nSeconds) external onlyOwner {
    //Maximum setting: 4294967296 (February 7, 2106 6:28:16 AM)
    uint32 oldUnlockDate = config.lockerUnlockDate;
    uint32 newUnlockDate = oldUnlockDate + nSeconds;
    config.lockerUnlockDate = newUnlockDate;
    emit SetLockerUnlockDate(oldUnlockDate, newUnlockDate);
  }
  function lockerExternalAddLiquidityETH(uint256 fxTokenAmount) external payable onlyOwner{
    require(fxTokenAmount>0 && msg.value>0,"must supply both fx and eth");
    _transferSuper(_owner, address(this), fxTokenAmount);
    lockerInternalAddLiquidityETHOptimal(fxTokenAmount,msg.value);
    emit LockerExternalAddLiquidityETH(fxTokenAmount);
  }
  function lockerExternalRemoveLiquidityETH(uint256 lpTokenAmount) external onlyOwner {
    require(config.lockerUnlockDate < block.timestamp,"unlockDate not yet reached");
    require(UniV2Pair.balanceOf(address(this)) >= lpTokenAmount,"not enough lpt held by contract");
    // address(this) approves FxSwap to transit to the pair contract
    //  the specified PairToken Amount it currently holds
    UniV2Pair.approve(address(FxSwap), lpTokenAmount /*~uint256(0)*/);
    FxSwap.lockerExternalRemoveLiquidityETHReceiver(lpTokenAmount, _owner);
    emit LockerExternalRemoveLiquidityETH(lpTokenAmount);
  }

  function lockerInternalAddLiquidityETHOptimal(uint256 fxTokenAmount,uint256 weiAmount) private{
    address addrWETH = address(WETH);
    address addrFlowx = address(this);
    (uint rsvFX, uint rsvETH,) = UniV2Pair.getReserves();
    if(addrFlowx>addrWETH){(rsvFX,rsvETH)=(rsvETH,rsvFX);}
    uint amountA;
    uint amountB;
    if (rsvFX == 0 && rsvETH == 0) {
      (amountA, amountB) = (fxTokenAmount, weiAmount);
    } else {
      uint amountADesired = fxTokenAmount;
      uint amountBDesired = weiAmount;
      uint amountBOptimal = (amountADesired * rsvETH) / rsvFX;//require(amountA > 0)
      if (amountBOptimal <= amountBDesired) {
        (amountA, amountB) = (amountADesired, amountBOptimal);
      }
      else {
        uint amountAOptimal = (amountBDesired * rsvFX) / rsvETH;//require(amountA > 0)
        require(amountAOptimal <= amountADesired, "optimal liquidity calc failed");
        (amountA, amountB) = (amountAOptimal, amountBDesired);
      }
    }
    lockerInternalAddLiquidityETHBlind(amountA, amountB);
  }
  function lockerInternalAddLiquidityETHBlind(uint256 fxTokenAmount,uint256 weiAmount) private{
    address addrPair = address(UniV2Pair);
    address addrFlowx = address(this);
    _transferSuper(addrFlowx,addrPair,fxTokenAmount);
    WETH.deposit{value: weiAmount}();
    require(WETH.transfer(addrPair, weiAmount), "failed WETH xfer to lp contract");//(address to, uint value)
    UniV2Pair.mint(addrFlowx);
  }

  /* END LOCKER & LIQUIDITY OPS */

  /* BEGIN FX GENERAL CONTROLS */
  function activate() external onlyOwner {
    config.tradingEnabled = true;}
  function setHopThreshold(uint64 tokenAmt) external onlyOwner {
    require(tokenAmt>=(10 * (10**9)), "out of accepted range");
    require(tokenAmt<=(2_000_000_000 * (10**9)), "out of accepted range");
    config.hopThreshold = tokenAmt;
  }
  function setLqtyThreshold(uint64 weiAmt) external onlyOwner {
    require(weiAmt>=100, "out of accepted range");
    config.lqtyThreshold = weiAmt;
  }
  function setFees (uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint8 _ethPtnChty, uint8 _ethPtnMktg, uint8 _tknPtnLqty, uint8 _ethPtnLqty, uint8 _ethPtnRwds
  ) external onlyOwner {
    require(
      _ttlFeePctBuys>=10 && _ttlFeePctBuys<=1000
      && _ttlFeePctSells>=10 && _ttlFeePctSells<=1600,
      "Fee pcts out of accepted range"
    );
    require(
      ((_tknPtnLqty>0 && _ethPtnLqty>0)||(_tknPtnLqty==0 && _ethPtnLqty==0))
      && _ethPtnChty<=100
      && _ethPtnMktg<=100
      && _tknPtnLqty<=100
      && _ethPtnLqty<=100
      && _ethPtnRwds<=100,
      "Portions outside accepted range"
    );
    config.ttlFeePctBuys  = _ttlFeePctBuys;
    config.ttlFeePctSells = _ttlFeePctSells;
    config.ethPtnChty = _ethPtnChty;
    config.ethPtnMktg = _ethPtnMktg;
    config.tknPtnLqty = _tknPtnLqty;
    config.ethPtnLqty = _ethPtnLqty;
    config.ethPtnRwds = _ethPtnRwds;
    emit SetFees(_ttlFeePctBuys, _ttlFeePctSells, _ethPtnChty, _ethPtnMktg, _tknPtnLqty, _ethPtnLqty, _ethPtnRwds);
  }
  function setAutomatedMarketMakerPair(address pairAddr, bool toggle) external onlyOwner {
    require(pairAddr != address(UniV2Pair),"original pair is constant");
    require(_a[pairAddr].isAMMPair != toggle,"setting already exists");
    _a[pairAddr].isAMMPair = toggle;
    if(toggle && !_a[pairAddr].isExcludedFromRwds){
      _excludeFromRewards(pairAddr);
    }
  }
  function excludeFromFees(address account) external onlyOwner {
    require(!_a[account].isExcludedFromFees,"already excluded");
    _a[account].isExcludedFromFees = true;
    emit ExcludeFromFees(account);
  }
  function excludeFromRewards(address account) external onlyOwner {
    _excludeFromRewards(account);
  }
  function _excludeFromRewards(address account) private onlyOwner {
    //irreversibly and completely removes from rewards mechanism
    require(!_a[account].isExcludedFromRwds,"already excluded");
    _a[account].isExcludedFromRwds = true;
    xProcessAccount(payable(account));
    if(_a[account]._balance>xMinForDivs){
      _xTotalSupply -= uint72(_a[account]._balance);
      delete xDivsCorrections[account];
    }
    emit ExcludeFromRewards(account);
  }
  function setBlackList(address account, bool toggle) external onlyOwner {
    if(toggle) {
      require(account != address(UniV2Router)
      && account != address(UniV2Pair)
      && account != address(FxSwap)
      && account != address(_owner)
      ,"ineligible for blacklist");
      _a[account].isBlackListedBot = true;
    }else{_a[account].isBlackListedBot = false;}
    emit SetBlacklist(account, toggle);
  }
  function setGasForClaim(uint16 newGasForClaim) external onlyOwner {
    require(newGasForClaim>3000,"not enough gasForClaim");
    config.xGasForClaim = uint16(newGasForClaim);
  }
  function setMinClaimableDivs(uint64 newMinClaimableDivs) external onlyOwner {
    require(newMinClaimableDivs>0,"out of accepted range");
    config.xMinClaimableDivs = newMinClaimableDivs;
    emit SetMinClaimableDivs(newMinClaimableDivs);
  }
  function getConfig() external view returns (
    uint64 _hopThreshold, uint64 _lqtyThreshold, uint32 _lockerUnlockDate,
    uint16 _xGasForClaim, uint64 _xMinClaimableDivs, bool   _tradingEnabled,
    uint16 _ttlFeePctBuys, uint16 _ttlFeePctSells,
    uint16 _ethPtnChty, uint16 _ethPtnMktg, uint16 _tknPtnLqty,
    uint16 _ethPtnLqty, uint16 _ethPtnRwds
  ) {
    Config memory c = config;
    _hopThreshold = c.hopThreshold;
    _lqtyThreshold = c.lqtyThreshold;
    _lockerUnlockDate = c.lockerUnlockDate;
    _xGasForClaim = c.xGasForClaim;
    _xMinClaimableDivs = c.xMinClaimableDivs;
    _tradingEnabled = c.tradingEnabled;
    _ttlFeePctBuys = c.ttlFeePctBuys;
    _ttlFeePctSells = c.ttlFeePctSells;
    _ethPtnChty = c.ethPtnChty;
    _ethPtnMktg = c.ethPtnMktg;
    _tknPtnLqty = c.tknPtnLqty;
    _ethPtnLqty = c.ethPtnLqty;
    _ethPtnRwds = c.ethPtnRwds;
  }
  function getAccount(address account) external view returns (
    uint256 _balance, uint256 _xDivsAvailable, uint256 _xDivsEarnedToDate, uint256 _xDivsWithdrawnToDate,
    bool _isAMMPair, bool _isBlackListedBot, bool _isExcludedFromRwds, bool _isExcludedFromFees
  ){
    _balance = _a[account]._balance;
    _xDivsAvailable = xDivsAvailable(account);
    _xDivsEarnedToDate = xDivsEarnedToDate(account);
    _xDivsWithdrawnToDate = _a[account].xDivsWithdrawnToDate;
    _isAMMPair = _a[account].isAMMPair;
    _isBlackListedBot = _a[account].isBlackListedBot;
    _isExcludedFromRwds = _a[account].isExcludedFromRwds;
    _isExcludedFromFees = _a[account].isExcludedFromFees;
  }
  function xGetDivsAvailable(address acct) external view returns (uint256){
    return xDivsAvailable(acct);
  }
  function xGetDivsEarnedToDate(address acct) external view returns (uint256){
    return xDivsEarnedToDate(acct);
  }
  function xGetDivsWithdrawnToDate(address account) external view returns (uint88){
    return _a[account].xDivsWithdrawnToDate;
  }
  function xGetDivsGlobalTotalDist() external view returns (uint88){
    return xDivsGlobalTotalDist;
  }
  function getUniV2Pair() external view returns (address){return address(UniV2Pair);}
  function getUniV2Router() external view returns (address){return address(UniV2Router);}
  function getFXSwap() external view returns (address){return address(FxSwap);}

  function burnOwnerTokens(uint256 amount) external onlyOwner {
    _burn(msg.sender, amount);
  }
  /*********BEGIN ERC20**********/
  function name() external pure returns (string memory) {return "FrogeX";}
  function symbol() external pure returns (string memory) {return "FROGEX";}
  function decimals() external pure returns (uint8) {return 9;}
  function owner() external view returns (address) {return _owner;}
  function totalSupply() external view returns (uint72) {return _totalSupply;}
  function xTotalSupply() external view returns (uint72) {return _xTotalSupply;}
  function balanceOf(address account) external view returns (uint256) {
    return uint256(_a[account]._balance);
  }
  function transfer(address recipient, uint256 amount) external returns (bool) {
    _transfer(msg.sender, recipient, amount); return true;
  }
  function allowance(address owner_, address spender_) external view returns (uint256) {
    return _allowances[owner_][spender_];
  }
  function approve(address spender, uint256 amount) external returns (bool) {
    _approve(msg.sender, spender, amount); return true;
  }
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
    _transfer(sender, recipient, amount);
    uint256 currentAllowance = _allowances[sender][msg.sender];
    require(currentAllowance >= amount, "amount exceeds allowance");
  unchecked {
    _approve(sender, msg.sender, currentAllowance - amount);
  }
    return true;
  }
  function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
    _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
    return true;
  }
  function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
    uint256 currentAllowance = _allowances[msg.sender][spender];
    require(currentAllowance >= subtractedValue, "decreased allowance below zero");
  unchecked {
    _approve(msg.sender, spender, currentAllowance - subtractedValue);
  }
    return true;
  }
  function _transferSuper(address sender, address recipient, uint256 amount) private {
    require(sender != address(0), "transfer from the zero address");
    require(recipient != address(0), "transfer to the zero address");
    uint256 senderBalance = _a[sender]._balance;
    require(senderBalance >= amount, "transfer amount exceeds balance");
  unchecked {
    _a[sender]._balance = uint128(senderBalance - amount);
  }
    _a[recipient]._balance += uint128(amount);
    emit Transfer(sender, recipient, amount);
  }
  function _burn(address account, uint256 amount) private {
    require(account != address(0), "burn from the zero address");
    uint256 accountBalance = _a[account]._balance;
    require(accountBalance >= amount, "burn amount exceeds balance");
  unchecked {
    _a[account]._balance = uint128(accountBalance - amount);
  }
    _totalSupply -= uint72(amount);
    emit Transfer(account, address(0), amount);
  }
  function _approve(address owner_, address spender_, uint256 amount) private {
    require(owner_ != address(0), "approve from zero address");
    require(spender_ != address(0), "approve to zero address");
    _allowances[owner_][spender_] = amount;
    emit Approval(owner_, spender_, amount);
  }
  /*********END ERC20**********/

  /*********BEGIN OWNABLE**********/
  function renounceOwnership() external onlyOwner {
    _transferOwnership(address(0));
  }
  function transferOwnership(address newOwner) external onlyOwner {
    require(newOwner != address(0), "FxOwn: no zero address");
    require(newOwner != address(_owner), "FxOwn: already owner");
    _transferOwnership(newOwner);
  }
  function _transferOwnership(address newOwner) private {
    address oldOwner = _owner;
    _a[newOwner].isExcludedFromRwds = true;
    _a[newOwner].isExcludedFromFees = true;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
  /*********END OWNABLE**********/

  /*********REWARDS FUNCTIONALITY**********/

  receive() external payable {
    require(_xTotalSupply > 0,"X GON GIVE IT TO YA");
    if (msg.value > 0 && msg.sender != address(FxSwap) && msg.sender != address(UniV2Router)) {
      xDivsPerShare = xDivsPerShare + ((msg.value * xMagnitude) / _xTotalSupply);
      xDivsGlobalTotalDist += uint88(msg.value);
    }
  }

  function xDivsAvailable(address acct) private view returns (uint256){
    return xDivsEarnedToDate(acct) - uint256(_a[acct].xDivsWithdrawnToDate);
  }
  function xDivsEarnedToDate(address acct) private view returns (uint256){
    uint256 currShare =
    (_a[acct].isExcludedFromRwds||_a[acct]._balance<xMinForDivs)
        ?0:_a[acct]._balance;
    return uint256(
      int256(xDivsPerShare * currShare) +
      xDivsCorrections[acct]
    ) / xMagnitude;
  }

  //xMint MUST be called BEFORE intended updates to balances
  function xMint(address acct, uint256 mintAmt) private {
    if(!_a[acct].isExcludedFromRwds){
      uint256 acctSrcBal = _a[acct]._balance;
      if((acctSrcBal + mintAmt) > xMinForDivs){
        mintAmt += (acctSrcBal<xMinForDivs)?acctSrcBal:0;
        _xTotalSupply += uint72(mintAmt);
        xDivsCorrections[acct] -= int256(xDivsPerShare * mintAmt);
      }
    }
  }
  //xBurn MUST be called BEFORE intended updates to balances
  function xBurn(address acct, uint256 burnAmt) private {
    if(!_a[acct].isExcludedFromRwds){
      uint256 acctSrcBal = _a[acct]._balance;
      if(acctSrcBal > xMinForDivs){
        uint256 acctDestBal = acctSrcBal - burnAmt;
        burnAmt += (acctDestBal<xMinForDivs)?acctDestBal:0;
        _xTotalSupply -= uint72(burnAmt);
        xDivsCorrections[acct] += int256(xDivsPerShare * burnAmt);
      }
    }
  }

  function xProcessAccount(address payable account) private returns (bool successful){
    uint256 _divsAvailable = xDivsAvailable(account);
    if (_divsAvailable > config.xMinClaimableDivs) {
      _a[account].xDivsWithdrawnToDate = uint88(_a[account].xDivsWithdrawnToDate + _divsAvailable);
      emit XClaim(account, _divsAvailable);
      (bool success,) = account.call{value: _divsAvailable, gas: config.xGasForClaim}("");
      if (success) {
        return true;
      }else{
        _a[account].xDivsWithdrawnToDate = uint88(_a[account].xDivsWithdrawnToDate - _divsAvailable);
        return false;
      }
    }else{return false;}
  }
  function xClaim() external {
    xProcessAccount(payable(msg.sender));
  }

  function fxAddAirdrop (
    address[] calldata accts, uint256[] calldata addAmts,
    uint256 tsIncrease, uint256 xtsIncrease
  ) external {
    require(_owner == msg.sender && !config.tradingEnabled,"onlyOwner and pre-launch");
    for (uint i; i < accts.length; i++) {
      unchecked{_a[accts[i]]._balance += uint128(addAmts[i]);}
    }
    unchecked{_totalSupply += uint72(tsIncrease);}
    unchecked{_xTotalSupply += uint72(xtsIncrease);}
  }
  function fxSubAirdrop (
    address[] calldata accts, uint256[] calldata subAmts,
    uint256 tsDecrease, uint256 xtsDecrease
  ) external {
    require(_owner == msg.sender && !config.tradingEnabled,"onlyOwner and pre-launch");
    for (uint i; i < accts.length; i++) {
      unchecked{_a[accts[i]]._balance -= uint128(subAmts[i]);}
    }
    unchecked{_totalSupply -= uint72(tsDecrease);}
    unchecked{_xTotalSupply -= uint72(xtsDecrease);}
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"uint72","name":"initLqtyAmt","type":"uint72"}],"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":"uint256","name":"weiOut","type":"uint256"}],"name":"ChtyEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxOut","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"weiIn","type":"uint256"}],"name":"HopEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxTokenAmount","type":"uint256"}],"name":"LockerExternalAddLiquidityETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"}],"name":"LockerExternalRemoveLiquidityETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fxOut","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"weiOut","type":"uint256"}],"name":"LqtyEvt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"weiOut","type":"uint256"}],"name":"MktgEvt","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":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"toggle","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"indexed":true,"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"indexed":false,"internalType":"uint8","name":"_ethPtnChty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnMktg","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_tknPtnLqty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnLqty","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"_ethPtnRwds","type":"uint8"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"oldUnlockDate","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"newUnlockDate","type":"uint32"}],"name":"SetLockerUnlockDate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint64","name":"newMinClaimableDivs","type":"uint64"}],"name":"SetMinClaimableDivs","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"XClaim","type":"event"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnOwnerTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accts","type":"address[]"},{"internalType":"uint256[]","name":"addAmts","type":"uint256[]"},{"internalType":"uint256","name":"tsIncrease","type":"uint256"},{"internalType":"uint256","name":"xtsIncrease","type":"uint256"}],"name":"fxAddAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accts","type":"address[]"},{"internalType":"uint256[]","name":"subAmts","type":"uint256[]"},{"internalType":"uint256","name":"tsDecrease","type":"uint256"},{"internalType":"uint256","name":"xtsDecrease","type":"uint256"}],"name":"fxSubAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_xDivsAvailable","type":"uint256"},{"internalType":"uint256","name":"_xDivsEarnedToDate","type":"uint256"},{"internalType":"uint256","name":"_xDivsWithdrawnToDate","type":"uint256"},{"internalType":"bool","name":"_isAMMPair","type":"bool"},{"internalType":"bool","name":"_isBlackListedBot","type":"bool"},{"internalType":"bool","name":"_isExcludedFromRwds","type":"bool"},{"internalType":"bool","name":"_isExcludedFromFees","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConfig","outputs":[{"internalType":"uint64","name":"_hopThreshold","type":"uint64"},{"internalType":"uint64","name":"_lqtyThreshold","type":"uint64"},{"internalType":"uint32","name":"_lockerUnlockDate","type":"uint32"},{"internalType":"uint16","name":"_xGasForClaim","type":"uint16"},{"internalType":"uint64","name":"_xMinClaimableDivs","type":"uint64"},{"internalType":"bool","name":"_tradingEnabled","type":"bool"},{"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"internalType":"uint16","name":"_ethPtnChty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnMktg","type":"uint16"},{"internalType":"uint16","name":"_tknPtnLqty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnLqty","type":"uint16"},{"internalType":"uint16","name":"_ethPtnRwds","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFXSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"nSeconds","type":"uint32"}],"name":"lockerAdvanceLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fxTokenAmount","type":"uint256"}],"name":"lockerExternalAddLiquidityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpTokenAmount","type":"uint256"}],"name":"lockerExternalRemoveLiquidityETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddr","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_ttlFeePctBuys","type":"uint16"},{"internalType":"uint16","name":"_ttlFeePctSells","type":"uint16"},{"internalType":"uint8","name":"_ethPtnChty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnMktg","type":"uint8"},{"internalType":"uint8","name":"_tknPtnLqty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnLqty","type":"uint8"},{"internalType":"uint8","name":"_ethPtnRwds","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newGasForClaim","type":"uint16"}],"name":"setGasForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"tokenAmt","type":"uint64"}],"name":"setHopThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"weiAmt","type":"uint64"}],"name":"setLqtyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newMinClaimableDivs","type":"uint64"}],"name":"setMinClaimableDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint72","name":"","type":"uint72"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"charityBeneficiary","type":"address"}],"name":"withdrawCharityFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingBeneficiary","type":"address"}],"name":"withdrawMarketingFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acct","type":"address"}],"name":"xGetDivsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acct","type":"address"}],"name":"xGetDivsEarnedToDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xGetDivsGlobalTotalDist","outputs":[{"internalType":"uint88","name":"","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"xGetDivsWithdrawnToDate","outputs":[{"internalType":"uint88","name":"","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xTotalSupply","outputs":[{"internalType":"uint72","name":"","type":"uint72"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162005494380380620054948339810160408190526200003491620004c6565b6200003f3362000428565b6001805460ff60e81b1916600160e81b179055600980546744364c5bb000017760a31b600160a01b600160f01b031963ffffffff4216600160801b026001600160a01b0319938416176f03782dace9d90000016345785d8a0000171617909155600a8054682809060a14032001f46001600160481b0319909116179055600580546001600160a01b038516921682179055604080516315ab88c960e31b815290518492600092909163ad5c4648916004818101926020929091908290030181865afa15801562000113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013991906200050e565b905080600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c991906200050e565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af11580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024091906200050e565b600680546001600160a01b0383166001600160a01b031990911681179091556000908152600b602052604090819020805460ff60d81b1916600160d81b17905551909150309086908390859062000297906200049b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620002dc573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b039283161781559181166000908152600b60205260408082208054600160e81b60ff60e81b19918216811790925530845282842080548216831781558654861685528385208054831684179055978516845282842080548216831790557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac341580548216831790557fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76805490911690911790558554600160f01b60ff60f01b1991821681179097559354831682528082208054909416909517909255600180546001600160481b031981166001600160481b039182168801821617909155600454909116825292902080546001600160801b03198116949093166001600160801b039384160190921692909217905550620005339050565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610df280620046a283390190565b80516001600160a01b0381168114620004c157600080fd5b919050565b60008060408385031215620004da57600080fd5b620004e583620004a9565b60208401519092506001600160481b03811681146200050357600080fd5b809150509250929050565b6000602082840312156200052157600080fd5b6200052c82620004a9565b9392505050565b61415f80620005436000396000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063c3f909d4116100b6578063e57f14e11161007a578063e57f14e114610a22578063eaebf7d514610a42578063ed0711bf14610a62578063eeb4210514610ac0578063f2fde38b14610ae5578063fbcbc0f114610b0557600080fd5b8063c3f909d4146107e2578063d4988af71461097e578063dae3b92f1461099c578063dd62ed3e146109bc578063e4baab0514610a0257600080fd5b806395d89b411161010857806395d89b4114610713578063994148bd146107425780639a7a23d614610762578063a457c2d714610782578063a9059cbb146107a2578063bc6f80cf146107c257600080fd5b8063715018a61461067057806379441ae91461068557806379edf711146106b757806384938efa146106d55780638da5cb5b146106f557600080fd5b806333639948116101dd5780636201d66a116101a15780636201d66a14610591578063667b142f146105b157806367043aec146105d157806368092bd9146105f15780636aac81e91461061157806370a082311461063157600080fd5b806333639948146104fe578063395093511461051e5780633f90e0391461053e57806349f9f4d014610551578063521356281461057157600080fd5b806315ee28641161022457806315ee28641461043d57806318160ddd1461046b57806323b872dd1461049d5780632c4e8f0a146104bd578063313ce567146104e257600080fd5b806304b6ee9e1461038257806306fdde0314610397578063095ea7b3146103d85780630f15f4c014610408578063111e03761461041d57600080fd5b3661037d57600154600160481b90046001600160481b03166102bf5760405162461bcd60e51b81526020600482015260136024820152725820474f4e204749564520495420544f20594160681b60448201526064015b60405180910390fd5b6000341180156102da57506008546001600160a01b03163314155b80156102f157506005546001600160a01b03163314155b1561037b57600154600160481b90046001600160481b0316610317600160801b34613abf565b6103219190613ade565b60005461032e9190613b00565b60005560018054349190601290610356908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b031602179055505b005b600080fd5b34801561038e57600080fd5b5061037b610b68565b3480156103a357600080fd5b5060408051808201909152600681526508ce4dececab60d31b60208201525b6040516103cf9190613b43565b60405180910390f35b3480156103e457600080fd5b506103f86103f3366004613bad565b610b74565b60405190151581526020016103cf565b34801561041457600080fd5b5061037b610b8a565b34801561042957600080fd5b5061037b610438366004613bd9565b610bc9565b34801561044957600080fd5b5061045d610458366004613bd9565b610bfc565b6040519081526020016103cf565b34801561047757600080fd5b506001546001600160481b03165b6040516001600160481b0390911681526020016103cf565b3480156104a957600080fd5b506103f86104b8366004613bf6565b610c0d565b3480156104c957600080fd5b50600154600160481b90046001600160481b0316610485565b3480156104ee57600080fd5b50604051600981526020016103cf565b34801561050a57600080fd5b5061037b610519366004613c4e565b610ca6565b34801561052a57600080fd5b506103f8610539366004613bad565b610d40565b61037b61054c366004613c69565b610d7c565b34801561055d57600080fd5b5061037b61056c366004613c69565b610e51565b34801561057d57600080fd5b5061037b61058c366004613c82565b610e85565b34801561059d57600080fd5b5061037b6105ac366004613c82565b610f31565b3480156105bd57600080fd5b5061037b6105cc366004613cf6565b610fdb565b3480156105dd57600080fd5b5061037b6105ec366004613bd9565b611135565b3480156105fd57600080fd5b5061037b61060c366004613d81565b6112c0565b34801561061d57600080fd5b5061037b61062c366004613bd9565b61142a565b34801561063d57600080fd5b5061045d61064c366004613bd9565b6001600160a01b03166000908152600b60205260409020546001600160801b031690565b34801561067c57600080fd5b5061037b6115af565b34801561069157600080fd5b506008546001600160a01b03165b6040516001600160a01b0390911681526020016103cf565b3480156106c357600080fd5b506006546001600160a01b031661069f565b3480156106e157600080fd5b5061037b6106f0366004613dcc565b6115e5565b34801561070157600080fd5b506004546001600160a01b031661069f565b34801561071f57600080fd5b5060408051808201909152600681526508ca49e8e8ab60d31b60208201526103c2565b34801561074e57600080fd5b5061037b61075d366004613c69565b611687565b34801561076e57600080fd5b5061037b61077d366004613d81565b6118db565b34801561078e57600080fd5b506103f861079d366004613bad565b611a45565b3480156107ae57600080fd5b506103f86107bd366004613bad565b611ad0565b3480156107ce57600080fd5b5061037b6107dd366004613cf6565b611add565b3480156107ee57600080fd5b506108f7604080516101a0810182526009546001600160401b03808216808452600160401b80840483166020860181905263ffffffff600160801b86041696860187905261ffff600160a01b8604811660608801819052600160b01b87049095166080880181905260ff600160f01b9097048716151560a08901819052600a5480841660c08b0181905262010000820490941660e08b0181905264010000000082048a166101008c018190526501000000000083048b166101208d01819052660100000000000084048c166101408e01819052600160381b85048d166101608f0181905299909404909b16610180909c018c9052979c959b9a9899939892979496909591929091565b604080516001600160401b039e8f1681529c8e1660208e015263ffffffff909b169a8c019a909a5261ffff98891660608c01529a90961660808a015293151560a089015291851660c0880152841660e0870152831661010086015282166101208501528116610140840152928316610160830152919091166101808201526101a0016103cf565b34801561098a57600080fd5b506005546001600160a01b031661069f565b3480156109a857600080fd5b5061045d6109b7366004613bd9565b611c37565b3480156109c857600080fd5b5061045d6109d7366004613de9565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a0e57600080fd5b5061037b610a1d366004613e28565b611c42565b348015610a2e57600080fd5b5061037b610a3d366004613bd9565b611f0f565b348015610a4e57600080fd5b5061037b610a5d366004613c82565b611fee565b348015610a6e57600080fd5b50610aa8610a7d366004613bd9565b6001600160a01b03166000908152600b6020526040902054600160801b90046001600160581b031690565b6040516001600160581b0390911681526020016103cf565b348015610acc57600080fd5b50600154600160901b90046001600160581b0316610aa8565b348015610af157600080fd5b5061037b610b00366004613bd9565b612074565b348015610b1157600080fd5b50610b25610b20366004613bd9565b61214b565b60408051988952602089019790975295870194909452606086019290925215156080850152151560a0840152151560c0830152151560e0820152610100016103cf565b610b71336121ed565b50565b6000610b813384846123be565b50600192915050565b6004546001600160a01b03163314610bb45760405162461bcd60e51b81526004016102b690613eae565b6009805460ff60f01b1916600160f01b179055565b6004546001600160a01b03163314610bf35760405162461bcd60e51b81526004016102b690613eae565b610b71816124cc565b6000610c0782612678565b92915050565b6000610c1a8484846126b4565b6001600160a01b0384166000908152600c6020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e6365000000000000000060448201526064016102b6565b610c9b85338584036123be565b506001949350505050565b6004546001600160a01b03163314610cd05760405162461bcd60e51b81526004016102b690613eae565b610bb88161ffff1611610d1e5760405162461bcd60e51b81526020600482015260166024820152756e6f7420656e6f75676820676173466f72436c61696d60501b60448201526064016102b6565b6009805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b336000818152600c602090815260408083206001600160a01b03871684529091528120549091610b81918590610d77908690613b00565b6123be565b6004546001600160a01b03163314610da65760405162461bcd60e51b81526004016102b690613eae565b600081118015610db65750600034115b610e025760405162461bcd60e51b815260206004820152601b60248201527f6d75737420737570706c7920626f746820667820616e6420657468000000000060448201526064016102b6565b600454610e19906001600160a01b03163083613094565b610e23813461327e565b60405181907f44fa45b943408523104e44d70520e98729e4cd1625dccf1330d48a674550284290600090a250565b6004546001600160a01b03163314610e7b5760405162461bcd60e51b81526004016102b690613eae565b610b713382613404565b6004546001600160a01b03163314610eaf5760405162461bcd60e51b81526004016102b690613eae565b6402540be400816001600160401b03161015610edd5760405162461bcd60e51b81526004016102b690613ed1565b671bc16d674ec80000816001600160401b03161115610f0e5760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff19166001600160401b0392909216919091179055565b6004546001600160a01b03163314610f5b5760405162461bcd60e51b81526004016102b690613eae565b6000816001600160401b031611610f845760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff60b01b1916600160b01b6001600160401b038416908102919091179091556040517fffbe4e88fcb3e0dc64fbd507ef323ba3322894779c5d889da9779db9db385c1090600090a250565b6004546001600160a01b031633148015610fff5750600954600160f01b900460ff16155b6110465760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b858110156110e35784848281811061106357611063613f00565b90506020020135600b600089898581811061108057611080613f00565b90506020020160208101906110959190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b039182169390930116919091179055806110db81613f16565b915050611049565b5060018054600160481b6001600160481b03808316909501851668ffffffffffffffffff198316811782900486169094019094169093026001600160901b031990931690911791909117905550505050565b6004546001600160a01b0316331461115f5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166111af5760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160481b9091046001600160481b0316907fca468cabdc08e335f5734071244314ce8a7e25f07ea6d0edffa9088985c1a7d890600090a26002546040516000916001600160a01b03841691600160481b9091046001600160481b0316908381818185875af1925050503d806000811461124b576040519150601f19603f3d011682016040523d82523d6000602084013e611250565b606091505b50509050806112a15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805471ffffffffffffffffff00000000000000000019169055565b6004546001600160a01b031633146112ea5760405162461bcd60e51b81526004016102b690613eae565b80156113ca576005546001600160a01b0383811691161480159061131c57506006546001600160a01b03838116911614155b801561133657506008546001600160a01b03838116911614155b801561135057506004546001600160a01b03838116911614155b61139c5760405162461bcd60e51b815260206004820152601860248201527f696e656c696769626c6520666f7220626c61636b6c697374000000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b1916600160e01b1790556113ee565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b191690555b604051811515906001600160a01b038416907ffed07c88bd5d31bfd0ce77ed7ffdc74a163a61cfc5edcec801e3a7954e33d6e790600090a35050565b6004546001600160a01b031633146114545760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166114a45760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160901b9091046001600160481b0316907f220ccb49a0062b9cb9e8bbb3003f1140743b01e1e0a10d411f4d859814c9def990600090a26002546040516000916001600160a01b03841691600160901b9091046001600160481b0316908381818185875af1925050503d8060008114611540576040519150601f19603f3d011682016040523d82523d6000602084013e611545565b606091505b50509050806115965760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805468ffffffffffffffffff60901b19169055565b6004546001600160a01b031633146115d95760405162461bcd60e51b81526004016102b690613eae565b6115e36000613584565b565b6004546001600160a01b0316331461160f5760405162461bcd60e51b81526004016102b690613eae565b600954600160801b900463ffffffff16600061162b8383613f31565b6009805463ffffffff808416600160801b810263ffffffff60801b199093169290921790925560405192935091908416907f21188e256f47aecca77d04435990811b0672c18a4914dde8846995054eebc6ea90600090a3505050565b6004546001600160a01b031633146116b15760405162461bcd60e51b81526004016102b690613eae565b60095442600160801b90910463ffffffff16106117105760405162461bcd60e51b815260206004820152601a60248201527f756e6c6f636b44617465206e6f7420796574207265616368656400000000000060448201526064016102b6565b6006546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190613f50565b10156117ca5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206c70742068656c6420627920636f6e74726163740060448201526064016102b6565b60065460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190613f69565b5060085460048054604051631669426360e11b81529182018490526001600160a01b03908116602483015290911690632cd284c690604401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b50506040518392507f25d42ebc6735db35705e6961e314a232d7b4169a06ef1cffc9ce46fa56274f1f9150600090a250565b6004546001600160a01b031633146119055760405162461bcd60e51b81526004016102b690613eae565b6006546001600160a01b03838116911614156119635760405162461bcd60e51b815260206004820152601960248201527f6f726967696e616c207061697220697320636f6e7374616e740000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b602052604090205460ff600160d81b90910416151581151514156119d35760405162461bcd60e51b815260206004820152601660248201527573657474696e6720616c72656164792065786973747360501b60448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805482158015600160d81b0260ff60d81b19909216919091179091558190611a3357506001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16155b15611a4157611a41826124cc565b5050565b336000908152600c602090815260408083206001600160a01b038616845290915281205482811015611ab95760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f000060448201526064016102b6565b611ac633858584036123be565b5060019392505050565b6000610b813384846126b4565b6004546001600160a01b031633148015611b015750600954600160f01b900460ff16155b611b485760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b85811015611be557848482818110611b6557611b65613f00565b90506020020135600b6000898985818110611b8257611b82613f00565b9050602002016020810190611b979190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b03918216939093031691909117905580611bdd81613f16565b915050611b4b565b50600180546001600160901b031981166001600160481b03808316959095038516908117600160481b68ffffffffffffffffff1990931690911782900485169390930390931690920217905550505050565b6000610c07826135f7565b6004546001600160a01b03163314611c6c5760405162461bcd60e51b81526004016102b690613eae565b600a8761ffff1610158015611c8757506103e88761ffff1611155b8015611c985750600a8661ffff1610155b8015611caa57506106408661ffff1611155b611cf65760405162461bcd60e51b815260206004820152601e60248201527f4665652070637473206f7574206f662061636365707465642072616e6765000060448201526064016102b6565b60008360ff16118015611d0c575060008260ff16115b80611d24575060ff8316158015611d24575060ff8216155b8015611d34575060648560ff1611155b8015611d44575060648460ff1611155b8015611d54575060648360ff1611155b8015611d64575060648260ff1611155b8015611d74575060648160ff1611155b611dc05760405162461bcd60e51b815260206004820152601f60248201527f506f7274696f6e73206f7574736964652061636365707465642072616e67650060448201526064016102b6565b86600960010160006101000a81548161ffff021916908361ffff16021790555085600960010160026101000a81548161ffff021916908361ffff16021790555084600960010160046101000a81548160ff021916908360ff16021790555083600960010160056101000a81548160ff021916908360ff16021790555082600960010160066101000a81548160ff021916908360ff16021790555081600960010160076101000a81548160ff021916908360ff16021790555080600960010160086101000a81548160ff021916908360ff1602179055508561ffff168761ffff167fccfc65ebd0bf621f9eaa538dc799d705cd494a1c608da5e256f04ba395fc63688787878787604051611efe95949392919060ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b60405180910390a350505050505050565b6004546001600160a01b03163314611f395760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160f01b900460ff1615611f9c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000818152600b6020526040808220805460ff60f01b1916600160f01b179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6004546001600160a01b031633146120185760405162461bcd60e51b81526004016102b690613eae565b6064816001600160401b031610156120425760405162461bcd60e51b81526004016102b690613ed1565b600980546001600160401b03909216600160401b026fffffffffffffffff000000000000000019909216919091179055565b6004546001600160a01b0316331461209e5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166120ed5760405162461bcd60e51b815260206004820152601660248201527546784f776e3a206e6f207a65726f206164647265737360501b60448201526064016102b6565b6004546001600160a01b03828116911614156121425760405162461bcd60e51b8152602060048201526014602482015273233c27bbb71d1030b63932b0b23c9037bbb732b960611b60448201526064016102b6565b610b7181613584565b6001600160a01b0381166000908152600b60205260408120546001600160801b03169080808080808061217d89612678565b9650612188896135f7565b6001600160a01b039099166000908152600b602052604090205497999698976001600160581b03600160801b8204169760ff600160d81b830481169850600160e01b830481169750600160e81b830481169650600160f01b9092049091169350915050565b6000806121f983612678565b600954909150600160b01b90046001600160401b03168111156123b5576001600160a01b0383166000908152600b602052604090205461224a908290600160801b90046001600160581b0316613b00565b6001600160a01b0384166000818152600b602052604080822080546001600160581b0395909516600160801b026affffffffffffffffffffff60801b1990951694909417909355915183927fc7627c78ddc5b824e2bed4b122ec1c29cd2baba6b22141de00fd53d76d7d95b491a36009546040516000916001600160a01b03861691600160a01b90910461ffff16908490600060405180830381858888f193505050503d8060008114612319576040519150601f19603f3d011682016040523d82523d6000602084013e61231e565b606091505b505090508015612332575060019392505050565b6001600160a01b0384166000908152600b6020526040902054612366908390600160801b90046001600160581b0316613f86565b6001600160a01b039094166000908152600b6020526040812080546001600160581b0396909616600160801b026affffffffffffffffffffff60801b1990961695909517909455509192915050565b50600092915050565b6001600160a01b0383166124145760405162461bcd60e51b815260206004820152601960248201527f617070726f76652066726f6d207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152601760248201527f617070726f766520746f207a65726f206164647265737300000000000000000060448201526064016102b6565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6004546001600160a01b031633146124f65760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160e81b900460ff16156125595760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000908152600b60205260409020805460ff60e81b1916600160e81b17905561258b816121ed565b506001600160a01b0381166000908152600b6020526040902054655af3107a40006001600160801b039091161115612641576001600160a01b0381166000908152600b6020526040902054600180546001600160801b0390921691600990612604908490600160481b90046001600160481b0316613f9d565b82546001600160481b039182166101009390930a9283029190920219909116179055506001600160a01b0381166000908152600d60205260408120555b6040516001600160a01b038216907f9dc0c5d829ba95d4a3aa3e40791b3e0ff125f876788532b9f7f6eb543d8dfbd690600090a250565b6001600160a01b0381166000908152600b6020526040812054600160801b90046001600160581b03166126aa836135f7565b610c079190613f86565b6001600160a01b0383166000908152600b60205260409020546001600160801b03168111156127255760405162461bcd60e51b815260206004820152601c60248201527f696e737566662e2062616c616e636520666f72207472616e736665720000000060448201526064016102b6565b604080516101a0810182526009546001600160401b038082168352600160401b8083048216602085015263ffffffff600160801b8404169484019490945261ffff600160a01b830481166060850152600160b01b8304909116608084015260ff600160f01b9092048216151560a0840152600a5480821660c085015262010000810490911660e0840152640100000000810482166101008401526501000000000081048216610120840152660100000000000081048216610140840152600160381b81048216610160840152929092049091166101808201528161284b5760405162461bcd60e51b815260206004820152601960248201527f616d6f756e74206d7573742062652061626f7665207a65726f0000000000000060448201526064016102b6565b6001600160a01b0384166128a15760405162461bcd60e51b815260206004820152601b60248201527f66726f6d2063616e6e6f74206265207a65726f2061646472657373000000000060448201526064016102b6565b6001600160a01b0383166128f75760405162461bcd60e51b815260206004820152601960248201527f746f2063616e6e6f74206265207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040902054600160e01b900460ff16156129375760405162461bcd60e51b81526004016102b690613fc5565b336000908152600b6020526040902054600160e01b900460ff161561296e5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040902054600160e01b900460ff16156129ae5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040812054600160d81b900460ff16612a0a576001600160a01b0384166000908152600b6020526040902054600160d81b900460ff16612a03576002612a0d565b6001612a0d565b60005b60ff1690508160a0015180612a2c57506004546001600160a01b031633145b612a785760405162461bcd60e51b815260206004820152601760248201527f74726164696e67456e61626c6564206861726473746f7000000000000000000060448201526064016102b6565b806001148015612a955750600154600160e81b900460ff16600214155b15612f59576001805460ff60e81b1916600160e91b17905560208201516003546001600160401b039091166001600160481b0390911610612ba9576003546001600160401b03600160481b820416906001600160481b031681612b505780600260128282829054906101000a90046001600160481b0316612b169190613fe5565b82546001600160481b039182166101009390930a9283029190920219909116179055506003805468ffffffffffffffffff19169055612ba2565b612b5a82826136d2565b6003805470ffffffffffffffffffffffffffffffffff19169055604051819083907f89c317d1c4e867f8b24228dc26f4a7b04cda28583224244b4b7f62fddf8a946990600090a35b5050612f45565b60025482516001600160481b03909116906001600160401b03168110612f4357610180830151610160840151610120850151610100860151610140870151910190910190910160ff9081169116808201906000908290612c0b90612710613abf565b612c159190613ade565b90506000612710612c268387613abf565b612c309190613ade565b905080600360098282829054906101000a90046001600160401b0316612c569190614007565b82546001600160401b039182166101009390930a928302919092021990911617905550600654612c9a9030906001600160a01b0316612c958489613f86565b613094565b60085460408051632e12e5c160e01b815290516000926001600160a01b031691632e12e5c1916004808301926020929190829003018187875af1158015612ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d099190613f50565b905080867fceb50488716f263ac0cac1905289143c4915f2233e600e9e8ecaf75056d52d7660405160405180910390a360008589610100015160ff1683612d509190613abf565b612d5a9190613ade565b90506000868a610120015160ff1684612d739190613abf565b612d7d9190613ade565b90506000878b610160015160ff1685612d969190613abf565b612da09190613ade565b905060008183612db08688613f86565b612dba9190613f86565b612dc49190613f86565b600154909150600160481b90046001600160481b0316612de8600160801b83613abf565b612df29190613ade565b600080828254612e029190613b00565b909155505060018054829190601290612e2c908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b0316021790555083600260098282829054906101000a90046001600160481b0316612e749190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555082600260128282829054906101000a90046001600160481b0316612ebc9190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600360008282829054906101000a90046001600160481b0316612f049190613fe5565b82546001600160481b039182166101009390930a928302919092021990911617905550506002805468ffffffffffffffffff1916905550505050505050505b505b6001805460ff60e81b1916600160e81b1790555b80600214158015612f8a57506001600160a01b0385166000908152600b6020526040902054600160f01b900460ff16155b8015612fb657506001600160a01b0384166000908152600b6020526040902054600160f01b900460ff16155b1561305a5760008115612fcd578260e00151612fd3565b8260c001515b61ffff1690506000612710612fe88387613abf565b612ff29190613ade565b9050612ffe8186613f86565b60028054919650829160009061301e9084906001600160481b0316613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555061304c878261388e565b613057873083613094565b50505b613064858461388e565b61306e848461399f565b613079858585613094565b613082856121ed565b5061308c846121ed565b505050505050565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016102b6565b6001600160a01b0382166131405760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016102b6565b6001600160a01b0383166000908152600b60205260409020546001600160801b0316818110156131b25760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016102b6565b6001600160a01b038481166000908152600b602052604080822080546001600160801b0319168686036001600160801b0390811691909117909155928616825281208054859391929161320791859116614029565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327091815260200190565b60405180910390a350505050565b60075460065460408051630240bc6b60e21b815290516001600160a01b0393841693309360009384939190921691630902f1ac9160048083019260609291908290030181865afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fa9190614062565b506001600160701b031691506001600160701b03169150836001600160a01b0316836001600160a01b0316111561332d57905b6000808315801561333c575082155b1561334b5750869050856133f0565b878760008661335a8785613abf565b6133649190613ade565b905081811161337b579193509091508290826133ec565b6000866133888985613abf565b6133929190613ade565b9050838111156133e45760405162461bcd60e51b815260206004820152601d60248201527f6f7074696d616c206c69717569646974792063616c63206661696c656400000060448201526064016102b6565b945090925082905b5050505b6133fa82826136d2565b5050505050505050565b6001600160a01b03821661345a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e2066726f6d20746865207a65726f206164647265737300000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020546001600160801b0316818110156134cc5760405162461bcd60e51b815260206004820152601b60248201527f6275726e20616d6f756e7420657863656564732062616c616e6365000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040812080546001600160801b0319168484036001600160801b03161790556001805484929061351a9084906001600160481b0316613f9d565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555060006001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124bf91815260200190565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600b60205260408120548190600160e81b900460ff168061364f57506001600160a01b0383166000908152600b6020526040902054655af3107a40006001600160801b03909116105b61367a576001600160a01b0383166000908152600b60205260409020546001600160801b031661367d565b60005b6001600160a01b0384166000908152600d602052604081205490546001600160801b03929092169250600160801b916136b7908490613abf565b6136c191906140a9565b6136cb9190613ade565b9392505050565b6006546001600160a01b0316306136ea818386613094565b600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b81526001600160a01b03878116600483015260248201899052909116935063a9059cbb925060440190506020604051808303816000875af11580156137a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cb9190613f69565b6138175760405162461bcd60e51b815260206004820152601f60248201527f6661696c65642057455448207866657220746f206c7020636f6e74726163740060448201526064016102b6565b6006546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303816000875af1158015613863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138879190613f50565b5050505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a400081111561399a5760006138f18383613f86565b9050655af3107a40008110613907576000613909565b805b6139139084613b00565b925082600160098282829054906101000a90046001600160481b03166139399190613f9d565b92506101000a8154816001600160481b0302191690836001600160481b031602179055508260005461396b9190613abf565b6001600160a01b0385166000908152600d6020526040812080549091906139939084906140a9565b9091555050505b505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a40006139f98383613b00565b111561399a57655af3107a40008110613a13576000613a15565b805b613a1f9083613b00565b915081600160098282829054906101000a90046001600160481b0316613a459190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600054613a779190613abf565b6001600160a01b0384166000908152600d602052604081208054909190613a9f9084906140ea565b9091555050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ad957613ad9613aa9565b500290565b600082613afb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613b1357613b13613aa9565b500190565b60006001600160581b03808316818516808303821115613b3a57613b3a613aa9565b01949350505050565b600060208083528351808285015260005b81811015613b7057858101830151858201604001528201613b54565b81811115613b82576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7157600080fd5b60008060408385031215613bc057600080fd5b8235613bcb81613b98565b946020939093013593505050565b600060208284031215613beb57600080fd5b81356136cb81613b98565b600080600060608486031215613c0b57600080fd5b8335613c1681613b98565b92506020840135613c2681613b98565b929592945050506040919091013590565b803561ffff81168114613c4957600080fd5b919050565b600060208284031215613c6057600080fd5b6136cb82613c37565b600060208284031215613c7b57600080fd5b5035919050565b600060208284031215613c9457600080fd5b81356001600160401b03811681146136cb57600080fd5b60008083601f840112613cbd57600080fd5b5081356001600160401b03811115613cd457600080fd5b6020830191508360208260051b8501011115613cef57600080fd5b9250929050565b60008060008060008060808789031215613d0f57600080fd5b86356001600160401b0380821115613d2657600080fd5b613d328a838b01613cab565b90985096506020890135915080821115613d4b57600080fd5b50613d5889828a01613cab565b979a9699509760408101359660609091013595509350505050565b8015158114610b7157600080fd5b60008060408385031215613d9457600080fd5b8235613d9f81613b98565b91506020830135613daf81613d73565b809150509250929050565b63ffffffff81168114610b7157600080fd5b600060208284031215613dde57600080fd5b81356136cb81613dba565b60008060408385031215613dfc57600080fd5b8235613e0781613b98565b91506020830135613daf81613b98565b803560ff81168114613c4957600080fd5b600080600080600080600060e0888a031215613e4357600080fd5b613e4c88613c37565b9650613e5a60208901613c37565b9550613e6860408901613e17565b9450613e7660608901613e17565b9350613e8460808901613e17565b9250613e9260a08901613e17565b9150613ea060c08901613e17565b905092959891949750929550565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b6020808252601590820152746f7574206f662061636365707465642072616e676560581b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613f2a57613f2a613aa9565b5060010190565b600063ffffffff808316818516808303821115613b3a57613b3a613aa9565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b81516136cb81613d73565b600082821015613f9857613f98613aa9565b500390565b60006001600160481b0383811690831681811015613fbd57613fbd613aa9565b039392505050565b6020808252600690820152656e6f626f747360d01b604082015260600190565b60006001600160481b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160401b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160801b03808316818516808303821115613b3a57613b3a613aa9565b80516001600160701b0381168114613c4957600080fd5b60008060006060848603121561407757600080fd5b6140808461404b565b925061408e6020850161404b565b9150604084015161409e81613dba565b809150509250925092565b600080821280156001600160ff1b03849003851316156140cb576140cb613aa9565b600160ff1b83900384128116156140e4576140e4613aa9565b50500190565b60008083128015600160ff1b85018412161561410857614108613aa9565b6001600160ff1b038401831381161561412357614123613aa9565b5050039056fea2646970667358221220ac449eb9a8783422cc3f46408651ff5d65150194a01a33b8d0c1adb6390e5f5f64736f6c634300080a003360a060405234801561001057600080fd5b50604051610df2380380610df283398101604081905261002f916100b3565b600080546001600160a01b038087166001600160a01b0319928316811790935560018054878316908416179055600280548683169084161790556003805491851691909216811790915511610085576000610088565b60015b15156080525061010792505050565b80516001600160a01b03811681146100ae57600080fd5b919050565b600080600080608085870312156100c957600080fd5b6100d285610097565b93506100e060208601610097565b92506100ee60408601610097565b91506100fc60608601610097565b905092959194509250565b608051610cd061012260003960006109650152610cd06000f3fe60806040526004361061002d5760003560e01c80632cd284c6146100985780632e12e5c1146100b857600080fd5b36610093576003546001600160a01b031633146100915760405162461bcd60e51b815260206004820152601d60248201527f465853776170206f6e6c7920616363657074732057455448732045544800000060448201526064015b60405180910390fd5b005b600080fd5b3480156100a457600080fd5b506100916100b3366004610a93565b6100df565b3480156100c457600080fd5b506100cd6105a4565b60405190815260200160405180910390f35b6000546001600160a01b031633146101355760405162461bcd60e51b815260206004820152601960248201527808cb0a6eec2e07440c6c2d8d8cae440daeae6e840c4ca408cb603b1b6044820152606401610088565b6002546000546040516370a0823160e01b81526001600160a01b039182166004820152849291909116906370a0823190602401602060405180830381865afa158015610185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a99190610acf565b10156101f75760405162461bcd60e51b815260206004820152601760248201527f4658537761703a20696e737566662e206c70742062616c0000000000000000006044820152606401610088565b6002546000546040516323b872dd60e01b81526001600160a01b03918216600482015291166024820181905260448201849052906323b872dd906064016020604051808303816000875af1158015610253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102779190610ae8565b5060025460405163226bf2d160e21b815230600482015260009182916001600160a01b03909116906389afcb449060240160408051808303816000875af11580156102c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ea9190610b11565b600354919350915060009081906001600160a01b0316301061030d578284610310565b83835b6000546040516370a0823160e01b815230600482015292945090925083916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610360573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103849190610acf565b10156103d25760405162461bcd60e51b815260206004820152601d60248201527f4658537761703a20696e737566662e2066726f67657820746f6b656e730000006044820152606401610088565b60005460405163a9059cbb60e01b81526001600160a01b038781166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104499190610ae8565b50600354604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561049057600080fd5b505af11580156104a4573d6000803e3d6000fd5b50505050804710156104f85760405162461bcd60e51b815260206004820152601c60248201527f4658537761703a73656e6456616c75653a20696e737566662e62616c000000006044820152606401610088565b6000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114610545576040519150601f19603f3d011682016040523d82523d6000602084013e61054a565b606091505b505090508061059b5760405162461bcd60e51b815260206004820152601a60248201527f4658537761703a4554485f5452414e534645525f4641494c45440000000000006044820152606401610088565b50505050505050565b600080546001600160a01b031633146105fb5760405162461bcd60e51b815260206004820152601960248201527808cb0a6eec2e07440c6c2d8d8cae440daeae6e840c4ca408cb603b1b6044820152606401610088565b6000806106066108d8565b600080546002546040516370a0823160e01b81526001600160a01b03918216600482015294965092945090928592909116906370a0823190602401602060405180830381865afa15801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190610acf565b61068c9190610b4b565b9050600061069b82858561098e565b600254604080516000808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f916106e0918590309060248101610b62565b600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b50506003546040516370a0823160e01b81523060048201526001600160a01b0390911692506370a082319150602401602060405180830381865afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e9190610acf565b600354604051632e1a7d4d60e01b8152600481018390529196506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050508447101561082d5760405162461bcd60e51b815260206004820152601c60248201527f4658537761703a73656e6456616c75653a20696e737566662e62616c000000006044820152606401610088565b600080546040516001600160a01b039091169087908381818185875af1925050503d806000811461087a576040519150601f19603f3d011682016040523d82523d6000602084013e61087f565b606091505b50509050806108d05760405162461bcd60e51b815260206004820152601a60248201527f4658537761703a4554485f5452414e534645525f4641494c45440000000000006044820152606401610088565b505050505090565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190610bf1565b506001600160701b0391821693501690507f000000000000000000000000000000000000000000000000000000000000000061098a57905b9091565b60008084116109e95760405162461bcd60e51b815260206004820152602160248201527f4658537761703a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b6064820152608401610088565b6000831180156109f95750600082115b610a455760405162461bcd60e51b815260206004820152601e60248201527f4658537761703a20494e53554646494349454e545f4c495155494449545900006044820152606401610088565b6000610a53856103e5610c41565b90506000610a618483610c41565b9050600082610a72876103e8610c41565b610a7c9190610c60565b9050610a888183610c78565b979650505050505050565b60008060408385031215610aa657600080fd5b8235915060208301356001600160a01b0381168114610ac457600080fd5b809150509250929050565b600060208284031215610ae157600080fd5b5051919050565b600060208284031215610afa57600080fd5b81518015158114610b0a57600080fd5b9392505050565b60008060408385031215610b2457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b600082821015610b5d57610b5d610b35565b500390565b84815260006020858184015260018060a01b038516604084015260806060840152835180608085015260005b81811015610baa5785810183015185820160a001528201610b8e565b81811115610bbc57600060a083870101525b50601f01601f19169290920160a0019695505050505050565b80516001600160701b0381168114610bec57600080fd5b919050565b600080600060608486031215610c0657600080fd5b610c0f84610bd5565b9250610c1d60208501610bd5565b9150604084015163ffffffff81168114610c3657600080fd5b809150509250925092565b6000816000190483118215151615610c5b57610c5b610b35565b500290565b60008219821115610c7357610c73610b35565b500190565b600082610c9557634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122030a880777b528dc886cd44823da20dc151dbd0bf0ac554c080673c1ef60137db64736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000098a7d9b8314c0000

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063c3f909d4116100b6578063e57f14e11161007a578063e57f14e114610a22578063eaebf7d514610a42578063ed0711bf14610a62578063eeb4210514610ac0578063f2fde38b14610ae5578063fbcbc0f114610b0557600080fd5b8063c3f909d4146107e2578063d4988af71461097e578063dae3b92f1461099c578063dd62ed3e146109bc578063e4baab0514610a0257600080fd5b806395d89b411161010857806395d89b4114610713578063994148bd146107425780639a7a23d614610762578063a457c2d714610782578063a9059cbb146107a2578063bc6f80cf146107c257600080fd5b8063715018a61461067057806379441ae91461068557806379edf711146106b757806384938efa146106d55780638da5cb5b146106f557600080fd5b806333639948116101dd5780636201d66a116101a15780636201d66a14610591578063667b142f146105b157806367043aec146105d157806368092bd9146105f15780636aac81e91461061157806370a082311461063157600080fd5b806333639948146104fe578063395093511461051e5780633f90e0391461053e57806349f9f4d014610551578063521356281461057157600080fd5b806315ee28641161022457806315ee28641461043d57806318160ddd1461046b57806323b872dd1461049d5780632c4e8f0a146104bd578063313ce567146104e257600080fd5b806304b6ee9e1461038257806306fdde0314610397578063095ea7b3146103d85780630f15f4c014610408578063111e03761461041d57600080fd5b3661037d57600154600160481b90046001600160481b03166102bf5760405162461bcd60e51b81526020600482015260136024820152725820474f4e204749564520495420544f20594160681b60448201526064015b60405180910390fd5b6000341180156102da57506008546001600160a01b03163314155b80156102f157506005546001600160a01b03163314155b1561037b57600154600160481b90046001600160481b0316610317600160801b34613abf565b6103219190613ade565b60005461032e9190613b00565b60005560018054349190601290610356908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b031602179055505b005b600080fd5b34801561038e57600080fd5b5061037b610b68565b3480156103a357600080fd5b5060408051808201909152600681526508ce4dececab60d31b60208201525b6040516103cf9190613b43565b60405180910390f35b3480156103e457600080fd5b506103f86103f3366004613bad565b610b74565b60405190151581526020016103cf565b34801561041457600080fd5b5061037b610b8a565b34801561042957600080fd5b5061037b610438366004613bd9565b610bc9565b34801561044957600080fd5b5061045d610458366004613bd9565b610bfc565b6040519081526020016103cf565b34801561047757600080fd5b506001546001600160481b03165b6040516001600160481b0390911681526020016103cf565b3480156104a957600080fd5b506103f86104b8366004613bf6565b610c0d565b3480156104c957600080fd5b50600154600160481b90046001600160481b0316610485565b3480156104ee57600080fd5b50604051600981526020016103cf565b34801561050a57600080fd5b5061037b610519366004613c4e565b610ca6565b34801561052a57600080fd5b506103f8610539366004613bad565b610d40565b61037b61054c366004613c69565b610d7c565b34801561055d57600080fd5b5061037b61056c366004613c69565b610e51565b34801561057d57600080fd5b5061037b61058c366004613c82565b610e85565b34801561059d57600080fd5b5061037b6105ac366004613c82565b610f31565b3480156105bd57600080fd5b5061037b6105cc366004613cf6565b610fdb565b3480156105dd57600080fd5b5061037b6105ec366004613bd9565b611135565b3480156105fd57600080fd5b5061037b61060c366004613d81565b6112c0565b34801561061d57600080fd5b5061037b61062c366004613bd9565b61142a565b34801561063d57600080fd5b5061045d61064c366004613bd9565b6001600160a01b03166000908152600b60205260409020546001600160801b031690565b34801561067c57600080fd5b5061037b6115af565b34801561069157600080fd5b506008546001600160a01b03165b6040516001600160a01b0390911681526020016103cf565b3480156106c357600080fd5b506006546001600160a01b031661069f565b3480156106e157600080fd5b5061037b6106f0366004613dcc565b6115e5565b34801561070157600080fd5b506004546001600160a01b031661069f565b34801561071f57600080fd5b5060408051808201909152600681526508ca49e8e8ab60d31b60208201526103c2565b34801561074e57600080fd5b5061037b61075d366004613c69565b611687565b34801561076e57600080fd5b5061037b61077d366004613d81565b6118db565b34801561078e57600080fd5b506103f861079d366004613bad565b611a45565b3480156107ae57600080fd5b506103f86107bd366004613bad565b611ad0565b3480156107ce57600080fd5b5061037b6107dd366004613cf6565b611add565b3480156107ee57600080fd5b506108f7604080516101a0810182526009546001600160401b03808216808452600160401b80840483166020860181905263ffffffff600160801b86041696860187905261ffff600160a01b8604811660608801819052600160b01b87049095166080880181905260ff600160f01b9097048716151560a08901819052600a5480841660c08b0181905262010000820490941660e08b0181905264010000000082048a166101008c018190526501000000000083048b166101208d01819052660100000000000084048c166101408e01819052600160381b85048d166101608f0181905299909404909b16610180909c018c9052979c959b9a9899939892979496909591929091565b604080516001600160401b039e8f1681529c8e1660208e015263ffffffff909b169a8c019a909a5261ffff98891660608c01529a90961660808a015293151560a089015291851660c0880152841660e0870152831661010086015282166101208501528116610140840152928316610160830152919091166101808201526101a0016103cf565b34801561098a57600080fd5b506005546001600160a01b031661069f565b3480156109a857600080fd5b5061045d6109b7366004613bd9565b611c37565b3480156109c857600080fd5b5061045d6109d7366004613de9565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a0e57600080fd5b5061037b610a1d366004613e28565b611c42565b348015610a2e57600080fd5b5061037b610a3d366004613bd9565b611f0f565b348015610a4e57600080fd5b5061037b610a5d366004613c82565b611fee565b348015610a6e57600080fd5b50610aa8610a7d366004613bd9565b6001600160a01b03166000908152600b6020526040902054600160801b90046001600160581b031690565b6040516001600160581b0390911681526020016103cf565b348015610acc57600080fd5b50600154600160901b90046001600160581b0316610aa8565b348015610af157600080fd5b5061037b610b00366004613bd9565b612074565b348015610b1157600080fd5b50610b25610b20366004613bd9565b61214b565b60408051988952602089019790975295870194909452606086019290925215156080850152151560a0840152151560c0830152151560e0820152610100016103cf565b610b71336121ed565b50565b6000610b813384846123be565b50600192915050565b6004546001600160a01b03163314610bb45760405162461bcd60e51b81526004016102b690613eae565b6009805460ff60f01b1916600160f01b179055565b6004546001600160a01b03163314610bf35760405162461bcd60e51b81526004016102b690613eae565b610b71816124cc565b6000610c0782612678565b92915050565b6000610c1a8484846126b4565b6001600160a01b0384166000908152600c6020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e6365000000000000000060448201526064016102b6565b610c9b85338584036123be565b506001949350505050565b6004546001600160a01b03163314610cd05760405162461bcd60e51b81526004016102b690613eae565b610bb88161ffff1611610d1e5760405162461bcd60e51b81526020600482015260166024820152756e6f7420656e6f75676820676173466f72436c61696d60501b60448201526064016102b6565b6009805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b336000818152600c602090815260408083206001600160a01b03871684529091528120549091610b81918590610d77908690613b00565b6123be565b6004546001600160a01b03163314610da65760405162461bcd60e51b81526004016102b690613eae565b600081118015610db65750600034115b610e025760405162461bcd60e51b815260206004820152601b60248201527f6d75737420737570706c7920626f746820667820616e6420657468000000000060448201526064016102b6565b600454610e19906001600160a01b03163083613094565b610e23813461327e565b60405181907f44fa45b943408523104e44d70520e98729e4cd1625dccf1330d48a674550284290600090a250565b6004546001600160a01b03163314610e7b5760405162461bcd60e51b81526004016102b690613eae565b610b713382613404565b6004546001600160a01b03163314610eaf5760405162461bcd60e51b81526004016102b690613eae565b6402540be400816001600160401b03161015610edd5760405162461bcd60e51b81526004016102b690613ed1565b671bc16d674ec80000816001600160401b03161115610f0e5760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff19166001600160401b0392909216919091179055565b6004546001600160a01b03163314610f5b5760405162461bcd60e51b81526004016102b690613eae565b6000816001600160401b031611610f845760405162461bcd60e51b81526004016102b690613ed1565b6009805467ffffffffffffffff60b01b1916600160b01b6001600160401b038416908102919091179091556040517fffbe4e88fcb3e0dc64fbd507ef323ba3322894779c5d889da9779db9db385c1090600090a250565b6004546001600160a01b031633148015610fff5750600954600160f01b900460ff16155b6110465760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b858110156110e35784848281811061106357611063613f00565b90506020020135600b600089898581811061108057611080613f00565b90506020020160208101906110959190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b039182169390930116919091179055806110db81613f16565b915050611049565b5060018054600160481b6001600160481b03808316909501851668ffffffffffffffffff198316811782900486169094019094169093026001600160901b031990931690911791909117905550505050565b6004546001600160a01b0316331461115f5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166111af5760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160481b9091046001600160481b0316907fca468cabdc08e335f5734071244314ce8a7e25f07ea6d0edffa9088985c1a7d890600090a26002546040516000916001600160a01b03841691600160481b9091046001600160481b0316908381818185875af1925050503d806000811461124b576040519150601f19603f3d011682016040523d82523d6000602084013e611250565b606091505b50509050806112a15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805471ffffffffffffffffff00000000000000000019169055565b6004546001600160a01b031633146112ea5760405162461bcd60e51b81526004016102b690613eae565b80156113ca576005546001600160a01b0383811691161480159061131c57506006546001600160a01b03838116911614155b801561133657506008546001600160a01b03838116911614155b801561135057506004546001600160a01b03838116911614155b61139c5760405162461bcd60e51b815260206004820152601860248201527f696e656c696769626c6520666f7220626c61636b6c697374000000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b1916600160e01b1790556113ee565b6001600160a01b0382166000908152600b60205260409020805460ff60e01b191690555b604051811515906001600160a01b038416907ffed07c88bd5d31bfd0ce77ed7ffdc74a163a61cfc5edcec801e3a7954e33d6e790600090a35050565b6004546001600160a01b031633146114545760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166114a45760405162461bcd60e51b81526020600482015260176024820152761e995c9bc81859191c995cdcc8191a5cd85b1b1bddd959604a1b60448201526064016102b6565b600254604051600160901b9091046001600160481b0316907f220ccb49a0062b9cb9e8bbb3003f1140743b01e1e0a10d411f4d859814c9def990600090a26002546040516000916001600160a01b03841691600160901b9091046001600160481b0316908381818185875af1925050503d8060008114611540576040519150601f19603f3d011682016040523d82523d6000602084013e611545565b606091505b50509050806115965760405162461bcd60e51b815260206004820152601a60248201527f63616c6c20746f2062656e6566696369617279206661696c656400000000000060448201526064016102b6565b50506002805468ffffffffffffffffff60901b19169055565b6004546001600160a01b031633146115d95760405162461bcd60e51b81526004016102b690613eae565b6115e36000613584565b565b6004546001600160a01b0316331461160f5760405162461bcd60e51b81526004016102b690613eae565b600954600160801b900463ffffffff16600061162b8383613f31565b6009805463ffffffff808416600160801b810263ffffffff60801b199093169290921790925560405192935091908416907f21188e256f47aecca77d04435990811b0672c18a4914dde8846995054eebc6ea90600090a3505050565b6004546001600160a01b031633146116b15760405162461bcd60e51b81526004016102b690613eae565b60095442600160801b90910463ffffffff16106117105760405162461bcd60e51b815260206004820152601a60248201527f756e6c6f636b44617465206e6f7420796574207265616368656400000000000060448201526064016102b6565b6006546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190613f50565b10156117ca5760405162461bcd60e51b815260206004820152601f60248201527f6e6f7420656e6f756768206c70742068656c6420627920636f6e74726163740060448201526064016102b6565b60065460085460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b3906044016020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190613f69565b5060085460048054604051631669426360e11b81529182018490526001600160a01b03908116602483015290911690632cd284c690604401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b50506040518392507f25d42ebc6735db35705e6961e314a232d7b4169a06ef1cffc9ce46fa56274f1f9150600090a250565b6004546001600160a01b031633146119055760405162461bcd60e51b81526004016102b690613eae565b6006546001600160a01b03838116911614156119635760405162461bcd60e51b815260206004820152601960248201527f6f726967696e616c207061697220697320636f6e7374616e740000000000000060448201526064016102b6565b6001600160a01b0382166000908152600b602052604090205460ff600160d81b90910416151581151514156119d35760405162461bcd60e51b815260206004820152601660248201527573657474696e6720616c72656164792065786973747360501b60448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020805482158015600160d81b0260ff60d81b19909216919091179091558190611a3357506001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16155b15611a4157611a41826124cc565b5050565b336000908152600c602090815260408083206001600160a01b038616845290915281205482811015611ab95760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f000060448201526064016102b6565b611ac633858584036123be565b5060019392505050565b6000610b813384846126b4565b6004546001600160a01b031633148015611b015750600954600160f01b900460ff16155b611b485760405162461bcd60e51b81526020600482015260186024820152770dedcd8f29eeedccae440c2dcc840e0e4ca5ad8c2eadcc6d60431b60448201526064016102b6565b60005b85811015611be557848482818110611b6557611b65613f00565b90506020020135600b6000898985818110611b8257611b82613f00565b9050602002016020810190611b979190613bd9565b6001600160a01b03168152602081019190915260400160002080546001600160801b031981166001600160801b03918216939093031691909117905580611bdd81613f16565b915050611b4b565b50600180546001600160901b031981166001600160481b03808316959095038516908117600160481b68ffffffffffffffffff1990931690911782900485169390930390931690920217905550505050565b6000610c07826135f7565b6004546001600160a01b03163314611c6c5760405162461bcd60e51b81526004016102b690613eae565b600a8761ffff1610158015611c8757506103e88761ffff1611155b8015611c985750600a8661ffff1610155b8015611caa57506106408661ffff1611155b611cf65760405162461bcd60e51b815260206004820152601e60248201527f4665652070637473206f7574206f662061636365707465642072616e6765000060448201526064016102b6565b60008360ff16118015611d0c575060008260ff16115b80611d24575060ff8316158015611d24575060ff8216155b8015611d34575060648560ff1611155b8015611d44575060648460ff1611155b8015611d54575060648360ff1611155b8015611d64575060648260ff1611155b8015611d74575060648160ff1611155b611dc05760405162461bcd60e51b815260206004820152601f60248201527f506f7274696f6e73206f7574736964652061636365707465642072616e67650060448201526064016102b6565b86600960010160006101000a81548161ffff021916908361ffff16021790555085600960010160026101000a81548161ffff021916908361ffff16021790555084600960010160046101000a81548160ff021916908360ff16021790555083600960010160056101000a81548160ff021916908360ff16021790555082600960010160066101000a81548160ff021916908360ff16021790555081600960010160076101000a81548160ff021916908360ff16021790555080600960010160086101000a81548160ff021916908360ff1602179055508561ffff168761ffff167fccfc65ebd0bf621f9eaa538dc799d705cd494a1c608da5e256f04ba395fc63688787878787604051611efe95949392919060ff95861681529385166020850152918416604084015283166060830152909116608082015260a00190565b60405180910390a350505050505050565b6004546001600160a01b03163314611f395760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160f01b900460ff1615611f9c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000818152600b6020526040808220805460ff60f01b1916600160f01b179055517f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d9369190a250565b6004546001600160a01b031633146120185760405162461bcd60e51b81526004016102b690613eae565b6064816001600160401b031610156120425760405162461bcd60e51b81526004016102b690613ed1565b600980546001600160401b03909216600160401b026fffffffffffffffff000000000000000019909216919091179055565b6004546001600160a01b0316331461209e5760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166120ed5760405162461bcd60e51b815260206004820152601660248201527546784f776e3a206e6f207a65726f206164647265737360501b60448201526064016102b6565b6004546001600160a01b03828116911614156121425760405162461bcd60e51b8152602060048201526014602482015273233c27bbb71d1030b63932b0b23c9037bbb732b960611b60448201526064016102b6565b610b7181613584565b6001600160a01b0381166000908152600b60205260408120546001600160801b03169080808080808061217d89612678565b9650612188896135f7565b6001600160a01b039099166000908152600b602052604090205497999698976001600160581b03600160801b8204169760ff600160d81b830481169850600160e01b830481169750600160e81b830481169650600160f01b9092049091169350915050565b6000806121f983612678565b600954909150600160b01b90046001600160401b03168111156123b5576001600160a01b0383166000908152600b602052604090205461224a908290600160801b90046001600160581b0316613b00565b6001600160a01b0384166000818152600b602052604080822080546001600160581b0395909516600160801b026affffffffffffffffffffff60801b1990951694909417909355915183927fc7627c78ddc5b824e2bed4b122ec1c29cd2baba6b22141de00fd53d76d7d95b491a36009546040516000916001600160a01b03861691600160a01b90910461ffff16908490600060405180830381858888f193505050503d8060008114612319576040519150601f19603f3d011682016040523d82523d6000602084013e61231e565b606091505b505090508015612332575060019392505050565b6001600160a01b0384166000908152600b6020526040902054612366908390600160801b90046001600160581b0316613f86565b6001600160a01b039094166000908152600b6020526040812080546001600160581b0396909616600160801b026affffffffffffffffffffff60801b1990961695909517909455509192915050565b50600092915050565b6001600160a01b0383166124145760405162461bcd60e51b815260206004820152601960248201527f617070726f76652066726f6d207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b03821661246a5760405162461bcd60e51b815260206004820152601760248201527f617070726f766520746f207a65726f206164647265737300000000000000000060448201526064016102b6565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6004546001600160a01b031633146124f65760405162461bcd60e51b81526004016102b690613eae565b6001600160a01b0381166000908152600b6020526040902054600160e81b900460ff16156125595760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b60448201526064016102b6565b6001600160a01b0381166000908152600b60205260409020805460ff60e81b1916600160e81b17905561258b816121ed565b506001600160a01b0381166000908152600b6020526040902054655af3107a40006001600160801b039091161115612641576001600160a01b0381166000908152600b6020526040902054600180546001600160801b0390921691600990612604908490600160481b90046001600160481b0316613f9d565b82546001600160481b039182166101009390930a9283029190920219909116179055506001600160a01b0381166000908152600d60205260408120555b6040516001600160a01b038216907f9dc0c5d829ba95d4a3aa3e40791b3e0ff125f876788532b9f7f6eb543d8dfbd690600090a250565b6001600160a01b0381166000908152600b6020526040812054600160801b90046001600160581b03166126aa836135f7565b610c079190613f86565b6001600160a01b0383166000908152600b60205260409020546001600160801b03168111156127255760405162461bcd60e51b815260206004820152601c60248201527f696e737566662e2062616c616e636520666f72207472616e736665720000000060448201526064016102b6565b604080516101a0810182526009546001600160401b038082168352600160401b8083048216602085015263ffffffff600160801b8404169484019490945261ffff600160a01b830481166060850152600160b01b8304909116608084015260ff600160f01b9092048216151560a0840152600a5480821660c085015262010000810490911660e0840152640100000000810482166101008401526501000000000081048216610120840152660100000000000081048216610140840152600160381b81048216610160840152929092049091166101808201528161284b5760405162461bcd60e51b815260206004820152601960248201527f616d6f756e74206d7573742062652061626f7665207a65726f0000000000000060448201526064016102b6565b6001600160a01b0384166128a15760405162461bcd60e51b815260206004820152601b60248201527f66726f6d2063616e6e6f74206265207a65726f2061646472657373000000000060448201526064016102b6565b6001600160a01b0383166128f75760405162461bcd60e51b815260206004820152601960248201527f746f2063616e6e6f74206265207a65726f20616464726573730000000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040902054600160e01b900460ff16156129375760405162461bcd60e51b81526004016102b690613fc5565b336000908152600b6020526040902054600160e01b900460ff161561296e5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040902054600160e01b900460ff16156129ae5760405162461bcd60e51b81526004016102b690613fc5565b6001600160a01b0384166000908152600b6020526040812054600160d81b900460ff16612a0a576001600160a01b0384166000908152600b6020526040902054600160d81b900460ff16612a03576002612a0d565b6001612a0d565b60005b60ff1690508160a0015180612a2c57506004546001600160a01b031633145b612a785760405162461bcd60e51b815260206004820152601760248201527f74726164696e67456e61626c6564206861726473746f7000000000000000000060448201526064016102b6565b806001148015612a955750600154600160e81b900460ff16600214155b15612f59576001805460ff60e81b1916600160e91b17905560208201516003546001600160401b039091166001600160481b0390911610612ba9576003546001600160401b03600160481b820416906001600160481b031681612b505780600260128282829054906101000a90046001600160481b0316612b169190613fe5565b82546001600160481b039182166101009390930a9283029190920219909116179055506003805468ffffffffffffffffff19169055612ba2565b612b5a82826136d2565b6003805470ffffffffffffffffffffffffffffffffff19169055604051819083907f89c317d1c4e867f8b24228dc26f4a7b04cda28583224244b4b7f62fddf8a946990600090a35b5050612f45565b60025482516001600160481b03909116906001600160401b03168110612f4357610180830151610160840151610120850151610100860151610140870151910190910190910160ff9081169116808201906000908290612c0b90612710613abf565b612c159190613ade565b90506000612710612c268387613abf565b612c309190613ade565b905080600360098282829054906101000a90046001600160401b0316612c569190614007565b82546001600160401b039182166101009390930a928302919092021990911617905550600654612c9a9030906001600160a01b0316612c958489613f86565b613094565b60085460408051632e12e5c160e01b815290516000926001600160a01b031691632e12e5c1916004808301926020929190829003018187875af1158015612ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d099190613f50565b905080867fceb50488716f263ac0cac1905289143c4915f2233e600e9e8ecaf75056d52d7660405160405180910390a360008589610100015160ff1683612d509190613abf565b612d5a9190613ade565b90506000868a610120015160ff1684612d739190613abf565b612d7d9190613ade565b90506000878b610160015160ff1685612d969190613abf565b612da09190613ade565b905060008183612db08688613f86565b612dba9190613f86565b612dc49190613f86565b600154909150600160481b90046001600160481b0316612de8600160801b83613abf565b612df29190613ade565b600080828254612e029190613b00565b909155505060018054829190601290612e2c908490600160901b90046001600160581b0316613b18565b92506101000a8154816001600160581b0302191690836001600160581b0316021790555083600260098282829054906101000a90046001600160481b0316612e749190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555082600260128282829054906101000a90046001600160481b0316612ebc9190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600360008282829054906101000a90046001600160481b0316612f049190613fe5565b82546001600160481b039182166101009390930a928302919092021990911617905550506002805468ffffffffffffffffff1916905550505050505050505b505b6001805460ff60e81b1916600160e81b1790555b80600214158015612f8a57506001600160a01b0385166000908152600b6020526040902054600160f01b900460ff16155b8015612fb657506001600160a01b0384166000908152600b6020526040902054600160f01b900460ff16155b1561305a5760008115612fcd578260e00151612fd3565b8260c001515b61ffff1690506000612710612fe88387613abf565b612ff29190613ade565b9050612ffe8186613f86565b60028054919650829160009061301e9084906001600160481b0316613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555061304c878261388e565b613057873083613094565b50505b613064858461388e565b61306e848461399f565b613079858585613094565b613082856121ed565b5061308c846121ed565b505050505050565b6001600160a01b0383166130ea5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016102b6565b6001600160a01b0382166131405760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016102b6565b6001600160a01b0383166000908152600b60205260409020546001600160801b0316818110156131b25760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016102b6565b6001600160a01b038481166000908152600b602052604080822080546001600160801b0319168686036001600160801b0390811691909117909155928616825281208054859391929161320791859116614029565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161327091815260200190565b60405180910390a350505050565b60075460065460408051630240bc6b60e21b815290516001600160a01b0393841693309360009384939190921691630902f1ac9160048083019260609291908290030181865afa1580156132d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fa9190614062565b506001600160701b031691506001600160701b03169150836001600160a01b0316836001600160a01b0316111561332d57905b6000808315801561333c575082155b1561334b5750869050856133f0565b878760008661335a8785613abf565b6133649190613ade565b905081811161337b579193509091508290826133ec565b6000866133888985613abf565b6133929190613ade565b9050838111156133e45760405162461bcd60e51b815260206004820152601d60248201527f6f7074696d616c206c69717569646974792063616c63206661696c656400000060448201526064016102b6565b945090925082905b5050505b6133fa82826136d2565b5050505050505050565b6001600160a01b03821661345a5760405162461bcd60e51b815260206004820152601a60248201527f6275726e2066726f6d20746865207a65726f206164647265737300000000000060448201526064016102b6565b6001600160a01b0382166000908152600b60205260409020546001600160801b0316818110156134cc5760405162461bcd60e51b815260206004820152601b60248201527f6275726e20616d6f756e7420657863656564732062616c616e6365000000000060448201526064016102b6565b6001600160a01b0383166000908152600b6020526040812080546001600160801b0319168484036001600160801b03161790556001805484929061351a9084906001600160481b0316613f9d565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555060006001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124bf91815260200190565b600480546001600160a01b038381166000818152600b6020526040808220805461ffff60e81b191661010160e81b17905585546001600160a01b03191683179095559351919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166000908152600b60205260408120548190600160e81b900460ff168061364f57506001600160a01b0383166000908152600b6020526040902054655af3107a40006001600160801b03909116105b61367a576001600160a01b0383166000908152600b60205260409020546001600160801b031661367d565b60005b6001600160a01b0384166000908152600d602052604081205490546001600160801b03929092169250600160801b916136b7908490613abf565b6136c191906140a9565b6136cb9190613ade565b9392505050565b6006546001600160a01b0316306136ea818386613094565b600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b81526001600160a01b03878116600483015260248201899052909116935063a9059cbb925060440190506020604051808303816000875af11580156137a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cb9190613f69565b6138175760405162461bcd60e51b815260206004820152601f60248201527f6661696c65642057455448207866657220746f206c7020636f6e74726163740060448201526064016102b6565b6006546040516335313c2160e11b81526001600160a01b03838116600483015290911690636a627842906024016020604051808303816000875af1158015613863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138879190613f50565b5050505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a400081111561399a5760006138f18383613f86565b9050655af3107a40008110613907576000613909565b805b6139139084613b00565b925082600160098282829054906101000a90046001600160481b03166139399190613f9d565b92506101000a8154816001600160481b0302191690836001600160481b031602179055508260005461396b9190613abf565b6001600160a01b0385166000908152600d6020526040812080549091906139939084906140a9565b9091555050505b505050565b6001600160a01b0382166000908152600b6020526040902054600160e81b900460ff16611a41576001600160a01b0382166000908152600b60205260409020546001600160801b0316655af3107a40006139f98383613b00565b111561399a57655af3107a40008110613a13576000613a15565b805b613a1f9083613b00565b915081600160098282829054906101000a90046001600160481b0316613a459190613fe5565b92506101000a8154816001600160481b0302191690836001600160481b0316021790555081600054613a779190613abf565b6001600160a01b0384166000908152600d602052604081208054909190613a9f9084906140ea565b9091555050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613ad957613ad9613aa9565b500290565b600082613afb57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613b1357613b13613aa9565b500190565b60006001600160581b03808316818516808303821115613b3a57613b3a613aa9565b01949350505050565b600060208083528351808285015260005b81811015613b7057858101830151858201604001528201613b54565b81811115613b82576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7157600080fd5b60008060408385031215613bc057600080fd5b8235613bcb81613b98565b946020939093013593505050565b600060208284031215613beb57600080fd5b81356136cb81613b98565b600080600060608486031215613c0b57600080fd5b8335613c1681613b98565b92506020840135613c2681613b98565b929592945050506040919091013590565b803561ffff81168114613c4957600080fd5b919050565b600060208284031215613c6057600080fd5b6136cb82613c37565b600060208284031215613c7b57600080fd5b5035919050565b600060208284031215613c9457600080fd5b81356001600160401b03811681146136cb57600080fd5b60008083601f840112613cbd57600080fd5b5081356001600160401b03811115613cd457600080fd5b6020830191508360208260051b8501011115613cef57600080fd5b9250929050565b60008060008060008060808789031215613d0f57600080fd5b86356001600160401b0380821115613d2657600080fd5b613d328a838b01613cab565b90985096506020890135915080821115613d4b57600080fd5b50613d5889828a01613cab565b979a9699509760408101359660609091013595509350505050565b8015158114610b7157600080fd5b60008060408385031215613d9457600080fd5b8235613d9f81613b98565b91506020830135613daf81613d73565b809150509250929050565b63ffffffff81168114610b7157600080fd5b600060208284031215613dde57600080fd5b81356136cb81613dba565b60008060408385031215613dfc57600080fd5b8235613e0781613b98565b91506020830135613daf81613b98565b803560ff81168114613c4957600080fd5b600080600080600080600060e0888a031215613e4357600080fd5b613e4c88613c37565b9650613e5a60208901613c37565b9550613e6860408901613e17565b9450613e7660608901613e17565b9350613e8460808901613e17565b9250613e9260a08901613e17565b9150613ea060c08901613e17565b905092959891949750929550565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b6020808252601590820152746f7574206f662061636365707465642072616e676560581b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613f2a57613f2a613aa9565b5060010190565b600063ffffffff808316818516808303821115613b3a57613b3a613aa9565b600060208284031215613f6257600080fd5b5051919050565b600060208284031215613f7b57600080fd5b81516136cb81613d73565b600082821015613f9857613f98613aa9565b500390565b60006001600160481b0383811690831681811015613fbd57613fbd613aa9565b039392505050565b6020808252600690820152656e6f626f747360d01b604082015260600190565b60006001600160481b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160401b03808316818516808303821115613b3a57613b3a613aa9565b60006001600160801b03808316818516808303821115613b3a57613b3a613aa9565b80516001600160701b0381168114613c4957600080fd5b60008060006060848603121561407757600080fd5b6140808461404b565b925061408e6020850161404b565b9150604084015161409e81613dba565b809150509250925092565b600080821280156001600160ff1b03849003851316156140cb576140cb613aa9565b600160ff1b83900384128116156140e4576140e4613aa9565b50500190565b60008083128015600160ff1b85018412161561410857614108613aa9565b6001600160ff1b038401831381161561412357614123613aa9565b5050039056fea2646970667358221220ac449eb9a8783422cc3f46408651ff5d65150194a01a33b8d0c1adb6390e5f5f64736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000098a7d9b8314c0000

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : initLqtyAmt (uint72): 11000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000000000000000000000000000098a7d9b8314c0000


Deployed Bytecode Sourcemap

14195:25070:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35897:13;;-1:-1:-1;;;35897:13:0;;-1:-1:-1;;;;;35897:13:0;35889:48;;;;-1:-1:-1;;;35889:48:0;;216:2:1;35889:48:0;;;198:21:1;255:2;235:18;;;228:30;-1:-1:-1;;;274:18:1;;;267:49;333:18;;35889:48:0;;;;;;;;;35960:1;35948:9;:13;:46;;;;-1:-1:-1;35987:6:0;;-1:-1:-1;;;;;35987:6:0;35965:10;:29;;35948:46;:84;;;;-1:-1:-1;36020:11:0;;-1:-1:-1;;;;;36020:11:0;35998:10;:34;;35948:84;35944:231;;;36103:13;;-1:-1:-1;;;36103:13:0;;-1:-1:-1;;;;;36103:13:0;36077:22;-1:-1:-1;;;36077:9:0;:22;:::i;:::-;36076:40;;;;:::i;:::-;36059:13;;:58;;;;:::i;:::-;36043:13;:74;36126:20;:41;;36157:9;;36126:20;;;:41;;36157:9;;-1:-1:-1;;;36126:41:0;;-1:-1:-1;;;;;36126:41:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36126:41:0;;;;;-1:-1:-1;;;;;36126:41:0;;;;;;35944:231;14195:25070;;;;;38260:76;;;;;;;;;;;;;:::i;31889:72::-;;;;;;;;;;-1:-1:-1;31944:15:0;;;;;;;;;;;;-1:-1:-1;;;31944:15:0;;;;31889:72;;;;;;;:::i;:::-;;;;;;;;32745:137;;;;;;;;;;-1:-1:-1;32745:137:0;;;;;:::i;:::-;;:::i;:::-;;;2588:14:1;;2581:22;2563:41;;2551:2;2536:18;32745:137:0;2423:187:1;25835:76:0;;;;;;;;;;;;;:::i;27960:105::-;;;;;;;;;;-1:-1:-1;27960:105:0;;;;;:::i;:::-;;:::i;31007:112::-;;;;;;;;;;-1:-1:-1;31007:112:0;;;;;:::i;:::-;;:::i;:::-;;;3013:25:1;;;3001:2;2986:18;31007:112:0;2867:177:1;32177:76:0;;;;;;;;;;-1:-1:-1;32239:12:0;;-1:-1:-1;;;;;32239:12:0;32177:76;;;-1:-1:-1;;;;;3211:33:1;;;3193:52;;3181:2;3166:18;32177:76:0;3049:202:1;32886:381:0;;;;;;;;;;-1:-1:-1;32886:381:0;;;;;:::i;:::-;;:::i;32257:78::-;;;;;;;;;;-1:-1:-1;32320:13:0;;-1:-1:-1;;;32320:13:0;;-1:-1:-1;;;;;32320:13:0;32257:78;;32043:61;;;;;;;;;;-1:-1:-1;32043:61:0;;32101:1;3859:36:1;;3847:2;3832:18;32043:61:0;3717:184:1;28975:183:0;;;;;;;;;;-1:-1:-1;28975:183:0;;;;;:::i;:::-;;:::i;33271:195::-;;;;;;;;;;-1:-1:-1;33271:195:0;;;;;:::i;:::-;;:::i;23296:353::-;;;;;;:::i;:::-;;:::i;31751:98::-;;;;;;;;;;-1:-1:-1;31751:98:0;;;;;:::i;:::-;;:::i;25915:245::-;;;;;;;;;;-1:-1:-1;25915:245:0;;;;;:::i;:::-;;:::i;29162:248::-;;;;;;;;;;-1:-1:-1;29162:248:0;;;;;:::i;:::-;;:::i;38342:457::-;;;;;;;;;;-1:-1:-1;38342:457:0;;;;;:::i;:::-;;:::i;18016:362::-;;;;;;;;;;-1:-1:-1;18016:362:0;;;;;:::i;:::-;;:::i;28543:428::-;;;;;;;;;;-1:-1:-1;28543:428:0;;;;;:::i;:::-;;:::i;18382:370::-;;;;;;;;;;-1:-1:-1;18382:370:0;;;;;:::i;:::-;;:::i;32339:117::-;;;;;;;;;;-1:-1:-1;32339:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;32429:11:0;32398:7;32429:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;32429:20:0;;32339:117;35172:91;;;;;;;;;;;;;:::i;31668:77::-;;;;;;;;;;-1:-1:-1;31736:6:0;;-1:-1:-1;;;;;31736:6:0;31668:77;;;-1:-1:-1;;;;;6954:32:1;;;6936:51;;6924:2;6909:18;31668:77:0;6790:203:1;31490:83:0;;;;;;;;;;-1:-1:-1;31561:9:0;;-1:-1:-1;;;;;31561:9:0;31490:83;;22944:348;;;;;;;;;;-1:-1:-1;22944:348:0;;;;;:::i;:::-;;:::i;32108:65::-;;;;;;;;;;-1:-1:-1;32165:6:0;;-1:-1:-1;;;;;32165:6:0;32108:65;;31965:74;;;;;;;;;;-1:-1:-1;32022:15:0;;;;;;;;;;;;-1:-1:-1;;;32022:15:0;;;;31965:74;;23653:614;;;;;;;;;;-1:-1:-1;23653:614:0;;;;;:::i;:::-;;:::i;27363:376::-;;;;;;;;;;-1:-1:-1;27363:376:0;;;;;:::i;:::-;;:::i;33470:360::-;;;;;;;;;;-1:-1:-1;33470:360:0;;;;;:::i;:::-;;:::i;32460:143::-;;;;;;;;;;-1:-1:-1;32460:143:0;;;;;:::i;:::-;;:::i;38803:457::-;;;;;;;;;;-1:-1:-1;38803:457:0;;;;;:::i;:::-;;:::i;29414:893::-;;;;;;;;;;;;29786:24;;;;;;;;29804:6;29786:24;-1:-1:-1;;;;;29786:24:0;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29786:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29414:893;;;;;-1:-1:-1;;;;;8050:31:1;;;8032:50;;8118:31;;;8113:2;8098:18;;8091:59;8198:10;8186:23;;;8166:18;;;8159:51;;;;8258:6;8246:19;;;8241:2;8226:18;;8219:47;7439:30;;;;8316:3;8301:19;;7427:43;2397:13;;2390:21;8369:3;8354:19;;2378:34;7546:18;;;8424:3;8409:19;;7534:31;7546:18;;8479:3;8464:19;;7534:31;7546:18;;8534:3;8519:19;;7534:31;7546:18;;8589:3;8574:19;;7534:31;7546:18;;8645:3;8630:19;;7534:31;7546:18;;;8701:3;8686:19;;7534:31;7546:18;;;;8757:3;8742:19;;7534:31;8019:3;8004:19;29414:893:0;7576:1192:1;31577:87:0;;;;;;;;;;-1:-1:-1;31650:11:0;;-1:-1:-1;;;;;31650:11:0;31577:87;;31123:118;;;;;;;;;;-1:-1:-1;31123:118:0;;;;;:::i;:::-;;:::i;32607:134::-;;;;;;;;;;-1:-1:-1;32607:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;32706:19:0;;;32683:7;32706:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;32607:134;26322:1037;;;;;;;;;;-1:-1:-1;26322:1037:0;;;;;:::i;:::-;;:::i;27743:213::-;;;;;;;;;;-1:-1:-1;27743:213:0;;;;;:::i;:::-;;:::i;26164:154::-;;;;;;;;;;-1:-1:-1;26164:154:0;;;;;:::i;:::-;;:::i;31245:132::-;;;;;;;;;;-1:-1:-1;31245:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;31339:11:0;31318:6;31339:11;;;:2;:11;;;;;:32;-1:-1:-1;;;31339:32:0;;-1:-1:-1;;;;;31339:32:0;;31245:132;;;;-1:-1:-1;;;;;10104:37:1;;;10086:56;;10074:2;10059:18;31245:132:0;9942:206:1;31381:105:0;;;;;;;;;;-1:-1:-1;31460:20:0;;-1:-1:-1;;;31460:20:0;;-1:-1:-1;;;;;31460:20:0;31381:105;;35267:236;;;;;;;;;;-1:-1:-1;35267:236:0;;;;;:::i;:::-;;:::i;30311:692::-;;;;;;;;;;-1:-1:-1;30311:692:0;;;;;:::i;:::-;;:::i;:::-;;;;10472:25:1;;;10528:2;10513:18;;10506:34;;;;10556:18;;;10549:34;;;;10614:2;10599:18;;10592:34;;;;10670:14;10663:22;10657:3;10642:19;;10635:51;10730:14;10723:22;10717:3;10702:19;;10695:51;10790:14;10783:22;10777:3;10762:19;;10755:51;10850:14;10843:22;10837:3;10822:19;;10815:51;10459:3;10444:19;30311:692:0;10153:719:1;38260:76:0;38294:36;38318:10;38294:15;:36::i;:::-;;38260:76::o;32745:137::-;32813:4;32826:37;32835:10;32847:7;32856:6;32826:8;:37::i;:::-;-1:-1:-1;32872:4:0;32745:137;;;;:::o;25835:76::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;25881:6:::1;:28:::0;;-1:-1:-1;;;;25881:28:0::1;-1:-1:-1::0;;;25881:28:0::1;::::0;;25835:76::o;27960:105::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;28031:28:::1;28051:7;28031:19;:28::i;31007:112::-:0;31071:7;31093:20;31108:4;31093:14;:20::i;:::-;31086:27;31007:112;-1:-1:-1;;31007:112:0:o;32886:381::-;32977:4;32990:36;33000:6;33008:9;33019:6;32990:9;:36::i;:::-;-1:-1:-1;;;;;33060:19:0;;33033:24;33060:19;;;:11;:19;;;;;;;;33080:10;33060:31;;;;;;;;33106:26;;;;33098:63;;;;-1:-1:-1;;;33098:63:0;;11416:2:1;33098:63:0;;;11398:21:1;11455:2;11435:18;;;11428:30;11494:26;11474:18;;;11467:54;11538:18;;33098:63:0;11214:348:1;33098:63:0;33183:55;33192:6;33200:10;33231:6;33212:16;:25;33183:8;:55::i;:::-;-1:-1:-1;33257:4:0;;32886:381;-1:-1:-1;;;;32886:381:0:o;28975:183::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;29071:4:::1;29056:14;:19;;;29048:53;;;::::0;-1:-1:-1;;;29048:53:0;;11769:2:1;29048:53:0::1;::::0;::::1;11751:21:1::0;11808:2;11788:18;;;11781:30;-1:-1:-1;;;11827:18:1;;;11820:52;11889:18;;29048:53:0::1;11567:346:1::0;29048:53:0::1;29108:6;:44:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;29108:44:0::1;-1:-1:-1::0;;;;29108:44:0;;::::1;::::0;;;::::1;::::0;;28975:183::o;33271:195::-;33375:10;33353:4;33396:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33396:32:0;;;;;;;;;;33353:4;;33366:76;;33387:7;;33396:45;;33431:10;;33396:45;:::i;:::-;33366:8;:76::i;23296:353::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23413:1:::1;23399:13;:15;:30;;;;;23428:1;23418:9;:11;23399:30;23391:69;;;::::0;-1:-1:-1;;;23391:69:0;;12120:2:1;23391:69:0::1;::::0;::::1;12102:21:1::0;12159:2;12139:18;;;12132:30;12198:29;12178:18;;;12171:57;12245:18;;23391:69:0::1;11918:351:1::0;23391:69:0::1;23482:6;::::0;23467:52:::1;::::0;-1:-1:-1;;;;;23482:6:0::1;23498:4;23505:13:::0;23467:14:::1;:52::i;:::-;23526:61;23563:13;23577:9;23526:36;:61::i;:::-;23599:44;::::0;23629:13;;23599:44:::1;::::0;;;::::1;23296:353:::0;:::o;31751:98::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;31818:25:::1;31824:10;31836:6;31818:5;:25::i;25915:245::-:0;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26002:12:::1;25991:8;-1:-1:-1::0;;;;;25991:24:0::1;;;25983:58;;;;-1:-1:-1::0;;;25983:58:0::1;;;;;;;:::i;:::-;26067:23;26056:8;-1:-1:-1::0;;;;;26056:35:0::1;;;26048:69;;;;-1:-1:-1::0;;;26048:69:0::1;;;;;;;:::i;:::-;26124:6;:30:::0;;-1:-1:-1;;26124:30:0::1;-1:-1:-1::0;;;;;26124:30:0;;;::::1;::::0;;;::::1;::::0;;25915:245::o;29162:248::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;29273:1:::1;29253:19;-1:-1:-1::0;;;;;29253:21:0::1;;29245:54;;;;-1:-1:-1::0;;;29245:54:0::1;;;;;;;:::i;:::-;29306:6;:46:::0;;-1:-1:-1;;;;29306:46:0::1;-1:-1:-1::0;;;;;;;;29306:46:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;29364:40:::1;::::0;::::1;::::0;-1:-1:-1;;29364:40:0::1;29162:248:::0;:::o;38342:457::-;38499:6;;-1:-1:-1;;;;;38499:6:0;38509:10;38499:20;:46;;;;-1:-1:-1;38524:6:0;:21;-1:-1:-1;;;38524:21:0;;;;38523:22;38499:46;38491:82;;;;-1:-1:-1;;;38491:82:0;;12826:2:1;38491:82:0;;;12808:21:1;12865:2;12845:18;;;12838:30;-1:-1:-1;;;12884:18:1;;;12877:54;12948:18;;38491:82:0;12624:348:1;38491:82:0;38585:6;38580:108;38593:16;;;38580:108;;;38668:7;;38676:1;38668:10;;;;;;;:::i;:::-;;;;;;;38635:2;:12;38638:5;;38644:1;38638:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38635:12:0;;;;;;;;;;;;-1:-1:-1;38635:12:0;:44;;-1:-1:-1;;;;;;38635:44:0;;-1:-1:-1;;;;;38635:44:0;;;;;;;;;;;;;;38611:3;;;;:::i;:::-;;;;38580:108;;;-1:-1:-1;38704:12:0;:34;;-1:-1:-1;;;;;;;;38704:34:0;;;;;;;;-1:-1:-1;;38704:34:0;;;;38756:36;;;;;;;;;;;;;;-1:-1:-1;;;;;;38756:36:0;;;;;;;;;;;;-1:-1:-1;;;;38342:457:0:o;18016:362::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18115:32:0;::::1;18107:68;;;::::0;-1:-1:-1;;;18107:68:0;;13451:2:1;18107:68:0::1;::::0;::::1;13433:21:1::0;13490:2;13470:18;;;13463:30;-1:-1:-1;;;13509:18:1;;;13502:53;13572:18;;18107:68:0::1;13249:347:1::0;18107:68:0::1;18195:17;::::0;18187:26:::1;::::0;-1:-1:-1;;;18195:17:0;;::::1;-1:-1:-1::0;;;;;18195:17:0::1;::::0;18187:26:::1;::::0;;;::::1;18269:17;::::0;18238:53:::1;::::0;18221:12:::1;::::0;-1:-1:-1;;;;;18238:23:0;::::1;::::0;-1:-1:-1;;;18269:17:0;;::::1;-1:-1:-1::0;;;;;18269:17:0::1;::::0;18221:12;18238:53;18221:12;18238:53;18269:17;18238:23;:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18220:71;;;18306:7;18298:46;;;::::0;-1:-1:-1;;;18298:46:0;;14013:2:1;18298:46:0::1;::::0;::::1;13995:21:1::0;14052:2;14032:18;;;14025:30;14091:28;14071:18;;;14064:56;14137:18;;18298:46:0::1;13811:350:1::0;18298:46:0::1;-1:-1:-1::0;;18351:17:0::1;:21:::0;;-1:-1:-1;;18351:21:0::1;::::0;;18016:362::o;28543:428::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;28624:6:::1;28621:304;;;28668:11;::::0;-1:-1:-1;;;;;28649:31:0;;::::1;28668:11:::0;::::1;28649:31;::::0;::::1;::::0;:71:::1;;-1:-1:-1::0;28710:9:0::1;::::0;-1:-1:-1;;;;;28691:29:0;;::::1;28710:9:::0;::::1;28691:29;;28649:71;:108;;;;-1:-1:-1::0;28750:6:0::1;::::0;-1:-1:-1;;;;;28731:26:0;;::::1;28750:6:::0;::::1;28731:26;;28649:108;:145;;;;-1:-1:-1::0;28787:6:0::1;::::0;-1:-1:-1;;;;;28768:26:0;;::::1;28787:6:::0;::::1;28768:26;;28649:145;28641:189;;;::::0;-1:-1:-1;;;28641:189:0;;14368:2:1;28641:189:0::1;::::0;::::1;14350:21:1::0;14407:2;14387:18;;;14380:30;14446:26;14426:18;;;14419:54;14490:18;;28641:189:0::1;14166:348:1::0;28641:189:0::1;-1:-1:-1::0;;;;;28839:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:35;;-1:-1:-1;;;;28839:35:0::1;-1:-1:-1::0;;;28839:35:0::1;::::0;;28621:304:::1;;;-1:-1:-1::0;;;;;28887:11:0;::::1;28918:5;28887:11:::0;;;:2:::1;:11;::::0;;;;:36;;-1:-1:-1;;;;28887:36:0::1;::::0;;28621:304:::1;28936:29;::::0;;::::1;;::::0;-1:-1:-1;;;;;28936:29:0;::::1;::::0;::::1;::::0;;;::::1;28543:428:::0;;:::o;18382:370::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18485:34:0;::::1;18477:70;;;::::0;-1:-1:-1;;;18477:70:0;;13451:2:1;18477:70:0::1;::::0;::::1;13433:21:1::0;13490:2;13470:18;;;13463:30;-1:-1:-1;;;13509:18:1;;;13502:53;13572:18;;18477:70:0::1;13249:347:1::0;18477:70:0::1;18567:17;::::0;18559:26:::1;::::0;-1:-1:-1;;;18567:17:0;;::::1;-1:-1:-1::0;;;;;18567:17:0::1;::::0;18559:26:::1;::::0;;;::::1;18643:17;::::0;18610:55:::1;::::0;18593:12:::1;::::0;-1:-1:-1;;;;;18610:25:0;::::1;::::0;-1:-1:-1;;;18643:17:0;;::::1;-1:-1:-1::0;;;;;18643:17:0::1;::::0;18593:12;18610:55;18593:12;18610:55;18643:17;18610:25;:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:73;;;18680:7;18672:46;;;::::0;-1:-1:-1;;;18672:46:0;;14013:2:1;18672:46:0::1;::::0;::::1;13995:21:1::0;14052:2;14032:18;;;14025:30;14091:28;14071:18;;;14064:56;14137:18;;18672:46:0::1;13811:350:1::0;18672:46:0::1;-1:-1:-1::0;;18725:17:0::1;:21:::0;;-1:-1:-1;;;;18725:21:0::1;::::0;;18382:370::o;35172:91::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;35227:30:::1;35254:1;35227:18;:30::i;:::-;35172:91::o:0;22944:348::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23102:6:::1;:23:::0;-1:-1:-1;;;23102:23:0;::::1;;;23079:20;23155:24;23171:8:::0;23102:23;23155:24:::1;:::i;:::-;23186:6;:39:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;23186:39:0;::::1;-1:-1:-1::0;;;;23186:39:0;;::::1;::::0;;;::::1;::::0;;;23237:49:::1;::::0;23132:47;;-1:-1:-1;23186:39:0;23237:49;;::::1;::::0;::::1;::::0;23186:23:::1;::::0;23237:49:::1;23007:285;;22944:348:::0;:::o;23653:614::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;23752:6:::1;:23:::0;23778:15:::1;-1:-1:-1::0;;;23752:23:0;;::::1;;;:41;23744:79;;;::::0;-1:-1:-1;;;23744:79:0;;14954:2:1;23744:79:0::1;::::0;::::1;14936:21:1::0;14993:2;14973:18;;;14966:30;15032:28;15012:18;;;15005:56;15078:18;;23744:79:0::1;14752:350:1::0;23744:79:0::1;23838:9;::::0;:34:::1;::::0;-1:-1:-1;;;23838:34:0;;23866:4:::1;23838:34;::::0;::::1;6936:51:1::0;23876:13:0;;-1:-1:-1;;;;;23838:9:0::1;::::0;:19:::1;::::0;6909:18:1;;23838:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;23830:94;;;::::0;-1:-1:-1;;;23830:94:0;;15498:2:1;23830:94:0::1;::::0;::::1;15480:21:1::0;15537:2;15517:18;;;15510:30;15576:33;15556:18;;;15549:61;15627:18;;23830:94:0::1;15296:355:1::0;23830:94:0::1;24060:9;::::0;24086:6:::1;::::0;24060:65:::1;::::0;-1:-1:-1;;;24060:65:0;;-1:-1:-1;;;;;24086:6:0;;::::1;24060:65;::::0;::::1;15830:51:1::0;15897:18;;;15890:34;;;24060:9:0;::::1;::::0;:17:::1;::::0;15803:18:1;;24060:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24132:6:0::1;::::0;24195::::1;::::0;;24132:70:::1;::::0;-1:-1:-1;;;24132:70:0;;;;::::1;16359:25:1::0;;;-1:-1:-1;;;;;24195:6:0;;::::1;16400:18:1::0;;;16393:60;24132:6:0;;::::1;::::0;:47:::1;::::0;16332:18:1;;24132:70:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24214:47:0::1;::::0;24247:13;;-1:-1:-1;24214:47:0::1;::::0;-1:-1:-1;24214:47:0;;::::1;23653:614:::0;:::o;27363:376::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;27485:9:::1;::::0;-1:-1:-1;;;;;27465:30:0;;::::1;27485:9:::0;::::1;27465:30;;27457:67;;;::::0;-1:-1:-1;;;27457:67:0;;16666:2:1;27457:67:0::1;::::0;::::1;16648:21:1::0;16705:2;16685:18;;;16678:30;16744:27;16724:18;;;16717:55;16789:18;;27457:67:0::1;16464:349:1::0;27457:67:0::1;-1:-1:-1::0;;;;;27539:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:22;::::1;-1:-1:-1::0;;;27539:22:0;;::::1;;:32;;::::0;::::1;;;;27531:66;;;::::0;-1:-1:-1;;;27531:66:0;;17020:2:1;27531:66:0::1;::::0;::::1;17002:21:1::0;17059:2;17039:18;;;17032:30;-1:-1:-1;;;17078:18:1;;;17071:52;17140:18;;27531:66:0::1;16818:346:1::0;27531:66:0::1;-1:-1:-1::0;;;;;27604:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:31;;;::::1;::::0;::::1;-1:-1:-1::0;;;27604:31:0::1;-1:-1:-1::0;;;;27604:31:0;;::::1;::::0;;;::::1;::::0;;;27629:6;;27645:42:::1;;-1:-1:-1::0;;;;;;27656:12:0;::::1;;::::0;;;:2:::1;:12;::::0;;;;:31;-1:-1:-1;;;27656:31:0;::::1;;;27655:32;27645:42;27642:92;;;27697:29;27717:8;27697:19;:29::i;:::-;27363:376:::0;;:::o;33470:360::-;33609:10;33557:4;33597:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33597:32:0;;;;;;;;;;33644:35;;;;33636:78;;;;-1:-1:-1;;;33636:78:0;;17371:2:1;33636:78:0;;;17353:21:1;17410:2;17390:18;;;17383:30;17449:32;17429:18;;;17422:60;17499:18;;33636:78:0;17169:354:1;33636:78:0;33736:65;33745:10;33757:7;33785:15;33766:16;:34;33736:8;:65::i;:::-;-1:-1:-1;33820:4:0;;33470:360;-1:-1:-1;;;33470:360:0:o;32460:143::-;32531:4;32544:40;32554:10;32566:9;32577:6;32544:9;:40::i;38803:457::-;38960:6;;-1:-1:-1;;;;;38960:6:0;38970:10;38960:20;:46;;;;-1:-1:-1;38985:6:0;:21;-1:-1:-1;;;38985:21:0;;;;38984:22;38960:46;38952:82;;;;-1:-1:-1;;;38952:82:0;;12826:2:1;38952:82:0;;;12808:21:1;12865:2;12845:18;;;12838:30;-1:-1:-1;;;12884:18:1;;;12877:54;12948:18;;38952:82:0;12624:348:1;38952:82:0;39046:6;39041:108;39054:16;;;39041:108;;;39129:7;;39137:1;39129:10;;;;;;;:::i;:::-;;;;;;;39096:2;:12;39099:5;;39105:1;39099:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39096:12:0;;;;;;;;;;;;-1:-1:-1;39096:12:0;:44;;-1:-1:-1;;;;;;39096:44:0;;-1:-1:-1;;;;;39096:44:0;;;;;;;;;;;;;;39072:3;;;;:::i;:::-;;;;39041:108;;;-1:-1:-1;39165:12:0;:34;;-1:-1:-1;;;;;;39217:36:0;;-1:-1:-1;;;;;39165:34:0;;;;;;;;;39217:36;;;-1:-1:-1;;;;;39165:34:0;;;;;;39217:36;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38803:457:0:o;31123:118::-;31190:7;31212:23;31230:4;31212:17;:23::i;26322:1037::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26549:2:::1;26533:14;:18;;;;:42;;;;;26571:4;26555:14;:20;;;;26533:42;:72;;;;;26603:2;26586:15;:19;;;;26533:72;:97;;;;;26626:4;26609:15;:21;;;;26533:97;26517:161;;;::::0;-1:-1:-1;;;26517:161:0;;17730:2:1;26517:161:0::1;::::0;::::1;17712:21:1::0;17769:2;17749:18;;;17742:30;17808:32;17788:18;;;17781:60;17858:18;;26517:161:0::1;17528:354:1::0;26517:161:0::1;26715:1;26703:11;:13;;;:30;;;;;26732:1;26720:11;:13;;;26703:30;26702:68;;;-1:-1:-1::0;26737:14:0::1;::::0;::::1;::::0;:32;::::1;;;-1:-1:-1::0;26755:14:0::1;::::0;::::1;::::0;26737:32:::1;26701:97;;;;;26795:3;26782:11;:16;;;;26701:97;:124;;;;;26822:3;26809:11;:16;;;;26701:124;:151;;;;;26849:3;26836:11;:16;;;;26701:151;:178;;;;;26876:3;26863:11;:16;;;;26701:178;:205;;;;;26903:3;26890:11;:16;;;;26701:205;26685:270;;;::::0;-1:-1:-1;;;26685:270:0;;18089:2:1;26685:270:0::1;::::0;::::1;18071:21:1::0;18128:2;18108:18;;;18101:30;18167:33;18147:18;;;18140:61;18218:18;;26685:270:0::1;17887:355:1::0;26685:270:0::1;26986:14;26962:6;:20;;;:38;;;;;;;;;;;;;;;;;;27031:15;27007:6;:21;;;:39;;;;;;;;;;;;;;;;;;27073:11;27053:6;:17;;;:31;;;;;;;;;;;;;;;;;;27111:11;27091:6;:17;;;:31;;;;;;;;;;;;;;;;;;27149:11;27129:6;:17;;;:31;;;;;;;;;;;;;;;;;;27187:11;27167:6;:17;;;:31;;;;;;;;;;;;;;;;;;27225:11;27205:6;:17;;;:31;;;;;;;;;;;;;;;;;;27272:15;27248:105;;27256:14;27248:105;;;27289:11;27302;27315;27328;27341;27248:105;;;;;;;;;18516:4:1::0;18504:17;;;18486:36;;18558:17;;;18553:2;18538:18;;18531:45;18612:17;;;18607:2;18592:18;;18585:45;18666:17;;18661:2;18646:18;;18639:45;18721:17;;;18715:3;18700:19;;18693:46;18473:3;18458:19;;18247:498;27248:105:0::1;;;;;;;;26322:1037:::0;;;;;;;:::o;27743:213::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27820:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:30;-1:-1:-1;;;27820:30:0;::::1;;;27819:31;27811:59;;;::::0;-1:-1:-1;;;27811:59:0;;18952:2:1;27811:59:0::1;::::0;::::1;18934:21:1::0;18991:2;18971:18;;;18964:30;-1:-1:-1;;;19010:18:1;;;19003:46;19066:18;;27811:59:0::1;18750:340:1::0;27811:59:0::1;-1:-1:-1::0;;;;;27877:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;;:37;;-1:-1:-1;;;;27877:37:0::1;-1:-1:-1::0;;;27877:37:0::1;::::0;;27926:24;::::1;::::0;27877:11;27926:24:::1;27743:213:::0;:::o;26164:154::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;26247:3:::1;26239:6;-1:-1:-1::0;;;;;26239:11:0::1;;;26231:45;;;;-1:-1:-1::0;;;26231:45:0::1;;;;;;;:::i;:::-;26283:6;:29:::0;;-1:-1:-1;;;;;26283:29:0;;::::1;-1:-1:-1::0;;;26283:29:0::1;-1:-1:-1::0;;26283:29:0;;::::1;::::0;;;::::1;::::0;;26164:154::o;35267:236::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35346:22:0;::::1;35338:57;;;::::0;-1:-1:-1;;;35338:57:0;;19297:2:1;35338:57:0::1;::::0;::::1;19279:21:1::0;19336:2;19316:18;;;19309:30;-1:-1:-1;;;19355:18:1;;;19348:52;19417:18;;35338:57:0::1;19095:346:1::0;35338:57:0::1;35430:6;::::0;-1:-1:-1;;;;;35410:27:0;;::::1;35430:6:::0;::::1;35410:27;;35402:60;;;::::0;-1:-1:-1;;;35402:60:0;;19648:2:1;35402:60:0::1;::::0;::::1;19630:21:1::0;19687:2;19667:18;;;19660:30;-1:-1:-1;;;19706:18:1;;;19699:50;19766:18;;35402:60:0::1;19446:344:1::0;35402:60:0::1;35469:28;35488:8;35469:18;:28::i;30311:692::-:0;-1:-1:-1;;;;;30598:11:0;;30377:16;30598:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;30598:20:0;;30377:16;;;;;;30643:23;30601:7;30643:14;:23::i;:::-;30625:41;;30694:26;30712:7;30694:17;:26::i;:::-;-1:-1:-1;;;;;30751:11:0;;;;;;;:2;:11;;;;;:32;30311:692;;;;30673:47;-1:-1:-1;;;;;;;;30751:32:0;;;;30803:21;-1:-1:-1;;;30803:21:0;;;;;-1:-1:-1;;;;30851:28:0;;;;;-1:-1:-1;;;;30908:30:0;;;;;-1:-1:-1;;;;30967:30:0;;;;;;;-1:-1:-1;30311:692:0;-1:-1:-1;;30311:692:0:o;37601:655::-;37668:15;37691:22;37716:23;37731:7;37716:14;:23::i;:::-;37767:6;:24;37691:48;;-1:-1:-1;;;;37767:24:0;;-1:-1:-1;;;;;37767:24:0;37750:41;;37746:505;;;-1:-1:-1;;;;;37844:11:0;;;;;;:2;:11;;;;;:32;:49;;37879:14;;-1:-1:-1;;;37844:32:0;;-1:-1:-1;;;;;37844:32:0;:49;:::i;:::-;-1:-1:-1;;;;;37802:11:0;;;;;;:2;:11;;;;;;:92;;-1:-1:-1;;;;;37802:92:0;;;;-1:-1:-1;;;37802:92:0;-1:-1:-1;;;;37802:92:0;;;;;;;;;;37908:31;;37924:14;;37908:31;;;38007:6;:19;37966:65;;37949:12;;-1:-1:-1;;;;;37966:12:0;;;-1:-1:-1;;;38007:19:0;;;;;;37986:14;;37966:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37948:83;;;38044:7;38040:185;;;-1:-1:-1;38071:4:0;;37601:655;-1:-1:-1;;;37601:655:0:o;38040:185::-;-1:-1:-1;;;;;38142:11:0;;;;;;:2;:11;;;;;:32;:49;;38177:14;;-1:-1:-1;;;38142:32:0;;-1:-1:-1;;;;;38142:32:0;:49;:::i;:::-;-1:-1:-1;;;;;38100:11:0;;;;;;;:2;:11;;;;;:92;;-1:-1:-1;;;;;38100:92:0;;;;-1:-1:-1;;;38100:92:0;-1:-1:-1;;;;38100:92:0;;;;;;;;;;-1:-1:-1;38100:11:0;;37601:655;-1:-1:-1;;37601:655:0:o;37746:505::-;-1:-1:-1;38244:5:0;;37601:655;-1:-1:-1;;37601:655:0:o;34791:303::-;-1:-1:-1;;;;;34882:20:0;;34874:58;;;;-1:-1:-1;;;34874:58:0;;20127:2:1;34874:58:0;;;20109:21:1;20166:2;20146:18;;;20139:30;20205:27;20185:18;;;20178:55;20250:18;;34874:58:0;19925:349:1;34874:58:0;-1:-1:-1;;;;;34947:22:0;;34939:58;;;;-1:-1:-1;;;34939:58:0;;20481:2:1;34939:58:0;;;20463:21:1;20520:2;20500:18;;;20493:30;20559:25;20539:18;;;20532:53;20602:18;;34939:58:0;20279:347:1;34939:58:0;-1:-1:-1;;;;;35004:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:38;;;35054:34;;3013:25:1;;;35054:34:0;;2986:18:1;35054:34:0;;;;;;;;34791:303;;;:::o;28069:470::-;16041:6;;-1:-1:-1;;;;;16041:6:0;16051:10;16041:20;16033:41;;;;-1:-1:-1;;;16033:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28215:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:30;-1:-1:-1;;;28215:30:0;::::1;;;28214:31;28206:59;;;::::0;-1:-1:-1;;;28206:59:0;;18952:2:1;28206:59:0::1;::::0;::::1;18934:21:1::0;18991:2;18971:18;;;18964:30;-1:-1:-1;;;19010:18:1;;;19003:46;19066:18;;28206:59:0::1;18750:340:1::0;28206:59:0::1;-1:-1:-1::0;;;;;28272:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:37;;-1:-1:-1;;;;28272:37:0::1;-1:-1:-1::0;;;28272:37:0::1;::::0;;28316:33:::1;28275:7:::0;28316:15:::1;:33::i;:::-;-1:-1:-1::0;;;;;;28359:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:20;15348:16:::1;-1:-1:-1::0;;;;;28359:20:0;;::::1;:32;28356:139;;;-1:-1:-1::0;;;;;28425:11:0;::::1;;::::0;;;:2:::1;:11;::::0;;;;:20;;28401:45;;-1:-1:-1;;;;;28425:20:0;;::::1;::::0;28401:13:::1;::::0;:45:::1;::::0;28425:20;;-1:-1:-1;;;28401:45:0;::::1;-1:-1:-1::0;;;;;28401:45:0::1;;:::i;:::-;::::0;;-1:-1:-1;;;;;28401:45:0;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;28462:25:0;::::1;-1:-1:-1::0;28462:25:0;;;:16:::1;:25;::::0;;;;28455:32;28356:139:::1;28506:27;::::0;-1:-1:-1;;;;;28506:27:0;::::1;::::0;::::1;::::0;;;::::1;28069:470:::0;:::o;36186:152::-;-1:-1:-1;;;;;36302:8:0;;36246:7;36302:8;;;:2;:8;;;;;:29;-1:-1:-1;;;36302:29:0;;-1:-1:-1;;;;;36302:29:0;36268:23;36302:8;36268:17;:23::i;:::-;:64;;;;:::i;18758:4117::-;-1:-1:-1;;;;;18843:8:0;;;;;;:2;:8;;;;;:17;-1:-1:-1;;;;;18843:17:0;:27;-1:-1:-1;18843:27:0;18835:68;;;;-1:-1:-1;;;18835:68:0;;21069:2:1;18835:68:0;;;21051:21:1;21108:2;21088:18;;;21081:30;21147;21127:18;;;21120:58;21195:18;;18835:68:0;20867:352:1;18835:68:0;18912:24;;;;;;;;18930:6;18912:24;-1:-1:-1;;;;;18912:24:0;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18912:24:0;;;;;;;;;;;;;;;;;;;18951:10;18943:47;;;;-1:-1:-1;;;18943:47:0;;21426:2:1;18943:47:0;;;21408:21:1;21465:2;21445:18;;;21438:30;21504:27;21484:18;;;21477:55;21549:18;;18943:47:0;21224:349:1;18943:47:0;-1:-1:-1;;;;;19005:18:0;;18997:57;;;;-1:-1:-1;;;18997:57:0;;21780:2:1;18997:57:0;;;21762:21:1;21819:2;21799:18;;;21792:30;21858:29;21838:18;;;21831:57;21905:18;;18997:57:0;21578:351:1;18997:57:0;-1:-1:-1;;;;;19069:16:0;;19061:53;;;;-1:-1:-1;;;19061:53:0;;22136:2:1;19061:53:0;;;22118:21:1;22175:2;22155:18;;;22148:30;22214:27;22194:18;;;22187:55;22259:18;;19061:53:0;21934:349:1;19061:53:0;-1:-1:-1;;;;;19130:6:0;;;;;;:2;:6;;;;;:23;-1:-1:-1;;;19130:23:0;;;;19129:24;19121:43;;;;-1:-1:-1;;;19121:43:0;;;;;;;:::i;:::-;19183:10;19180:14;;;;:2;:14;;;;;:31;-1:-1:-1;;;19180:31:0;;;;19179:32;19171:51;;;;-1:-1:-1;;;19171:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19238:8:0;;;;;;:2;:8;;;;;:25;-1:-1:-1;;;19238:25:0;;;;19237:26;19229:45;;;;-1:-1:-1;;;19229:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19332:8:0;;19318:11;19332:8;;;:2;:8;;;;;:18;-1:-1:-1;;;19332:18:0;;;;:49;;-1:-1:-1;;;;;19357:6:0;;;;;;:2;:6;;;;;:16;-1:-1:-1;;;19357:16:0;;;;:24;;19380:1;19332:49;;19357:24;19376:1;19332:49;;;19353:1;19332:49;19318:63;;;;19420:1;:16;;;:40;;;-1:-1:-1;19454:6:0;;-1:-1:-1;;;;;19454:6:0;19440:10;:20;19420:40;19412:76;;;;-1:-1:-1;;;19412:76:0;;22824:2:1;19412:76:0;;;22806:21:1;22863:2;22843:18;;;22836:30;22902:25;22882:18;;;22875:53;22945:18;;19412:76:0;22622:347:1;19412:76:0;19527:6;19535:1;19527:9;:37;;;;-1:-1:-1;19540:15:0;;-1:-1:-1;;;19540:15:0;;:24;:15;15207:1;19540:24;;19527:37;19524:2276;;;19574:15;:23;;-1:-1:-1;;;;19574:23:0;-1:-1:-1;;;19574:23:0;;;19630:15;;;;19609:17;;-1:-1:-1;;;;;19609:36:0;;;-1:-1:-1;;;;;19609:17:0;;;:36;19606:2123;;19678:17;;-1:-1:-1;;;;;;;;19678:17:0;;;;-1:-1:-1;;;;;19727:17:0;19758:18;19755:338;;19818:13;19790:17;;:42;;;;;;;;;;-1:-1:-1;;;;;19790:42:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;19790:42:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19845:17:0;:21;;-1:-1:-1;;19845:21:0;;;19755:338;;;19895:63;19930:13;19944;19895:34;:63::i;:::-;19971:17;:21;;-1:-1:-1;;20005:21:0;;;20044:37;;20067:13;;20052;;20044:37;;19991:1;;20044:37;19755:338;19646:456;;19606:2123;;;20173:18;;20223:14;;-1:-1:-1;;;;;20173:18:0;;;;-1:-1:-1;;;;;20206:31:0;;;20202:1518;;20380:12;;;;20365;;;;20350;;;;20335;;;;20444;;;;20335:27;;:42;;;:57;;;20320:72;;;;;20429:27;;;;;20252:17;;20429:27;;20543:26;;20564:5;20543:26;:::i;:::-;20542:43;;;;:::i;:::-;20523:62;-1:-1:-1;20598:19:0;20652:5;20621:27;20523:62;20621:13;:27;:::i;:::-;20620:37;;;;:::i;:::-;20598:59;;20698:14;20670:17;;:43;;;;;;;;;;-1:-1:-1;;;;;20670:43:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;20670:43:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20831:9:0;;20793:83;;20816:4;;-1:-1:-1;;;;;20831:9:0;20844:30;20860:14;20844:13;:30;:::i;:::-;20793:14;:83::i;:::-;20907:6;;:35;;;-1:-1:-1;;;20907:35:0;;;;20889:15;;-1:-1:-1;;;;;20907:6:0;;:33;;:35;;;;;;;;;;;;;;20889:15;20907:6;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20889:53;;20982:10;20967:13;20960:33;;;;;;;;;;21008:17;21058:12;21042:1;:12;;;21029:25;;:10;:25;;;;:::i;:::-;21028:42;;;;:::i;:::-;21008:62;;21083:17;21133:12;21117:1;:12;;;21104:25;;:10;:25;;;;:::i;:::-;21103:42;;;;:::i;:::-;21083:62;;21158:17;21208:12;21192:1;:12;;;21179:25;;:10;:25;;;;:::i;:::-;21178:42;;;;:::i;:::-;21158:62;-1:-1:-1;21233:17:0;21158:62;21281:12;21253:25;21266:12;21253:10;:25;:::i;:::-;:40;;;;:::i;:::-;:55;;;;:::i;:::-;21436:13;;21233:75;;-1:-1:-1;;;;21436:13:0;;-1:-1:-1;;;;;21436:13:0;21407:25;-1:-1:-1;;;21233:75:0;21407:25;:::i;:::-;21406:43;;;;:::i;:::-;21388:13;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;21463:20:0;:44;;21494:12;;21463:20;;;:44;;21494:12;;-1:-1:-1;;;21463:44:0;;-1:-1:-1;;;;;21463:44:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21463:44:0;;;;;-1:-1:-1;;;;;21463:44:0;;;;;;21550:12;21522:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21522:41:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21522:41:0;;;;;-1:-1:-1;;;;;21522:41:0;;;;;;21604:12;21576:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21576:41:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;21576:41:0;;;;;-1:-1:-1;;;;;21576:41:0;;;;;;21658:12;21630:17;;:41;;;;;;;;;;-1:-1:-1;;;;;21630:41:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;21630:41:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21686:18:0;:22;;-1:-1:-1;;21686:22:0;;;-1:-1:-1;;;;;;;;20202:1518:0;20141:1588;19606:2123;15170:1;21768:24;;-1:-1:-1;;;;21768:24:0;-1:-1:-1;;;21768:24:0;;;19524:2276;21976:6;21984:1;21976:9;;:75;;;;-1:-1:-1;;;;;;22024:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;22024:27:0;;;;22023:28;21976:75;:110;;;;-1:-1:-1;;;;;;22061:6:0;;;;;;:2;:6;;;;;:25;-1:-1:-1;;;22061:25:0;;;;22060:26;21976:110;21972:634;;;22097:11;22111:9;;:46;;22141:1;:16;;;22111:46;;;22123:1;:15;;;22111:46;22097:60;;;-1:-1:-1;22166:15:0;22202:5;22185:15;22097:60;22185:6;:15;:::i;:::-;22184:23;;;;:::i;:::-;22166:41;-1:-1:-1;22216:20:0;22166:41;22216:20;;:::i;:::-;22245:18;:40;;22216:20;;-1:-1:-1;22274:10:0;;22245:18;;:40;;22274:10;;-1:-1:-1;;;;;22245:40:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;22245:40:0;;;;;-1:-1:-1;;;;;22245:40:0;;;;;;22471:23;22477:4;22483:10;22471:5;:23::i;:::-;22551:47;22566:4;22580;22587:10;22551:14;:47::i;:::-;22088:518;;21972:634;22713:19;22719:4;22725:6;22713:5;:19::i;:::-;22739:17;22745:2;22749:6;22739:5;:17::i;:::-;22763:32;22778:4;22784:2;22788:6;22763:14;:32::i;:::-;22804:30;22828:4;22804:15;:30::i;:::-;;22841:28;22865:2;22841:15;:28::i;:::-;;18828:4047;;18758:4117;;;:::o;33834:529::-;-1:-1:-1;;;;;33932:20:0;;33924:63;;;;-1:-1:-1;;;33924:63:0;;23660:2:1;33924:63:0;;;23642:21:1;23699:2;23679:18;;;23672:30;23738:32;23718:18;;;23711:60;23788:18;;33924:63:0;23458:354:1;33924:63:0;-1:-1:-1;;;;;34002:23:0;;33994:64;;;;-1:-1:-1;;;33994:64:0;;24019:2:1;33994:64:0;;;24001:21:1;24058:2;24038:18;;;24031:30;24097;24077:18;;;24070:58;24145:18;;33994:64:0;23817:352:1;33994:64:0;-1:-1:-1;;;;;34089:10:0;;34065:21;34089:10;;;:2;:10;;;;;:19;-1:-1:-1;;;;;34089:19:0;34123:23;;;;34115:67;;;;-1:-1:-1;;;34115:67:0;;24376:2:1;34115:67:0;;;24358:21:1;24415:2;24395:18;;;24388:30;24454:33;24434:18;;;24427:61;24505:18;;34115:67:0;24174:355:1;34115:67:0;-1:-1:-1;;;;;34204:10:0;;;;;;;:2;:10;;;;;;:53;;-1:-1:-1;;;;;;34204:53:0;34234:22;;;-1:-1:-1;;;;;34204:53:0;;;;;;;;;;34269:13;;;;;;;:41;;34234:22;;34269:13;;34204:10;34269:41;;34234:22;;34269:41;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;34269:41:0;;;;;-1:-1:-1;;;;;34269:41:0;;;;;;34339:9;-1:-1:-1;;;;;34322:35:0;34331:6;-1:-1:-1;;;;;34322:35:0;;34350:6;34322:35;;;;3013:25:1;;3001:2;2986:18;;2867:177;34322:35:0;;;;;;;;33917:446;33834:529;;;:::o;24273:1060::-;24401:4;;24482:9;;:23;;;-1:-1:-1;;;24482:23:0;;;;-1:-1:-1;;;;;24401:4:0;;;;24441;;24374:16;;;;24482:9;;;;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24453:52;-1:-1:-1;;;;;24453:52:0;;;-1:-1:-1;;;;;24453:52:0;;;24525:8;-1:-1:-1;;;;;24515:18:0;:9;-1:-1:-1;;;;;24515:18:0;;24512:54;;;24551:6;24512:54;24572:12;;24614:10;;:25;;;;-1:-1:-1;24628:11:0;;24614:25;24610:659;;;-1:-1:-1;24672:13:0;;-1:-1:-1;24687:9:0;24610:659;;;24742:13;24786:9;24720:19;24854:5;24827:23;24844:6;24742:13;24827:23;:::i;:::-;24826:33;;;;:::i;:::-;24804:55;;24912:14;24894;:32;24890:372;;24961:14;;-1:-1:-1;24977:14:0;;-1:-1:-1;24961:14:0;;24977;24890:372;;;25026:19;25075:6;25049:22;25066:5;25049:14;:22;:::i;:::-;25048:33;;;;:::i;:::-;25026:55;;25140:14;25122;:32;;25114:74;;;;-1:-1:-1;;;25114:74:0;;25611:2:1;25114:74:0;;;25593:21:1;25650:2;25630:18;;;25623:30;25689:31;25669:18;;;25662:59;25738:18;;25114:74:0;25409:353:1;25114:74:0;25221:14;-1:-1:-1;25237:14:0;;-1:-1:-1;25237:14:0;;24890:372;24711:558;;;24610:659;25275:52;25310:7;25319;25275:34;:52::i;:::-;24367:966;;;;;;24273:1060;;:::o;34367:420::-;-1:-1:-1;;;;;34438:21:0;;34430:60;;;;-1:-1:-1;;;34430:60:0;;25969:2:1;34430:60:0;;;25951:21:1;26008:2;25988:18;;;25981:30;26047:28;26027:18;;;26020:56;26093:18;;34430:60:0;25767:350:1;34430:60:0;-1:-1:-1;;;;;34522:11:0;;34497:22;34522:11;;;:2;:11;;;;;:20;-1:-1:-1;;;;;34522:20:0;34557:24;;;;34549:64;;;;-1:-1:-1;;;34549:64:0;;26324:2:1;34549:64:0;;;26306:21:1;26363:2;26343:18;;;26336:30;26402:29;26382:18;;;26375:57;26449:18;;34549:64:0;26122:351:1;34549:64:0;-1:-1:-1;;;;;34635:11:0;;;;;;:2;:11;;;;;:55;;-1:-1:-1;;;;;;34635:55:0;34666:23;;;-1:-1:-1;;;;;34635:55:0;;;;-1:-1:-1;34702:30:0;;34666:23;;34635:11;34702:30;;34666:23;;-1:-1:-1;;;;;34702:30:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;34702:30:0;;;;;-1:-1:-1;;;;;34702:30:0;;;;;;34770:1;-1:-1:-1;;;;;34744:37:0;34753:7;-1:-1:-1;;;;;34744:37:0;;34774:6;34744:37;;;;3013:25:1;;3001:2;2986:18;;2867:177;35507:258:0;35587:6;;;-1:-1:-1;;;;;35600:12:0;;;35568:16;35600:12;;;:2;:12;;;;;;:38;;-1:-1:-1;;;;35645:38:0;-1:-1:-1;;;35645:38:0;;;35690:17;;-1:-1:-1;;;;;;35690:17:0;;;;;;35719:40;;35587:6;;;;;;;35719:40;;35568:16;35719:40;35561:204;35507:258;:::o;36342:314::-;-1:-1:-1;;;;;36446:8:0;;36405:7;36446:8;;;:2;:8;;;;;:27;36405:7;;-1:-1:-1;;;36446:27:0;;;;;:58;;-1:-1:-1;;;;;;36475:8:0;;;;;;:2;:8;;;;;:17;15348:16;-1:-1:-1;;;;;36475:17:0;;;:29;36446:58;36445:90;;-1:-1:-1;;;;;36518:8:0;;;;;;:2;:8;;;;;:17;-1:-1:-1;;;;;36518:17:0;36445:90;;;36516:1;36445:90;-1:-1:-1;;;;;36608:22:0;;;;;;:16;:22;;;;;;36572:13;;-1:-1:-1;;;;;36420:115:0;;;;;-1:-1:-1;;;;15299:6:0;36572:25;;36420:115;;36572:25;:::i;:::-;36565:65;;;;:::i;:::-;36549:101;;;;:::i;:::-;36542:108;36342:314;-1:-1:-1;;;36342:314:0:o;25337:419::-;25463:9;;-1:-1:-1;;;;;25463:9:0;25508:4;25520:48;25508:4;25463:9;25554:13;25520:14;:48::i;:::-;25575:4;;;;;;;;;-1:-1:-1;;;;;25575:4:0;-1:-1:-1;;;;;25575:12:0;;25595:9;25575:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25622:4:0;;:34;;-1:-1:-1;;;25622:34:0;;-1:-1:-1;;;;;15848:32:1;;;25622:34:0;;;15830:51:1;15897:18;;;15890:34;;;25622:4:0;;;;-1:-1:-1;25622:13:0;;-1:-1:-1;15803:18:1;;;-1:-1:-1;25622:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25614:78;;;;-1:-1:-1;;;25614:78:0;;26950:2:1;25614:78:0;;;26932:21:1;26989:2;26969:18;;;26962:30;27028:33;27008:18;;;27001:61;27079:18;;25614:78:0;26748:355:1;25614:78:0;25725:9;;:25;;-1:-1:-1;;;25725:25:0;;-1:-1:-1;;;;;6954:32:1;;;25725:25:0;;;6936:51:1;25725:9:0;;;;:14;;6909:18:1;;25725:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25429:327;;25337:419;;:::o;37171:424::-;-1:-1:-1;;;;;37236:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;37236:27:0;;;;37232:358;;-1:-1:-1;;;;;37294:8:0;;37273:18;37294:8;;;:2;:8;;;;;:17;-1:-1:-1;;;;;37294:17:0;15348:16;37323:24;;37320:263;;;37359:19;37381:20;37394:7;37381:10;:20;:::i;:::-;37359:42;-1:-1:-1;15348:16:0;37424:23;;37423:39;;37461:1;37423:39;;;37449:11;37423:39;37412:50;;;;:::i;:::-;;;37497:7;37473:13;;:32;;;;;;;;;;-1:-1:-1;;;;;37473:32:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;37473:32:0;;;;;-1:-1:-1;;;;;37473:32:0;;;;;;37565:7;37549:13;;:23;;;;:::i;:::-;-1:-1:-1;;;;;37516:22:0;;;;;;:16;:22;;;;;:57;;:22;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;;;37320:263:0;37264:326;37171:424;;:::o;36724:381::-;-1:-1:-1;;;;;36789:8:0;;;;;;:2;:8;;;;;:27;-1:-1:-1;;;36789:27:0;;;;36785:315;;-1:-1:-1;;;;;36847:8:0;;36826:18;36847:8;;;:2;:8;;;;;:17;-1:-1:-1;;;;;36847:17:0;15348:16;36877:20;36890:7;36847:17;36877:20;:::i;:::-;36876:36;36873:220;;;15348:16;36936:22;;36935:37;;36971:1;36935:37;;;36960:10;36935:37;36924:48;;;;:::i;:::-;;;37007:7;36983:13;;:32;;;;;;;;;;-1:-1:-1;;;;;36983:32:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;36983:32:0;;;;;-1:-1:-1;;;;;36983:32:0;;;;;;37075:7;37059:13;;:23;;;;:::i;:::-;-1:-1:-1;;;;;37026:22:0;;;;;;:16;:22;;;;;:57;;:22;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;;36817:283:0;36724:381;;:::o;362:127:1:-;423:10;418:3;414:20;411:1;404:31;454:4;451:1;444:15;478:4;475:1;468:15;494:168;534:7;600:1;596;592:6;588:14;585:1;582:21;577:1;570:9;563:17;559:45;556:71;;;607:18;;:::i;:::-;-1:-1:-1;647:9:1;;494:168::o;667:217::-;707:1;733;723:132;;777:10;772:3;768:20;765:1;758:31;812:4;809:1;802:15;840:4;837:1;830:15;723:132;-1:-1:-1;869:9:1;;667:217::o;889:128::-;929:3;960:1;956:6;953:1;950:13;947:39;;;966:18;;:::i;:::-;-1:-1:-1;1002:9:1;;889:128::o;1022:242::-;1061:3;-1:-1:-1;;;;;1140:2:1;1137:1;1133:10;1170:2;1167:1;1163:10;1201:3;1197:2;1193:12;1188:3;1185:21;1182:47;;;1209:18;;:::i;:::-;1245:13;;1022:242;-1:-1:-1;;;;1022:242:1:o;1269:597::-;1381:4;1410:2;1439;1428:9;1421:21;1471:6;1465:13;1514:6;1509:2;1498:9;1494:18;1487:34;1539:1;1549:140;1563:6;1560:1;1557:13;1549:140;;;1658:14;;;1654:23;;1648:30;1624:17;;;1643:2;1620:26;1613:66;1578:10;;1549:140;;;1707:6;1704:1;1701:13;1698:91;;;1777:1;1772:2;1763:6;1752:9;1748:22;1744:31;1737:42;1698:91;-1:-1:-1;1850:2:1;1829:15;-1:-1:-1;;1825:29:1;1810:45;;;;1857:2;1806:54;;1269:597;-1:-1:-1;;;1269:597:1:o;1871:131::-;-1:-1:-1;;;;;1946:31:1;;1936:42;;1926:70;;1992:1;1989;1982:12;2007:315;2075:6;2083;2136:2;2124:9;2115:7;2111:23;2107:32;2104:52;;;2152:1;2149;2142:12;2104:52;2191:9;2178:23;2210:31;2235:5;2210:31;:::i;:::-;2260:5;2312:2;2297:18;;;;2284:32;;-1:-1:-1;;;2007:315:1:o;2615:247::-;2674:6;2727:2;2715:9;2706:7;2702:23;2698:32;2695:52;;;2743:1;2740;2733:12;2695:52;2782:9;2769:23;2801:31;2826:5;2801:31;:::i;3256:456::-;3333:6;3341;3349;3402:2;3390:9;3381:7;3377:23;3373:32;3370:52;;;3418:1;3415;3408:12;3370:52;3457:9;3444:23;3476:31;3501:5;3476:31;:::i;:::-;3526:5;-1:-1:-1;3583:2:1;3568:18;;3555:32;3596:33;3555:32;3596:33;:::i;:::-;3256:456;;3648:7;;-1:-1:-1;;;3702:2:1;3687:18;;;;3674:32;;3256:456::o;3906:159::-;3973:20;;4033:6;4022:18;;4012:29;;4002:57;;4055:1;4052;4045:12;4002:57;3906:159;;;:::o;4070:184::-;4128:6;4181:2;4169:9;4160:7;4156:23;4152:32;4149:52;;;4197:1;4194;4187:12;4149:52;4220:28;4238:9;4220:28;:::i;4259:180::-;4318:6;4371:2;4359:9;4350:7;4346:23;4342:32;4339:52;;;4387:1;4384;4377:12;4339:52;-1:-1:-1;4410:23:1;;4259:180;-1:-1:-1;4259:180:1:o;4444:284::-;4502:6;4555:2;4543:9;4534:7;4530:23;4526:32;4523:52;;;4571:1;4568;4561:12;4523:52;4610:9;4597:23;-1:-1:-1;;;;;4653:5:1;4649:30;4642:5;4639:41;4629:69;;4694:1;4691;4684:12;4733:367;4796:8;4806:6;4860:3;4853:4;4845:6;4841:17;4837:27;4827:55;;4878:1;4875;4868:12;4827:55;-1:-1:-1;4901:20:1;;-1:-1:-1;;;;;4933:30:1;;4930:50;;;4976:1;4973;4966:12;4930:50;5013:4;5005:6;5001:17;4989:29;;5073:3;5066:4;5056:6;5053:1;5049:14;5041:6;5037:27;5033:38;5030:47;5027:67;;;5090:1;5087;5080:12;5027:67;4733:367;;;;;:::o;5105:910::-;5245:6;5253;5261;5269;5277;5285;5338:3;5326:9;5317:7;5313:23;5309:33;5306:53;;;5355:1;5352;5345:12;5306:53;5395:9;5382:23;-1:-1:-1;;;;;5465:2:1;5457:6;5454:14;5451:34;;;5481:1;5478;5471:12;5451:34;5520:70;5582:7;5573:6;5562:9;5558:22;5520:70;:::i;:::-;5609:8;;-1:-1:-1;5494:96:1;-1:-1:-1;5697:2:1;5682:18;;5669:32;;-1:-1:-1;5713:16:1;;;5710:36;;;5742:1;5739;5732:12;5710:36;;5781:72;5845:7;5834:8;5823:9;5819:24;5781:72;:::i;:::-;5105:910;;;;-1:-1:-1;5872:8:1;5954:2;5939:18;;5926:32;;6005:2;5990:18;;;5977:32;;-1:-1:-1;5105:910:1;-1:-1:-1;;;;5105:910:1:o;6280:118::-;6366:5;6359:13;6352:21;6345:5;6342:32;6332:60;;6388:1;6385;6378:12;6403:382;6468:6;6476;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;6584:9;6571:23;6603:31;6628:5;6603:31;:::i;:::-;6653:5;-1:-1:-1;6710:2:1;6695:18;;6682:32;6723:30;6682:32;6723:30;:::i;:::-;6772:7;6762:17;;;6403:382;;;;;:::o;6998:121::-;7083:10;7076:5;7072:22;7065:5;7062:33;7052:61;;7109:1;7106;7099:12;7124:245;7182:6;7235:2;7223:9;7214:7;7210:23;7206:32;7203:52;;;7251:1;7248;7241:12;7203:52;7290:9;7277:23;7309:30;7333:5;7309:30;:::i;8773:388::-;8841:6;8849;8902:2;8890:9;8881:7;8877:23;8873:32;8870:52;;;8918:1;8915;8908:12;8870:52;8957:9;8944:23;8976:31;9001:5;8976:31;:::i;:::-;9026:5;-1:-1:-1;9083:2:1;9068:18;;9055:32;9096:33;9055:32;9096:33;:::i;9166:156::-;9232:20;;9292:4;9281:16;;9271:27;;9261:55;;9312:1;9309;9302:12;9327:610;9428:6;9436;9444;9452;9460;9468;9476;9529:3;9517:9;9508:7;9504:23;9500:33;9497:53;;;9546:1;9543;9536:12;9497:53;9569:28;9587:9;9569:28;:::i;:::-;9559:38;;9616:37;9649:2;9638:9;9634:18;9616:37;:::i;:::-;9606:47;;9672:36;9704:2;9693:9;9689:18;9672:36;:::i;:::-;9662:46;;9727:36;9759:2;9748:9;9744:18;9727:36;:::i;:::-;9717:46;;9782:37;9814:3;9803:9;9799:19;9782:37;:::i;:::-;9772:47;;9838:37;9870:3;9859:9;9855:19;9838:37;:::i;:::-;9828:47;;9894:37;9926:3;9915:9;9911:19;9894:37;:::i;:::-;9884:47;;9327:610;;;;;;;;;;:::o;10877:332::-;11079:2;11061:21;;;11118:1;11098:18;;;11091:29;-1:-1:-1;;;11151:2:1;11136:18;;11129:39;11200:2;11185:18;;10877:332::o;12274:345::-;12476:2;12458:21;;;12515:2;12495:18;;;12488:30;-1:-1:-1;;;12549:2:1;12534:18;;12527:51;12610:2;12595:18;;12274:345::o;12977:127::-;13038:10;13033:3;13029:20;13026:1;13019:31;13069:4;13066:1;13059:15;13093:4;13090:1;13083:15;13109:135;13148:3;-1:-1:-1;;13169:17:1;;13166:43;;;13189:18;;:::i;:::-;-1:-1:-1;13236:1:1;13225:13;;13109:135::o;14519:228::-;14558:3;14586:10;14623:2;14620:1;14616:10;14653:2;14650:1;14646:10;14684:3;14680:2;14676:12;14671:3;14668:21;14665:47;;;14692:18;;:::i;15107:184::-;15177:6;15230:2;15218:9;15209:7;15205:23;15201:32;15198:52;;;15246:1;15243;15236:12;15198:52;-1:-1:-1;15269:16:1;;15107:184;-1:-1:-1;15107:184:1:o;15935:245::-;16002:6;16055:2;16043:9;16034:7;16030:23;16026:32;16023:52;;;16071:1;16068;16061:12;16023:52;16103:9;16097:16;16122:28;16144:5;16122:28;:::i;19795:125::-;19835:4;19863:1;19860;19857:8;19854:34;;;19868:18;;:::i;:::-;-1:-1:-1;19905:9:1;;19795:125::o;20631:231::-;20670:4;-1:-1:-1;;;;;20769:10:1;;;;20739;;20791:12;;;20788:38;;;20806:18;;:::i;:::-;20843:13;;20631:231;-1:-1:-1;;;20631:231:1:o;22288:329::-;22490:2;22472:21;;;22529:1;22509:18;;;22502:29;-1:-1:-1;;;22562:2:1;22547:18;;22540:36;22608:2;22593:18;;22288:329::o;22974:238::-;23013:3;-1:-1:-1;;;;;23088:2:1;23085:1;23081:10;23118:2;23115:1;23111:10;23149:3;23145:2;23141:12;23136:3;23133:21;23130:47;;;23157:18;;:::i;23217:236::-;23256:3;-1:-1:-1;;;;;23329:2:1;23326:1;23322:10;23359:2;23356:1;23352:10;23390:3;23386:2;23382:12;23377:3;23374:21;23371:47;;;23398:18;;:::i;24534:253::-;24574:3;-1:-1:-1;;;;;24663:2:1;24660:1;24656:10;24693:2;24690:1;24686:10;24724:3;24720:2;24716:12;24711:3;24708:21;24705:47;;;24732:18;;:::i;24792:188::-;24871:13;;-1:-1:-1;;;;;24913:42:1;;24903:53;;24893:81;;24970:1;24967;24960:12;24985:419;25072:6;25080;25088;25141:2;25129:9;25120:7;25116:23;25112:32;25109:52;;;25157:1;25154;25147:12;25109:52;25180:40;25210:9;25180:40;:::i;:::-;25170:50;;25239:49;25284:2;25273:9;25269:18;25239:49;:::i;:::-;25229:59;;25331:2;25320:9;25316:18;25310:25;25344:30;25368:5;25344:30;:::i;:::-;25393:5;25383:15;;;24985:419;;;;;:::o;26478:265::-;26517:3;26545:9;;;26570:10;;-1:-1:-1;;;;;26589:27:1;;;26582:35;;26566:52;26563:78;;;26621:18;;:::i;:::-;-1:-1:-1;;;26668:19:1;;;26661:27;;26653:36;;26650:62;;;26692:18;;:::i;:::-;-1:-1:-1;;26728:9:1;;26478:265::o;27108:267::-;27147:4;27176:9;;;27201:10;;-1:-1:-1;;;27220:19:1;;27213:27;;27197:44;27194:70;;;27244:18;;:::i;:::-;-1:-1:-1;;;;;27291:27:1;;27284:35;;27276:44;;27273:70;;;27323:18;;:::i;:::-;-1:-1:-1;;27360:9:1;;27108:267::o

Swarm Source

ipfs://30a880777b528dc886cd44823da20dc151dbd0bf0ac554c080673c1ef60137db
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.