More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 10034506 | 12 hrs ago | IN | 0 S | 0.00256245 | ||||
Upgrade Apprecia... | 10033885 | 12 hrs ago | IN | 0 S | 0.00589479 | ||||
Set APY | 10033040 | 12 hrs ago | IN | 0 S | 0.00552057 | ||||
Approve | 10032744 | 12 hrs ago | IN | 0 S | 0.00256245 | ||||
HARD_UPGRADE | 10029118 | 12 hrs ago | IN | 0 S | 0.00813538 | ||||
Set AMM Pair | 10029011 | 12 hrs ago | IN | 0 S | 0.00507892 | ||||
Approve | 10028537 | 12 hrs ago | IN | 0 S | 0.00256575 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10027819 | 12 hrs ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
EGGNOG
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IDEXV2Router0201 { function factory() external pure returns (address); function WETH() external pure returns (address); struct route { /// @dev token from address from; /// @dev token to address to; /// @dev is stable route bool stable; } function getReserves( address tokenA, address tokenB, bool stable ) external view returns (uint256 reserveA, uint256 reserveB); function getAmountsOut(uint256 amountIn, route[] memory routes) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, route[] memory routes) external view returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); } interface IDEXV2ROUTER02 is IDEXV2Router0201 { function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, route[] calldata routes, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IDEXV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IDEXV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB, bool stable ) external view returns (address _pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB, bool stable ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } } interface IERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } interface ISTAKE { function swap( address _router, address swaptoken, address print ) external; function stake(uint256 value) external; function withdraw(uint256 value, address receiver) external; function claimReward(address _printer) external; function setPortion(uint256 _treasery, uint256 _printing) external; function setStake( uint256 _minimum, uint256 _tax, bool _on ) external; function SafeTransferToken( address _tokenAdd, address to, bool _transferETH ) external returns (bool); } contract Stake is ISTAKE { ///////// using libraries \\\\\\\\\ using SafeMath for uint256; event Staked(address _stacker, uint256 amount); event Printed(address _printer, uint256 Amount); event Withdraw(address _stackers, uint256 amount, bool out); event DistributeReward( address _rewardToken, uint256 amount, uint256 totalStackers ); event Claim(address _stacker, address _rewardToken, uint256 amount); address public Owner; address public immutable _callerToken; // authority contract which can regulate this address public nativeCoin; // native Wrraped coin address address public BURNED_ADDRESS = address(0xdead); bool stakeOn; uint256 claimTax; uint256 MINIMUM_STAKE_AMOUNT = 100000000000000000000; //100 Eggnog uint256 public totalStacked; uint256 printingPortion = 400000000000000000; //40% uint256 burningPortion = 600000000000000000; //60% struct ClaimInfo { uint256 totalCollectedClaim; uint256 pendingClaim; } bool permission = true; //permission will false when printing reward bool isEntered; //re-entrancy block mapping(address => mapping(address => ClaimInfo)) public claim; mapping(address => bool) public IsStacker; mapping(address => uint256) public stacked; mapping(address => uint256) indexByAdd; mapping(address => uint256) reseaveReward; address[] public stackers; modifier onlyToken() { require(msg.sender == _callerToken); permission = false; _; permission = true; } modifier onlyOwner() { require(msg.sender == Owner, "Only owner can call"); _; } modifier reentrancyGurd() { require(!isEntered); isEntered = true; _; isEntered = false; } constructor(address _nativeCoin, address _owner) { require(_nativeCoin != address(0), "invalid nativeCoin address"); nativeCoin = _nativeCoin; _callerToken = msg.sender; Owner = _owner; } receive() external payable {} event swapPrintedToken(uint256 _printAmount); function setBurningWallet(address _burned) external onlyOwner { require(_burned != address(0) && _burned != BURNED_ADDRESS); BURNED_ADDRESS = _burned; } function setPortion(uint256 _treasery, uint256 _printing) external onlyOwner { burningPortion = _treasery; printingPortion = _printing; } function setStake( uint256 _minimum, uint256 _tax, bool _on ) external onlyOwner { claimTax = _tax; stakeOn = _on; MINIMUM_STAKE_AMOUNT = _minimum; } function swap( address _router, address swaptoken, address printToken ) external onlyToken { uint256 finalAmount; if (swaptoken == printToken) { finalAmount = (IERC20(swaptoken).balanceOf(address(this))).sub( reseaveReward[swaptoken] ); } else { uint256 initBal = IERC20(printToken).balanceOf(address(this)); uint256 _amount = IERC20(swaptoken).balanceOf(address(this)).sub( reseaveReward[swaptoken] ); TransferHelper.safeApprove(swaptoken, _router, _amount); IDEXV2Router0201.route[] memory pathroutes; if (swaptoken == nativeCoin || printToken == nativeCoin) { pathroutes = new IDEXV2Router0201.route[](1); //native swap pathroutes[0] = IDEXV2Router0201.route({ from: swaptoken, to: printToken, stable: false }); } else { //token to token swap pathroutes = new IDEXV2Router0201.route[](2); //native swap pathroutes[0] = IDEXV2Router0201.route({ from: swaptoken, to: nativeCoin, stable: false }); pathroutes[1] = IDEXV2Router0201.route({ from: nativeCoin, to: printToken, stable: false }); } uint256[] memory amounts = IDEXV2ROUTER02(_router).getAmountsOut( _amount, pathroutes ); if (amounts[1] > 100) { IDEXV2ROUTER02(_router) .swapExactTokensForTokensSupportingFeeOnTransferTokens( _amount, 0, pathroutes, address(this), block.timestamp ); finalAmount = (IERC20(printToken).balanceOf(address(this))).sub( initBal ); emit Printed(printToken, finalAmount); } } if (finalAmount > 0) { uint256 burningAmount = (finalAmount.mul(burningPortion)).div( burningPortion.add(printingPortion) ); if (burningAmount > 0) { TransferHelper.safeTransfer( printToken, BURNED_ADDRESS, burningAmount ); } uint256 _distribute = finalAmount.sub(burningAmount); if (_distribute > 0) _distributeReward(printToken, _distribute); } } function _distributeReward(address _printerAdd, uint256 amount) private { uint256 _td; uint256 returnAmount; uint256 _totalstaker = stackers.length; if (stakeOn && _totalstaker > 0) { for (uint256 i = 0; i < _totalstaker; i++) { uint256 _rA = ((stacked[stackers[i]]).mul(amount)).div( totalStacked ); claim[stackers[i]][_printerAdd].pendingClaim += _rA; _td = _td.add(_rA); } reseaveReward[_printerAdd] += _td; returnAmount = amount.sub(_td); emit DistributeReward(_printerAdd, _td, _totalstaker); } else { returnAmount = amount; } if (returnAmount > 0) { TransferHelper.safeTransfer( _printerAdd, _callerToken, returnAmount ); } } function stake(uint256 value) external { require( value >= MINIMUM_STAKE_AMOUNT && permission /*re-entrancy when printing permission*/ ); TransferHelper.safeTransferFrom( _callerToken, msg.sender, address(this), value ); stacked[msg.sender] = stacked[msg.sender].add(value); totalStacked = totalStacked.add(value); if (!IsStacker[msg.sender]) { IsStacker[msg.sender] = true; indexByAdd[msg.sender] = stackers.length; stackers.push(msg.sender); } emit Staked(msg.sender, value); } function withdraw(uint256 value, address receiver) external reentrancyGurd { require( IsStacker[msg.sender] && value <= stacked[msg.sender] && permission /*re-entrancy when printing permission*/ ); stacked[msg.sender] = stacked[msg.sender].sub(value); totalStacked = totalStacked.sub(value); TransferHelper.safeTransfer(_callerToken, receiver, value); if (stacked[msg.sender] == 0) { IsStacker[msg.sender] = false; stackers[indexByAdd[msg.sender]] = stackers[stackers.length - 1]; stackers.pop(); emit Withdraw(msg.sender, value, true); } else { emit Withdraw(msg.sender, value, false); } } function claimReward(address _printer) external reentrancyGurd { uint256 _claim = claim[msg.sender][_printer].pendingClaim; require( _claim > 0 && reseaveReward[_printer] >= _claim && permission, /*re-entrancy when printing permission*/ "INSUFFICIENT RESERVE REWARD" ); claim[msg.sender][_printer].pendingClaim -= _claim; claim[msg.sender][_printer].totalCollectedClaim += _claim; reseaveReward[_printer] -= _claim; uint256 ct = (_claim.mul(claimTax)).div(1000000000000000000); if (ct > 0) { TransferHelper.safeTransfer(_printer, BURNED_ADDRESS, ct); } TransferHelper.safeTransfer(_printer, msg.sender, _claim.sub(ct)); emit Claim(msg.sender, _printer, _claim.sub(ct)); } function SafeTransferToken( address _tokenAdd, address to, bool _transferETH ) external onlyOwner returns (bool) { require(to != address(0), "ERC20: transfer to the zero address"); uint256 _surplasAmount = _transferETH ? address(this).balance : (IERC20(_tokenAdd).balanceOf(address(this))).sub( reseaveReward[_tokenAdd] ); require( _surplasAmount > 0, "Transfer amount must be greater than zero" ); if (_transferETH) { TransferHelper.safeTransferETH(to, _surplasAmount); } else TransferHelper.safeTransfer(_tokenAdd, to, _surplasAmount); return true; } function transferOwnership(address _owner) external onlyOwner { require(_owner != address(0), "INVALID ADD"); Owner = _owner; } } contract EGGNOG is IERC20 { using SafeMath for uint256; address public Owner; string constant _name = "EGGNOG"; string constant _symbol = "Eggnog"; uint8 constant _decimals = 18; uint256 public totalSupply = 10000000 * (10**_decimals); // 200M Initial supply uint256 constant maxSupply = 69420000000 * (10**_decimals); // 69B 420M Max Supply; uint256 public BLAST_THRESHOLD = 65000000000 * (10**_decimals); //65B threshold for regular mode uint256 BLAST_THRESHOLD_INCREASING_RATE = 20000000000000000; //2% event SwapBackSuccess( uint256 tokenAmount, uint256 ETHAmountReceived, bool success ); event Tx( uint256 amount, uint256 newAmount, uint256 mintAmount, uint256 contractAmount ); event StakeContractChanges(address Address); event UpgradedMode( string _mode, uint256 ActivateAt, uint256 activatePriceAt ); uint256 public BURNING_FEE = 300000000000000000; // 20% treasury fee uint256 public PRINTING_FEE = 300000000000000000; // 20% treasury fee address public PRINTER_TOKEN = 0xf26Ff70573ddc8a90Bd7865AF8d7d70B8Ff019bC; //egg address PEG_TOKEN_ADDRESS; ISTAKE public eggnog_stake; IDEXV2ROUTER02 public DEXV2Router = IDEXV2ROUTER02(0x1D368773735ee1E678950B7A97bcA2CafB330CDc); //shadow router02 IDEXV2Pair public DEXV2Pair; struct balanceInfo { uint256 balance; uint256 update; } mapping(address => balanceInfo) _balances; mapping(address => mapping(address => uint256)) _allowances; mapping(address => bool) public IsExcludeFromFee; mapping(address => bool) public IsExcludeFromMaxTx; mapping(address => bool) public IsLiquidityProvider; mapping(address => bool) public AMMPair; bool IsEntered; uint256 public immutable buyFees = 50000000000000000; //5% uint256 public immutable sellFees = 30000000000000000; //3% uint256 immutable Blast_Fee = 8000000000000000; //0.8% bool public BLAST_MODE; bool STABLE_MODE; bool public HATCH_MODE; bool VOLUME_MODE; bool public APY_MODE; bool public PRINTING_ENABLE = true; uint256 constant pegDenominator = 10**(_decimals); // Peg calculation denominator according to decimal number //For APY uint256 public APY_UPDATED_AT; uint256 public Expedted_price; uint256 public APY_PERIOD; uint256 public APY_RATE_PER_PERIOD; //For HFT trading bool HFT; // HFT => High frequency Trading Mode (Demotivate Holder to early sell with high tax) uint256 HFTFee = 20000000000000000; //2% uint256 QuickSellFee = 10000000000000000; //1% uint256 HFTTimingThreshold = 60 * 60; // HFT within an Hour uint256 QuickSellTimingThreshold = 7 * 24 * 60 * 60; // QuickSell with in a week; //For Jump Mode uint256 public Hatch_THRESHOLD = 500000000 * (10**_decimals); //amount of peg token in lp pool uint256 public Reserve_flactuate_rate = 200000000000000000; //on 4x of lp growth uint256 public peg_flactuate_rate = 20000000000000000; //10% of peg balance uint256 public RESERVE_PEG_LP; uint256 public LAST_RESERVE_PEG_LP; //For swap back uint256 public RESERVE_FOR_PRINT; uint256 MINIMUM_SWAPBACK = 10000000000000000000; //10 eggnog //Limited TX mode (LTM) bool LTM = true; uint256 immutable GSL = 100000000000000000; // General sell limit (GSL) => 10% of peg $eggnog amount can sell at a time On LLS mode. //For price appreciation and depreciation bool public Buy_Appreciation_Mode; bool public Sell_Depreciation_Mode; uint256 public Sell_Depreciation_Rate; uint256 public Buy_Appreciation_Rate; uint256 public HigherThreshold; uint256 public LowerThreshold; uint256 public App_Rate; uint256 BuyAppTxLimit; uint256 SellDepTxLimit; bool init; uint256 initialPrice; struct route { /// @dev token from address from; /// @dev token to address to; /// @dev is stable route bool stable; } modifier onlyOwner() { require(msg.sender == Owner, "Caller isn't owner"); _; } modifier reentrancyGurd() { require(IsEntered == false); IsEntered = true; _; IsEntered = false; } constructor() { Owner = msg.sender; IsLiquidityProvider[msg.sender] = true; eggnog_stake = new Stake(DEXV2Router.WETH(), msg.sender); IsExcludeFromMaxTx[address(this)] = true; IsExcludeFromMaxTx[address(eggnog_stake)] = true; _balances[msg.sender].balance = totalSupply; } receive() external payable {} function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account].balance; } function transfer(address to, uint256 value) public virtual returns (bool) { _transfer(msg.sender, to, value); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 value) public virtual returns (bool) { require(spender != address(0), "INVALID ZERO ADD"); _allowances[msg.sender][spender] += value; emit Approval(msg.sender, spender, value); return true; } function transferFrom( address from, address to, uint256 value ) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } //////////////////////////////////// internal functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ function _spendAllowance( address owner, address spender, uint256 value ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= value, "Exceed Allowance"); unchecked { _allowances[owner][spender] = currentAllowance - value; } } } function _mint(address account, uint256 value) private { require(account != address(0), "INVALID MINTER ADDRESS"); if (totalSupply < maxSupply) { if (totalSupply.add(value) > maxSupply) { uint256 _r = maxSupply.sub(totalSupply); //shouldn't exceed max supply totalSupply += _r; _balances[account].balance = (_balances[account].balance).add( _r ); } else { _balances[account].balance = (_balances[account].balance).add( value ); totalSupply += value; } } if (totalSupply >= BLAST_THRESHOLD && BLAST_THRESHOLD != maxSupply) { BLAST_MODE = true; BLAST_THRESHOLD = totalSupply == maxSupply ? maxSupply : (BLAST_THRESHOLD.mul(BLAST_THRESHOLD_INCREASING_RATE)).div( pegDenominator ); BURNING_FEE = PRINTING_FEE = 500000000000000000; emit UpgradedMode("Blast", block.timestamp, Expedted_price); } emit Transfer(address(0), account, value); } function swapTokensForPegToken(uint256 tokenAmount) private returns (uint256 swaped) { // generate the DEX pair path of token -> wETH IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); _allowances[address(this)][address(DEXV2Router)] += tokenAmount; uint256 _preBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(eggnog_stake) ); // execute the swap DEXV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH pathroutes, address(eggnog_stake), block.timestamp ); return (IERC20(PEG_TOKEN_ADDRESS).balanceOf(address(eggnog_stake))).sub( _preBal ); } function swapBack() private { uint256 contractBalance = _balances[address(this)].balance; if (RESERVE_FOR_PRINT < MINIMUM_SWAPBACK) { return; } if (contractBalance >= RESERVE_FOR_PRINT) { uint256 AMountToSwapForPegToken = RESERVE_FOR_PRINT; uint256 _maxSwap = LTM ? MaximumTxOnLTM() : (totalSupply.mul(2)).div(100); //max amount for swapback if (RESERVE_FOR_PRINT > _maxSwap) AMountToSwapForPegToken = _maxSwap; swapTokensForPegToken(AMountToSwapForPegToken); eggnog_stake.swap( address(DEXV2Router), PEG_TOKEN_ADDRESS, PRINTER_TOKEN ); RESERVE_FOR_PRINT = RESERVE_FOR_PRINT.sub(AMountToSwapForPegToken); } } function _transfer( address from, address to, uint256 amount ) private returns (bool) { require(from != address(0) && !AMMPair[to], "INVALID SENDER WALLET"); require( from == address(this) ? true : IsEntered == false, "Reentrancy Err" ); IsEntered = true; uint256 feeAmount; //updating sender balance uint256 fromBalance = _balances[from].balance; require(fromBalance >= amount, "INSUFFICIENT SENDER BALANCE"); unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from].balance = fromBalance - amount; } //ON BUY if ( from == address(DEXV2Pair) && !IsLiquidityProvider[to] && !BLAST_MODE ) { feeAmount = !IsExcludeFromFee[to] ? (amount.mul(buyFees)).div(pegDenominator) : 0; _brebase(amount); _update(from, to, amount.sub(feeAmount)); //update receiver balance _balances[to].update = block.timestamp; // update buy timestamp For HFT trading } //ON SELL else if ( to == address(DEXV2Pair) && !IsLiquidityProvider[from] && !BLAST_MODE ) { uint256 _sellAmount = MaximumTxOnLTM(); require( !IsExcludeFromMaxTx[from] && LTM ? amount <= _sellAmount : true, "EXCEED LTM SELL LIMIT" ); feeAmount = !IsExcludeFromFee[from] && Sell_Depreciation_Mode ? (amount.mul(sellFees)).div(pegDenominator) : 0; //No sell taxes in hard peg stable mode; if (HFT && !IsExcludeFromFee[from]) { uint256 HFTaxAmount = (block.timestamp).sub( _balances[from].update ) <= HFTTimingThreshold ? (amount.mul(HFTFee)).div(pegDenominator) : (block.timestamp).sub(_balances[from].update) <= QuickSellTimingThreshold ? (amount.mul(QuickSellFee.mul(10))).div(pegDenominator) : 0; feeAmount = feeAmount.add(HFTaxAmount); } if ( from != address(this) && from != address(eggnog_stake) && !IsExcludeFromFee[from] && PRINTING_ENABLE ) swapBack(); _srebase(from, amount.sub(feeAmount), feeAmount); } //if(isTransfer || IsLiquidityProvider[from] || IsLiquidityProvider[to] || BLAST_MODE) else { if (BLAST_MODE) { if (from == address(DEXV2Pair) && !IsExcludeFromFee[to]) feeAmount = (amount.mul(Blast_Fee)).div(pegDenominator); if (to == address(DEXV2Pair) && !IsExcludeFromFee[from]) { uint256 _price; feeAmount = (amount.mul(Blast_Fee)).div(pegDenominator); if (PRINTING_ENABLE && from != address(this)) swapBack(); (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair .getReserves(); uint256 amountWithoutFee = amount.sub(feeAmount); IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); uint _amountOut = DEXV2Router.getAmountsOut(amountWithoutFee, pathroutes)[1]; if (DEXV2Pair.token0() == address(this)) { _price = ((reserve1.sub(_amountOut)).mul(pegDenominator)) .div(reserve0.add(amountWithoutFee)); RESERVE_PEG_LP = reserve1.sub(_amountOut); } else { _price = ((reserve0.sub(_amountOut)).mul(pegDenominator)) .div(reserve1.add(amountWithoutFee)); RESERVE_PEG_LP = reserve0.sub(_amountOut); } if (_price <= Expedted_price) { BLAST_MODE = false; Expedted_price = _price; BURNING_FEE = PRINTING_FEE = 300000000000000000; _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; } } } else { if (from != address(DEXV2Pair) && to != address(DEXV2Pair)) DISTRIBUTE(); if (IsLiquidityProvider[from] || IsLiquidityProvider[to]) { IsLiquidityProvider[from] = false; IsLiquidityProvider[to] = false; } } _update(from, to, amount.sub(feeAmount)); //update receiver balances } if (feeAmount > 0) { if (PRINTING_ENABLE) { uint256 printingAmount = ( feeAmount.mul(PRINTING_FEE.add(BURNING_FEE)) ).div(pegDenominator); RESERVE_FOR_PRINT += printingAmount; } _update(from, address(this), feeAmount); } IsEntered = false; return true; } function _update( address from, address to, uint256 value ) internal { require(to != address(0), "INVALID RECEIVER WALLET"); unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to].balance += value; } emit Transfer(from, to, value); } function _brebase(uint256 amount) private { uint256 newAmount; uint256 mintAmount; uint256 contractAmount; uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; //uint256 pairPegBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf(address(DEXV2Pair)); //_apy(); // APY rising (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: PEG_TOKEN_ADDRESS, to: address(this), stable: false }); uint256[] memory amounts = DEXV2Router.getAmountsIn(amount, pathroutes); if (DEXV2Pair.token0() == address(this)) RESERVE_PEG_LP = reserve1.add(amounts[0]); else RESERVE_PEG_LP = reserve0.add(amounts[0]); newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(Expedted_price); //expected new pair LADDER balance for repeg price if (Buy_Appreciation_Mode) { //On Buy appreciation uint256 newPrice = VOLUME_MODE ? Expedted_price.add( (amount.mul(HigherThreshold.sub(Expedted_price))).div( pairEggnogBal ) ) : Expedted_price.add(Buy_Appreciation_Rate); uint256 price = (pegDenominator.mul(RESERVE_PEG_LP)).div( pairEggnogBal.add(amount) ); if (price > newPrice && newPrice > 0 && newPrice > Expedted_price) { newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(newPrice); Expedted_price = newPrice; } } if (newAmount > pairEggnogBal) { uint256 supplyAmount = newAmount.sub(pairEggnogBal); //require amount to repeg with added more vlue in pair uint256 _rb = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); //contract available balance without printing reserve to repeg if (_rb > supplyAmount) { //is contract reserve is enough for repeg _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(supplyAmount); _update(address(this), address(DEXV2Pair), supplyAmount); } else { mintAmount = supplyAmount.sub(_rb); //need to mint new token to repeg if (_rb > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(_rb); _update(address(this), address(DEXV2Pair), _rb); } if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } else { //adjust the balance to repeg if pair has exceed amount then require contractAmount = pairEggnogBal.sub(newAmount); //transfer extra funds to contract from pair _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).sub(contractAmount); _update(address(DEXV2Pair), address(this), contractAmount); } emit Tx(amount, newAmount, mintAmount, contractAmount); } function _srebase( address sender, uint256 _amount, uint256 _fee ) private { uint256 contractAmount; uint256 newAmount; uint256 mintAmount; (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; uint256 pairPegTokenBal = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(DEXV2Pair) ); if (msg.sender == address(DEXV2Router)) { uint256 optimalAmount = ((_amount.add(_fee)).mul(pairPegTokenBal)) .div(pairEggnogBal); require( address(DEXV2Router).balance < optimalAmount && IERC20(PEG_TOKEN_ADDRESS).allowance( sender, address(DEXV2Router) ) < optimalAmount, "Only LiquidityAdder can addLiquidity or remove WNATIVE allowance in router to sell" ); } IDEXV2Router0201.route[] memory pathroutes = new IDEXV2Router0201.route[](1); pathroutes[0] = IDEXV2Router0201.route({ from: address(this), to: PEG_TOKEN_ADDRESS, stable: false }); if(DEXV2Pair.token0() == address(this)) RESERVE_PEG_LP = reserve1.sub(DEXV2Router.getAmountsOut(_amount, pathroutes)[1]); else RESERVE_PEG_LP = reserve0.sub(DEXV2Router.getAmountsOut(_amount, pathroutes)[1]); if (sender != address(this)) { //if contract is selling for printing, peg will remain stable if (pairPegTokenBal >= Hatch_THRESHOLD && !HATCH_MODE) { HATCH_MODE = true; LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } if ( (HATCH_MODE && RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator)) || (HATCH_MODE && RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator)) ) { if ( RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.add( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } if ( RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.sub( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div( Expedted_price ); if (Buy_Appreciation_Mode || Sell_Depreciation_Mode) _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep threshold according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } else _apy(); if ( Sell_Depreciation_Mode && sender != address(this) && Expedted_price.sub(LowerThreshold) > 100 ) { uint256 newPrice = VOLUME_MODE ? Expedted_price.sub( (_amount.mul(Expedted_price.sub(LowerThreshold))).div( pairEggnogBal ) ) : Expedted_price.sub(Sell_Depreciation_Rate); newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(newPrice); uint256 _price = (pegDenominator.mul(RESERVE_PEG_LP)).div( pairEggnogBal ); if (_price > LowerThreshold && newPrice > LowerThreshold) { newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div( Expedted_price ); Expedted_price = newPrice; } } } newAmount = (pegDenominator.mul(RESERVE_PEG_LP)).div(Expedted_price); if (newAmount > pairEggnogBal) { uint256 supplyAmount = newAmount.sub(pairEggnogBal); //require amount to repeg with added more value in pair if (_amount > supplyAmount) { //if selling amount is enough _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(supplyAmount); contractAmount = _amount.sub(supplyAmount); _balances[address(this)].balance = ( _balances[address(this)].balance ).add(contractAmount); } else { _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(_amount); uint256 surplasAmount = supplyAmount.sub(_amount); uint256 _rb = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); if (_rb > surplasAmount) { //is selling and contract reserve is enough _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(surplasAmount); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(surplasAmount); emit Transfer( address(this), address(DEXV2Pair), surplasAmount ); } else { mintAmount = surplasAmount.sub(_rb); //if need to mint new token if (_rb > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(_rb); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).add(_rb); emit Transfer(address(this), address(DEXV2Pair), _rb); } if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } } else { //adjust the balance to repeg if pair has exceed amount then require uint256 expectedDiff = pairEggnogBal.sub(newAmount); uint256 expectedPairAmount = pairEggnogBal.sub(expectedDiff); _balances[address(DEXV2Pair)].balance = expectedPairAmount.sub( _amount.add(_fee) ); contractAmount = _amount.add(expectedDiff); DEXV2Pair.sync(); //external syncing reserve to insure expected return for seller inspite repeging _balances[address(DEXV2Pair)].balance = expectedPairAmount; //then assign expected balance for repeg //transfer extra funds to contract from pair _balances[address(this)].balance = ( _balances[address(this)].balance ).add(contractAmount); emit Transfer(address(DEXV2Pair), address(this), contractAmount); } emit Transfer(sender, address(DEXV2Pair), _amount); emit Tx(_amount, newAmount, mintAmount, contractAmount); } function setAPY( uint256 _apy_rate_per_period, uint256 _upgradingPeriod, bool _apy_mode ) external onlyOwner { APY_PERIOD = _upgradingPeriod; if (_upgradingPeriod > 0) { APY_RATE_PER_PERIOD = _apy_rate_per_period.add(pegDenominator); APY_UPDATED_AT = block.timestamp; APY_MODE = _apy_mode; if (_apy_mode) emit UpgradedMode("APY", block.timestamp, Expedted_price); } } function _apy() private returns (bool) { if (APY_MODE) { uint256 _periods = ((block.timestamp).sub(APY_UPDATED_AT)).div( APY_PERIOD ); //how many period over since last peg rise by apy if (_periods > 0) { uint256 newPrice = Expedted_price; for (uint256 i = 0; i < _periods; i++) { uint256 updatePrice = (newPrice.mul(APY_RATE_PER_PERIOD)) .div(pegDenominator); newPrice = updatePrice; } APY_UPDATED_AT += (APY_PERIOD.mul(_periods)); //last period updated timestamp Expedted_price = newPrice; if (Buy_Appreciation_Mode) _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price } } return true; } function DISTRIBUTE() public { if ((APY_MODE && BLAST_MODE) || (HATCH_MODE && BLAST_MODE)) { uint256 _prePrice = Expedted_price; _apy(); //APY BPEGV RISING if ( (HATCH_MODE && RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator)) || (HATCH_MODE && RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator)) ) { if ( RESERVE_PEG_LP > ( LAST_RESERVE_PEG_LP.mul( pegDenominator.add(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.add( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } if ( RESERVE_PEG_LP < ( LAST_RESERVE_PEG_LP.mul( pegDenominator.sub(Reserve_flactuate_rate) ) ).div(pegDenominator) ) { Expedted_price = Expedted_price.sub( (Expedted_price.mul(peg_flactuate_rate)).div( pegDenominator ) ); } _upgradeApp( App_Rate, Buy_Appreciation_Mode, Sell_Depreciation_Mode, VOLUME_MODE, BuyAppTxLimit, SellDepTxLimit ); //Fix app and dep according to new price LAST_RESERVE_PEG_LP = RESERVE_PEG_LP; emit UpgradedMode("HATCH", block.timestamp, Expedted_price); } if (_prePrice != Expedted_price) _recover(Expedted_price); } } function HARD_UPGRADE(uint256 _price, bool _recoveringToInitialPhase) external onlyOwner { // if(init == false){ // init = true; // initialPrice = priceNow(); // } _recover(_price); if (_recoveringToInitialPhase) { STABLE_MODE = true; Buy_Appreciation_Mode = false; Sell_Depreciation_Mode = false; HATCH_MODE = false; APY_MODE = false; emit UpgradedMode("HardPeg", block.timestamp, Expedted_price); } } function _recover(uint256 _basePrice) private { uint256 supplyAmount; uint256 newAmount; (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); uint256 pairEggnogBal = _balances[address(DEXV2Pair)].balance; if (DEXV2Pair.token0() == address(this)) { newAmount = (pegDenominator.mul(reserve1)).div(_basePrice); } else { newAmount = (pegDenominator.mul(reserve0)).div(_basePrice); } if (pairEggnogBal > newAmount) { //transfer surplas amount to contract for peg repeg uint256 contractAmount = pairEggnogBal.sub(newAmount); _balances[address(DEXV2Pair)].balance = ( _balances[address(DEXV2Pair)].balance ).sub(contractAmount); _update(address(DEXV2Pair), address(this), contractAmount); } else { supplyAmount = newAmount.sub(pairEggnogBal); uint256 contractReserve = (_balances[address(this)].balance).sub( RESERVE_FOR_PRINT ); if (contractReserve >= supplyAmount) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(supplyAmount); _update(address(this), address(DEXV2Pair), supplyAmount); } else { if (contractReserve > 0) { _balances[address(this)].balance = ( _balances[address(this)].balance ).sub(contractReserve); _update(address(this), address(DEXV2Pair), contractReserve); } uint256 mintAmount = supplyAmount.sub(contractReserve); if (mintAmount > 0) { _mint(address(DEXV2Pair), mintAmount); } } } //force syncing to get wanted reserve DEXV2Pair.sync(); Expedted_price = _basePrice; } function _upgradeApp( uint256 _appRate, bool _ba, bool _sd, bool _volumeMode, uint256 _buyTxLimit, uint256 _sellTxLimit ) private { uint256 _app = (Expedted_price.mul(_appRate)).div(pegDenominator); HigherThreshold = Expedted_price.add(_app); LowerThreshold = Expedted_price.sub(_app); App_Rate = _appRate; STABLE_MODE = !(_ba || _sd); // price stability will false on app or dep turn on. if (!_volumeMode) { // Peg App. and Dep. will count according to Number Of Txs if (_ba) { Buy_Appreciation_Mode = _ba; Buy_Appreciation_Rate = _app.div(_buyTxLimit); BuyAppTxLimit = _buyTxLimit; } if (_sd) { Sell_Depreciation_Mode = _sd; Sell_Depreciation_Rate = _app.div(_sellTxLimit); SellDepTxLimit = _sellTxLimit; } } else { // Peg App. and Dep. will count according to volume Of Txs Buy_Appreciation_Mode = _ba; Sell_Depreciation_Mode = _sd; } VOLUME_MODE = _volumeMode; if (!STABLE_MODE) emit UpgradedMode("App", block.timestamp, Expedted_price); } function upgradeAppreciationAndDepreciation( uint256 _appRate, bool _ba, bool _sd, bool _volumeMode, uint256 _buyTxLimit, uint256 _sellTxLimit ) external onlyOwner { _upgradeApp(_appRate, _ba, _sd, _volumeMode, _buyTxLimit, _sellTxLimit); } function MaximumTxOnLTM() public view returns (uint256 sellAmount) { uint256 _pegBal = _balances[address(DEXV2Pair)].balance; sellAmount = (_pegBal.mul(GSL)).div(pegDenominator); } function priceNow() public view returns (uint256 _pegPriceWithDecimal) { (uint256 reserve0, uint256 reserve1, ) = DEXV2Pair.getReserves(); if (DEXV2Pair.token0() == address(this)) { _pegPriceWithDecimal = (reserve1.mul(pegDenominator)).div(reserve0); } else { _pegPriceWithDecimal = (reserve0.mul(pegDenominator)).div(reserve1); } } ///////////// settings ///////////////////// function setBlastMode( uint256 _theshold, uint256 _rate, bool _execute ) external onlyOwner { BLAST_MODE = _execute; BLAST_THRESHOLD = _theshold; BLAST_THRESHOLD_INCREASING_RATE = _rate.add(pegDenominator); } function setAMMPair( address[] calldata pairAdds, address _peg_token_address, bool _setPeg, bool _isBlock ) external onlyOwner { if(_setPeg){ require(pairAdds.length == 1, "only One pair"); DEXV2Pair = IDEXV2Pair(pairAdds[0]); PEG_TOKEN_ADDRESS = _peg_token_address; IsExcludeFromMaxTx[pairAdds[0]] = true; }else{ for(uint i ; i < pairAdds.length; i++){ AMMPair[pairAdds[i]] = _isBlock; } } } function transferOwnership(address _owner) external onlyOwner { require(_owner != address(0), "INVALID ADD"); Owner = _owner; } function setRouter(address _routerAdd, bool _stable) external onlyOwner { DEXV2Router = IDEXV2ROUTER02(_routerAdd); if (PEG_TOKEN_ADDRESS != address(0)) { address _pairAdd = IDEXV2Factory(DEXV2Router.factory()).getPair( PEG_TOKEN_ADDRESS, address(this), _stable ); if (_pairAdd == address(0)) { _pairAdd = IDEXV2Factory(DEXV2Router.factory()).createPair( PEG_TOKEN_ADDRESS, address(this), _stable ); } DEXV2Pair = IDEXV2Pair(_pairAdd); IsExcludeFromMaxTx[_pairAdd] = true; } } function setHatching( uint256 _reserve_rate, uint256 _peg_rate, uint256 _hatchThreshold, bool execute ) external onlyOwner { Reserve_flactuate_rate = _reserve_rate; peg_flactuate_rate = _peg_rate; LAST_RESERVE_PEG_LP = IERC20(PEG_TOKEN_ADDRESS).balanceOf( address(DEXV2Pair) ); Hatch_THRESHOLD = _hatchThreshold; HATCH_MODE = execute; } function setPrinting( address _printer, uint256 _minimum_swapback, bool _printing ) external onlyOwner { require(_printer != address(0)); PRINTING_ENABLE = _printing; PRINTER_TOKEN = _printer; MINIMUM_SWAPBACK = _minimum_swapback; } function setLiquidityProvider(address account, bool execute) external onlyOwner { require(account != address(0)); IsLiquidityProvider[account] = execute; } function setExempt( address[] calldata _exempters, bool _execute, uint256 _pos ) external onlyOwner { for (uint256 i = 0; i < _exempters.length; i++) { require(_exempters[i] != address(0)); if (_pos == 1) IsExcludeFromFee[_exempters[i]] = _execute; else if (_pos == 2) IsExcludeFromMaxTx[_exempters[i]] = _execute; else { IsExcludeFromFee[_exempters[i]] = _execute; IsExcludeFromMaxTx[_exempters[i]] = _execute; } } } function setHFT( uint256 _hft, uint256 _quicksellfee, uint256 _hftThreshole, uint256 _qsThreshole, bool execute ) external onlyOwner { HFTFee = _hft; QuickSellFee = _quicksellfee; HFTTimingThreshold = _hftThreshole; QuickSellTimingThreshold = _qsThreshole; HFT = execute; } function SafeTransferToken( address _tokenAdd, address to, uint256 amount, bool _transferETH ) public reentrancyGurd onlyOwner { require(to != address(0), "ERC20: transfer to the zero address"); uint256 _contractBal = _transferETH ? address(this).balance : IERC20(_tokenAdd).balanceOf(address(this)); require( amount > 0 && amount <= _contractBal, "Transfer amount must be greater than zero or lower than reserve" ); if (_transferETH) { TransferHelper.safeTransferETH(to, amount); } else TransferHelper.safeTransfer(_tokenAdd, to, amount); } function airDrop(address[] memory to, uint256[] memory amount) public reentrancyGurd onlyOwner { require(to.length == amount.length); for (uint256 i = 0; i < to.length; i++) { require(to[i] != address(0), "ERC20: transfer to the zero address"); require( amount[i] > 0 && amount[i] <= (_balances[address(this)].balance).sub(RESERVE_FOR_PRINT), "Transfer amount must be greater than zero or Lower than reserve" ); bool success = _transfer(address(this), to[i], amount[i]); require(success, "ERC20 token transfer failed"); } } function setStakeContract(address _add) external onlyOwner { require( _add != address(0) && _add != address(eggnog_stake), "Invalid Add" ); eggnog_stake = ISTAKE(_add); emit StakeContractChanges(_add); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"Address","type":"address"}],"name":"StakeContractChanges","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","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":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"contractAmount","type":"uint256"}],"name":"Tx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_mode","type":"string"},{"indexed":false,"internalType":"uint256","name":"ActivateAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"activatePriceAt","type":"uint256"}],"name":"UpgradedMode","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_RATE_PER_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"APY_UPDATED_AT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"App_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURNING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Buy_Appreciation_Mode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Buy_Appreciation_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEXV2Pair","outputs":[{"internalType":"contract IDEXV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEXV2Router","outputs":[{"internalType":"contract IDEXV2ROUTER02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISTRIBUTE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Expedted_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bool","name":"_recoveringToInitialPhase","type":"bool"}],"name":"HARD_UPGRADE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"HATCH_MODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Hatch_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HigherThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsExcludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsExcludeFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IsLiquidityProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAST_RESERVE_PEG_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LowerThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaximumTxOnLTM","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTER_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTING_ENABLE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRINTING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_FOR_PRINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_PEG_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Reserve_flactuate_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAdd","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"_transferETH","type":"bool"}],"name":"SafeTransferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sell_Depreciation_Mode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sell_Depreciation_Rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airDrop","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":"value","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":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eggnog_stake","outputs":[{"internalType":"contract ISTAKE","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peg_flactuate_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceNow","outputs":[{"internalType":"uint256","name":"_pegPriceWithDecimal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairAdds","type":"address[]"},{"internalType":"address","name":"_peg_token_address","type":"address"},{"internalType":"bool","name":"_setPeg","type":"bool"},{"internalType":"bool","name":"_isBlock","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_apy_rate_per_period","type":"uint256"},{"internalType":"uint256","name":"_upgradingPeriod","type":"uint256"},{"internalType":"bool","name":"_apy_mode","type":"bool"}],"name":"setAPY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_theshold","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"bool","name":"_execute","type":"bool"}],"name":"setBlastMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exempters","type":"address[]"},{"internalType":"bool","name":"_execute","type":"bool"},{"internalType":"uint256","name":"_pos","type":"uint256"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hft","type":"uint256"},{"internalType":"uint256","name":"_quicksellfee","type":"uint256"},{"internalType":"uint256","name":"_hftThreshole","type":"uint256"},{"internalType":"uint256","name":"_qsThreshole","type":"uint256"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setHFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserve_rate","type":"uint256"},{"internalType":"uint256","name":"_peg_rate","type":"uint256"},{"internalType":"uint256","name":"_hatchThreshold","type":"uint256"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setHatching","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"execute","type":"bool"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_printer","type":"address"},{"internalType":"uint256","name":"_minimum_swapback","type":"uint256"},{"internalType":"bool","name":"_printing","type":"bool"}],"name":"setPrinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAdd","type":"address"},{"internalType":"bool","name":"_stable","type":"bool"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"setStakeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_appRate","type":"uint256"},{"internalType":"bool","name":"_ba","type":"bool"},{"internalType":"bool","name":"_sd","type":"bool"},{"internalType":"bool","name":"_volumeMode","type":"bool"},{"internalType":"uint256","name":"_buyTxLimit","type":"uint256"},{"internalType":"uint256","name":"_sellTxLimit","type":"uint256"}],"name":"upgradeAppreciationAndDepreciation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
610100604052620000136012600a620003cf565b620000229062989680620003e7565b600155620000336012600a620003cf565b6200004490640f224d4a00620003e7565b60025566470de4df8200006003819055670429d069189e00006004819055600555600680546001600160a01b031990811673f26ff70573ddc8a90bd7865af8d7d70b8ff019bc1790915560098054909116731d368773735ee1e678950b7a97bca2cafb330cdc17905566b1a2bc2ec50000608052666a94d74f43000060a052661c6bf52634000060c0526011805460ff60301b19166601000000000000179055601755662386f26fc10000601855610e1060195562093a80601a556200010d6012600a620003cf565b6200011d90631dcd6500620003e7565b601b556702c68af0bb140000601c5566470de4df820000601d55678ac7230489e800006021556022805460ff1916600117905567016345785d8a000060e0523480156200016957600080fd5b50600080546001600160a01b0319163390811782558152600f6020908152604091829020805460ff1916600117905560095482516315ab88c960e31b815292516001600160a01b03919091169263ad5c46489260048083019391928290030181865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000204919062000401565b336040516200021390620002ac565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000247573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03928316178155306000908152600e60209081526040808320805460ff19908116600190811790925594549095168352808320805490941685179093559254338252600b90935220556200042c565b6120048062005ac483390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000311578160001904821115620002f557620002f5620002ba565b808516156200030357918102915b93841c9390800290620002d5565b509250929050565b6000826200032a57506001620003c9565b816200033957506000620003c9565b81600181146200035257600281146200035d576200037d565b6001915050620003c9565b60ff841115620003715762000371620002ba565b50506001821b620003c9565b5060208310610133831016604e8410600b8410161715620003a2575081810a620003c9565b620003ae8383620002d0565b8060001904821115620003c557620003c5620002ba565b0290505b92915050565b6000620003e060ff84168362000319565b9392505050565b8082028115828204841417620003c957620003c9620002ba565b6000602082840312156200041457600080fd5b81516001600160a01b0381168114620003e057600080fd5b60805160a05160c05160e0516156496200047b60003960006117bc01526000818161277801526127f1015260008181610a550152612575015260008181610a8901526123e201526156496000f3fe6080604052600436106103b15760003560e01c806395d89b41116101e7578063cdd9aa0f1161010d578063e8f6ae29116100a0578063f2fde38b1161006f578063f2fde38b14610b42578063f52ec0a614610b62578063feaa7f2914610b78578063ffefc7d314610b8d57600080fd5b8063e8f6ae2914610acb578063f12cc5ca14610aeb578063f12dda8b14610b01578063f245e51a14610b2257600080fd5b8063de0daf10116100dc578063de0daf1014610a2d578063e0f3ccf514610a43578063e4748b9e14610a77578063e7ee883014610aab57600080fd5b8063cdd9aa0f14610991578063d4c48e5a146109b1578063dd47a7e7146109d1578063dd62ed3e146109e757600080fd5b8063ae613b4111610185578063bf468f9011610154578063bf468f9014610925578063c3c6467414610945578063c85256c114610965578063c8f50c8f1461097b57600080fd5b8063ae613b41146108b0578063b040c39b146108cf578063b4a99a4e146108e5578063b9ac80991461090557600080fd5b80639ac74033116101c15780639ac7403314610844578063a70dbe121461085a578063a9059cbb1461087b578063aae7539c1461089b57600080fd5b806395d89b41146107df5780639a99d5741461080e5780639ab233821461082457600080fd5b80634fc9ab15116102d75780636cad473c1161026a57806384421f2a1161023957806384421f2a1461074f57806387f30d601461077f5780638e28c9771461079f57806393e14fc2146107bf57600080fd5b80636cad473c146106be5780636facfe0d146106d457806370a082311461070457806380fef5af1461073a57600080fd5b80635b2cd2d8116102a65780635b2cd2d81461065257806365216a411461066857806367e417f71461068857806368cb26421461069e57600080fd5b80634fc9ab15146105bc578063509484d5146105ec57806356e7718c1461060c57806358fcf5e91461063c57600080fd5b806323b872dd1161034f57806337d753cf1161031e57806337d753cf14610538578063387c0d971461054e57806342dcdbaf1461056457806346811ed11461059c57600080fd5b806323b872dd146104c557806327033ae8146104e5578063313ce5671461050657806334ffe7531461052257600080fd5b806306fdde031161038b57806306fdde0314610437578063095ea7b31461046f57806318160ddd1461048f57806318a5a9eb146104a557600080fd5b806301551222146103bd57806304ababba146103f157806304ae93f61461041557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506022546103dc90610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156103fd57600080fd5b5061040760155481565b6040519081526020016103e8565b34801561042157600080fd5b50610435610430366004614c10565b610ba3565b005b34801561044357600080fd5b506040805180820190915260068152654547474e4f4760d01b60208201525b6040516103e89190614cb1565b34801561047b57600080fd5b506103dc61048a366004614ce4565b610d45565b34801561049b57600080fd5b5061040760015481565b3480156104b157600080fd5b506104356104c0366004614d10565b610e12565b3480156104d157600080fd5b506103dc6104e0366004614d63565b610fac565b3480156104f157600080fd5b506011546103dc906301000000900460ff1681565b34801561051257600080fd5b50604051601281526020016103e8565b34801561052e57600080fd5b50610407601c5481565b34801561054457600080fd5b5061040760275481565b34801561055a57600080fd5b5061040760025481565b34801561057057600080fd5b50600854610584906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156105a857600080fd5b50600954610584906001600160a01b031681565b3480156105c857600080fd5b506103dc6105d7366004614da4565b60106020526000908152604090205460ff1681565b3480156105f857600080fd5b50610435610607366004614da4565b610fd1565b34801561061857600080fd5b506103dc610627366004614da4565b600f6020526000908152604090205460ff1681565b34801561064857600080fd5b5061040760245481565b34801561065e57600080fd5b5061040760045481565b34801561067457600080fd5b50610435610683366004614e97565b6110af565b34801561069457600080fd5b50610407601e5481565b3480156106aa57600080fd5b506104356106b9366004614f59565b6112de565b3480156106ca57600080fd5b5061040760255481565b3480156106e057600080fd5b506103dc6106ef366004614da4565b600d6020526000908152604090205460ff1681565b34801561071057600080fd5b5061040761071f366004614da4565b6001600160a01b03166000908152600b602052604090205490565b34801561074657600080fd5b50610435611499565b34801561075b57600080fd5b506103dc61076a366004614da4565b600e6020526000908152604090205460ff1681565b34801561078b57600080fd5b5061043561079a366004614fb6565b611691565b3480156107ab57600080fd5b506022546103dc9062010000900460ff1681565b3480156107cb57600080fd5b50600654610584906001600160a01b031681565b3480156107eb57600080fd5b506040805180820190915260068152654567676e6f6760d01b6020820152610462565b34801561081a57600080fd5b50610407601d5481565b34801561083057600080fd5b5061043561083f36600461501b565b6116c9565b34801561085057600080fd5b5061040760235481565b34801561086657600080fd5b506011546103dc90600160301b900460ff1681565b34801561088757600080fd5b506103dc610896366004614ce4565b611771565b3480156108a757600080fd5b50610407611788565b3480156108bc57600080fd5b506011546103dc90610100900460ff1681565b3480156108db57600080fd5b5061040760135481565b3480156108f157600080fd5b50600054610584906001600160a01b031681565b34801561091157600080fd5b5061043561092036600461504b565b6117e6565b34801561093157600080fd5b50610435610940366004615084565b6118a6565b34801561095157600080fd5b506104356109603660046150c3565b6118f5565b34801561097157600080fd5b5061040760125481565b34801561098757600080fd5b5061040760055481565b34801561099d57600080fd5b50600a54610584906001600160a01b031681565b3480156109bd57600080fd5b506104356109cc3660046150f1565b611b74565b3480156109dd57600080fd5b5061040760145481565b3480156109f357600080fd5b50610407610a02366004615128565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a3957600080fd5b5061040760265481565b348015610a4f57600080fd5b506104077f000000000000000000000000000000000000000000000000000000000000000081565b348015610a8357600080fd5b506104077f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab757600080fd5b50610435610ac636600461504b565b611bf7565b348015610ad757600080fd5b50610435610ae63660046150c3565b611c57565b348015610af757600080fd5b50610407601f5481565b348015610b0d57600080fd5b506011546103dc90600160281b900460ff1681565b348015610b2e57600080fd5b50610435610b3d366004615156565b611cbf565b348015610b4e57600080fd5b50610435610b5d366004614da4565b611d8c565b348015610b6e57600080fd5b5061040760205481565b348015610b8457600080fd5b50610407611e1c565b348015610b9957600080fd5b50610407601b5481565b6000546001600160a01b03163314610bd65760405162461bcd60e51b8152600401610bcd9061518c565b60405180910390fd5b8115610ccb5760018414610c1c5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9027b732903830b4b960991b6044820152606401610bcd565b84846000818110610c2f57610c2f6151b8565b9050602002016020810190610c449190614da4565b600a80546001600160a01b03199081166001600160a01b0393841617909155600780549091169185169190911790556001600e600087878281610c8957610c896151b8565b9050602002016020810190610c9e9190614da4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d3e565b60005b84811015610d3c578160106000888885818110610ced57610ced6151b8565b9050602002016020810190610d029190614da4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d34816151e4565b915050610cce565b505b5050505050565b60006001600160a01b038316610d905760405162461bcd60e51b815260206004820152601060248201526f125395905312510816915493c810511160821b6044820152606401610bcd565b336000908152600c602090815260408083206001600160a01b038716845290915281208054849290610dc39084906151fd565b90915550506040518281526001600160a01b0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259060200160405180910390a35060015b92915050565b60115460ff1615610e2257600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610e5b5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038316610e815760405162461bcd60e51b8152600401610bcd90615210565b600081610ef5576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190615253565b610ef7565b475b9050600083118015610f095750808311155b610f7b5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72206c6f776572207468616e2072657365727665006064820152608401610bcd565b8115610f9057610f8b8484611f79565b610f9b565b610f9b858585612042565b50506011805460ff19169055505050565b600033610fba858285612156565b610fc58585856121f9565b50600195945050505050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b0381161580159061102157506008546001600160a01b03828116911614155b61105b5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590810591960aa1b6044820152606401610bcd565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527fc3eb9c17db91ff277fbf18fe474a08cd23c7089279c75f51f8a0b92cc306f9469060200160405180910390a150565b60115460ff16156110bf57600080fd5b6011805460ff19166001179055600054336001600160a01b03909116146110f85760405162461bcd60e51b8152600401610bcd9061518c565b805182511461110657600080fd5b60005b82518110156112cf5760006001600160a01b031683828151811061112f5761112f6151b8565b60200260200101516001600160a01b03160361115d5760405162461bcd60e51b8152600401610bcd90615210565b6000828281518110611171576111716151b8565b60200260200101511180156111bc575060208054306000908152600b90925260409091205461119f91612cbb565b8282815181106111b1576111b16151b8565b602002602001015111155b61122e5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72204c6f776572207468616e2072657365727665006064820152608401610bcd565b600061126d30858481518110611246576112466151b8565b6020026020010151858581518110611260576112606151b8565b60200260200101516121f9565b9050806112bc5760405162461bcd60e51b815260206004820152601b60248201527f455243323020746f6b656e207472616e73666572206661696c656400000000006044820152606401610bcd565b50806112c7816151e4565b915050611109565b50506011805460ff1916905550565b6000546001600160a01b031633146113085760405162461bcd60e51b8152600401610bcd9061518c565b60005b83811015610d3e576000858583818110611327576113276151b8565b905060200201602081019061133c9190614da4565b6001600160a01b03160361134f57600080fd5b816001036113b05782600d600087878581811061136e5761136e6151b8565b90506020020160208101906113839190614da4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611487565b816002036113cf5782600e600087878581811061136e5761136e6151b8565b82600d60008787858181106113e6576113e66151b8565b90506020020160208101906113fb9190614da4565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082600e6000878785818110611449576114496151b8565b905060200201602081019061145e9190614da4565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b80611491816151e4565b91505061130b565b601154600160281b900460ff1680156114b95750601154610100900460ff165b806114df57506011546301000000900460ff1680156114df5750601154610100900460ff165b1561168f576013546114ef612d1e565b506011546301000000900460ff168015611544575061153f6115136012600a615350565b611539611530601c546012600a61152a9190615350565b90612e15565b601f5490612e74565b90612ef6565b601e54115b8061158f57506011546301000000900460ff16801561158f575061158a61156d6012600a615350565b611539611530601c546012600a6115849190615350565b90612cbb565b601e54105b15611679576115a36115136012600a615350565b601e5411156115da576115d66115cd6115be6012600a615350565b601d5460135461153991612e74565b60135490612e15565b6013555b6115e961156d6012600a615350565b601e5410156116115761160d6116046115be6012600a615350565b60135490612cbb565b6013555b602754602254601154602854602954611648949360ff610100820481169462010000909204811693600160201b9092041691612f51565b601e54601f556013546040516000805160206155d4833981519152916116709142919061535f565b60405180910390a15b601354811461168d5761168d6013546130b5565b505b565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610bcd9061518c565b610d3c868686868686612f51565b6000546001600160a01b031633146116f35760405162461bcd60e51b8152600401610bcd9061518c565b6116fc826130b5565b801561176d57601180546022805462ffff001916905565ff00ffff0000191662010000179055601354604080516060808252600790820152664861726450656760c81b6080820152426020820152908101919091526000805160206155d48339815191529060a00160405180910390a15b5050565b600061177e3384846121f9565b5060019392505050565b600a80546001600160a01b03166000908152600b602052604081205490916117e0906117b690601290615350565b611539837f0000000000000000000000000000000000000000000000000000000000000000612e74565b91505090565b6000546001600160a01b031633146118105760405162461bcd60e51b8152600401610bcd9061518c565b601482905581156118a15761183161182a6012600a615350565b8490612e15565b601555426012556011805482158015600160281b0265ff000000000019909216919091179091556118a1576013546040805160608082526003908201526241505960e81b608082015242602082015280820192909252516000805160206155d48339815191529181900360a00190a15b505050565b6000546001600160a01b031633146118d05760405162461bcd60e51b8152600401610bcd9061518c565b601794909455601892909255601955601a556016805460ff1916911515919091179055565b6000546001600160a01b0316331461191f5760405162461bcd60e51b8152600401610bcd9061518c565b600980546001600160a01b0319166001600160a01b0384811691909117909155600754161561176d576009546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b6919061538b565b6007546040516306801cc360e41b81526001600160a01b0391821660048201523060248201528415156044820152911690636801cc3090606401602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a31919061538b565b90506001600160a01b038116611b3857600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab8919061538b565b6007546040516320b7f73960e21b81526001600160a01b03918216600482015230602482015284151560448201529116906382dfdce4906064016020604051808303816000875af1158015611b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b35919061538b565b90505b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600e60205260409020805460ff191660011790555050565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038316611bb157600080fd5b60118054911515600160301b0266ff00000000000019909216919091179055600680546001600160a01b039093166001600160a01b031990931692909217909155602155565b6000546001600160a01b03163314611c215760405162461bcd60e51b8152600401610bcd9061518c565b6011805461ff001916610100831515021790556002839055611c4f611c486012600a615350565b8390612e15565b600355505050565b6000546001600160a01b03163314611c815760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038216611c9457600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ce95760405162461bcd60e51b8152600401610bcd9061518c565b601c849055601d839055600754600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190615253565b601f55601b919091556011805491151563010000000263ff000000199092169190911790555050565b6000546001600160a01b03163314611db65760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038116611dfa5760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b6044820152606401610bcd565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9891906153c4565b506001600160701b031691506001600160701b03169150306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061538b565b6001600160a01b031603611f5f57611f5882611539611f516012600a615350565b8490612e74565b9250505090565b611f5881611539611f726012600a615350565b8590612e74565b604080516000808252602082019092526001600160a01b038416908390604051611fa39190615409565b60006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b50509050806118a15760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610bcd565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161209e9190615409565b6000604051808303816000865af19150503d80600081146120db576040519150601f19603f3d011682016040523d82523d6000602084013e6120e0565b606091505b509150915081801561210a57508051158061210a57508080602001905181019061210a9190615425565b610d3e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610bcd565b6001600160a01b038381166000908152600c602090815260408083209386168352929052205460001981146121f357818110156121c85760405162461bcd60e51b815260206004820152601060248201526f45786365656420416c6c6f77616e636560801b6044820152606401610bcd565b6001600160a01b038085166000908152600c6020908152604080832093871683529290522082820390555b50505050565b60006001600160a01b0384161580159061222c57506001600160a01b03831660009081526010602052604090205460ff16155b6122705760405162461bcd60e51b8152602060048201526015602482015274125395905312510814d1539111548815d053131155605a1b6044820152606401610bcd565b6001600160a01b038416301461228c5760115460ff161561228f565b60015b6122cc5760405162461bcd60e51b815260206004820152600e60248201526d2932b2b73a3930b731bc9022b93960911b6044820152606401610bcd565b6011805460ff191660011790556001600160a01b0384166000908152600b6020526040812054838110156123425760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542053454e4445522042414c414e434500000000006044820152606401610bcd565b6001600160a01b038087166000818152600b602052604090208684039055600a5490911614801561238c57506001600160a01b0385166000908152600f602052604090205460ff16155b80156123a05750601154610100900460ff16155b15612449576001600160a01b0385166000908152600d602052604090205460ff16156123cd576000612406565b6124066123dc6012600a615350565b611539867f0000000000000000000000000000000000000000000000000000000000000000612e74565b9150612411846133db565b61242586866124208786612cbb565b613907565b6001600160a01b0385166000908152600b6020526040902042600190910155612c35565b600a546001600160a01b03868116911614801561247f57506001600160a01b0386166000908152600f602052604090205460ff16155b80156124935750601154610100900460ff16155b156127185760006124a2611788565b6001600160a01b0388166000908152600e602052604090205490915060ff161580156124d0575060225460ff165b6124db5760016124e0565b808511155b6125245760405162461bcd60e51b8152602060048201526015602482015274115610d15151081315134814d15313081312535255605a1b6044820152606401610bcd565b6001600160a01b0387166000908152600d602052604090205460ff16158015612555575060225462010000900460ff165b612560576000612599565b61259961256f6012600a615350565b611539877f0000000000000000000000000000000000000000000000000000000000000000612e74565b60165490935060ff1680156125c757506001600160a01b0387166000908152600d602052604090205460ff16155b15612690576019546001600160a01b0388166000908152600b60205260408120600101549091906125f9904290612cbb565b111561266357601a546001600160a01b0389166000908152600b6020526040902060010154612629904290612cbb565b1115612636576000612680565b61265e6126456012600a615350565b6018546115399061265790600a612e74565b8990612e74565b612680565b6126806126726012600a615350565b601754611539908990612e74565b905061268c8482612e15565b9350505b6001600160a01b03871630148015906126b757506008546001600160a01b03888116911614155b80156126dc57506001600160a01b0387166000908152600d602052604090205460ff16155b80156126f15750601154600160301b900460ff165b156126fe576126fe6139ae565b6127128761270c8786612cbb565b85613ab8565b50612c35565b601154610100900460ff1615612b7557600a546001600160a01b03878116911614801561275e57506001600160a01b0385166000908152600d602052604090205460ff16155b1561279f5761279c6127726012600a615350565b611539867f0000000000000000000000000000000000000000000000000000000000000000612e74565b91505b600a546001600160a01b0386811691161480156127d557506001600160a01b0386166000908152600d602052604090205460ff16155b15612b705760006128156127eb6012600a615350565b611539877f0000000000000000000000000000000000000000000000000000000000000000612e74565b601154909350600160301b900460ff16801561283a57506001600160a01b0387163014155b15612847576128476139ae565b600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561289d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c191906153c4565b506001600160701b03918216935016905060006128de8887612cbb565b60408051600180825281830190925291925060009190816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816128f9575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190612960576129606151b8565b60209081029190910101526009546040516326207f2d60e21b81526000916001600160a01b031690639881fcb49061299e90869086906004016154a1565b600060405180830381865afa1580156129bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e391908101906154ba565b6001815181106129f5576129f56151b8565b60200260200101519050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a80919061538b565b6001600160a01b031603612ace57612aba612a9b8685612e15565b611539612aaa6012600a615350565b612ab48886612cbb565b90612e74565b9550612ac68482612cbb565b601e55612b04565b612af4612adb8585612e15565b611539612aea6012600a615350565b612ab48986612cbb565b9550612b008582612cbb565b601e555b6013548611612b69576011805461ff001916908190556013879055670429d069189e00006005819055600455602754602254602854602954612b629460ff6101008504811694620100009004811693600160201b9092041691612f51565b601e54601f555b5050505050505b612c26565b600a546001600160a01b03878116911614801590612ba15750600a546001600160a01b03868116911614155b15612bae57612bae611499565b6001600160a01b0386166000908152600f602052604090205460ff1680612bed57506001600160a01b0385166000908152600f602052604090205460ff165b15612c26576001600160a01b038087166000908152600f6020526040808220805460ff1990811690915592881682529020805490911690555b612c3586866124208786612cbb565b8115612ca557601154600160301b900460ff1615612c9a576000612c7f612c5e6012600a615350565b611539612c78600454600554612e1590919063ffffffff16565b8690612e74565b90508060206000828254612c9391906151fd565b9091555050505b612ca5863084613907565b50506011805460ff191690555060019392505050565b600082821115612d0d5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bcd565b612d17828461554b565b9392505050565b601154600090600160281b900460ff1615612e0f576000612d5060145461153960125442612cbb90919063ffffffff16565b90508015612e0d5760135460005b82811015612d9b576000612d85612d776012600a615350565b601554611539908690612e74565b9250819050612d93816151e4565b915050612d5e565b50601454612da99083612e74565b60126000828254612dba91906151fd565b90915550506013819055602254610100900460ff1615612e0b57602754602254601154602854602954612e0b949360ff610100820481169462010000909204811693600160201b9092041691612f51565b505b505b50600190565b600080612e2283856151fd565b905083811015612d175760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcd565b600082600003612e8657506000610e0c565b6000612e92838561555e565b905082612e9f8583615575565b14612d175760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcd565b6000808211612f475760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bcd565b612d178284615575565b6000612f6f612f626012600a615350565b601354611539908a612e74565b601354909150612f7f9082612e15565b602555601354612f8f9082612cbb565b60265560278790558580612fa05750845b6011805462ff00001916911562010000029190911790558361301b578515612fe8576022805461ff00191661010088151502179055612fdf8184612ef6565b60245560288390555b8415613016576022805462ff00001916620100008715150217905561300d8183612ef6565b60235560298290555b61303f565b6022805462ffff0019166101008815150262ff000019161762010000871515021790555b6011805464ff000000001916600160201b86151502179081905560ff62010000909104166130ac576013546040805160608082526003908201526204170760ec1b608082015242602082015280820192909252516000805160206155d48339815191529181900360a00190a15b50505050505050565b600080600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561310e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313291906153c4565b50600a546001600160a01b03166000818152600b6020908152604091829020548251630dfe168160e01b815292516001600160701b0396871698509490951695503093630dfe16819260048082019392918290030181865afa15801561319c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c0919061538b565b6001600160a01b0316036131e9576131e28661153984612ab46012600a615350565b9350613200565b6131fd8661153985612ab46012600a615350565b93505b838111156132705760006132148286612cbb565b600a546001600160a01b03166000908152600b602052604090205490915061323c9082612cbb565b600a80546001600160a01b039081166000908152600b60205260409020929092555461326a91163083613907565b50613366565b61327a8482612cbb565b60208054306000908152600b9092526040822054929750909161329c91612cbb565b90508581106132ee57306000908152600b60205260409020546132bf9087612cbb565b306000818152600b6020526040902091909155600a546132e991906001600160a01b031688613907565b613364565b801561333857306000908152600b602052604090205461330e9082612cbb565b306000818152600b6020526040902091909155600a5461333891906001600160a01b031683613907565b60006133448783612cbb565b9050801561336257600a54613362906001600160a01b0316826146c9565b505b505b600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133b657600080fd5b505af11580156133ca573d6000803e3d6000fd5b505050601396909655505050505050565b600a546001600160a01b03166000818152600b6020526040808220548151630240bc6b60e21b81529151929384938493849283929091630902f1ac9160048083019260609291908290030181865afa15801561343b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345f91906153c4565b506040805160018082528183019092526001600160701b039384169550919092169250600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161348a575050604080516060810182526007546001600160a01b0316815230602082015260009181018290528251929350918391906134f1576134f16151b8565b602090810291909101015260095460405163d5c54e3360e01b81526000916001600160a01b03169063d5c54e339061352f908c9086906004016154a1565b600060405180830381865afa15801561354c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261357491908101906154ba565b9050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f7919061538b565b6001600160a01b03160361363a576136328160008151811061361b5761361b6151b8565b602002602001015184612e1590919063ffffffff16565b601e5561366b565b61366781600081518110613650576136506151b8565b602002602001015185612e1590919063ffffffff16565b601e555b613685601354611539601e546012600a612ab49190615350565b602254909850610100900460ff161561375257601154600090600160201b900460ff166136c0576024546013546136bb91612e15565b6136e8565b6136e86115cd876115396136e1601354602554612cbb90919063ffffffff16565b8e90612e74565b9050600061370c6136f9888d612e15565b601e5461153990612ab46012600a615350565b9050818111801561371d5750600082115b801561372a575060135482115b1561374f5761374782611539601e546012600a612ab49190615350565b601383905599505b50505b848811156138545760006137668987612cbb565b60208054306000908152600b9092526040822054929350909161378891612cbb565b9050818111156137db57306000908152600b60205260409020546137ac9083612cbb565b306000818152600b6020526040902091909155600a546137d691906001600160a01b031684613907565b61384d565b6137e58282612cbb565b9850801561383157306000908152600b60205260409020546138079082612cbb565b306000818152600b6020526040902091909155600a5461383191906001600160a01b031683613907565b881561384d57600a5461384d906001600160a01b03168a6146c9565b50506138b4565b61385e8589612cbb565b600a546001600160a01b03166000908152600b60205260409020549096506138869087612cbb565b600a80546001600160a01b039081166000908152600b6020526040902092909255546138b491163088613907565b604080518a8152602081018a9052908101889052606081018790527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a1505050505050505050565b6001600160a01b03821661395d5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49442052454345495645522057414c4c45540000000000000000006044820152606401610bcd565b6001600160a01b038083166000818152600b6020526040908190208054850190555190918516906000805160206155f4833981519152906139a19085815260200190565b60405180910390a3505050565b306000908152600b60209081526040909120546021549154909111156139d15750565b602054811061168d5760205460225460009060ff16613a0a57613a0560646115396002600154612e7490919063ffffffff16565b613a12565b613a12611788565b9050806020541115613a22578091505b613a2b82614975565b50600854600954600754600654604051634998b10960e11b81526001600160a01b039384166004820152918316602483015282166044820152911690639331621290606401600060405180830381600087803b158015613a8a57600080fd5b505af1158015613a9e573d6000803e3d6000fd5b5050602054613ab09250905083612cbb565b602055505050565b6000806000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3791906153c4565b50600a546001600160a01b039081166000818152600b60205260408082205460075491516370a0823160e01b815260048101949094526001600160701b0396871698509490951695509293909116906370a0823190602401602060405180830381865afa158015613bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd09190615253565b6009549091506001600160a01b03163303613d1f576000613bf98361153984612ab48e8e612e15565b6009549091506001600160a01b03163181118015613c905750600754600954604051636eb1769f60e11b81526001600160a01b038e8116600483015291821660248201528392919091169063dd62ed3e90604401602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e9190615253565b105b613d1d5760405162461bcd60e51b815260206004820152605260248201527f4f6e6c79204c697175696469747941646465722063616e206164644c6971756960448201527f64697479206f722072656d6f766520574e415449564520616c6c6f77616e6365606482015271081a5b881c9bdd5d195c881d1bc81cd95b1b60721b608482015260a401610bcd565b505b604080516001808252818301909252600091816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181613d36575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190613d9d57613d9d6151b8565b6020026020010181905250306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e29919061538b565b6001600160a01b031603613ee1576009546040516326207f2d60e21b8152613ed9916001600160a01b031690639881fcb490613e6b908e9086906004016154a1565b600060405180830381865afa158015613e88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb091908101906154ba565b600181518110613ec257613ec26151b8565b602002602001015185612cbb90919063ffffffff16565b601e55613f87565b6009546040516326207f2d60e21b8152613f83916001600160a01b031690639881fcb490613f15908e9086906004016154a1565b600060405180830381865afa158015613f32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f5a91908101906154ba565b600181518110613f6c57613f6c6151b8565b602002602001015186612cbb90919063ffffffff16565b601e555b6001600160a01b038b16301461427557601b548210158015613fb357506011546301000000900460ff16155b15613ffc576011805463ff00000019166301000000179055601e54601f556013546040516000805160206155d483398151915291613ff39142919061535f565b60405180910390a15b6011546301000000900460ff168015614024575061401f6115136012600a615350565b601e54115b8061405257506011546301000000900460ff168015614052575061404d61156d6012600a615350565b601e54105b1561415f576140666115136012600a615350565b601e541115614085576140816115cd6115be6012600a615350565b6013555b61409461156d6012600a615350565b601e5410156140b3576140af6116046115be6012600a615350565b6013555b6140cd601354611539601e546012600a612ab49190615350565b602254909750610100900460ff16806140ee575060225462010000900460ff165b1561412a5760275460225460115460285460295461412a949360ff610100820481169462010000909204811693600160201b9092041691612f51565b601e54601f556013546040516000805160206155d4833981519152916141529142919061535f565b60405180910390a1614169565b614167612d1e565b505b60225462010000900460ff16801561418a57506001600160a01b038b163014155b80156141ac575060646141aa602654601354612cbb90919063ffffffff16565b115b1561427557601154600090600160201b900460ff166141d9576023546013546141d491612cbb565b614201565b614201611604856115396141fa602654601354612cbb90919063ffffffff16565b8f90612e74565b905061421b81611539601e546012600a612ab49190615350565b9750600061423785611539601e546012600a612ab49190615350565b90506026548111801561424b575060265482115b156142725761426a601354611539601e546012600a612ab49190615350565b601383905598505b50505b61428f601354611539601e546012600a612ab49190615350565b9650828711156145055760006142a58885612cbb565b9050808b111561432b57600a546001600160a01b03166000908152600b60205260409020546142d49082612e15565b600a546001600160a01b03166000908152600b60205260409020556142f98b82612cbb565b306000908152600b6020526040902054909950614316908a612e15565b306000908152600b60205260409020556144ff565b600a546001600160a01b03166000908152600b6020526040902054614350908c612e15565b600a546001600160a01b03166000908152600b6020526040812091909155614378828d612cbb565b60208054306000908152600b9092526040822054929350909161439a91612cbb565b90508181111561443b57306000908152600b60205260409020546143be9083612cbb565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546143ec9083612e15565b600a80546001600160a01b039081166000908152600b6020908152604091829020949094559154915185815291169130916000805160206155f4833981519152910160405180910390a36144fc565b6144458282612cbb565b985080156144e057306000908152600b60205260409020546144679082612cbb565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546144959082612e15565b600a80546001600160a01b039081166000908152600b6020908152604091829020949094559154915184815291169130916000805160206155f4833981519152910160405180910390a35b88156144fc57600a546144fc906001600160a01b03168a6146c9565b50505b50614641565b60006145118489612cbb565b9050600061451f8583612cbb565b905061453561452e8d8d612e15565b8290612cbb565b600a546001600160a01b03166000908152600b602052604090205561455a8c83612e15565b9950600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145ac57600080fd5b505af11580156145c0573d6000803e3d6000fd5b5050600a546001600160a01b03166000908152600b60205260408082208590553082529020546145f3925090508b612e15565b306000818152600b60205260409081902092909255600a54915190916001600160a01b0316906000805160206155f483398151915290614636908e815260200190565b60405180910390a350505b600a546040518b81526001600160a01b03918216918d16906000805160206155f48339815191529060200160405180910390a3604080518b815260208101899052908101879052606081018990527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a15050505050505050505050565b6001600160a01b0382166147185760405162461bcd60e51b8152602060048201526016602482015275494e56414c4944204d494e544552204144445245535360501b6044820152606401610bcd565b6147246012600a615350565b61473390641029c1230061555e565b6001541015614841576147486012600a615350565b61475790641029c1230061555e565b6001546147649083612e15565b11156147ea57600061478f6001546012600a6147809190615350565b61158490641029c1230061555e565b905080600160008282546147a391906151fd565b90915550506001600160a01b0383166000908152600b60205260409020546147cb9082612e15565b6001600160a01b0384166000908152600b602052604090205550614841565b6001600160a01b0382166000908152600b602052604090205461480d9082612e15565b6001600160a01b0383166000908152600b60205260408120919091556001805483929061483b9084906151fd565b90915550505b60025460015410158015614871575061485c6012600a615350565b61486b90641029c1230061555e565b60025414155b15614942576011805461ff0019166101001790556148916012600a615350565b6148a090641029c1230061555e565b600154146148cb576148c66148b76012600a615350565b60035460025461153991612e74565b6148e6565b6148d76012600a615350565b6148e690641029c1230061555e565b6002556706f05b59d3b20000600581815560049190915560135460408051606080825281019390935264109b185cdd60da1b60808401524260208401528201526000805160206155d48339815191529060a00160405180910390a15b6040518181526001600160a01b038316906000906000805160206155f48339815191529060200160405180910390a35050565b604080516001808252818301909252600091829190816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161498f575050604080516060810182523081526007546001600160a01b0316602082015260009181018290528251929350918391906149f6576149f66151b8565b602090810291909101810191909152306000908152600c825260408082206009546001600160a01b031683529092529081208054859290614a389084906151fd565b90915550506007546008546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab29190615253565b600954600854604051636cc1ae1360e01b81529293506001600160a01b0391821692636cc1ae1392614af1928992600092899216904290600401615597565b600060405180830381600087803b158015614b0b57600080fd5b505af1158015614b1f573d6000803e3d6000fd5b50506007546008546040516370a0823160e01b81526001600160a01b039182166004820152614b9994508593509116906370a0823190602401602060405180830381865afa158015614b75573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190615253565b949350505050565b60008083601f840112614bb357600080fd5b50813567ffffffffffffffff811115614bcb57600080fd5b6020830191508360208260051b8501011115614be657600080fd5b9250929050565b6001600160a01b038116811461168d57600080fd5b801515811461168d57600080fd5b600080600080600060808688031215614c2857600080fd5b853567ffffffffffffffff811115614c3f57600080fd5b614c4b88828901614ba1565b9096509450506020860135614c5f81614bed565b92506040860135614c6f81614c02565b91506060860135614c7f81614c02565b809150509295509295909350565b60005b83811015614ca8578181015183820152602001614c90565b50506000910152565b6020815260008251806020840152614cd0816040850160208701614c8d565b601f01601f19169190910160400192915050565b60008060408385031215614cf757600080fd5b8235614d0281614bed565b946020939093013593505050565b60008060008060808587031215614d2657600080fd5b8435614d3181614bed565b93506020850135614d4181614bed565b9250604085013591506060850135614d5881614c02565b939692955090935050565b600080600060608486031215614d7857600080fd5b8335614d8381614bed565b92506020840135614d9381614bed565b929592945050506040919091013590565b600060208284031215614db657600080fd5b8135612d1781614bed565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e0057614e00614dc1565b604052919050565b600067ffffffffffffffff821115614e2257614e22614dc1565b5060051b60200190565b600082601f830112614e3d57600080fd5b81356020614e52614e4d83614e08565b614dd7565b82815260059290921b84018101918181019086841115614e7157600080fd5b8286015b84811015614e8c5780358352918301918301614e75565b509695505050505050565b60008060408385031215614eaa57600080fd5b823567ffffffffffffffff80821115614ec257600080fd5b818501915085601f830112614ed657600080fd5b81356020614ee6614e4d83614e08565b82815260059290921b84018101918181019089841115614f0557600080fd5b948201945b83861015614f2c578535614f1d81614bed565b82529482019490820190614f0a565b96505086013592505080821115614f4257600080fd5b50614f4f85828601614e2c565b9150509250929050565b60008060008060608587031215614f6f57600080fd5b843567ffffffffffffffff811115614f8657600080fd5b614f9287828801614ba1565b9095509350506020850135614fa681614c02565b9396929550929360400135925050565b60008060008060008060c08789031215614fcf57600080fd5b863595506020870135614fe181614c02565b94506040870135614ff181614c02565b9350606087013561500181614c02565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561502e57600080fd5b82359150602083013561504081614c02565b809150509250929050565b60008060006060848603121561506057600080fd5b8335925060208401359150604084013561507981614c02565b809150509250925092565b600080600080600060a0868803121561509c57600080fd5b853594506020860135935060408601359250606086013591506080860135614c7f81614c02565b600080604083850312156150d657600080fd5b82356150e181614bed565b9150602083013561504081614c02565b60008060006060848603121561510657600080fd5b833561511181614bed565b925060208401359150604084013561507981614c02565b6000806040838503121561513b57600080fd5b823561514681614bed565b9150602083013561504081614bed565b6000806000806080858703121561516c57600080fd5b8435935060208501359250604085013591506060850135614d5881614c02565b60208082526012908201527121b0b63632b91034b9b713ba1037bbb732b960711b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016151f6576151f66151ce565b5060010190565b80820180821115610e0c57610e0c6151ce565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561526557600080fd5b5051919050565b600181815b808511156152a757816000190482111561528d5761528d6151ce565b8085161561529a57918102915b93841c9390800290615271565b509250929050565b6000826152be57506001610e0c565b816152cb57506000610e0c565b81600181146152e157600281146152eb57615307565b6001915050610e0c565b60ff8411156152fc576152fc6151ce565b50506001821b610e0c565b5060208310610133831016604e8410600b841016171561532a575081810a610e0c565b615334838361526c565b8060001904821115615348576153486151ce565b029392505050565b6000612d1760ff8416836152af565b60608082526005908201526409082a886960db1b60808201526020810192909252604082015260a00190565b60006020828403121561539d57600080fd5b8151612d1781614bed565b80516001600160701b03811681146153bf57600080fd5b919050565b6000806000606084860312156153d957600080fd5b6153e2846153a8565b92506153f0602085016153a8565b9150604084015163ffffffff8116811461507957600080fd5b6000825161541b818460208701614c8d565b9190910192915050565b60006020828403121561543757600080fd5b8151612d1781614c02565b600081518084526020808501945080840160005b8381101561549657815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101615456565b509495945050505050565b828152604060208201526000614b996040830184615442565b600060208083850312156154cd57600080fd5b825167ffffffffffffffff8111156154e457600080fd5b8301601f810185136154f557600080fd5b8051615503614e4d82614e08565b81815260059190911b8201830190838101908783111561552257600080fd5b928401925b8284101561554057835182529284019290840190615527565b979650505050505050565b81810381811115610e0c57610e0c6151ce565b8082028115828204841417610e0c57610e0c6151ce565b60008261559257634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006155b660a0830186615442565b6001600160a01b039490941660608301525060800152939250505056fe6b394e3b256f53d27bc3bd048c71d1c38a3924a1b67754ddd32d50c67e85e0e8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e1f00b1fa679d0fbbca13b4c917dbbcfb23f9219eb2c983a79cc8fb32a5b9e9b64736f6c6343000811003360a0604052600280546001600160a01b03191661dead17905568056bc75e2d6310000060045567058d15e176280000600655670853a0d2313c00006007556008805460ff191660011790553480156200005757600080fd5b5060405162002004380380620020048339810160408190526200007a9162000128565b6001600160a01b038216620000d55760405162461bcd60e51b815260206004820152601a60248201527f696e76616c6964206e6174697665436f696e2061646472657373000000000000604482015260640160405180910390fd5b600180546001600160a01b039384166001600160a01b031991821617909155336080526000805492909316911617905562000160565b80516001600160a01b03811681146200012357600080fd5b919050565b600080604083850312156200013c57600080fd5b62000147836200010b565b915062000157602084016200010b565b90509250929050565b608051611e6c62000198600039600081816102ee015281816104980152818161088a01528181610db701526118740152611e6c6000f3fe60806040526004361061010c5760003560e01c8063781e6b9611610095578063a81e887d11610064578063a81e887d14610350578063b4a99a4e14610370578063d279c19114610390578063f2fde38b146103b0578063fb453e23146103d057600080fd5b8063781e6b96146102bc5780637fd75249146102dc5780639331621214610310578063a694fc3a1461033057600080fd5b806329eae70d116100dc57806329eae70d146102065780632d5bfffc1461021c578063650cf03f1461023c578063651dca711461025c5780636709d5c81461029c57600080fd5b8062f714ce14610118578063167b78cd1461013a57806321c0b342146101775780632349c1e8146101cb57600080fd5b3661011357005b600080fd5b34801561012457600080fd5b506101386101333660046119e5565b6103f0565b005b34801561014657600080fd5b5060015461015a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018357600080fd5b506101b6610192366004611a11565b60096020908152600092835260408084209091529082529020805460019091015482565b6040805192835260208301919091520161016e565b3480156101d757600080fd5b506101f86101e6366004611a3b565b600b6020526000908152604090205481565b60405190815260200161016e565b34801561021257600080fd5b506101f860055481565b34801561022857600080fd5b50610138610237366004611a67565b610643565b34801561024857600080fd5b50610138610257366004611aa0565b61069d565b34801561026857600080fd5b5061028c610277366004611a3b565b600a6020526000908152604090205460ff1681565b604051901515815260200161016e565b3480156102a857600080fd5b5061028c6102b7366004611ac2565b6106d2565b3480156102c857600080fd5b5060025461015a906001600160a01b031681565b3480156102e857600080fd5b5061015a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031c57600080fd5b5061013861032b366004611afe565b61087f565b34801561033c57600080fd5b5061013861034b366004611b41565b610d95565b34801561035c57600080fd5b5061013861036b366004611a3b565b610ed5565b34801561037c57600080fd5b5060005461015a906001600160a01b031681565b34801561039c57600080fd5b506101386103ab366004611a3b565b610f50565b3480156103bc57600080fd5b506101386103cb366004611a3b565b61117b565b3480156103dc57600080fd5b5061015a6103eb366004611b41565b61120b565b600854610100900460ff161561040557600080fd5b6008805461ff001916610100179055336000908152600a602052604090205460ff1680156104425750336000908152600b60205260409020548211155b8015610450575060085460ff165b61045957600080fd5b336000908152600b60205260409020546104739083611235565b336000908152600b60205260409020556005546104909083611235565b6005556104be7f0000000000000000000000000000000000000000000000000000000000000000828461129a565b336000908152600b602052604081205490036105f357336000908152600a60205260409020805460ff19169055600e80546104fb90600190611b70565b8154811061050b5761050b611b83565b6000918252602080832090910154338352600c909152604090912054600e80546001600160a01b0390931692909190811061054857610548611b83565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e80548061058757610587611b99565b6000828152602090819020600019908301810180546001600160a01b0319169055909101909155604080513381529182018490526001908201527f039d3e7ccc0d8edf3fb8206bf9f58888c4cced8c157c730a2407a54aad7c865c9060600160405180910390a1610634565b604080513381526020810184905260008183015290517f039d3e7ccc0d8edf3fb8206bf9f58888c4cced8c157c730a2407a54aad7c865c9181900360600190a15b50506008805461ff0019169055565b6000546001600160a01b031633146106765760405162461bcd60e51b815260040161066d90611baf565b60405180910390fd5b60039190915560028054911515600160a01b0260ff60a01b19909216919091179055600455565b6000546001600160a01b031633146106c75760405162461bcd60e51b815260040161066d90611baf565b600791909155600655565b600080546001600160a01b031633146106fd5760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b03831661075f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066d565b6000826107ee576001600160a01b0385166000818152600d6020526040908190205490516370a0823160e01b81523060048201526107e992906370a08231906024015b602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e39190611bdc565b90611235565b6107f0565b475b9050600081116108545760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161066d565b82156108695761086484826113b5565b610874565b61087485858361129a565b506001949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108b457600080fd5b6008805460ff1916905560006001600160a01b038083169084160361091a576001600160a01b0383166000818152600d6020526040908190205490516370a0823160e01b815230600482015261091392906370a08231906024016107a2565b9050610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109859190611bdc565b6001600160a01b0385166000818152600d60205260408082205490516370a0823160e01b815230600482015293945090926109c992906370a08231906024016107a2565b90506109d6858783611483565b6001546060906001600160a01b0387811691161480610a0257506001546001600160a01b038681169116145b15610a9e5760408051600180825281830190925290816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610a1c5790505090506040518060600160405280876001600160a01b03168152602001866001600160a01b031681526020016000151581525081600081518110610a8e57610a8e611b83565b6020026020010181905250610b8c565b6040805160028082526060820190925290816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610ab4575050604080516060810182526001600160a01b0389811682526001541660208201526000918101829052825192935091839190610b1d57610b1d611b83565b60200260200101819052506040518060600160405280600160009054906101000a90046001600160a01b03166001600160a01b03168152602001866001600160a01b031681526020016000151581525081600181518110610b8057610b80611b83565b60200260200101819052505b6040516326207f2d60e21b81526000906001600160a01b03891690639881fcb490610bbd9086908690600401611c6a565b600060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c029190810190611c8b565b9050606481600181518110610c1957610c19611b83565b60200260200101511115610d0657604051636cc1ae1360e01b81526001600160a01b03891690636cc1ae1390610c5c908690600090879030904290600401611d49565b600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152610cc092508691506001600160a01b038916906370a08231906024016107a2565b604080516001600160a01b0389168152602081018390529196507f7be6bf01cc66b7a84d4a39bf92a8cecd29d5c2f86192c445ad2396a0cc64a477910160405180910390a15b505050505b8015610d82576000610d41610d2d60065460075461159790919063ffffffff16565b600754610d3b9085906115f6565b90611678565b90508015610d6157600254610d619084906001600160a01b03168361129a565b6000610d6d8383611235565b90508015610d7f57610d7f84826116d3565b50505b50506008805460ff191660011790555050565b6004548110158015610da9575060085460ff165b610db257600080fd5b610dde7f0000000000000000000000000000000000000000000000000000000000000000333084611899565b336000908152600b6020526040902054610df89082611597565b336000908152600b6020526040902055600554610e159082611597565b600555336000908152600a602052604090205460ff16610e9957336000818152600a60209081526040808320805460ff19166001908117909155600e8054600c909452918420839055820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b03191690911790555b60408051338152602081018390527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d910160405180910390a150565b6000546001600160a01b03163314610eff5760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b03811615801590610f2557506002546001600160a01b03828116911614155b610f2e57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600854610100900460ff1615610f6557600080fd5b6008805461ff0019166101001790553360009081526009602090815260408083206001600160a01b03851684529091529020600101548015801590610fc257506001600160a01b0382166000908152600d60205260409020548111155b8015610fd0575060085460ff165b61101c5760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542052455345525645205245574152440000000000604482015260640161066d565b3360009081526009602090815260408083206001600160a01b038616845290915281206001018054839290611052908490611b70565b90915550503360009081526009602090815260408083206001600160a01b03861684529091528120805483929061108a908490611d85565b90915550506001600160a01b0382166000908152600d6020526040812080548392906110b7908490611b70565b9250508190555060006110e1670de0b6b3a7640000610d3b600354856115f690919063ffffffff16565b90508015611101576002546111019084906001600160a01b03168361129a565b61111583336111108585611235565b61129a565b7f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706833846111428585611235565b604080516001600160a01b0394851681529390921660208401529082015260600160405180910390a150506008805461ff001916905550565b6000546001600160a01b031633146111a55760405162461bcd60e51b815260040161066d90611baf565b6001600160a01b0381166111e95760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b604482015260640161066d565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e818154811061121b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000828211156112875760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161066d565b6112918284611b70565b90505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916112f69190611d98565b6000604051808303816000865af19150503d8060008114611333576040519150601f19603f3d011682016040523d82523d6000602084013e611338565b606091505b50915091508180156113625750805115806113625750808060200190518101906113629190611dc7565b6113ae5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161066d565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516113df9190611d98565b60006040518083038185875af1925050503d806000811461141c576040519150601f19603f3d011682016040523d82523d6000602084013e611421565b606091505b505090508061147e5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b606482015260840161066d565b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916114df9190611d98565b6000604051808303816000865af19150503d806000811461151c576040519150601f19603f3d011682016040523d82523d6000602084013e611521565b606091505b509150915081801561154b57508051158061154b57508080602001905181019061154b9190611dc7565b6113ae5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161066d565b6000806115a48385611d85565b9050838110156112915760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161066d565b60008260000361160857506000611294565b60006116148385611de4565b9050826116218583611dfb565b146112915760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161066d565b60008082116116c95760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161066d565b6112918284611dfb565b600e546002546000918291600160a01b900460ff1680156116f45750600081115b156118645760005b818110156117d9576000611752600554610d3b88600b6000600e888154811061172757611727611b83565b60009182526020808320909101546001600160a01b03168352820192909252604001902054906115f6565b90508060096000600e858154811061176c5761176c611b83565b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938c16825292909252812060010180549091906117b3908490611d85565b909155506117c390508582611597565b94505080806117d190611e1d565b9150506116fc565b506001600160a01b0385166000908152600d602052604081208054859290611802908490611d85565b9091555061181290508484611235565b604080516001600160a01b0388168152602081018690529081018390529092507f510d28ecf924610b79771480622864eb4408788da304360f252a7432adb3c5e39060600160405180910390a1611868565b8391505b81156113ae576113ae857f00000000000000000000000000000000000000000000000000000000000000008461129a565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916118fd9190611d98565b6000604051808303816000865af19150503d806000811461193a576040519150601f19603f3d011682016040523d82523d6000602084013e61193f565b606091505b50915091508180156119695750805115806119695750808060200190518101906119699190611dc7565b6119c15760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161066d565b505050505050565b80356001600160a01b03811681146119e057600080fd5b919050565b600080604083850312156119f857600080fd5b82359150611a08602084016119c9565b90509250929050565b60008060408385031215611a2457600080fd5b611a2d836119c9565b9150611a08602084016119c9565b600060208284031215611a4d57600080fd5b611291826119c9565b8015158114611a6457600080fd5b50565b600080600060608486031215611a7c57600080fd5b83359250602084013591506040840135611a9581611a56565b809150509250925092565b60008060408385031215611ab357600080fd5b50508035926020909101359150565b600080600060608486031215611ad757600080fd5b611ae0846119c9565b9250611aee602085016119c9565b91506040840135611a9581611a56565b600080600060608486031215611b1357600080fd5b611b1c846119c9565b9250611b2a602085016119c9565b9150611b38604085016119c9565b90509250925092565b600060208284031215611b5357600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561129457611294611b5a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526013908201527213db9b1e481bdddb995c8818d85b8818d85b1b606a1b604082015260600190565b600060208284031215611bee57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015611c5f57815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101611c1f565b509495945050505050565b828152604060208201526000611c836040830184611c0b565b949350505050565b60006020808385031215611c9e57600080fd5b825167ffffffffffffffff80821115611cb657600080fd5b818501915085601f830112611cca57600080fd5b815181811115611cdc57611cdc611bf5565b8060051b604051601f19603f83011681018181108582111715611d0157611d01611bf5565b604052918252848201925083810185019188831115611d1f57600080fd5b938501935b82851015611d3d57845184529385019392850192611d24565b98975050505050505050565b85815284602082015260a060408201526000611d6860a0830186611c0b565b6001600160a01b0394909416606083015250608001529392505050565b8082018082111561129457611294611b5a565b6000825160005b81811015611db95760208186018101518583015201611d9f565b506000920191825250919050565b600060208284031215611dd957600080fd5b815161129181611a56565b808202811582820484141761129457611294611b5a565b600082611e1857634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611e2f57611e2f611b5a565b506001019056fea2646970667358221220a41c9fa9df183ad71718ce1d45b41ca07955263766b5bb219b4e7085e8813fc764736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c806395d89b41116101e7578063cdd9aa0f1161010d578063e8f6ae29116100a0578063f2fde38b1161006f578063f2fde38b14610b42578063f52ec0a614610b62578063feaa7f2914610b78578063ffefc7d314610b8d57600080fd5b8063e8f6ae2914610acb578063f12cc5ca14610aeb578063f12dda8b14610b01578063f245e51a14610b2257600080fd5b8063de0daf10116100dc578063de0daf1014610a2d578063e0f3ccf514610a43578063e4748b9e14610a77578063e7ee883014610aab57600080fd5b8063cdd9aa0f14610991578063d4c48e5a146109b1578063dd47a7e7146109d1578063dd62ed3e146109e757600080fd5b8063ae613b4111610185578063bf468f9011610154578063bf468f9014610925578063c3c6467414610945578063c85256c114610965578063c8f50c8f1461097b57600080fd5b8063ae613b41146108b0578063b040c39b146108cf578063b4a99a4e146108e5578063b9ac80991461090557600080fd5b80639ac74033116101c15780639ac7403314610844578063a70dbe121461085a578063a9059cbb1461087b578063aae7539c1461089b57600080fd5b806395d89b41146107df5780639a99d5741461080e5780639ab233821461082457600080fd5b80634fc9ab15116102d75780636cad473c1161026a57806384421f2a1161023957806384421f2a1461074f57806387f30d601461077f5780638e28c9771461079f57806393e14fc2146107bf57600080fd5b80636cad473c146106be5780636facfe0d146106d457806370a082311461070457806380fef5af1461073a57600080fd5b80635b2cd2d8116102a65780635b2cd2d81461065257806365216a411461066857806367e417f71461068857806368cb26421461069e57600080fd5b80634fc9ab15146105bc578063509484d5146105ec57806356e7718c1461060c57806358fcf5e91461063c57600080fd5b806323b872dd1161034f57806337d753cf1161031e57806337d753cf14610538578063387c0d971461054e57806342dcdbaf1461056457806346811ed11461059c57600080fd5b806323b872dd146104c557806327033ae8146104e5578063313ce5671461050657806334ffe7531461052257600080fd5b806306fdde031161038b57806306fdde0314610437578063095ea7b31461046f57806318160ddd1461048f57806318a5a9eb146104a557600080fd5b806301551222146103bd57806304ababba146103f157806304ae93f61461041557600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506022546103dc90610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156103fd57600080fd5b5061040760155481565b6040519081526020016103e8565b34801561042157600080fd5b50610435610430366004614c10565b610ba3565b005b34801561044357600080fd5b506040805180820190915260068152654547474e4f4760d01b60208201525b6040516103e89190614cb1565b34801561047b57600080fd5b506103dc61048a366004614ce4565b610d45565b34801561049b57600080fd5b5061040760015481565b3480156104b157600080fd5b506104356104c0366004614d10565b610e12565b3480156104d157600080fd5b506103dc6104e0366004614d63565b610fac565b3480156104f157600080fd5b506011546103dc906301000000900460ff1681565b34801561051257600080fd5b50604051601281526020016103e8565b34801561052e57600080fd5b50610407601c5481565b34801561054457600080fd5b5061040760275481565b34801561055a57600080fd5b5061040760025481565b34801561057057600080fd5b50600854610584906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b3480156105a857600080fd5b50600954610584906001600160a01b031681565b3480156105c857600080fd5b506103dc6105d7366004614da4565b60106020526000908152604090205460ff1681565b3480156105f857600080fd5b50610435610607366004614da4565b610fd1565b34801561061857600080fd5b506103dc610627366004614da4565b600f6020526000908152604090205460ff1681565b34801561064857600080fd5b5061040760245481565b34801561065e57600080fd5b5061040760045481565b34801561067457600080fd5b50610435610683366004614e97565b6110af565b34801561069457600080fd5b50610407601e5481565b3480156106aa57600080fd5b506104356106b9366004614f59565b6112de565b3480156106ca57600080fd5b5061040760255481565b3480156106e057600080fd5b506103dc6106ef366004614da4565b600d6020526000908152604090205460ff1681565b34801561071057600080fd5b5061040761071f366004614da4565b6001600160a01b03166000908152600b602052604090205490565b34801561074657600080fd5b50610435611499565b34801561075b57600080fd5b506103dc61076a366004614da4565b600e6020526000908152604090205460ff1681565b34801561078b57600080fd5b5061043561079a366004614fb6565b611691565b3480156107ab57600080fd5b506022546103dc9062010000900460ff1681565b3480156107cb57600080fd5b50600654610584906001600160a01b031681565b3480156107eb57600080fd5b506040805180820190915260068152654567676e6f6760d01b6020820152610462565b34801561081a57600080fd5b50610407601d5481565b34801561083057600080fd5b5061043561083f36600461501b565b6116c9565b34801561085057600080fd5b5061040760235481565b34801561086657600080fd5b506011546103dc90600160301b900460ff1681565b34801561088757600080fd5b506103dc610896366004614ce4565b611771565b3480156108a757600080fd5b50610407611788565b3480156108bc57600080fd5b506011546103dc90610100900460ff1681565b3480156108db57600080fd5b5061040760135481565b3480156108f157600080fd5b50600054610584906001600160a01b031681565b34801561091157600080fd5b5061043561092036600461504b565b6117e6565b34801561093157600080fd5b50610435610940366004615084565b6118a6565b34801561095157600080fd5b506104356109603660046150c3565b6118f5565b34801561097157600080fd5b5061040760125481565b34801561098757600080fd5b5061040760055481565b34801561099d57600080fd5b50600a54610584906001600160a01b031681565b3480156109bd57600080fd5b506104356109cc3660046150f1565b611b74565b3480156109dd57600080fd5b5061040760145481565b3480156109f357600080fd5b50610407610a02366004615128565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610a3957600080fd5b5061040760265481565b348015610a4f57600080fd5b506104077f000000000000000000000000000000000000000000000000006a94d74f43000081565b348015610a8357600080fd5b506104077f00000000000000000000000000000000000000000000000000b1a2bc2ec5000081565b348015610ab757600080fd5b50610435610ac636600461504b565b611bf7565b348015610ad757600080fd5b50610435610ae63660046150c3565b611c57565b348015610af757600080fd5b50610407601f5481565b348015610b0d57600080fd5b506011546103dc90600160281b900460ff1681565b348015610b2e57600080fd5b50610435610b3d366004615156565b611cbf565b348015610b4e57600080fd5b50610435610b5d366004614da4565b611d8c565b348015610b6e57600080fd5b5061040760205481565b348015610b8457600080fd5b50610407611e1c565b348015610b9957600080fd5b50610407601b5481565b6000546001600160a01b03163314610bd65760405162461bcd60e51b8152600401610bcd9061518c565b60405180910390fd5b8115610ccb5760018414610c1c5760405162461bcd60e51b815260206004820152600d60248201526c37b7363c9027b732903830b4b960991b6044820152606401610bcd565b84846000818110610c2f57610c2f6151b8565b9050602002016020810190610c449190614da4565b600a80546001600160a01b03199081166001600160a01b0393841617909155600780549091169185169190911790556001600e600087878281610c8957610c896151b8565b9050602002016020810190610c9e9190614da4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610d3e565b60005b84811015610d3c578160106000888885818110610ced57610ced6151b8565b9050602002016020810190610d029190614da4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d34816151e4565b915050610cce565b505b5050505050565b60006001600160a01b038316610d905760405162461bcd60e51b815260206004820152601060248201526f125395905312510816915493c810511160821b6044820152606401610bcd565b336000908152600c602090815260408083206001600160a01b038716845290915281208054849290610dc39084906151fd565b90915550506040518281526001600160a01b0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259060200160405180910390a35060015b92915050565b60115460ff1615610e2257600080fd5b6011805460ff19166001179055600054336001600160a01b0390911614610e5b5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038316610e815760405162461bcd60e51b8152600401610bcd90615210565b600081610ef5576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190615253565b610ef7565b475b9050600083118015610f095750808311155b610f7b5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72206c6f776572207468616e2072657365727665006064820152608401610bcd565b8115610f9057610f8b8484611f79565b610f9b565b610f9b858585612042565b50506011805460ff19169055505050565b600033610fba858285612156565b610fc58585856121f9565b50600195945050505050565b6000546001600160a01b03163314610ffb5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b0381161580159061102157506008546001600160a01b03828116911614155b61105b5760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590810591960aa1b6044820152606401610bcd565b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527fc3eb9c17db91ff277fbf18fe474a08cd23c7089279c75f51f8a0b92cc306f9469060200160405180910390a150565b60115460ff16156110bf57600080fd5b6011805460ff19166001179055600054336001600160a01b03909116146110f85760405162461bcd60e51b8152600401610bcd9061518c565b805182511461110657600080fd5b60005b82518110156112cf5760006001600160a01b031683828151811061112f5761112f6151b8565b60200260200101516001600160a01b03160361115d5760405162461bcd60e51b8152600401610bcd90615210565b6000828281518110611171576111716151b8565b60200260200101511180156111bc575060208054306000908152600b90925260409091205461119f91612cbb565b8282815181106111b1576111b16151b8565b602002602001015111155b61122e5760405162461bcd60e51b815260206004820152603f60248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f206f72204c6f776572207468616e2072657365727665006064820152608401610bcd565b600061126d30858481518110611246576112466151b8565b6020026020010151858581518110611260576112606151b8565b60200260200101516121f9565b9050806112bc5760405162461bcd60e51b815260206004820152601b60248201527f455243323020746f6b656e207472616e73666572206661696c656400000000006044820152606401610bcd565b50806112c7816151e4565b915050611109565b50506011805460ff1916905550565b6000546001600160a01b031633146113085760405162461bcd60e51b8152600401610bcd9061518c565b60005b83811015610d3e576000858583818110611327576113276151b8565b905060200201602081019061133c9190614da4565b6001600160a01b03160361134f57600080fd5b816001036113b05782600d600087878581811061136e5761136e6151b8565b90506020020160208101906113839190614da4565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611487565b816002036113cf5782600e600087878581811061136e5761136e6151b8565b82600d60008787858181106113e6576113e66151b8565b90506020020160208101906113fb9190614da4565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082600e6000878785818110611449576114496151b8565b905060200201602081019061145e9190614da4565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b80611491816151e4565b91505061130b565b601154600160281b900460ff1680156114b95750601154610100900460ff165b806114df57506011546301000000900460ff1680156114df5750601154610100900460ff165b1561168f576013546114ef612d1e565b506011546301000000900460ff168015611544575061153f6115136012600a615350565b611539611530601c546012600a61152a9190615350565b90612e15565b601f5490612e74565b90612ef6565b601e54115b8061158f57506011546301000000900460ff16801561158f575061158a61156d6012600a615350565b611539611530601c546012600a6115849190615350565b90612cbb565b601e54105b15611679576115a36115136012600a615350565b601e5411156115da576115d66115cd6115be6012600a615350565b601d5460135461153991612e74565b60135490612e15565b6013555b6115e961156d6012600a615350565b601e5410156116115761160d6116046115be6012600a615350565b60135490612cbb565b6013555b602754602254601154602854602954611648949360ff610100820481169462010000909204811693600160201b9092041691612f51565b601e54601f556013546040516000805160206155d4833981519152916116709142919061535f565b60405180910390a15b601354811461168d5761168d6013546130b5565b505b565b6000546001600160a01b031633146116bb5760405162461bcd60e51b8152600401610bcd9061518c565b610d3c868686868686612f51565b6000546001600160a01b031633146116f35760405162461bcd60e51b8152600401610bcd9061518c565b6116fc826130b5565b801561176d57601180546022805462ffff001916905565ff00ffff0000191662010000179055601354604080516060808252600790820152664861726450656760c81b6080820152426020820152908101919091526000805160206155d48339815191529060a00160405180910390a15b5050565b600061177e3384846121f9565b5060019392505050565b600a80546001600160a01b03166000908152600b602052604081205490916117e0906117b690601290615350565b611539837f000000000000000000000000000000000000000000000000016345785d8a0000612e74565b91505090565b6000546001600160a01b031633146118105760405162461bcd60e51b8152600401610bcd9061518c565b601482905581156118a15761183161182a6012600a615350565b8490612e15565b601555426012556011805482158015600160281b0265ff000000000019909216919091179091556118a1576013546040805160608082526003908201526241505960e81b608082015242602082015280820192909252516000805160206155d48339815191529181900360a00190a15b505050565b6000546001600160a01b031633146118d05760405162461bcd60e51b8152600401610bcd9061518c565b601794909455601892909255601955601a556016805460ff1916911515919091179055565b6000546001600160a01b0316331461191f5760405162461bcd60e51b8152600401610bcd9061518c565b600980546001600160a01b0319166001600160a01b0384811691909117909155600754161561176d576009546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b6919061538b565b6007546040516306801cc360e41b81526001600160a01b0391821660048201523060248201528415156044820152911690636801cc3090606401602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a31919061538b565b90506001600160a01b038116611b3857600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab8919061538b565b6007546040516320b7f73960e21b81526001600160a01b03918216600482015230602482015284151560448201529116906382dfdce4906064016020604051808303816000875af1158015611b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b35919061538b565b90505b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600e60205260409020805460ff191660011790555050565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038316611bb157600080fd5b60118054911515600160301b0266ff00000000000019909216919091179055600680546001600160a01b039093166001600160a01b031990931692909217909155602155565b6000546001600160a01b03163314611c215760405162461bcd60e51b8152600401610bcd9061518c565b6011805461ff001916610100831515021790556002839055611c4f611c486012600a615350565b8390612e15565b600355505050565b6000546001600160a01b03163314611c815760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038216611c9457600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ce95760405162461bcd60e51b8152600401610bcd9061518c565b601c849055601d839055600754600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190615253565b601f55601b919091556011805491151563010000000263ff000000199092169190911790555050565b6000546001600160a01b03163314611db65760405162461bcd60e51b8152600401610bcd9061518c565b6001600160a01b038116611dfa5760405162461bcd60e51b815260206004820152600b60248201526a125395905312510810511160aa1b6044820152606401610bcd565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9891906153c4565b506001600160701b031691506001600160701b03169150306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f30919061538b565b6001600160a01b031603611f5f57611f5882611539611f516012600a615350565b8490612e74565b9250505090565b611f5881611539611f726012600a615350565b8590612e74565b604080516000808252602082019092526001600160a01b038416908390604051611fa39190615409565b60006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b50509050806118a15760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610bcd565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161209e9190615409565b6000604051808303816000865af19150503d80600081146120db576040519150601f19603f3d011682016040523d82523d6000602084013e6120e0565b606091505b509150915081801561210a57508051158061210a57508080602001905181019061210a9190615425565b610d3e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610bcd565b6001600160a01b038381166000908152600c602090815260408083209386168352929052205460001981146121f357818110156121c85760405162461bcd60e51b815260206004820152601060248201526f45786365656420416c6c6f77616e636560801b6044820152606401610bcd565b6001600160a01b038085166000908152600c6020908152604080832093871683529290522082820390555b50505050565b60006001600160a01b0384161580159061222c57506001600160a01b03831660009081526010602052604090205460ff16155b6122705760405162461bcd60e51b8152602060048201526015602482015274125395905312510814d1539111548815d053131155605a1b6044820152606401610bcd565b6001600160a01b038416301461228c5760115460ff161561228f565b60015b6122cc5760405162461bcd60e51b815260206004820152600e60248201526d2932b2b73a3930b731bc9022b93960911b6044820152606401610bcd565b6011805460ff191660011790556001600160a01b0384166000908152600b6020526040812054838110156123425760405162461bcd60e51b815260206004820152601b60248201527f494e53554646494349454e542053454e4445522042414c414e434500000000006044820152606401610bcd565b6001600160a01b038087166000818152600b602052604090208684039055600a5490911614801561238c57506001600160a01b0385166000908152600f602052604090205460ff16155b80156123a05750601154610100900460ff16155b15612449576001600160a01b0385166000908152600d602052604090205460ff16156123cd576000612406565b6124066123dc6012600a615350565b611539867f00000000000000000000000000000000000000000000000000b1a2bc2ec50000612e74565b9150612411846133db565b61242586866124208786612cbb565b613907565b6001600160a01b0385166000908152600b6020526040902042600190910155612c35565b600a546001600160a01b03868116911614801561247f57506001600160a01b0386166000908152600f602052604090205460ff16155b80156124935750601154610100900460ff16155b156127185760006124a2611788565b6001600160a01b0388166000908152600e602052604090205490915060ff161580156124d0575060225460ff165b6124db5760016124e0565b808511155b6125245760405162461bcd60e51b8152602060048201526015602482015274115610d15151081315134814d15313081312535255605a1b6044820152606401610bcd565b6001600160a01b0387166000908152600d602052604090205460ff16158015612555575060225462010000900460ff165b612560576000612599565b61259961256f6012600a615350565b611539877f000000000000000000000000000000000000000000000000006a94d74f430000612e74565b60165490935060ff1680156125c757506001600160a01b0387166000908152600d602052604090205460ff16155b15612690576019546001600160a01b0388166000908152600b60205260408120600101549091906125f9904290612cbb565b111561266357601a546001600160a01b0389166000908152600b6020526040902060010154612629904290612cbb565b1115612636576000612680565b61265e6126456012600a615350565b6018546115399061265790600a612e74565b8990612e74565b612680565b6126806126726012600a615350565b601754611539908990612e74565b905061268c8482612e15565b9350505b6001600160a01b03871630148015906126b757506008546001600160a01b03888116911614155b80156126dc57506001600160a01b0387166000908152600d602052604090205460ff16155b80156126f15750601154600160301b900460ff165b156126fe576126fe6139ae565b6127128761270c8786612cbb565b85613ab8565b50612c35565b601154610100900460ff1615612b7557600a546001600160a01b03878116911614801561275e57506001600160a01b0385166000908152600d602052604090205460ff16155b1561279f5761279c6127726012600a615350565b611539867f000000000000000000000000000000000000000000000000001c6bf526340000612e74565b91505b600a546001600160a01b0386811691161480156127d557506001600160a01b0386166000908152600d602052604090205460ff16155b15612b705760006128156127eb6012600a615350565b611539877f000000000000000000000000000000000000000000000000001c6bf526340000612e74565b601154909350600160301b900460ff16801561283a57506001600160a01b0387163014155b15612847576128476139ae565b600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561289d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c191906153c4565b506001600160701b03918216935016905060006128de8887612cbb565b60408051600180825281830190925291925060009190816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816128f9575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190612960576129606151b8565b60209081029190910101526009546040516326207f2d60e21b81526000916001600160a01b031690639881fcb49061299e90869086906004016154a1565b600060405180830381865afa1580156129bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e391908101906154ba565b6001815181106129f5576129f56151b8565b60200260200101519050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a80919061538b565b6001600160a01b031603612ace57612aba612a9b8685612e15565b611539612aaa6012600a615350565b612ab48886612cbb565b90612e74565b9550612ac68482612cbb565b601e55612b04565b612af4612adb8585612e15565b611539612aea6012600a615350565b612ab48986612cbb565b9550612b008582612cbb565b601e555b6013548611612b69576011805461ff001916908190556013879055670429d069189e00006005819055600455602754602254602854602954612b629460ff6101008504811694620100009004811693600160201b9092041691612f51565b601e54601f555b5050505050505b612c26565b600a546001600160a01b03878116911614801590612ba15750600a546001600160a01b03868116911614155b15612bae57612bae611499565b6001600160a01b0386166000908152600f602052604090205460ff1680612bed57506001600160a01b0385166000908152600f602052604090205460ff165b15612c26576001600160a01b038087166000908152600f6020526040808220805460ff1990811690915592881682529020805490911690555b612c3586866124208786612cbb565b8115612ca557601154600160301b900460ff1615612c9a576000612c7f612c5e6012600a615350565b611539612c78600454600554612e1590919063ffffffff16565b8690612e74565b90508060206000828254612c9391906151fd565b9091555050505b612ca5863084613907565b50506011805460ff191690555060019392505050565b600082821115612d0d5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610bcd565b612d17828461554b565b9392505050565b601154600090600160281b900460ff1615612e0f576000612d5060145461153960125442612cbb90919063ffffffff16565b90508015612e0d5760135460005b82811015612d9b576000612d85612d776012600a615350565b601554611539908690612e74565b9250819050612d93816151e4565b915050612d5e565b50601454612da99083612e74565b60126000828254612dba91906151fd565b90915550506013819055602254610100900460ff1615612e0b57602754602254601154602854602954612e0b949360ff610100820481169462010000909204811693600160201b9092041691612f51565b505b505b50600190565b600080612e2283856151fd565b905083811015612d175760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcd565b600082600003612e8657506000610e0c565b6000612e92838561555e565b905082612e9f8583615575565b14612d175760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcd565b6000808211612f475760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610bcd565b612d178284615575565b6000612f6f612f626012600a615350565b601354611539908a612e74565b601354909150612f7f9082612e15565b602555601354612f8f9082612cbb565b60265560278790558580612fa05750845b6011805462ff00001916911562010000029190911790558361301b578515612fe8576022805461ff00191661010088151502179055612fdf8184612ef6565b60245560288390555b8415613016576022805462ff00001916620100008715150217905561300d8183612ef6565b60235560298290555b61303f565b6022805462ffff0019166101008815150262ff000019161762010000871515021790555b6011805464ff000000001916600160201b86151502179081905560ff62010000909104166130ac576013546040805160608082526003908201526204170760ec1b608082015242602082015280820192909252516000805160206155d48339815191529181900360a00190a15b50505050505050565b600080600080600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561310e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313291906153c4565b50600a546001600160a01b03166000818152600b6020908152604091829020548251630dfe168160e01b815292516001600160701b0396871698509490951695503093630dfe16819260048082019392918290030181865afa15801561319c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c0919061538b565b6001600160a01b0316036131e9576131e28661153984612ab46012600a615350565b9350613200565b6131fd8661153985612ab46012600a615350565b93505b838111156132705760006132148286612cbb565b600a546001600160a01b03166000908152600b602052604090205490915061323c9082612cbb565b600a80546001600160a01b039081166000908152600b60205260409020929092555461326a91163083613907565b50613366565b61327a8482612cbb565b60208054306000908152600b9092526040822054929750909161329c91612cbb565b90508581106132ee57306000908152600b60205260409020546132bf9087612cbb565b306000818152600b6020526040902091909155600a546132e991906001600160a01b031688613907565b613364565b801561333857306000908152600b602052604090205461330e9082612cbb565b306000818152600b6020526040902091909155600a5461333891906001600160a01b031683613907565b60006133448783612cbb565b9050801561336257600a54613362906001600160a01b0316826146c9565b505b505b600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133b657600080fd5b505af11580156133ca573d6000803e3d6000fd5b505050601396909655505050505050565b600a546001600160a01b03166000818152600b6020526040808220548151630240bc6b60e21b81529151929384938493849283929091630902f1ac9160048083019260609291908290030181865afa15801561343b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345f91906153c4565b506040805160018082528183019092526001600160701b039384169550919092169250600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161348a575050604080516060810182526007546001600160a01b0316815230602082015260009181018290528251929350918391906134f1576134f16151b8565b602090810291909101015260095460405163d5c54e3360e01b81526000916001600160a01b03169063d5c54e339061352f908c9086906004016154a1565b600060405180830381865afa15801561354c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261357491908101906154ba565b9050306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f7919061538b565b6001600160a01b03160361363a576136328160008151811061361b5761361b6151b8565b602002602001015184612e1590919063ffffffff16565b601e5561366b565b61366781600081518110613650576136506151b8565b602002602001015185612e1590919063ffffffff16565b601e555b613685601354611539601e546012600a612ab49190615350565b602254909850610100900460ff161561375257601154600090600160201b900460ff166136c0576024546013546136bb91612e15565b6136e8565b6136e86115cd876115396136e1601354602554612cbb90919063ffffffff16565b8e90612e74565b9050600061370c6136f9888d612e15565b601e5461153990612ab46012600a615350565b9050818111801561371d5750600082115b801561372a575060135482115b1561374f5761374782611539601e546012600a612ab49190615350565b601383905599505b50505b848811156138545760006137668987612cbb565b60208054306000908152600b9092526040822054929350909161378891612cbb565b9050818111156137db57306000908152600b60205260409020546137ac9083612cbb565b306000818152600b6020526040902091909155600a546137d691906001600160a01b031684613907565b61384d565b6137e58282612cbb565b9850801561383157306000908152600b60205260409020546138079082612cbb565b306000818152600b6020526040902091909155600a5461383191906001600160a01b031683613907565b881561384d57600a5461384d906001600160a01b03168a6146c9565b50506138b4565b61385e8589612cbb565b600a546001600160a01b03166000908152600b60205260409020549096506138869087612cbb565b600a80546001600160a01b039081166000908152600b6020526040902092909255546138b491163088613907565b604080518a8152602081018a9052908101889052606081018790527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a1505050505050505050565b6001600160a01b03821661395d5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49442052454345495645522057414c4c45540000000000000000006044820152606401610bcd565b6001600160a01b038083166000818152600b6020526040908190208054850190555190918516906000805160206155f4833981519152906139a19085815260200190565b60405180910390a3505050565b306000908152600b60209081526040909120546021549154909111156139d15750565b602054811061168d5760205460225460009060ff16613a0a57613a0560646115396002600154612e7490919063ffffffff16565b613a12565b613a12611788565b9050806020541115613a22578091505b613a2b82614975565b50600854600954600754600654604051634998b10960e11b81526001600160a01b039384166004820152918316602483015282166044820152911690639331621290606401600060405180830381600087803b158015613a8a57600080fd5b505af1158015613a9e573d6000803e3d6000fd5b5050602054613ab09250905083612cbb565b602055505050565b6000806000806000600a60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3791906153c4565b50600a546001600160a01b039081166000818152600b60205260408082205460075491516370a0823160e01b815260048101949094526001600160701b0396871698509490951695509293909116906370a0823190602401602060405180830381865afa158015613bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd09190615253565b6009549091506001600160a01b03163303613d1f576000613bf98361153984612ab48e8e612e15565b6009549091506001600160a01b03163181118015613c905750600754600954604051636eb1769f60e11b81526001600160a01b038e8116600483015291821660248201528392919091169063dd62ed3e90604401602060405180830381865afa158015613c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8e9190615253565b105b613d1d5760405162461bcd60e51b815260206004820152605260248201527f4f6e6c79204c697175696469747941646465722063616e206164644c6971756960448201527f64697479206f722072656d6f766520574e415449564520616c6c6f77616e6365606482015271081a5b881c9bdd5d195c881d1bc81cd95b1b60721b608482015260a401610bcd565b505b604080516001808252818301909252600091816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181613d36575050604080516060810182523081526007546001600160a01b031660208201526000918101829052825192935091839190613d9d57613d9d6151b8565b6020026020010181905250306001600160a01b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e29919061538b565b6001600160a01b031603613ee1576009546040516326207f2d60e21b8152613ed9916001600160a01b031690639881fcb490613e6b908e9086906004016154a1565b600060405180830381865afa158015613e88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb091908101906154ba565b600181518110613ec257613ec26151b8565b602002602001015185612cbb90919063ffffffff16565b601e55613f87565b6009546040516326207f2d60e21b8152613f83916001600160a01b031690639881fcb490613f15908e9086906004016154a1565b600060405180830381865afa158015613f32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f5a91908101906154ba565b600181518110613f6c57613f6c6151b8565b602002602001015186612cbb90919063ffffffff16565b601e555b6001600160a01b038b16301461427557601b548210158015613fb357506011546301000000900460ff16155b15613ffc576011805463ff00000019166301000000179055601e54601f556013546040516000805160206155d483398151915291613ff39142919061535f565b60405180910390a15b6011546301000000900460ff168015614024575061401f6115136012600a615350565b601e54115b8061405257506011546301000000900460ff168015614052575061404d61156d6012600a615350565b601e54105b1561415f576140666115136012600a615350565b601e541115614085576140816115cd6115be6012600a615350565b6013555b61409461156d6012600a615350565b601e5410156140b3576140af6116046115be6012600a615350565b6013555b6140cd601354611539601e546012600a612ab49190615350565b602254909750610100900460ff16806140ee575060225462010000900460ff165b1561412a5760275460225460115460285460295461412a949360ff610100820481169462010000909204811693600160201b9092041691612f51565b601e54601f556013546040516000805160206155d4833981519152916141529142919061535f565b60405180910390a1614169565b614167612d1e565b505b60225462010000900460ff16801561418a57506001600160a01b038b163014155b80156141ac575060646141aa602654601354612cbb90919063ffffffff16565b115b1561427557601154600090600160201b900460ff166141d9576023546013546141d491612cbb565b614201565b614201611604856115396141fa602654601354612cbb90919063ffffffff16565b8f90612e74565b905061421b81611539601e546012600a612ab49190615350565b9750600061423785611539601e546012600a612ab49190615350565b90506026548111801561424b575060265482115b156142725761426a601354611539601e546012600a612ab49190615350565b601383905598505b50505b61428f601354611539601e546012600a612ab49190615350565b9650828711156145055760006142a58885612cbb565b9050808b111561432b57600a546001600160a01b03166000908152600b60205260409020546142d49082612e15565b600a546001600160a01b03166000908152600b60205260409020556142f98b82612cbb565b306000908152600b6020526040902054909950614316908a612e15565b306000908152600b60205260409020556144ff565b600a546001600160a01b03166000908152600b6020526040902054614350908c612e15565b600a546001600160a01b03166000908152600b6020526040812091909155614378828d612cbb565b60208054306000908152600b9092526040822054929350909161439a91612cbb565b90508181111561443b57306000908152600b60205260409020546143be9083612cbb565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546143ec9083612e15565b600a80546001600160a01b039081166000908152600b6020908152604091829020949094559154915185815291169130916000805160206155f4833981519152910160405180910390a36144fc565b6144458282612cbb565b985080156144e057306000908152600b60205260409020546144679082612cbb565b306000908152600b602052604080822092909255600a546001600160a01b0316815220546144959082612e15565b600a80546001600160a01b039081166000908152600b6020908152604091829020949094559154915184815291169130916000805160206155f4833981519152910160405180910390a35b88156144fc57600a546144fc906001600160a01b03168a6146c9565b50505b50614641565b60006145118489612cbb565b9050600061451f8583612cbb565b905061453561452e8d8d612e15565b8290612cbb565b600a546001600160a01b03166000908152600b602052604090205561455a8c83612e15565b9950600a60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156145ac57600080fd5b505af11580156145c0573d6000803e3d6000fd5b5050600a546001600160a01b03166000908152600b60205260408082208590553082529020546145f3925090508b612e15565b306000818152600b60205260409081902092909255600a54915190916001600160a01b0316906000805160206155f483398151915290614636908e815260200190565b60405180910390a350505b600a546040518b81526001600160a01b03918216918d16906000805160206155f48339815191529060200160405180910390a3604080518b815260208101899052908101879052606081018990527f0c661dce3d839aced1086604b1917aad472f0684c0336d6d5eef6ecc243d32ea9060800160405180910390a15050505050505050505050565b6001600160a01b0382166147185760405162461bcd60e51b8152602060048201526016602482015275494e56414c4944204d494e544552204144445245535360501b6044820152606401610bcd565b6147246012600a615350565b61473390641029c1230061555e565b6001541015614841576147486012600a615350565b61475790641029c1230061555e565b6001546147649083612e15565b11156147ea57600061478f6001546012600a6147809190615350565b61158490641029c1230061555e565b905080600160008282546147a391906151fd565b90915550506001600160a01b0383166000908152600b60205260409020546147cb9082612e15565b6001600160a01b0384166000908152600b602052604090205550614841565b6001600160a01b0382166000908152600b602052604090205461480d9082612e15565b6001600160a01b0383166000908152600b60205260408120919091556001805483929061483b9084906151fd565b90915550505b60025460015410158015614871575061485c6012600a615350565b61486b90641029c1230061555e565b60025414155b15614942576011805461ff0019166101001790556148916012600a615350565b6148a090641029c1230061555e565b600154146148cb576148c66148b76012600a615350565b60035460025461153991612e74565b6148e6565b6148d76012600a615350565b6148e690641029c1230061555e565b6002556706f05b59d3b20000600581815560049190915560135460408051606080825281019390935264109b185cdd60da1b60808401524260208401528201526000805160206155d48339815191529060a00160405180910390a15b6040518181526001600160a01b038316906000906000805160206155f48339815191529060200160405180910390a35050565b604080516001808252818301909252600091829190816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161498f575050604080516060810182523081526007546001600160a01b0316602082015260009181018290528251929350918391906149f6576149f66151b8565b602090810291909101810191909152306000908152600c825260408082206009546001600160a01b031683529092529081208054859290614a389084906151fd565b90915550506007546008546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab29190615253565b600954600854604051636cc1ae1360e01b81529293506001600160a01b0391821692636cc1ae1392614af1928992600092899216904290600401615597565b600060405180830381600087803b158015614b0b57600080fd5b505af1158015614b1f573d6000803e3d6000fd5b50506007546008546040516370a0823160e01b81526001600160a01b039182166004820152614b9994508593509116906370a0823190602401602060405180830381865afa158015614b75573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190615253565b949350505050565b60008083601f840112614bb357600080fd5b50813567ffffffffffffffff811115614bcb57600080fd5b6020830191508360208260051b8501011115614be657600080fd5b9250929050565b6001600160a01b038116811461168d57600080fd5b801515811461168d57600080fd5b600080600080600060808688031215614c2857600080fd5b853567ffffffffffffffff811115614c3f57600080fd5b614c4b88828901614ba1565b9096509450506020860135614c5f81614bed565b92506040860135614c6f81614c02565b91506060860135614c7f81614c02565b809150509295509295909350565b60005b83811015614ca8578181015183820152602001614c90565b50506000910152565b6020815260008251806020840152614cd0816040850160208701614c8d565b601f01601f19169190910160400192915050565b60008060408385031215614cf757600080fd5b8235614d0281614bed565b946020939093013593505050565b60008060008060808587031215614d2657600080fd5b8435614d3181614bed565b93506020850135614d4181614bed565b9250604085013591506060850135614d5881614c02565b939692955090935050565b600080600060608486031215614d7857600080fd5b8335614d8381614bed565b92506020840135614d9381614bed565b929592945050506040919091013590565b600060208284031215614db657600080fd5b8135612d1781614bed565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e0057614e00614dc1565b604052919050565b600067ffffffffffffffff821115614e2257614e22614dc1565b5060051b60200190565b600082601f830112614e3d57600080fd5b81356020614e52614e4d83614e08565b614dd7565b82815260059290921b84018101918181019086841115614e7157600080fd5b8286015b84811015614e8c5780358352918301918301614e75565b509695505050505050565b60008060408385031215614eaa57600080fd5b823567ffffffffffffffff80821115614ec257600080fd5b818501915085601f830112614ed657600080fd5b81356020614ee6614e4d83614e08565b82815260059290921b84018101918181019089841115614f0557600080fd5b948201945b83861015614f2c578535614f1d81614bed565b82529482019490820190614f0a565b96505086013592505080821115614f4257600080fd5b50614f4f85828601614e2c565b9150509250929050565b60008060008060608587031215614f6f57600080fd5b843567ffffffffffffffff811115614f8657600080fd5b614f9287828801614ba1565b9095509350506020850135614fa681614c02565b9396929550929360400135925050565b60008060008060008060c08789031215614fcf57600080fd5b863595506020870135614fe181614c02565b94506040870135614ff181614c02565b9350606087013561500181614c02565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561502e57600080fd5b82359150602083013561504081614c02565b809150509250929050565b60008060006060848603121561506057600080fd5b8335925060208401359150604084013561507981614c02565b809150509250925092565b600080600080600060a0868803121561509c57600080fd5b853594506020860135935060408601359250606086013591506080860135614c7f81614c02565b600080604083850312156150d657600080fd5b82356150e181614bed565b9150602083013561504081614c02565b60008060006060848603121561510657600080fd5b833561511181614bed565b925060208401359150604084013561507981614c02565b6000806040838503121561513b57600080fd5b823561514681614bed565b9150602083013561504081614bed565b6000806000806080858703121561516c57600080fd5b8435935060208501359250604085013591506060850135614d5881614c02565b60208082526012908201527121b0b63632b91034b9b713ba1037bbb732b960711b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016151f6576151f66151ce565b5060010190565b80820180821115610e0c57610e0c6151ce565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561526557600080fd5b5051919050565b600181815b808511156152a757816000190482111561528d5761528d6151ce565b8085161561529a57918102915b93841c9390800290615271565b509250929050565b6000826152be57506001610e0c565b816152cb57506000610e0c565b81600181146152e157600281146152eb57615307565b6001915050610e0c565b60ff8411156152fc576152fc6151ce565b50506001821b610e0c565b5060208310610133831016604e8410600b841016171561532a575081810a610e0c565b615334838361526c565b8060001904821115615348576153486151ce565b029392505050565b6000612d1760ff8416836152af565b60608082526005908201526409082a886960db1b60808201526020810192909252604082015260a00190565b60006020828403121561539d57600080fd5b8151612d1781614bed565b80516001600160701b03811681146153bf57600080fd5b919050565b6000806000606084860312156153d957600080fd5b6153e2846153a8565b92506153f0602085016153a8565b9150604084015163ffffffff8116811461507957600080fd5b6000825161541b818460208701614c8d565b9190910192915050565b60006020828403121561543757600080fd5b8151612d1781614c02565b600081518084526020808501945080840160005b8381101561549657815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101615456565b509495945050505050565b828152604060208201526000614b996040830184615442565b600060208083850312156154cd57600080fd5b825167ffffffffffffffff8111156154e457600080fd5b8301601f810185136154f557600080fd5b8051615503614e4d82614e08565b81815260059190911b8201830190838101908783111561552257600080fd5b928401925b8284101561554057835182529284019290840190615527565b979650505050505050565b81810381811115610e0c57610e0c6151ce565b8082028115828204841417610e0c57610e0c6151ce565b60008261559257634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006155b660a0830186615442565b6001600160a01b039490941660608301525060800152939250505056fe6b394e3b256f53d27bc3bd048c71d1c38a3924a1b67754ddd32d50c67e85e0e8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e1f00b1fa679d0fbbca13b4c917dbbcfb23f9219eb2c983a79cc8fb32a5b9e9b64736f6c63430008110033
Deployed Bytecode Sourcemap
23637:43210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27299:33;;;;;;;;;;-1:-1:-1;27299:33:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;27299:33:0;;;;;;;;26147:34;;;;;;;;;;;;;;;;;;;352:25:1;;;340:2;325:18;26147:34:0;206:177:1;61717:560:0;;;;;;;;;;-1:-1:-1;61717:560:0;;;;;:::i;:::-;;:::i;:::-;;28492:91;;;;;;;;;;-1:-1:-1;28570:5:0;;;;;;;;;;;;-1:-1:-1;;;28570:5:0;;;;28492:91;;;;;;;:::i;29274:306::-;;;;;;;;;;-1:-1:-1;29274:306:0;;;;;:::i;:::-;;:::i;23848:55::-;;;;;;;;;;;;;;;;65124:706;;;;;;;;;;-1:-1:-1;65124:706:0;;;;;:::i;:::-;;:::i;29588:281::-;;;;;;;;;;-1:-1:-1;29588:281:0;;;;;:::i;:::-;;:::i;25789:22::-;;;;;;;;;;-1:-1:-1;25789:22:0;;;;;;;;;;;28694:91;;;;;;;;;;-1:-1:-1;28694:91:0;;23839:2;4043:36:1;;4031:2;4016:18;28694:91:0;3901:184:1;26687:58:0;;;;;;;;;;;;;;;;27540:23;;;;;;;;;;;;;;;;24024:62;;;;;;;;;;;;;;;;24903:26;;;;;;;;;;-1:-1:-1;24903:26:0;;;;-1:-1:-1;;;;;24903:26:0;;;;;;-1:-1:-1;;;;;4269:32:1;;;4251:51;;4239:2;4224:18;24903:26:0;4090:218:1;24938:103:0;;;;;;;;;;-1:-1:-1;24938:103:0;;;;-1:-1:-1;;;;;24938:103:0;;;25472:39;;;;;;;;;;-1:-1:-1;25472:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;66574:270;;;;;;;;;;-1:-1:-1;66574:270:0;;;;;:::i;:::-;;:::i;25414:51::-;;;;;;;;;;-1:-1:-1;25414:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27424:36;;;;;;;;;;;;;;;;24632:47;;;;;;;;;;;;;;;;65838:728;;;;;;;;;;-1:-1:-1;65838:728:0;;;;;:::i;:::-;;:::i;26854:29::-;;;;;;;;;;;;;;;;64164:571;;;;;;;;;;-1:-1:-1;64164:571:0;;;;;:::i;:::-;;:::i;27467:30::-;;;;;;;;;;;;;;;;25302:48;;;;;;;;;;-1:-1:-1;25302:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28793:126;;;;;;;;;;-1:-1:-1;28793:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;28885:18:0;28858:7;28885:18;;;:9;:18;;;;;:26;;28793:126;54066:2435;;;;;;;;;;;;;:::i;25357:50::-;;;;;;;;;;-1:-1:-1;25357:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;60448:313;;;;;;;;;;-1:-1:-1;60448:313:0;;;;;:::i;:::-;;:::i;27339:34::-;;;;;;;;;;-1:-1:-1;27339:34:0;;;;;;;;;;;24783:73;;;;;;;;;;-1:-1:-1;24783:73:0;;;;-1:-1:-1;;;;;24783:73:0;;;28591:95;;;;;;;;;;-1:-1:-1;28671:7:0;;;;;;;;;;;;-1:-1:-1;;;28671:7:0;;;;28591:95;;26773:53;;;;;;;;;;;;;;;;56509:581;;;;;;;;;;-1:-1:-1;56509:581:0;;;;;:::i;:::-;;:::i;27380:37::-;;;;;;;;;;;;;;;;25868:34;;;;;;;;;;-1:-1:-1;25868:34:0;;;;-1:-1:-1;;;25868:34:0;;;;;;28927:148;;;;;;;;;;-1:-1:-1;28927:148:0;;;;;:::i;:::-;;:::i;60769:203::-;;;;;;;;;;;;;:::i;25737:22::-;;;;;;;;;;-1:-1:-1;25737:22:0;;;;;;;;;;;26079:29;;;;;;;;;;;;;;;;23703:20;;;;;;;;;;-1:-1:-1;23703:20:0;;;;-1:-1:-1;;;;;23703:20:0;;;52394:500;;;;;;;;;;-1:-1:-1;52394:500:0;;;;;:::i;:::-;;:::i;64743:373::-;;;;;;;;;;-1:-1:-1;64743:373:0;;;;;:::i;:::-;;:::i;62443:734::-;;;;;;;;;;-1:-1:-1;62443:734:0;;;;;:::i;:::-;;:::i;26043:29::-;;;;;;;;;;;;;;;;24706:48;;;;;;;;;;;;;;;;25066:27;;;;;;;;;;-1:-1:-1;25066:27:0;;;;-1:-1:-1;;;;;25066:27:0;;;63642:305;;;;;;;;;;-1:-1:-1;63642:305:0;;;;;:::i;:::-;;:::i;26115:25::-;;;;;;;;;;;;;;;;29083:183;;;;;;;;;;-1:-1:-1;29083:183:0;;;;;:::i;:::-;-1:-1:-1;;;;;29231:18:0;;;29199:7;29231:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29083:183;27504:29;;;;;;;;;;;;;;;;25608:53;;;;;;;;;;;;;;;25543;;;;;;;;;;;;;;;61437:272;;;;;;;;;;-1:-1:-1;61437:272:0;;;;;:::i;:::-;;:::i;63955:201::-;;;;;;;;;;-1:-1:-1;63955:201:0;;;;;:::i;:::-;;:::i;26890:34::-;;;;;;;;;;;;;;;;25841:20;;;;;;;;;;-1:-1:-1;25841:20:0;;;;-1:-1:-1;;;25841:20:0;;;;;;63185:449;;;;;;;;;;-1:-1:-1;63185:449:0;;;;;:::i;:::-;;:::i;62285:150::-;;;;;;;;;;-1:-1:-1;62285:150:0;;;;;:::i;:::-;;:::i;26954:32::-;;;;;;;;;;;;;;;;60980:399;;;;;;;;;;;;;:::i;26587:60::-;;;;;;;;;;;;;;;;61717:560;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;;;;;;;;;61899:7:::1;61896:374;;;61949:1;61930:20:::0;::::1;61922:46;;;::::0;-1:-1:-1;;;61922:46:0;;12529:2:1;61922:46:0::1;::::0;::::1;12511:21:1::0;12568:2;12548:18;;;12541:30;-1:-1:-1;;;12587:18:1;;;12580:43;12640:18;;61922:46:0::1;12327:337:1::0;61922:46:0::1;62006:8;;62015:1;62006:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;61983:9;:35:::0;;-1:-1:-1;;;;;;61983:35:0;;::::1;-1:-1:-1::0;;;;;61983:35:0;;::::1;;::::0;;;62033:17:::1;:38:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;62086:18:0::1;-1:-1:-1::0;62105:8:0;;-1:-1:-1;62105:8:0;:11:::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;62086:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;62086:31:0;:38;;-1:-1:-1;;62086:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;61896:374:::1;;;62159:6;62155:104;62168:19:::0;;::::1;62155:104;;;62235:8;62212:7;:20;62220:8;;62229:1;62220:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;62212:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;62212:20:0;:31;;-1:-1:-1;;62212:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62189:3;::::1;::::0;::::1;:::i;:::-;;;;62155:104;;;;61896:374;61717:560:::0;;;;;:::o;29274:306::-;29374:4;-1:-1:-1;;;;;29404:21:0;;29396:50;;;;-1:-1:-1;;;29396:50:0;;13275:2:1;29396:50:0;;;13257:21:1;13314:2;13294:18;;;13287:30;-1:-1:-1;;;13333:18:1;;;13326:46;13389:18;;29396:50:0;13073:340:1;29396:50:0;29469:10;29457:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29457:32:0;;;;;;;;;:41;;29493:5;;29457:23;:41;;29493:5;;29457:41;:::i;:::-;;;;-1:-1:-1;;29514:36:0;;352:25:1;;;-1:-1:-1;;;;;29514:36:0;;;29523:10;;29514:36;;340:2:1;325:18;29514:36:0;;;;;;;-1:-1:-1;29568:4:0;29274:306;;;;;:::o;65124:706::-;28014:9;;;;:18;28006:27;;;;;;28044:9;:16;;-1:-1:-1;;28044:16:0;28056:4;28044:16;;;:9;27913:5;27899:10:::1;-1:-1:-1::0;;;;;27913:5:0;;::::1;27899:19;27891:50;;;;-1:-1:-1::0;;;27891:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;65311:16:0;::::2;65303:64;;;;-1:-1:-1::0;;;65303:64:0::2;;;;;;;:::i;:::-;65378:20;65401:12;:107;;65466:42;::::0;-1:-1:-1;;;65466:42:0;;65502:4:::2;65466:42;::::0;::::2;4251:51:1::0;-1:-1:-1;;;;;65466:27:0;::::2;::::0;::::2;::::0;4224:18:1;;65466:42:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65401:107;;;65429:21;65401:107;65378:130;;65550:1;65541:6;:10;:36;;;;;65565:12;65555:6;:22;;65541:36;65519:149;;;::::0;-1:-1:-1;;;65519:149:0;;14343:2:1;65519:149:0::2;::::0;::::2;14325:21:1::0;14382:2;14362:18;;;14355:30;14421:34;14401:18;;;14394:62;14492:33;14472:18;;;14465:61;14543:19;;65519:149:0::2;14141:427:1::0;65519:149:0::2;65683:12;65679:143;;;65712:42;65743:2;65747:6;65712:30;:42::i;:::-;65679:143;;;65772:50;65800:9;65811:2;65815:6;65772:27;:50::i;:::-;-1:-1:-1::0;;28083:9:0;:17;;-1:-1:-1;;28083:17:0;;;-1:-1:-1;;;65124:706:0:o;29588:281::-;29709:4;29744:10;29765:37;29781:4;29744:10;29796:5;29765:15;:37::i;:::-;29813:26;29823:4;29829:2;29833:5;29813:9;:26::i;:::-;-1:-1:-1;29857:4:0;;29588:281;-1:-1:-1;;;;;29588:281:0:o;66574:270::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;66666:18:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;66704:12:0::1;::::0;-1:-1:-1;;;;;66688:29:0;;::::1;66704:12:::0;::::1;66688:29;;66666:51;66644:112;;;::::0;-1:-1:-1;;;66644:112:0;;14775:2:1;66644:112:0::1;::::0;::::1;14757:21:1::0;14814:2;14794:18;;;14787:30;-1:-1:-1;;;14833:18:1;;;14826:41;14884:18;;66644:112:0::1;14573:335:1::0;66644:112:0::1;66767:12;:27:::0;;-1:-1:-1;;;;;;66767:27:0::1;-1:-1:-1::0;;;;;66767:27:0;::::1;::::0;;::::1;::::0;;;66810:26:::1;::::0;4251:51:1;;;66810:26:0::1;::::0;4239:2:1;4224:18;66810:26:0::1;;;;;;;66574:270:::0;:::o;65838:728::-;28014:9;;;;:18;28006:27;;;;;;28044:9;:16;;-1:-1:-1;;28044:16:0;28056:4;28044:16;;;:9;27913:5;27899:10:::1;-1:-1:-1::0;;;;;27913:5:0;;::::1;27899:19;27891:50;;;;-1:-1:-1::0;;;27891:50:0::1;;;;;;;:::i;:::-;65997:6:::2;:13;65984:2;:9;:26;65976:35;;;::::0;::::2;;66027:9;66022:537;66046:2;:9;66042:1;:13;66022:537;;;66102:1;-1:-1:-1::0;;;;;66085:19:0::2;:2;66088:1;66085:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;66085:19:0::2;::::0;66077:67:::2;;;;-1:-1:-1::0;;;66077:67:0::2;;;;;;;:::i;:::-;66197:1;66185:6;66192:1;66185:9;;;;;;;;:::i;:::-;;;;;;;:13;:129;;;;-1:-1:-1::0;66296:17:0::2;::::0;;66276:4:::2;66258:24;::::0;;;:9:::2;:24:::0;;;;;;;:32;66257:57:::2;::::0;:38:::2;:57::i;:::-;66223:6;66230:1;66223:9;;;;;;;;:::i;:::-;;;;;;;:91;;66185:129;66159:254;;;::::0;-1:-1:-1;;;66159:254:0;;15115:2:1;66159:254:0::2;::::0;::::2;15097:21:1::0;15154:2;15134:18;;;15127:30;15193:34;15173:18;;;15166:62;15264:33;15244:18;;;15237:61;15315:19;;66159:254:0::2;14913:427:1::0;66159:254:0::2;66428:12;66443:42;66461:4;66468:2;66471:1;66468:5;;;;;;;;:::i;:::-;;;;;;;66475:6;66482:1;66475:9;;;;;;;;:::i;:::-;;;;;;;66443;:42::i;:::-;66428:57;;66508:7;66500:47;;;::::0;-1:-1:-1;;;66500:47:0;;15547:2:1;66500:47:0::2;::::0;::::2;15529:21:1::0;15586:2;15566:18;;;15559:30;15625:29;15605:18;;;15598:57;15672:18;;66500:47:0::2;15345:351:1::0;66500:47:0::2;-1:-1:-1::0;66057:3:0;::::2;::::0;::::2;:::i;:::-;;;;66022:537;;;-1:-1:-1::0;;28083:9:0;:17;;-1:-1:-1;;28083:17:0;;;-1:-1:-1;65838:728:0:o;64164:571::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;64312:9:::1;64307:421;64327:21:::0;;::::1;64307:421;;;64403:1;64378:10:::0;;64389:1;64378:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64378:27:0::1;::::0;64370:36:::1;;;::::0;::::1;;64425:4;64433:1;64425:9:::0;64421:296:::1;;64470:8;64436:16;:31;64453:10;;64464:1;64453:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64436:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;64436:31:0;:42;;-1:-1:-1;;64436:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64421:296:::1;;;64502:4;64510:1;64502:9:::0;64498:219:::1;;64549:8;64513:18;:33;64532:10;;64543:1;64532:13;;;;;;;:::i;64498:219::-;64630:8;64596:16;:31;64613:10;;64624:1;64613:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64596:31:0::1;-1:-1:-1::0;;;;;64596:31:0::1;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;64693:8;64657:18;:33;64676:10;;64687:1;64676:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;64657:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;64657:33:0;:44;;-1:-1:-1;;64657:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64498:219:::1;64350:3:::0;::::1;::::0;::::1;:::i;:::-;;;;64307:421;;54066:2435:::0;54111:8;;-1:-1:-1;;;54111:8:0;;;;:22;;;;-1:-1:-1;54123:10:0;;;;;;;54111:22;54110:54;;;-1:-1:-1;54139:10:0;;;;;;;:24;;;;-1:-1:-1;54153:10:0;;;;;;;54139:24;54106:2388;;;54201:14;;54230:6;:4;:6::i;:::-;-1:-1:-1;54295:10:0;;;;;;;:266;;;;-1:-1:-1;54368:193:0;25945:15;23839:2;25945;:15;:::i;:::-;54395:123;54449:42;54468:22;;23839:2;25945;:15;;;;:::i;:::-;54449:18;;:42::i;:::-;54395:19;;;:23;:123::i;:::-;54368:177;;:193::i;:::-;54330:14;;:231;54295:266;54294:557;;;-1:-1:-1;54584:10:0;;;;;;;:266;;;;-1:-1:-1;54657:193:0;25945:15;23839:2;25945;:15;:::i;:::-;54684:123;54738:42;54757:22;;23839:2;25945;:15;;;;:::i;:::-;54738:18;;:42::i;54657:193::-;54619:14;;:231;54584:266;54272:2139;;;54950:193;25945:15;23839:2;25945;:15;:::i;54950:193::-;54912:14;;:231;54886:521;;;55203:184;55248:116;25945:15;23839:2;25945;:15;:::i;:::-;55268:18;;55249:14;;:38;;:18;:38::i;55248:116::-;55203:14;;;:18;:184::i;:::-;55186:14;:201;54886:521;55489:193;25945:15;23839:2;25945;:15;:::i;55489:193::-;55451:14;;:231;55425:521;;;55742:184;55787:116;25945:15;23839:2;25945;:15;:::i;55787:116::-;55742:14;;;:18;:184::i;:::-;55725:14;:201;55425:521;55998:8;;56029:21;;56118:11;;56152:13;;56188:14;;55964:257;;55998:8;56029:21;;;;;;;56073:22;;;;;;;-1:-1:-1;;;56118:11:0;;;;;55964;:257::i;:::-;56303:14;;56281:19;:36;56380:14;;56341:54;;-1:-1:-1;;;;;;;;;;;56341:54:0;;;56363:15;;56380:14;56341:54;:::i;:::-;;;;;;;;54272:2139;56442:14;;56429:9;:27;56425:57;;56458:24;56467:14;;56458:8;:24::i;:::-;54166:2328;54106:2388;54066:2435::o;60448:313::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;60682:71:::1;60694:8;60704:3;60709;60714:11;60727;60740:12;60682:11;:71::i;56509:581::-:0;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;56751:16:::1;56760:6;56751:8;:16::i;:::-;56782:25;56778:305;;;56824:11;:18:::0;;56857:21:::1;:29:::0;;-1:-1:-1;;56901:30:0;;;-1:-1:-1;;56979:16:0;56824:18;56979:16;;;57056:14:::1;::::0;57015:56:::1;::::0;;17821:2:1;17803:21;;;17860:1;17840:18;;;17833:29;-1:-1:-1;;;17893:3:1;17878:19;;17871:38;57039:15:0::1;17976:4:1::0;17961:20;;17954:36;18006:18;;;17999:34;;;;-1:-1:-1;;;;;;;;;;;57015:56:0;17941:3:1;17926:19;57015:56:0::1;;;;;;;56778:305;56509:581:::0;;:::o;28927:148::-;28996:4;29013:32;29023:10;29035:2;29039:5;29013:9;:32::i;:::-;-1:-1:-1;29063:4:0;;28927:148;-1:-1:-1;;;28927:148:0:o;60769:203::-;60883:9;;;-1:-1:-1;;;;;60883:9:0;60816:18;60865:29;;;:9;:29;;;;;:37;60816:18;;60926:38;;25945:15;;23839:2;;25945:15;:::i;:::-;60927:16;:7;60939:3;60927:11;:16::i;60926:38::-;60913:51;;60836:136;60769:203;:::o;52394:500::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;52546:10:::1;:29:::0;;;52590:20;;52586:301:::1;;52649:40;25945:15;23839:2;25945;:15;:::i;:::-;52649:20:::0;;:24:::1;:40::i;:::-;52627:19;:62:::0;52721:15:::1;52704:14;:32:::0;52751:8:::1;:20:::0;;;::::1;::::0;::::1;-1:-1:-1::0;;;52751:20:0::1;-1:-1:-1::0;;52751:20:0;;::::1;::::0;;;::::1;::::0;;;52786:89:::1;;52860:14;::::0;52823:52:::1;::::0;;18302:2:1;18284:21;;;18341:1;18321:18;;;18314:29;-1:-1:-1;;;18374:3:1;18359:19;;18352:34;52843:15:0::1;18453:4:1::0;18438:20;;18431:36;18483:18;;;18476:34;;;;52823:52:0;-1:-1:-1;;;;;;;;;;;52823:52:0;;;;18418:3:1;52823:52:0;;::::1;52786:89;52394:500:::0;;;:::o;64743:373::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;64937:6:::1;:13:::0;;;;64961:12:::1;:28:::0;;;;65000:18:::1;:34:::0;65045:24:::1;:39:::0;65095:3:::1;:13:::0;;-1:-1:-1;;65095:13:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64743:373::o;62443:734::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;62526:11:::1;:40:::0;;-1:-1:-1;;;;;;62526:40:0::1;-1:-1:-1::0;;;;;62526:40:0;;::::1;::::0;;;::::1;::::0;;;62581:17:::1;::::0;::::1;:31:::0;62577:593:::1;;62662:11;::::0;:21:::1;::::0;;-1:-1:-1;;;62662:21:0;;;;62629:16:::1;::::0;-1:-1:-1;;;;;62662:11:0::1;::::0;:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:11;:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62711:17;::::0;62648:153:::1;::::0;-1:-1:-1;;;62648:153:0;;-1:-1:-1;;;;;62711:17:0;;::::1;62648:153;::::0;::::1;19011:34:1::0;62755:4:0::1;19061:18:1::0;;;19054:43;19140:14;;19133:22;19113:18;;;19106:50;62648:44:0;::::1;::::0;::::1;::::0;18946:18:1;;62648:153:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62629:172:::0;-1:-1:-1;;;;;;62820:22:0;::::1;62816:246;;62888:11;;;;;;;;;-1:-1:-1::0;;;;;62888:11:0::1;-1:-1:-1::0;;;;;62888:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62944:17;::::0;62874:172:::1;::::0;-1:-1:-1;;;62874:172:0;;-1:-1:-1;;;;;62944:17:0;;::::1;62874:172;::::0;::::1;19011:34:1::0;62992:4:0::1;19061:18:1::0;;;19054:43;19140:14;;19133:22;19113:18;;;19106:50;62874:47:0;::::1;::::0;::::1;::::0;18946:18:1;;62874:172:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62863:183;;62816:246;63076:9;:32:::0;;-1:-1:-1;;;;;63076:32:0;;::::1;-1:-1:-1::0;;;;;;63076:32:0;;::::1;::::0;::::1;::::0;;:9:::1;63123:28:::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;63123:35:0::1;63076:32:::0;63123:35:::1;::::0;;62443:734;;:::o;63642:305::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;63796:22:0;::::1;63788:31;;;::::0;::::1;;63830:15;:27:::0;;;::::1;;-1:-1:-1::0;;;63830:27:0::1;-1:-1:-1::0;;63830:27:0;;::::1;::::0;;;::::1;::::0;;:15:::1;63868:24:::0;;-1:-1:-1;;;;;63868:24:0;;::::1;-1:-1:-1::0;;;;;;63868:24:0;;::::1;::::0;;;::::1;::::0;;;63903:16:::1;:36:::0;63642:305::o;61437:272::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;61572:10:::1;:21:::0;;-1:-1:-1;;61572:21:0::1;;::::0;::::1;;;;::::0;;61604:15:::1;:27:::0;;;61676:25:::1;25945:15;23839:2;25945;:15;:::i;:::-;61676:5:::0;;:9:::1;:25::i;:::-;61642:31;:59:::0;-1:-1:-1;;;61437:272:0:o;63955:201::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;64077:21:0;::::1;64069:30;;;::::0;::::1;;-1:-1:-1::0;;;;;64110:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;64110:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63955:201::o;63185:449::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;63360:22:::1;:38:::0;;;63409:18:::1;:30:::0;;;63479:17:::1;::::0;63530:9:::1;::::0;63472:79:::1;::::0;-1:-1:-1;;;63472:79:0;;-1:-1:-1;;;;;63530:9:0;;::::1;63472:79;::::0;::::1;4251:51:1::0;63479:17:0;::::1;::::0;63472:35:::1;::::0;4224:18:1;;63472:79:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63450:19;:101:::0;63562:15:::1;:33:::0;;;;63606:10:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;63606:20:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;63185:449:0:o;62285:150::-;27913:5;;-1:-1:-1;;;;;27913:5:0;27899:10;:19;27891:50;;;;-1:-1:-1;;;27891:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62366:20:0;::::1;62358:44;;;::::0;-1:-1:-1;;;62358:44:0;;19369:2:1;62358:44:0::1;::::0;::::1;19351:21:1::0;19408:2;19388:18;;;19381:30;-1:-1:-1;;;19427:18:1;;;19420:41;19478:18;;62358:44:0::1;19167:335:1::0;62358:44:0::1;62413:5;:14:::0;;-1:-1:-1;;;;;;62413:14:0::1;-1:-1:-1::0;;;;;62413:14:0;;;::::1;::::0;;;::::1;::::0;;62285:150::o;60980:399::-;61021:28;61063:16;61081;61103:9;;;;;;;;;-1:-1:-1;;;;;61103:9:0;-1:-1:-1;;;;;61103:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61062:64;-1:-1:-1;;;;;61062:64:0;;;-1:-1:-1;;;;;61062:64:0;;;61171:4;-1:-1:-1;;;;;61141:35:0;:9;;;;;;;;;-1:-1:-1;;;;;61141:9:0;-1:-1:-1;;;;;61141:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;61141:35:0;;61137:235;;61216:44;61251:8;61217:28;25945:15;23839:2;25945;:15;:::i;:::-;61217:8;;:12;:28::i;61216:44::-;61193:67;;61051:328;;60980:399;:::o;61137:235::-;61316:44;61351:8;61317:28;25945:15;23839:2;25945;:15;:::i;:::-;61317:8;;:12;:28::i;12043:200::-;12156:12;;;12116;12156;;;;;;;;;-1:-1:-1;;;;;12134:7:0;;;12149:5;;12134:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12115:54;;;12188:7;12180:55;;;;-1:-1:-1;;;12180:55:0;;20649:2:1;12180:55:0;;;20631:21:1;20688:2;20668:18;;;20661:30;20727:34;20707:18;;;20700:62;-1:-1:-1;;;20778:18:1;;;20771:33;20821:19;;12180:55:0;20447:399:1;11059:459:0;11305:45;;;-1:-1:-1;;;;;21043:32:1;;;11305:45:0;;;21025:51:1;21092:18;;;;21085:34;;;11305:45:0;;;;;;;;;;20998:18:1;;;;11305:45:0;;;;;;;-1:-1:-1;;;;;11305:45:0;-1:-1:-1;;;11305:45:0;;;11280:81;;-1:-1:-1;;;;11280:10:0;;;;:81;;11305:45;11280:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:117;;;;11394:7;:57;;;;-1:-1:-1;11406:11:0;;:16;;:44;;;11437:4;11426:24;;;;;;;;;;;;:::i;:::-;11372:138;;;;-1:-1:-1;;;11372:138:0;;21582:2:1;11372:138:0;;;21564:21:1;21621:2;21601:18;;;21594:30;21660:33;21640:18;;;21633:61;21711:18;;11372:138:0;21380:355:1;29973:441:0;-1:-1:-1;;;;;29231:18:0;;;30107:24;29231:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;30174:37:0;;30170:237;;30256:5;30236:16;:25;;30228:54;;;;-1:-1:-1;;;30228:54:0;;21942:2:1;30228:54:0;;;21924:21:1;21981:2;21961:18;;;21954:30;-1:-1:-1;;;22000:18:1;;;21993:46;22056:18;;30228:54:0;21740:340:1;30228:54:0;-1:-1:-1;;;;;30326:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;30356:24;;;30326:54;;30170:237;30096:318;29973:441;;;:::o;33561:5953::-;33673:4;-1:-1:-1;;;;;33698:18:0;;;;;;:34;;-1:-1:-1;;;;;;33721:11:0;;;;;;:7;:11;;;;;;;;33720:12;33698:34;33690:68;;;;-1:-1:-1;;;33690:68:0;;22287:2:1;33690:68:0;;;22269:21:1;22326:2;22306:18;;;22299:30;-1:-1:-1;;;22345:18:1;;;22338:51;22406:18;;33690:68:0;22085:345:1;33690:68:0;-1:-1:-1;;;;;33791:21:0;;33807:4;33791:21;:49;;33822:9;;;;:18;33791:49;;;33815:4;33791:49;33769:113;;;;-1:-1:-1;;;33769:113:0;;22637:2:1;33769:113:0;;;22619:21:1;22676:2;22656:18;;;22649:30;-1:-1:-1;;;22695:18:1;;;22688:44;22749:18;;33769:113:0;22435:338:1;33769:113:0;33893:9;:16;;-1:-1:-1;;33893:16:0;33905:4;33893:16;;;-1:-1:-1;;;;;34005:15:0;;33893:9;34005:15;;;:9;:15;;;;;:23;34047:21;;;;34039:61;;;;-1:-1:-1;;;34039:61:0;;22980:2:1;34039:61:0;;;22962:21:1;23019:2;22999:18;;;22992:30;23058:29;23038:18;;;23031:57;23105:18;;34039:61:0;22778:351:1;34039:61:0;-1:-1:-1;;;;;34212:15:0;;;;;;;:9;:15;;;;;34238:20;;;34212:46;;34334:9;;;;;34318:26;:67;;;;-1:-1:-1;;;;;;34362:23:0;;;;;;:19;:23;;;;;;;;34361:24;34318:67;:95;;;;-1:-1:-1;34403:10:0;;;;;;;34402:11;34318:95;34300:4805;;;-1:-1:-1;;;;;34453:20:0;;;;;;:16;:20;;;;;;;;34452:21;:103;;34554:1;34452:103;;;34493:41;25945:15;23839:2;25945;:15;:::i;:::-;34494:19;:6;34505:7;34494:10;:19::i;34493:41::-;34440:115;;34570:16;34579:6;34570:8;:16::i;:::-;34601:40;34609:4;34615:2;34619:21;:6;34630:9;34619:10;:21::i;:::-;34601:7;:40::i;:::-;-1:-1:-1;;;;;34682:13:0;;;;;;:9;:13;;;;;34705:15;34682:20;;;;:38;34300:4805;;;34838:9;;-1:-1:-1;;;;;34824:24:0;;;34838:9;;34824:24;:67;;;;-1:-1:-1;;;;;;34866:25:0;;;;;;:19;:25;;;;;;;;34865:26;34824:67;:95;;;;-1:-1:-1;34909:10:0;;;;;;;34908:11;34824:95;34806:4299;;;34946:19;34968:16;:14;:16::i;:::-;-1:-1:-1;;;;;35026:24:0;;;;;;:18;:24;;;;;;34946:38;;-1:-1:-1;35026:24:0;;35025:25;:32;;;;-1:-1:-1;35054:3:0;;;;35025:32;:63;;35084:4;35025:63;;;35070:11;35060:6;:21;;35025:63;34999:146;;;;-1:-1:-1;;;34999:146:0;;23336:2:1;34999:146:0;;;23318:21:1;23375:2;23355:18;;;23348:30;-1:-1:-1;;;23394:18:1;;;23387:51;23455:18;;34999:146:0;23134:345:1;34999:146:0;-1:-1:-1;;;;;35173:22:0;;;;;;:16;:22;;;;;;;;35172:23;:49;;;;-1:-1:-1;35199:22:0;;;;;;;35172:49;:132;;35303:1;35172:132;;;35241:42;25945:15;23839:2;25945;:15;:::i;:::-;35242:20;:6;35253:8;35242:10;:20::i;35241:42::-;35366:3;;35160:144;;-1:-1:-1;35366:3:0;;:30;;;;-1:-1:-1;;;;;;35374:22:0;;;;;;:16;:22;;;;;;;;35373:23;35366:30;35362:546;;;35528:18;;-1:-1:-1;;;;;35483:15:0;;35417:19;35483:15;;;:9;:15;;;;;:22;;;35417:19;;35528:18;35439:85;;35440:15;;35439:21;:85::i;:::-;:107;;:396;;35708:24;;-1:-1:-1;;;;;35656:15:0;;;;;;:9;:15;;;;;:22;;;35634:45;;35635:15;;35634:21;:45::i;:::-;:98;;:201;;35834:1;35439:396;;35634:201;35756:54;25945:15;23839:2;25945;:15;:::i;:::-;35768:12;;35757:32;;35768:20;;35785:2;35768:16;:20::i;:::-;35757:6;;:10;:32::i;35756:54::-;35439:396;;;35570:40;25945:15;23839:2;25945;:15;:::i;:::-;35582:6;;35571:18;;:6;;:10;:18::i;35570:40::-;35417:418;-1:-1:-1;35866:26:0;:9;35417:418;35866:13;:26::i;:::-;35854:38;;35398:510;35362:546;-1:-1:-1;;;;;35946:21:0;;35962:4;35946:21;;;;:71;;-1:-1:-1;36004:12:0;;-1:-1:-1;;;;;35988:29:0;;;36004:12;;35988:29;;35946:71;:115;;;;-1:-1:-1;;;;;;36039:22:0;;;;;;:16;:22;;;;;;;;36038:23;35946:115;:151;;;;-1:-1:-1;36082:15:0;;-1:-1:-1;;;36082:15:0;;;;35946:151;35924:199;;;36113:10;:8;:10::i;:::-;36138:48;36147:4;36153:21;:6;36164:9;36153:10;:21::i;:::-;36176:9;36138:8;:48::i;:::-;34931:1267;34806:4299;;;36328:10;;;;;;;36324:2688;;;36379:9;;-1:-1:-1;;;;;36363:26:0;;;36379:9;;36363:26;:51;;;;-1:-1:-1;;;;;;36394:20:0;;;;;;:16;:20;;;;;;;;36393:21;36363:51;36359:133;;;36449:43;25945:15;23839:2;25945;:15;:::i;:::-;36450:21;:6;36461:9;36450:10;:21::i;36449:43::-;36437:55;;36359:133;36529:9;;-1:-1:-1;;;;;36515:24:0;;;36529:9;;36515:24;:51;;;;-1:-1:-1;;;;;;36544:22:0;;;;;;:16;:22;;;;;;;;36543:23;36515:51;36511:2144;;;36591:14;36640:43;25945:15;23839:2;25945;:15;:::i;:::-;36641:21;:6;36652:9;36641:10;:21::i;36640:43::-;36710:15;;36628:55;;-1:-1:-1;;;;36710:15:0;;;;:40;;;;-1:-1:-1;;;;;;36729:21:0;;36745:4;36729:21;;36710:40;36706:56;;;36752:10;:8;:10::i;:::-;36786:16;36804;36826:9;;;;;;;;;-1:-1:-1;;;;;36826:9:0;-1:-1:-1;;;;;36826:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;36785:90:0;;;;-1:-1:-1;36785:90:0;;-1:-1:-1;36898:24:0;36925:21;:6;36936:9;36925:10;:21::i;:::-;37014:31;;;37043:1;37014:31;;;;;;;;;36898:48;;-1:-1:-1;36969:42:0;;37014:31;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;37014:31:0;;-1:-1:-1;;37014:31:0;;;;;;;;-1:-1:-1;;37085:183:0;;;;;;;;37149:4;37085:183;;37185:17;;-1:-1:-1;;;;;37185:17:0;37085:183;;;;-1:-1:-1;37085:183:0;;;;;;37069:13;;;;-1:-1:-1;37085:183:0;37069:13;;-1:-1:-1;37069:13:0;;;;:::i;:::-;;;;;;;;;;:199;37309:11;;:55;;-1:-1:-1;;;37309:55:0;;37291:15;;-1:-1:-1;;;;;37309:11:0;;:25;;:55;;37335:16;;37353:10;;37309:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37309:55:0;;;;;;;;;;;;:::i;:::-;37365:1;37309:58;;;;;;;;:::i;:::-;;;;;;;37291:76;;37424:4;-1:-1:-1;;;;;37394:35:0;:9;;;;;;;;;-1:-1:-1;;;;;37394:9:0;-1:-1:-1;;;;;37394:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37394:35:0;;37390:557;;37493:114;37576:30;:8;37589:16;37576:12;:30::i;:::-;37494:46;25945:15;23839:2;25945;:15;:::i;:::-;37495:24;:8;37508:10;37495:12;:24::i;:::-;37494:30;;:46::i;37493:114::-;37484:123;-1:-1:-1;37651:24:0;:8;37664:10;37651:12;:24::i;:::-;37634:14;:41;37390:557;;;37741:114;37824:30;:8;37837:16;37824:12;:30::i;:::-;37742:46;25945:15;23839:2;25945;:15;:::i;:::-;37743:24;:8;37756:10;37743:12;:24::i;37741:114::-;37732:123;-1:-1:-1;37899:24:0;:8;37912:10;37899:12;:24::i;:::-;37882:14;:41;37390:557;37983:14;;37973:6;:24;37969:667;;38026:10;:18;;-1:-1:-1;;38026:18:0;;;;;38071:14;:23;;;38150:18;38135:12;:33;;;38121:11;:47;38237:8;;38276:21;;38423:13;;38467:14;;38195:313;;38026:18;;38276:21;;;;;38328:22;;;;;;-1:-1:-1;;;38381:11:0;;;;;38195;:313::i;:::-;38598:14;;38576:19;:36;37969:667;36568:2087;;;;;;36511:2144;36324:2688;;;38715:9;;-1:-1:-1;;;;;38699:26:0;;;38715:9;;38699:26;;;;:54;;-1:-1:-1;38743:9:0;;-1:-1:-1;;;;;38729:24:0;;;38743:9;;38729:24;;38699:54;38695:93;;;38776:12;:10;:12::i;:::-;-1:-1:-1;;;;;38813:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38842:23:0;;;;;;:19;:23;;;;;;;;38813:52;38809:188;;;-1:-1:-1;;;;;38890:25:0;;;38918:5;38890:25;;;:19;:25;;;;;;:33;;-1:-1:-1;;38890:33:0;;;;;;38946:23;;;;;;;:31;;;;;;;38809:188;39026:40;39034:4;39040:2;39044:21;:6;39055:9;39044:10;:21::i;39026:40::-;39121:13;;39117:340;;39155:15;;-1:-1:-1;;;39155:15:0;;;;39151:241;;;39191:22;39216:106;25945:15;23839:2;25945;:15;:::i;:::-;39239:44;39253:29;39270:11;;39253:12;;:16;;:29;;;;:::i;:::-;39239:9;;:13;:44::i;39216:106::-;39191:131;;39362:14;39341:17;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;39151:241:0;39406:39;39414:4;39428;39435:9;39406:7;:39::i;:::-;-1:-1:-1;;39467:9:0;:17;;-1:-1:-1;;39467:17:0;;;-1:-1:-1;39467:17:0;33561:5953;;;;;:::o;9230:158::-;9288:7;9321:1;9316;:6;;9308:49;;;;-1:-1:-1;;;9308:49:0;;25644:2:1;9308:49:0;;;25626:21:1;25683:2;25663:18;;;25656:30;25722:32;25702:18;;;25695:60;25772:18;;9308:49:0;25442:354:1;9308:49:0;9375:5;9379:1;9375;:5;:::i;:::-;9368:12;9230:158;-1:-1:-1;;;9230:158:0:o;52902:1156::-;52956:8;;52935:4;;-1:-1:-1;;;52956:8:0;;;;52952:1077;;;52981:16;53000:87;53062:10;;53001:37;53023:14;;53002:15;53001:21;;:37;;;;:::i;53000:87::-;52981:106;-1:-1:-1;53156:12:0;;53152:866;;53208:14;;53189:16;53241:230;53265:8;53261:1;:12;53241:230;;;53303:19;53325:81;25945:15;23839:2;25945;:15;:::i;:::-;53339:19;;53326:33;;:8;;:12;:33::i;53325:81::-;53303:103;-1:-1:-1;53275:3:0;;-1:-1:-1;53275:3:0;;;:::i;:::-;;;;53241:230;;;-1:-1:-1;53508:10:0;;:24;;53523:8;53508:14;:24::i;:::-;53489:14;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;53584:14:0;:25;;;53632:21;;;;;;;53628:333;;;53714:8;;53749:21;;53846:11;;53884:13;;53924:14;;53676:285;;53714:8;53749:21;;;;;;;53797:22;;;;;;;-1:-1:-1;;;53846:11:0;;;;;53676;:285::i;:::-;53170:848;53152:866;52966:1063;52952:1077;-1:-1:-1;54046:4:0;;52902:1156::o;9043:179::-;9101:7;;9133:5;9137:1;9133;:5;:::i;:::-;9121:17;;9162:1;9157;:6;;9149:46;;;;-1:-1:-1;;;9149:46:0;;26136:2:1;9149:46:0;;;26118:21:1;26175:2;26155:18;;;26148:30;26214:29;26194:18;;;26187:57;26261:18;;9149:46:0;25934:351:1;9396:220:0;9454:7;9478:1;9483;9478:6;9474:20;;-1:-1:-1;9493:1:0;9486:8;;9474:20;9505:9;9517:5;9521:1;9517;:5;:::i;:::-;9505:17;-1:-1:-1;9550:1:0;9541:5;9545:1;9505:17;9541:5;:::i;:::-;:10;9533:56;;;;-1:-1:-1;;;9533:56:0;;26887:2:1;9533:56:0;;;26869:21:1;26926:2;26906:18;;;26899:30;26965:34;26945:18;;;26938:62;-1:-1:-1;;;27016:18:1;;;27009:31;27057:19;;9533:56:0;26685:397:1;9624:153:0;9682:7;9714:1;9710;:5;9702:44;;;;-1:-1:-1;;;9702:44:0;;27289:2:1;9702:44:0;;;27271:21:1;27328:2;27308:18;;;27301:30;27367:28;27347:18;;;27340:56;27413:18;;9702:44:0;27087:350:1;9702:44:0;9764:5;9768:1;9764;:5;:::i;59123:1317::-;59323:12;59338:50;25945:15;23839:2;25945;:15;:::i;:::-;59339:14;;:28;;59358:8;59339:18;:28::i;59338:50::-;59417:14;;59323:65;;-1:-1:-1;59417:24:0;;59323:65;59417:18;:24::i;:::-;59399:15;:42;59469:14;;:24;;59488:4;59469:18;:24::i;:::-;59452:14;:41;59504:8;:19;;;59550:3;;:10;;;59557:3;59550:10;59534:11;:27;;-1:-1:-1;;59534:27:0;59548:13;;59534:27;;;;;;;;59631:11;59626:672;;59735:3;59731:181;;;59759:21;:27;;-1:-1:-1;;59759:27:0;;;;;;;;;59829:21;:4;59838:11;59829:8;:21::i;:::-;59805;:45;59869:13;:27;;;59731:181;59930:3;59926:186;;;59954:22;:28;;-1:-1:-1;;59954:28:0;;;;;;;;;60026:22;:4;60035:12;60026:8;:22::i;:::-;60001;:47;60067:14;:29;;;59926:186;59626:672;;;60216:21;:27;;-1:-1:-1;;60258:28:0;60216:27;;;;;-1:-1:-1;;60258:28:0;;;;;;;;;;59626:672;60308:11;:25;;-1:-1:-1;;60308:25:0;-1:-1:-1;;;60308:25:0;;;;;;;;;;60349:11;;;;;60344:88;;60417:14;;60380:52;;;27700:2:1;27682:21;;;27739:1;27719:18;;;27712:29;-1:-1:-1;;;27772:3:1;27757:19;;27750:34;60400:15:0;27851:4:1;27836:20;;27829:36;27881:18;;;27874:34;;;;60380:52:0;-1:-1:-1;;;;;;;;;;;60380:52:0;;;;27816:3:1;60380:52:0;;;60344:88;59312:1128;59123:1317;;;;;;:::o;57098:2017::-;57155:20;57186:17;57215:16;57233;57255:9;;;;;;;;;-1:-1:-1;;;;;57255:9:0;-1:-1:-1;;;;;57255:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;57331:9:0;;-1:-1:-1;;;;;57331:9:0;57289:21;57313:29;;;:9;:29;;;;;;;;;:37;57365:18;;-1:-1:-1;;;57365:18:0;;;;-1:-1:-1;;;;;57214:64:0;;;;-1:-1:-1;57214:64:0;;;;;-1:-1:-1;57395:4:0;;57365:16;;:18;;;;;57313:29;57365:18;;;;;;57331:9;57365:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57365:35:0;;57361:217;;57429:46;57464:10;57430:28;57449:8;25945:15;23839:2;25945;:15;:::i;57429:46::-;57417:58;;57361:217;;;57520:46;57555:10;57521:28;57540:8;25945:15;23839:2;25945;:15;:::i;57520:46::-;57508:58;;57361:217;57608:9;57592:13;:25;57588:1408;;;57699:22;57724:28;:13;57742:9;57724:17;:28::i;:::-;57844:9;;-1:-1:-1;;;;;57844:9:0;57826:29;;;;:9;:29;;;;;:37;57699:53;;-1:-1:-1;57807:91:0;;57699:53;57807:75;:91::i;:::-;57785:9;;;-1:-1:-1;;;;;57785:9:0;;;57767:29;;;;:9;:29;;;;;:131;;;;57929:9;57913:58;;57929:9;57949:4;57956:14;57913:7;:58::i;:::-;57619:364;57588:1408;;;58019:28;:9;58033:13;58019;:28::i;:::-;58145:17;;;58107:4;58062:23;58089:24;;;:9;:24;;;;;;:32;58004:43;;-1:-1:-1;58062:23:0;;58088:89;;:38;:89::i;:::-;58062:115;;58215:12;58196:15;:31;58192:793;;58324:4;58306:24;;;;:9;:24;;;;;:32;58283:92;;58362:12;58283:78;:92::i;:::-;58266:4;58248:24;;;;:9;:24;;;;;:127;;;;58425:9;;58394:56;;58266:4;-1:-1:-1;;;;;58425:9:0;58437:12;58394:7;:56::i;:::-;58192:793;;;58495:19;;58491:288;;58619:4;58601:24;;;;:9;:24;;;;;:32;58574:103;;58661:15;58574:86;:103::i;:::-;58557:4;58539:24;;;;:9;:24;;;;;:138;;;;58731:9;;58700:59;;58557:4;-1:-1:-1;;;;;58731:9:0;58743:15;58700:7;:59::i;:::-;58797:18;58818:33;:12;58835:15;58818:16;:33::i;:::-;58797:54;-1:-1:-1;58874:14:0;;58870:100;;58927:9;;58913:37;;-1:-1:-1;;;;;58927:9:0;58939:10;58913:5;:37::i;:::-;58472:513;58192:793;57989:1007;57588:1408;59053:9;;;;;;;;;-1:-1:-1;;;;;59053:9:0;-1:-1:-1;;;;;59053:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59080:14:0;:27;;;;-1:-1:-1;;;;;;57098:2017:0:o;39934:3516::-;40119:9;;-1:-1:-1;;;;;40119:9:0;39987:17;40101:29;;;:9;:29;;;;;;:37;40314:23;;-1:-1:-1;;;40314:23:0;;;;39987:17;;;;;;;;;;40119:9;;40314:21;;:23;;;;;;;;;;;;;;40119:9;40314:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40408:31:0;;;40437:1;40408:31;;;;;;;;;-1:-1:-1;;;;;40273:64:0;;;;-1:-1:-1;40273:64:0;;;;;-1:-1:-1;40350:55:0;;40408:31;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;40408:31:0;;-1:-1:-1;;40408:31:0;;;;;;;;-1:-1:-1;;40466:133:0;;;;;;;;40510:17;;-1:-1:-1;;;;;40510:17:0;40466:133;;40554:4;40466:133;;;;-1:-1:-1;40466:133:0;;;;;;40450:13;;;;-1:-1:-1;40466:133:0;40450:13;;-1:-1:-1;40450:13:0;;;;:::i;:::-;;;;;;;;;;:149;40637:11;;:44;;-1:-1:-1;;;40637:44:0;;40610:24;;-1:-1:-1;;;;;40637:11:0;;:24;;:44;;40662:6;;40670:10;;40637:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40637:44:0;;;;;;;;;;;;:::i;:::-;40610:71;;40726:4;-1:-1:-1;;;;;40696:35:0;:9;;;;;;;;;-1:-1:-1;;;;;40696:9:0;-1:-1:-1;;;;;40696:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40696:35:0;;40692:168;;40764:24;40777:7;40785:1;40777:10;;;;;;;;:::i;:::-;;;;;;;40764:8;:12;;:24;;;;:::i;:::-;40747:14;:41;40692:168;;;40836:24;40849:7;40857:1;40849:10;;;;;;;;:::i;:::-;;;;;;;40836:8;:12;;:24;;;;:::i;:::-;40819:14;:41;40692:168;40905:56;40946:14;;40906:34;40925:14;;23839:2;25945;:15;;;;:::i;40905:56::-;41029:21;;40893:68;;-1:-1:-1;41029:21:0;;;;;41025:728;;;41121:11;;41102:16;;-1:-1:-1;;;41121:11:0;;;;:268;;41367:21;;41348:14;;:41;;:18;:41::i;:::-;41121:268;;;41152:176;41193:116;41273:13;41194:47;41205:35;41225:14;;41205:15;;:19;;:35;;;;:::i;:::-;41194:6;;:10;:47::i;41152:176::-;41102:287;-1:-1:-1;41404:13:0;41420:99;41479:25;:13;41497:6;41479:17;:25::i;:::-;41440:14;;41421:34;;25945:15;23839:2;25945;:15;:::i;41420:99::-;41404:115;;41546:8;41538:5;:16;:32;;;;;41569:1;41558:8;:12;41538:32;:61;;;;;41585:14;;41574:8;:25;41538:61;41534:208;;;41632:50;41673:8;41633:34;41652:14;;23839:2;25945;:15;;;;:::i;41632:50::-;41701:14;:25;;;41620:62;-1:-1:-1;41534:208:0;41052:701;;41025:728;41781:13;41769:9;:25;41765:1613;;;41811:20;41834:28;:9;41848:13;41834;:28::i;:::-;42003:17;;;41965:4;41932:11;41947:24;;;:9;:24;;;;;;:32;41811:51;;-1:-1:-1;41932:11:0;;41946:89;;:38;:89::i;:::-;41932:103;;42123:12;42117:3;:18;42113:817;;;42291:4;42273:24;;;;:9;:24;;;;;:32;42250:92;;42329:12;42250:78;:92::i;:::-;42233:4;42215:24;;;;:9;:24;;;;;:127;;;;42392:9;;42361:56;;42233:4;-1:-1:-1;;;;;42392:9:0;42404:12;42361:7;:56::i;:::-;42113:817;;;42471:21;:12;42488:3;42471:16;:21::i;:::-;42458:34;-1:-1:-1;42549:7:0;;42545:252;;42661:4;42643:24;;;;:9;:24;;;;;:32;42616:91;;42703:3;42616:86;:91::i;:::-;42599:4;42581:24;;;;:9;:24;;;;;:126;;;;42761:9;;42730:47;;42599:4;-1:-1:-1;;;;;42761:9:0;42773:3;42730:7;:47::i;:::-;42819:14;;42815:100;;42872:9;;42858:37;;-1:-1:-1;;;;;42872:9:0;42884:10;42858:5;:37::i;:::-;41796:1145;;41765:1613;;;43061:28;:13;43079:9;43061:17;:28::i;:::-;43239:9;;-1:-1:-1;;;;;43239:9:0;43221:29;;;;:9;:29;;;;;:37;43044:45;;-1:-1:-1;43202:91:0;;43044:45;43202:75;:91::i;:::-;43180:9;;;-1:-1:-1;;;;;43180:9:0;;;43162:29;;;;:9;:29;;;;;:131;;;;43324:9;43308:58;;43324:9;43344:4;43351:14;43308:7;:58::i;:::-;43393:49;;;28150:25:1;;;28206:2;28191:18;;28184:34;;;28234:18;;;28227:34;;;28292:2;28277:18;;28270:34;;;43393:49:0;;28137:3:1;28122:19;43393:49:0;;;;;;;39976:3474;;;;;;;;39934:3516;:::o;39522:404::-;-1:-1:-1;;;;;39642:16:0;;39634:52;;;;-1:-1:-1;;;39634:52:0;;28517:2:1;39634:52:0;;;28499:21:1;28556:2;28536:18;;;28529:30;28595:25;28575:18;;;28568:53;28638:18;;39634:52:0;28315:347:1;39634:52:0;-1:-1:-1;;;;;39836:13:0;;;;;;;:9;:13;;;;;;;:30;;;;;;39893:25;39836:13;;39893:25;;;-1:-1:-1;;;;;;;;;;;39893:25:0;;;39861:5;352:25:1;;340:2;325:18;;206:177;39893:25:0;;;;;;;;39522:404;;;:::o;32689:864::-;32772:4;32728:23;32754:24;;;:9;:24;;;;;;;;:32;32821:16;;32801:17;;32754:32;;-1:-1:-1;32797:75:0;;;32854:7;32689:864::o;32797:75::-;32905:17;;32886:15;:36;32882:664;;32973:17;;33024:3;;32939:31;;33024:3;;:88;;33083:29;33108:3;33084:18;33100:1;33084:11;;:15;;:18;;;;:::i;33083:29::-;33024:88;;;33047:16;:14;:16::i;:::-;33005:107;;33177:8;33157:17;;:28;33153:85;;;33230:8;33204:34;;33153:85;33253:46;33275:23;33253:21;:46::i;:::-;-1:-1:-1;33314:12:0;;33358:11;;33389:17;;33425:13;;33314:139;;-1:-1:-1;;;33314:139:0;;-1:-1:-1;;;;;33358:11:0;;;33314:139;;;28907:34:1;33389:17:0;;;28957:18:1;;;28950:43;33425:13:0;;29009:18:1;;;29002:43;33314:12:0;;;:17;;28842:18:1;;33314:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33488:17:0;;:46;;-1:-1:-1;33488:17:0;-1:-1:-1;33510:23:0;33488:21;:46::i;:::-;33468:17;:66;-1:-1:-1;;32717:836:0;32689:864::o;43458:8928::-;43576:22;43609:17;43637:18;43667:16;43685;43707:9;;;;;;;;;-1:-1:-1;;;;;43707:9:0;-1:-1:-1;;;;;43707:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;43783:9:0;;-1:-1:-1;;;;;43783:9:0;;;43741:21;43765:29;;;:9;:29;;;;;;:37;43846:17;;43839:79;;-1:-1:-1;;;43839:79:0;;;;;4251:51:1;;;;-1:-1:-1;;;;;43666:64:0;;;;-1:-1:-1;43666:64:0;;;;;-1:-1:-1;43765:37:0;;43846:17;;;;43839:35;;4224:18:1;;43839:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43955:11;;43813:105;;-1:-1:-1;;;;;;43955:11:0;43933:10;:34;43929:573;;43984:21;44008:79;44073:13;44009:40;44033:15;44010:17;:7;44022:4;44010:11;:17::i;44008:79::-;44136:11;;43984:103;;-1:-1:-1;;;;;;44136:11:0;44128:28;:44;-1:-1:-1;44128:244:0;;;;-1:-1:-1;44204:17:0;;44300:11;;44197:138;;-1:-1:-1;;;44197:138:0;;-1:-1:-1;;;;;29286:15:1;;;44197:138:0;;;29268:34:1;44300:11:0;;;29318:18:1;;;29311:43;44359:13:0;;44204:17;;;;;44197:35;;29203:18:1;;44197:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:175;44128:244;44102:388;;;;-1:-1:-1;;;44102:388:0;;29567:2:1;44102:388:0;;;29549:21:1;29606:2;29586:18;;;29579:30;29645:34;29625:18;;;29618:62;29716:34;29696:18;;;29689:62;-1:-1:-1;;;29767:19:1;;;29760:49;29826:19;;44102:388:0;29365:486:1;44102:388:0;43969:533;43929:573;44572:31;;;44601:1;44572:31;;;;;;;;;44514:55;;44572:31;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;44572:31:0;;-1:-1:-1;;44572:31:0;;;;;;;;-1:-1:-1;;44630:133:0;;;;;;;;44682:4;44630:133;;44706:17;;-1:-1:-1;;;;;44706:17:0;44630:133;;;;-1:-1:-1;44630:133:0;;;;;;44614:13;;;;-1:-1:-1;44630:133:0;44614:13;;-1:-1:-1;44614:13:0;;;;:::i;:::-;;;;;;:149;;;;44811:4;-1:-1:-1;;;;;44781:35:0;:9;;;;;;;;;-1:-1:-1;;;;;44781:9:0;-1:-1:-1;;;;;44781:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44781:35:0;;44778:254;;44865:11;;:46;;-1:-1:-1;;;44865:46:0;;44852:63;;-1:-1:-1;;;;;44865:11:0;;:25;;:46;;44891:7;;44900:10;;44865:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44865:46:0;;;;;;;;;;;;:::i;:::-;44912:1;44865:49;;;;;;;;:::i;:::-;;;;;;;44852:8;:12;;:63;;;;:::i;:::-;44835:14;:80;44778:254;;;44982:11;;:46;;-1:-1:-1;;;44982:46:0;;44969:63;;-1:-1:-1;;;;;44982:11:0;;:25;;:46;;45008:7;;45017:10;;44982:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44982:46:0;;;;;;;;;;;;:::i;:::-;45029:1;44982:49;;;;;;;;:::i;:::-;;;;;;;44969:8;:12;;:63;;;;:::i;:::-;44952:14;:80;44778:254;-1:-1:-1;;;;;45072:23:0;;45090:4;45072:23;45068:3804;;45212:15;;45193;:34;;:49;;;;-1:-1:-1;45232:10:0;;;;;;;45231:11;45193:49;45189:240;;;45263:10;:17;;-1:-1:-1;;45263:17:0;;;;;45321:14;;45299:19;:36;45398:14;;45359:54;;-1:-1:-1;;;;;;;;;;;45359:54:0;;;45381:15;;45398:14;45359:54;:::i;:::-;;;;;;;;45189:240;45468:10;;;;;;;:266;;;;-1:-1:-1;45541:193:0;25945:15;23839:2;25945;:15;:::i;45541:193::-;45503:14;;:231;45468:266;45467:557;;;-1:-1:-1;45757:10:0;;;;;;;:266;;;;-1:-1:-1;45830:193:0;25945:15;23839:2;25945;:15;:::i;45830:193::-;45792:14;;:231;45757:266;45445:2392;;;46123:193;25945:15;23839:2;25945;:15;:::i;46123:193::-;46085:14;;:231;46059:521;;;46376:184;46421:116;25945:15;23839:2;25945;:15;:::i;46376:184::-;46359:14;:201;46059:521;46662:193;25945:15;23839:2;25945;:15;:::i;46662:193::-;46624:14;;:231;46598:521;;;46915:184;46960:116;25945:15;23839:2;25945;:15;:::i;46915:184::-;46898:14;:201;46598:521;47151:96;47214:14;;47152:34;47171:14;;23839:2;25945;:15;;;;:::i;47151:96::-;47270:21;;47139:108;;-1:-1:-1;47270:21:0;;;;;;:47;;-1:-1:-1;47295:22:0;;;;;;;47270:47;47266:359;;;47378:8;;47413:21;;47510:11;;47548:13;;47588:14;;47340:285;;47378:8;47413:21;;;;;;;47461:22;;;;;;;-1:-1:-1;;;47510:11:0;;;;;47340;:285::i;:::-;47717:14;;47695:19;:36;47794:14;;47755:54;;-1:-1:-1;;;;;;;;;;;47755:54:0;;;47777:15;;47794:14;47755:54;:::i;:::-;;;;;;;;45445:2392;;;47831:6;:4;:6::i;:::-;;45445:2392;47876:22;;;;;;;:66;;;;-1:-1:-1;;;;;;47919:23:0;;47937:4;47919:23;;47876:66;:127;;;;;48000:3;47963:34;47982:14;;47963;;:18;;:34;;;;:::i;:::-;:40;47876:127;47854:1007;;;48057:11;;48038:16;;-1:-1:-1;;;48057:11:0;;;;:293;;48327:22;;48308:14;;:42;;:18;:42::i;:::-;48057:293;;;48092:192;48137:124;48221:13;48138:47;48150:34;48169:14;;48150;;:18;;:34;;;;:::i;:::-;48138:7;;:11;:47::i;48092:192::-;48038:312;;48381:50;48422:8;48382:34;48401:14;;23839:2;25945;:15;;;;:::i;48381:50::-;48369:62;;48450:14;48467:95;48530:13;48468:34;48487:14;;23839:2;25945;:15;;;;:::i;48467:95::-;48450:112;;48594:14;;48585:6;:23;:52;;;;;48623:14;;48612:8;:25;48585:52;48581:265;;;48674:104;48741:14;;48675:34;48694:14;;23839:2;25945;:15;;;;:::i;48674:104::-;48801:14;:25;;;48662:116;-1:-1:-1;48581:265:0;48019:842;;47854:1007;48896:56;48937:14;;48897:34;48916:14;;23839:2;25945;:15;;;;:::i;48896:56::-;48884:68;;48981:13;48969:9;:25;48965:3285;;;49011:20;49034:28;:9;49048:13;49034;:28::i;:::-;49011:51;;49147:12;49137:7;:22;49133:2180;;;49308:9;;-1:-1:-1;;;;;49308:9:0;49290:29;;;;:9;:29;;;;;:37;49267:97;;49351:12;49267:83;:97::i;:::-;49245:9;;-1:-1:-1;;;;;49245:9:0;49227:29;;;;:9;:29;;;;;:137;49400:25;:7;49412:12;49400:11;:25::i;:::-;49520:4;49502:24;;;;:9;:24;;;;;:32;49383:42;;-1:-1:-1;49479:94:0;;49383:42;49479:78;:94::i;:::-;49462:4;49444:24;;;;:9;:24;;;;;:129;49133:2180;;;49695:9;;-1:-1:-1;;;;;49695:9:0;49677:29;;;;:9;:29;;;;;:37;49654:92;;49738:7;49654:83;:92::i;:::-;49632:9;;-1:-1:-1;;;;;49632:9:0;49614:29;;;;:9;:29;;;;;:132;;;;49789:25;:12;49806:7;49789:16;:25::i;:::-;49908:17;;;49866:4;49833:11;49848:24;;;:9;:24;;;;;;:32;49765:49;;-1:-1:-1;49833:11:0;;49847:97;;:38;:97::i;:::-;49833:111;;49973:13;49967:3;:19;49963:1335;;;50156:4;50138:24;;;;:9;:24;;;;;:32;50111:101;;50198:13;50111:86;:101::i;:::-;50094:4;50076:24;;;;:9;:24;;;;;;:136;;;;50320:9;;-1:-1:-1;;;;;50320:9:0;50302:29;;;:37;50275:106;;50367:13;50275:91;:106::i;:::-;50253:9;;;-1:-1:-1;;;;;50253:9:0;;;50235:29;;;;:9;:29;;;;;;;;;:146;;;;50492:9;;50409:156;;352:25:1;;;50492:9:0;;;50452:4;;-1:-1:-1;;;;;;;;;;;50409:156:0;325:18:1;50409:156:0;;;;;;;49963:1335;;;50627:22;:13;50645:3;50627:17;:22::i;:::-;50614:35;-1:-1:-1;50704:7:0;;50700:449;;50824:4;50806:24;;;;:9;:24;;;;;:32;50775:99;;50870:3;50775:94;:99::i;:::-;50758:4;50740:24;;;;:9;:24;;;;;;:134;;;;50990:9;;-1:-1:-1;;;;;50990:9:0;50972:29;;;:37;50941:104;;51041:3;50941:99;:104::i;:::-;50919:9;;;-1:-1:-1;;;;;50919:9:0;;;50901:29;;;;:9;:29;;;;;;;;;:144;;;;51109:9;;51077:48;;352:25:1;;;51109:9:0;;;51094:4;;-1:-1:-1;;;;;;;;;;;51077:48:0;325:18:1;51077:48:0;;;;;;;50700:449;51175:14;;51171:108;;51232:9;;51218:37;;-1:-1:-1;;;;;51232:9:0;51244:10;51218:5;:37::i;:::-;49595:1718;;49133:2180;48996:2328;48965:3285;;;51427:20;51450:28;:13;51468:9;51450:17;:28::i;:::-;51427:51;-1:-1:-1;51493:26:0;51522:31;:13;51427:51;51522:17;:31::i;:::-;51493:60;-1:-1:-1;51608:73:0;51649:17;:7;51661:4;51649:11;:17::i;:::-;51608:18;;:22;:73::i;:::-;51586:9;;-1:-1:-1;;;;;51586:9:0;51568:29;;;;:9;:29;;;;;:113;51713:25;:7;51725:12;51713:11;:25::i;:::-;51696:42;;51753:9;;;;;;;;;-1:-1:-1;;;;;51753:9:0;-1:-1:-1;;;;;51753:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51884:9:0;;-1:-1:-1;;;;;51884:9:0;51866:29;;;;:9;:29;;;;;;:58;;;52110:4;52092:24;;;;:32;52073:86;;-1:-1:-1;52092:32:0;-1:-1:-1;52144:14:0;52073:70;:86::i;:::-;52056:4;52038:24;;;;:9;:24;;;;;;;:121;;;;52196:9;;52179:59;;52056:4;;-1:-1:-1;;;;;52196:9:0;;-1:-1:-1;;;;;;;;;;;52179:59:0;;;52223:14;352:25:1;;340:2;325:18;;206:177;52179:59:0;;;;;;;;51330:920;;48965:3285;52292:9;;52267:45;;352:25:1;;;-1:-1:-1;;;;;52292:9:0;;;;52267:45;;;-1:-1:-1;;;;;;;;;;;52267:45:0;340:2:1;325:18;52267:45:0;;;;;;;52328:50;;;28150:25:1;;;28206:2;28191:18;;28184:34;;;28234:18;;;28227:34;;;28292:2;28277:18;;28270:34;;;52328:50:0;;28137:3:1;28122:19;52328:50:0;;;;;;;43565:8821;;;;;;;;43458:8928;;;:::o;30422:1217::-;-1:-1:-1;;;;;30496:21:0;;30488:56;;;;-1:-1:-1;;;30488:56:0;;30058:2:1;30488:56:0;;;30040:21:1;30097:2;30077:18;;;30070:30;-1:-1:-1;;;30116:18:1;;;30109:52;30178:18;;30488:56:0;29856:346:1;30488:56:0;23977:13;23839:2;23977;:13;:::i;:::-;23962:29;;:11;:29;:::i;:::-;30559:11;;:23;30555:547;;;23977:13;23839:2;23977;:13;:::i;:::-;23962:29;;:11;:29;:::i;:::-;30603:11;;:22;;30619:5;30603:15;:22::i;:::-;:34;30599:492;;;30658:10;30671:26;30685:11;;23839:2;23977;:13;;;;:::i;:::-;23962:29;;:11;:29;:::i;30671:26::-;30658:39;;30761:2;30746:11;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30812:18:0;;;;;;:9;:18;;;;;:26;30811:76;;30866:2;30811:32;:76::i;:::-;-1:-1:-1;;;;;30782:18:0;;;;;;:9;:18;;;;;:105;-1:-1:-1;30599:492:0;;;-1:-1:-1;;;;;30958:18:0;;;;;;:9;:18;;;;;:26;30957:79;;31012:5;30957:32;:79::i;:::-;-1:-1:-1;;;;;30928:18:0;;;;;;:9;:18;;;;;:108;;;;31055:11;:20;;31070:5;;30928:18;31055:20;;31070:5;;31055:20;:::i;:::-;;;;-1:-1:-1;;30599:492:0;31131:15;;31116:11;;:30;;:62;;;;-1:-1:-1;23977:13:0;23839:2;23977;:13;:::i;:::-;23962:29;;:11;:29;:::i;:::-;31150:15;;:28;;31116:62;31112:468;;;31195:10;:17;;-1:-1:-1;;31195:17:0;;;;;23977:13;23839:2;23977;:13;:::i;:::-;23962:29;;:11;:29;:::i;:::-;31245:11;;:24;:187;;31318:114;25945:15;23839:2;25945;:15;:::i;:::-;31339:31;;31319:15;;:52;;:19;:52::i;31318:114::-;31245:187;;;23977:13;23839:2;23977;:13;:::i;:::-;23962:29;;:11;:29;:::i;:::-;31227:15;:205;31476:18;31461:12;:33;;;31447:11;:47;;;;31553:14;;31514:54;;;30465:2:1;30447:21;;;30484:18;;30477:29;;;;-1:-1:-1;;;30537:3:1;30522:19;;30515:36;31536:15:0;30618:4:1;30603:20;;30596:36;30648:18;;30641:34;-1:-1:-1;;;;;;;;;;;31514:54:0;30583:3:1;30568:19;31514:54:0;;;;;;;31112:468;31595:36;;352:25:1;;;-1:-1:-1;;;;;31595:36:0;;;31612:1;;-1:-1:-1;;;;;;;;;;;31595:36:0;340:2:1;325:18;31595:36:0;;;;;;;30422:1217;;:::o;31647:1034::-;31882:31;;;31911:1;31882:31;;;;;;;;;31734:14;;;;31882:31;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;31882:31:0;;-1:-1:-1;;31882:31:0;;;;;;;;-1:-1:-1;;31940:133:0;;;;;;;;31992:4;31940:133;;32016:17;;-1:-1:-1;;;;;32016:17:0;31940:133;;;;-1:-1:-1;31940:133:0;;;;;;31924:13;;;;-1:-1:-1;31940:133:0;31924:13;;-1:-1:-1;31924:13:0;;;;:::i;:::-;;;;;;;;;;;:149;;;;32106:4;32086:26;;;;:11;:26;;;;;;32121:11;;-1:-1:-1;;;;;32121:11:0;32086:48;;;;;;;;:63;;32138:11;;32086:26;:63;;32138:11;;32086:63;:::i;:::-;;;;-1:-1:-1;;32185:17:0;;32236:12;;32178:82;;-1:-1:-1;;;32178:82:0;;-1:-1:-1;;;;;32236:12:0;;;32178:82;;;4251:51:1;32160:15:0;;32185:17;;;;;32178:35;;4224:18:1;;32178:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32300:11;;32483:12;;32300:237;;-1:-1:-1;;;32300:237:0;;32160:100;;-1:-1:-1;;;;;;32300:11:0;;;;:65;;:237;;32380:11;;32300;;32450:10;;32483:12;;32511:15;;32300:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32576:17:0;;32613:12;;32569:58;;-1:-1:-1;;;32569:58:0;;-1:-1:-1;;;;;32613:12:0;;;32569:58;;;4251:51:1;32568:105:0;;-1:-1:-1;32651:7:0;;-1:-1:-1;32576:17:0;;;32569:35;;4224:18:1;;32569:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32568:105::-;32548:125;31647:1034;-1:-1:-1;;;;31647:1034:0:o;388:367:1:-;451:8;461:6;515:3;508:4;500:6;496:17;492:27;482:55;;533:1;530;523:12;482:55;-1:-1:-1;556:20:1;;599:18;588:30;;585:50;;;631:1;628;621:12;585:50;668:4;660:6;656:17;644:29;;728:3;721:4;711:6;708:1;704:14;696:6;692:27;688:38;685:47;682:67;;;745:1;742;735:12;682:67;388:367;;;;;:::o;760:131::-;-1:-1:-1;;;;;835:31:1;;825:42;;815:70;;881:1;878;871:12;896:118;982:5;975:13;968:21;961:5;958:32;948:60;;1004:1;1001;994:12;1019:843;1126:6;1134;1142;1150;1158;1211:3;1199:9;1190:7;1186:23;1182:33;1179:53;;;1228:1;1225;1218:12;1179:53;1268:9;1255:23;1301:18;1293:6;1290:30;1287:50;;;1333:1;1330;1323:12;1287:50;1372:70;1434:7;1425:6;1414:9;1410:22;1372:70;:::i;:::-;1461:8;;-1:-1:-1;1346:96:1;-1:-1:-1;;1546:2:1;1531:18;;1518:32;1559:31;1518:32;1559:31;:::i;:::-;1609:5;-1:-1:-1;1666:2:1;1651:18;;1638:32;1679:30;1638:32;1679:30;:::i;:::-;1728:7;-1:-1:-1;1787:2:1;1772:18;;1759:32;1800:30;1759:32;1800:30;:::i;:::-;1849:7;1839:17;;;1019:843;;;;;;;;:::o;1867:250::-;1952:1;1962:113;1976:6;1973:1;1970:13;1962:113;;;2052:11;;;2046:18;2033:11;;;2026:39;1998:2;1991:10;1962:113;;;-1:-1:-1;;2109:1:1;2091:16;;2084:27;1867:250::o;2122:396::-;2271:2;2260:9;2253:21;2234:4;2303:6;2297:13;2346:6;2341:2;2330:9;2326:18;2319:34;2362:79;2434:6;2429:2;2418:9;2414:18;2409:2;2401:6;2397:15;2362:79;:::i;:::-;2502:2;2481:15;-1:-1:-1;;2477:29:1;2462:45;;;;2509:2;2458:54;;2122:396;-1:-1:-1;;2122:396:1:o;2523:315::-;2591:6;2599;2652:2;2640:9;2631:7;2627:23;2623:32;2620:52;;;2668:1;2665;2658:12;2620:52;2707:9;2694:23;2726:31;2751:5;2726:31;:::i;:::-;2776:5;2828:2;2813:18;;;;2800:32;;-1:-1:-1;;;2523:315:1:o;2843:592::-;2926:6;2934;2942;2950;3003:3;2991:9;2982:7;2978:23;2974:33;2971:53;;;3020:1;3017;3010:12;2971:53;3059:9;3046:23;3078:31;3103:5;3078:31;:::i;:::-;3128:5;-1:-1:-1;3185:2:1;3170:18;;3157:32;3198:33;3157:32;3198:33;:::i;:::-;3250:7;-1:-1:-1;3304:2:1;3289:18;;3276:32;;-1:-1:-1;3360:2:1;3345:18;;3332:32;3373:30;3332:32;3373:30;:::i;:::-;2843:592;;;;-1:-1:-1;2843:592:1;;-1:-1:-1;;2843:592:1:o;3440:456::-;3517:6;3525;3533;3586:2;3574:9;3565:7;3561:23;3557:32;3554:52;;;3602:1;3599;3592:12;3554:52;3641:9;3628:23;3660:31;3685:5;3660:31;:::i;:::-;3710:5;-1:-1:-1;3767:2:1;3752:18;;3739:32;3780:33;3739:32;3780:33;:::i;:::-;3440:456;;3832:7;;-1:-1:-1;;;3886:2:1;3871:18;;;;3858:32;;3440:456::o;4543:247::-;4602:6;4655:2;4643:9;4634:7;4630:23;4626:32;4623:52;;;4671:1;4668;4661:12;4623:52;4710:9;4697:23;4729:31;4754:5;4729:31;:::i;4795:127::-;4856:10;4851:3;4847:20;4844:1;4837:31;4887:4;4884:1;4877:15;4911:4;4908:1;4901:15;4927:275;4998:2;4992:9;5063:2;5044:13;;-1:-1:-1;;5040:27:1;5028:40;;5098:18;5083:34;;5119:22;;;5080:62;5077:88;;;5145:18;;:::i;:::-;5181:2;5174:22;4927:275;;-1:-1:-1;4927:275:1:o;5207:183::-;5267:4;5300:18;5292:6;5289:30;5286:56;;;5322:18;;:::i;:::-;-1:-1:-1;5367:1:1;5363:14;5379:4;5359:25;;5207:183::o;5395:662::-;5449:5;5502:3;5495:4;5487:6;5483:17;5479:27;5469:55;;5520:1;5517;5510:12;5469:55;5556:6;5543:20;5582:4;5606:60;5622:43;5662:2;5622:43;:::i;:::-;5606:60;:::i;:::-;5700:15;;;5786:1;5782:10;;;;5770:23;;5766:32;;;5731:12;;;;5810:15;;;5807:35;;;5838:1;5835;5828:12;5807:35;5874:2;5866:6;5862:15;5886:142;5902:6;5897:3;5894:15;5886:142;;;5968:17;;5956:30;;6006:12;;;;5919;;5886:142;;;-1:-1:-1;6046:5:1;5395:662;-1:-1:-1;;;;;;5395:662:1:o;6062:1215::-;6180:6;6188;6241:2;6229:9;6220:7;6216:23;6212:32;6209:52;;;6257:1;6254;6247:12;6209:52;6297:9;6284:23;6326:18;6367:2;6359:6;6356:14;6353:34;;;6383:1;6380;6373:12;6353:34;6421:6;6410:9;6406:22;6396:32;;6466:7;6459:4;6455:2;6451:13;6447:27;6437:55;;6488:1;6485;6478:12;6437:55;6524:2;6511:16;6546:4;6570:60;6586:43;6626:2;6586:43;:::i;6570:60::-;6664:15;;;6746:1;6742:10;;;;6734:19;;6730:28;;;6695:12;;;;6770:19;;;6767:39;;;6802:1;6799;6792:12;6767:39;6826:11;;;;6846:217;6862:6;6857:3;6854:15;6846:217;;;6942:3;6929:17;6959:31;6984:5;6959:31;:::i;:::-;7003:18;;6879:12;;;;7041;;;;6846:217;;;7082:5;-1:-1:-1;;7125:18:1;;7112:32;;-1:-1:-1;;7156:16:1;;;7153:36;;;7185:1;7182;7175:12;7153:36;;7208:63;7263:7;7252:8;7241:9;7237:24;7208:63;:::i;:::-;7198:73;;;6062:1215;;;;;:::o;7282:634::-;7383:6;7391;7399;7407;7460:2;7448:9;7439:7;7435:23;7431:32;7428:52;;;7476:1;7473;7466:12;7428:52;7516:9;7503:23;7549:18;7541:6;7538:30;7535:50;;;7581:1;7578;7571:12;7535:50;7620:70;7682:7;7673:6;7662:9;7658:22;7620:70;:::i;:::-;7709:8;;-1:-1:-1;7594:96:1;-1:-1:-1;;7794:2:1;7779:18;;7766:32;7807:28;7766:32;7807:28;:::i;:::-;7282:634;;;;-1:-1:-1;7854:5:1;;7906:2;7891:18;7878:32;;-1:-1:-1;;7282:634:1:o;7921:718::-;8016:6;8024;8032;8040;8048;8056;8109:3;8097:9;8088:7;8084:23;8080:33;8077:53;;;8126:1;8123;8116:12;8077:53;8162:9;8149:23;8139:33;;8222:2;8211:9;8207:18;8194:32;8235:28;8257:5;8235:28;:::i;:::-;8282:5;-1:-1:-1;8339:2:1;8324:18;;8311:32;8352:30;8311:32;8352:30;:::i;:::-;8401:7;-1:-1:-1;8460:2:1;8445:18;;8432:32;8473:30;8432:32;8473:30;:::i;:::-;7921:718;;;;-1:-1:-1;7921:718:1;;8576:3;8561:19;;8548:33;;8628:3;8613:19;;;8600:33;;-1:-1:-1;7921:718:1;-1:-1:-1;;7921:718:1:o;8852:309::-;8917:6;8925;8978:2;8966:9;8957:7;8953:23;8949:32;8946:52;;;8994:1;8991;8984:12;8946:52;9030:9;9017:23;9007:33;;9090:2;9079:9;9075:18;9062:32;9103:28;9125:5;9103:28;:::i;:::-;9150:5;9140:15;;;8852:309;;;;;:::o;9166:377::-;9240:6;9248;9256;9309:2;9297:9;9288:7;9284:23;9280:32;9277:52;;;9325:1;9322;9315:12;9277:52;9361:9;9348:23;9338:33;;9418:2;9407:9;9403:18;9390:32;9380:42;;9472:2;9461:9;9457:18;9444:32;9485:28;9507:5;9485:28;:::i;:::-;9532:5;9522:15;;;9166:377;;;;;:::o;9548:515::-;9640:6;9648;9656;9664;9672;9725:3;9713:9;9704:7;9700:23;9696:33;9693:53;;;9742:1;9739;9732:12;9693:53;9778:9;9765:23;9755:33;;9835:2;9824:9;9820:18;9807:32;9797:42;;9886:2;9875:9;9871:18;9858:32;9848:42;;9937:2;9926:9;9922:18;9909:32;9899:42;;9991:3;9980:9;9976:19;9963:33;10005:28;10027:5;10005:28;:::i;10068:382::-;10133:6;10141;10194:2;10182:9;10173:7;10169:23;10165:32;10162:52;;;10210:1;10207;10200:12;10162:52;10249:9;10236:23;10268:31;10293:5;10268:31;:::i;:::-;10318:5;-1:-1:-1;10375:2:1;10360:18;;10347:32;10388:30;10347:32;10388:30;:::i;10681:450::-;10755:6;10763;10771;10824:2;10812:9;10803:7;10799:23;10795:32;10792:52;;;10840:1;10837;10830:12;10792:52;10879:9;10866:23;10898:31;10923:5;10898:31;:::i;:::-;10948:5;-1:-1:-1;11000:2:1;10985:18;;10972:32;;-1:-1:-1;11056:2:1;11041:18;;11028:32;11069:30;11028:32;11069:30;:::i;11136:388::-;11204:6;11212;11265:2;11253:9;11244:7;11240:23;11236:32;11233:52;;;11281:1;11278;11271:12;11233:52;11320:9;11307:23;11339:31;11364:5;11339:31;:::i;:::-;11389:5;-1:-1:-1;11446:2:1;11431:18;;11418:32;11459:33;11418:32;11459:33;:::i;11529:446::-;11612:6;11620;11628;11636;11689:3;11677:9;11668:7;11664:23;11660:33;11657:53;;;11706:1;11703;11696:12;11657:53;11742:9;11729:23;11719:33;;11799:2;11788:9;11784:18;11771:32;11761:42;;11850:2;11839:9;11835:18;11822:32;11812:42;;11904:2;11893:9;11889:18;11876:32;11917:28;11939:5;11917:28;:::i;11980:342::-;12182:2;12164:21;;;12221:2;12201:18;;;12194:30;-1:-1:-1;;;12255:2:1;12240:18;;12233:48;12313:2;12298:18;;11980:342::o;12669:127::-;12730:10;12725:3;12721:20;12718:1;12711:31;12761:4;12758:1;12751:15;12785:4;12782:1;12775:15;12801:127;12862:10;12857:3;12853:20;12850:1;12843:31;12893:4;12890:1;12883:15;12917:4;12914:1;12907:15;12933:135;12972:3;12993:17;;;12990:43;;13013:18;;:::i;:::-;-1:-1:-1;13060:1:1;13049:13;;12933:135::o;13418:125::-;13483:9;;;13504:10;;;13501:36;;;13517:18;;:::i;13548:399::-;13750:2;13732:21;;;13789:2;13769:18;;;13762:30;13828:34;13823:2;13808:18;;13801:62;-1:-1:-1;;;13894:2:1;13879:18;;13872:33;13937:3;13922:19;;13548:399::o;13952:184::-;14022:6;14075:2;14063:9;14054:7;14050:23;14046:32;14043:52;;;14091:1;14088;14081:12;14043:52;-1:-1:-1;14114:16:1;;13952:184;-1:-1:-1;13952:184:1:o;15701:422::-;15790:1;15833:5;15790:1;15847:270;15868:7;15858:8;15855:21;15847:270;;;15927:4;15923:1;15919:6;15915:17;15909:4;15906:27;15903:53;;;15936:18;;:::i;:::-;15986:7;15976:8;15972:22;15969:55;;;16006:16;;;;15969:55;16085:22;;;;16045:15;;;;15847:270;;;15851:3;15701:422;;;;;:::o;16128:806::-;16177:5;16207:8;16197:80;;-1:-1:-1;16248:1:1;16262:5;;16197:80;16296:4;16286:76;;-1:-1:-1;16333:1:1;16347:5;;16286:76;16378:4;16396:1;16391:59;;;;16464:1;16459:130;;;;16371:218;;16391:59;16421:1;16412:10;;16435:5;;;16459:130;16496:3;16486:8;16483:17;16480:43;;;16503:18;;:::i;:::-;-1:-1:-1;;16559:1:1;16545:16;;16574:5;;16371:218;;16673:2;16663:8;16660:16;16654:3;16648:4;16645:13;16641:36;16635:2;16625:8;16622:16;16617:2;16611:4;16608:12;16604:35;16601:77;16598:159;;;-1:-1:-1;16710:19:1;;;16742:5;;16598:159;16789:34;16814:8;16808:4;16789:34;:::i;:::-;16859:6;16855:1;16851:6;16847:19;16838:7;16835:32;16832:58;;;16870:18;;:::i;:::-;16908:20;;16128:806;-1:-1:-1;;;16128:806:1:o;16939:140::-;16997:5;17026:47;17067:4;17057:8;17053:19;17047:4;17026:47;:::i;17084:474::-;17342:2;17324:21;;;17381:1;17361:18;;;17354:29;-1:-1:-1;;;17414:3:1;17399:19;;17392:36;17495:4;17480:20;;17473:36;;;;-1:-1:-1;17525:18:1;;17518:34;17460:3;17445:19;;17084:474::o;18521:251::-;18591:6;18644:2;18632:9;18623:7;18619:23;18615:32;18612:52;;;18660:1;18657;18650:12;18612:52;18692:9;18686:16;18711:31;18736:5;18711:31;:::i;19507:188::-;19586:13;;-1:-1:-1;;;;;19628:42:1;;19618:53;;19608:81;;19685:1;19682;19675:12;19608:81;19507:188;;;:::o;19700:450::-;19787:6;19795;19803;19856:2;19844:9;19835:7;19831:23;19827:32;19824:52;;;19872:1;19869;19862:12;19824:52;19895:40;19925:9;19895:40;:::i;:::-;19885:50;;19954:49;19999:2;19988:9;19984:18;19954:49;:::i;:::-;19944:59;;20046:2;20035:9;20031:18;20025:25;20090:10;20083:5;20079:22;20072:5;20069:33;20059:61;;20116:1;20113;20106:12;20155:287;20284:3;20322:6;20316:13;20338:66;20397:6;20392:3;20385:4;20377:6;20373:17;20338:66;:::i;:::-;20420:16;;;;;20155:287;-1:-1:-1;;20155:287:1:o;21130:245::-;21197:6;21250:2;21238:9;21229:7;21225:23;21221:32;21218:52;;;21266:1;21263;21256:12;21218:52;21298:9;21292:16;21317:28;21339:5;21317:28;:::i;23484:683::-;23542:3;23580:5;23574:12;23607:6;23602:3;23595:19;23633:4;23662:2;23657:3;23653:12;23646:19;;23699:2;23692:5;23688:14;23720:1;23730:412;23744:6;23741:1;23738:13;23730:412;;;23803:13;;23887:9;;-1:-1:-1;;;;;23883:18:1;;;23871:31;;23946:11;;;23940:18;23936:27;23922:12;;;23915:49;23987:4;24045:11;;;24039:18;24032:26;24025:34;24011:12;;;24004:56;24089:4;24080:14;;;;24117:15;;;;23856:1;23759:9;23730:412;;;-1:-1:-1;24158:3:1;;23484:683;-1:-1:-1;;;;;23484:683:1:o;24172:379::-;24421:6;24410:9;24403:25;24464:2;24459;24448:9;24444:18;24437:30;24384:4;24484:61;24541:2;24530:9;24526:18;24518:6;24484:61;:::i;24556:881::-;24651:6;24682:2;24725;24713:9;24704:7;24700:23;24696:32;24693:52;;;24741:1;24738;24731:12;24693:52;24774:9;24768:16;24807:18;24799:6;24796:30;24793:50;;;24839:1;24836;24829:12;24793:50;24862:22;;24915:4;24907:13;;24903:27;-1:-1:-1;24893:55:1;;24944:1;24941;24934:12;24893:55;24973:2;24967:9;24996:60;25012:43;25052:2;25012:43;:::i;24996:60::-;25090:15;;;25172:1;25168:10;;;;25160:19;;25156:28;;;25121:12;;;;25196:19;;;25193:39;;;25228:1;25225;25218:12;25193:39;25252:11;;;;25272:135;25288:6;25283:3;25280:15;25272:135;;;25354:10;;25342:23;;25305:12;;;;25385;;;;25272:135;;;25426:5;24556:881;-1:-1:-1;;;;;;;24556:881:1:o;25801:128::-;25868:9;;;25889:11;;;25886:37;;;25903:18;;:::i;26290:168::-;26363:9;;;26394;;26411:15;;;26405:22;;26391:37;26381:71;;26432:18;;:::i;26463:217::-;26503:1;26529;26519:132;;26573:10;26568:3;26564:20;26561:1;26554:31;26608:4;26605:1;26598:15;26636:4;26633:1;26626:15;26519:132;-1:-1:-1;26665:9:1;;26463:217::o;30686:629::-;31027:6;31016:9;31009:25;31070:6;31065:2;31054:9;31050:18;31043:34;31113:3;31108:2;31097:9;31093:18;31086:31;30990:4;31134:62;31191:3;31180:9;31176:19;31168:6;31134:62;:::i;:::-;-1:-1:-1;;;;;31232:32:1;;;;31227:2;31212:18;;31205:60;-1:-1:-1;31296:3:1;31281:19;31274:35;31126:70;30686:629;-1:-1:-1;;;30686:629:1:o
Swarm Source
ipfs://a41c9fa9df183ad71718ce1d45b41ca07955263766b5bb219b4e7085e8813fc7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.