Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
DeFi
Overview
Max Total Supply
410,758,768,899.150067678 FROGEX
Holders
561 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$119,877.48
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
408,006,288.044573924 FROGEXValue
$119.07 ( ~0.0508381493825584 Eth) [0.0993%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FrogeX
Compiler Version
v0.8.10+commit.fc410830
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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.