Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,190 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity... | 11360503 | 1496 days ago | IN | 0 ETH | 0.02020578 | ||||
Remove Liquidity... | 11360287 | 1496 days ago | IN | 0 ETH | 0.00192185 | ||||
Remove Liquidity... | 11348981 | 1497 days ago | IN | 0 ETH | 0.00244008 | ||||
Remove Liquidity... | 11348905 | 1497 days ago | IN | 0 ETH | 0.00262778 | ||||
Remove Liquidity... | 11348121 | 1497 days ago | IN | 0 ETH | 0.00049968 | ||||
Remove Liquidity... | 11347980 | 1498 days ago | IN | 0 ETH | 0.0028153 | ||||
Remove Liquidity... | 11347501 | 1498 days ago | IN | 0 ETH | 0.00351467 | ||||
Remove Liquidity... | 11347475 | 1498 days ago | IN | 0 ETH | 0.00387012 | ||||
Remove Liquidity... | 11347471 | 1498 days ago | IN | 0 ETH | 0.00397193 | ||||
Remove Liquidity... | 11347471 | 1498 days ago | IN | 0 ETH | 0.00368263 | ||||
Swap Exact Token... | 11347394 | 1498 days ago | IN | 0 ETH | 0.00404283 | ||||
Swap Exact Token... | 11347362 | 1498 days ago | IN | 0 ETH | 0.00051937 | ||||
Swap Exact Token... | 11347362 | 1498 days ago | IN | 0 ETH | 0.00386268 | ||||
Swap Exact Token... | 11347037 | 1498 days ago | IN | 0 ETH | 0.00365177 | ||||
Swap Exact Token... | 11329839 | 1500 days ago | IN | 0 ETH | 0.00657336 | ||||
Swap Exact Token... | 11329495 | 1500 days ago | IN | 0 ETH | 0.00482046 | ||||
Swap Exact Token... | 11329030 | 1500 days ago | IN | 0 ETH | 0.00816448 | ||||
Swap Exact Token... | 11328836 | 1500 days ago | IN | 0 ETH | 0.01158804 | ||||
Swap Exact Token... | 11327834 | 1501 days ago | IN | 0 ETH | 0.01467886 | ||||
Swap Exact Token... | 11327096 | 1501 days ago | IN | 0 ETH | 0.0149875 | ||||
Swap Exact ETH F... | 11325576 | 1501 days ago | IN | 0.23 ETH | 0.04854762 | ||||
Swap Exact ETH F... | 11325570 | 1501 days ago | IN | 0.2 ETH | 0.04854762 | ||||
Swap Exact ETH F... | 11325563 | 1501 days ago | IN | 0.17 ETH | 0.02288024 | ||||
Swap Exact Token... | 11324797 | 1501 days ago | IN | 0 ETH | 0.00876448 | ||||
Swap Exact Token... | 11324515 | 1501 days ago | IN | 0 ETH | 0.0087554 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11360503 | 1496 days ago | 0.19698169 ETH | ||||
11360503 | 1496 days ago | 0.19698169 ETH | ||||
11348981 | 1497 days ago | 0.26139844 ETH | ||||
11348981 | 1497 days ago | 0.26139844 ETH | ||||
11348905 | 1497 days ago | 0.23996384 ETH | ||||
11348905 | 1497 days ago | 0.23996384 ETH | ||||
11347980 | 1498 days ago | 0.24063682 ETH | ||||
11347980 | 1498 days ago | 0.24063682 ETH | ||||
11347501 | 1498 days ago | 0.23577921 ETH | ||||
11347501 | 1498 days ago | 0.23577921 ETH | ||||
11347475 | 1498 days ago | 23.57792165 ETH | ||||
11347475 | 1498 days ago | 23.57792165 ETH | ||||
11347471 | 1498 days ago | 9.38196666 ETH | ||||
11347471 | 1498 days ago | 9.38196666 ETH | ||||
11347471 | 1498 days ago | 9.42799652 ETH | ||||
11347471 | 1498 days ago | 9.42799652 ETH | ||||
11347362 | 1498 days ago | 0.06511121 ETH | ||||
11347362 | 1498 days ago | 0.06511121 ETH | ||||
11347037 | 1498 days ago | 0.03706057 ETH | ||||
11347037 | 1498 days ago | 0.03706057 ETH | ||||
11329839 | 1500 days ago | 0.02748978 ETH | ||||
11329839 | 1500 days ago | 0.02748978 ETH | ||||
11329495 | 1500 days ago | 0.02089422 ETH | ||||
11329495 | 1500 days ago | 0.02089422 ETH | ||||
11329030 | 1500 days ago | 0.02995029 ETH |
Loading...
Loading
Contract Name:
PokeRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-12 */ /** *Submitted for verification at Etherscan.io on 2020-06-05 */ pragma solidity =0.6.6; interface IPokeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IPokePair { function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IPokeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IPokeRouter02 is IPokeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface IBallsReward { function getTotalAllocPoint() external view returns(uint); function setPairUserPeriodAmount(address,address,uint) external; } contract PokeRouter is IPokeRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public stakingAddress; address public ballsToken; address public owner; address public rewardAddress; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'PokeRouter: EXPIRED'); _; } modifier onlyOwner() { require(owner == msg.sender); _; } constructor(address _factory, address _WETH,address _skating ,address _ballsToken) public { factory = _factory; WETH = _WETH; stakingAddress = _skating; ballsToken = _ballsToken; owner = msg.sender; } function setNewOwner(address _newOwner) public onlyOwner { owner = _newOwner; } function setRewardAddress(address _newReward) public onlyOwner { rewardAddress = _newReward; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function _updatePairTradeAmount(address _pair,address _token ,address _sender,uint _amount) internal { require(IBallsReward(rewardAddress).getTotalAllocPoint() > 0); if(_token!=WETH){ address[] memory path = new address[](2); path[0] = _token; path[1] = WETH; uint[] memory _amount_eth = PokeLibrary.getAmountsOut(factory, _amount, path); _amount = _amount_eth[1]; } IBallsReward(rewardAddress).setPairUserPeriodAmount(_pair,_sender,_amount); } function _toBuyPlatToken(address _sender,address _token, uint _amount ,address[] memory path) internal { //buyback plattoken if(_token!=WETH && _token != ballsToken){ path[1] = WETH; uint[] memory amounts = PokeLibrary.getAmountsOut(factory, _amount, path); TransferHelper.safeTransferFrom( _token, _sender, PokeLibrary.pairFor(factory, path[0], path[1]), _amount ); _swap( amounts, path, address(this)); _token = WETH; } if(_token == WETH){ path[0] = WETH; path[1] = ballsToken; uint[] memory amounts1 = PokeLibrary.getAmountsOut(factory, IERC20(WETH).balanceOf(address(this)), path); assert(IWETH(WETH).transfer(PokeLibrary.pairFor(factory, path[0], path[1]), IERC20(WETH).balanceOf(address(this)))); _swap( amounts1, path, address(this)); } if(_token == ballsToken){ TransferHelper.safeTransferFrom( _token, _sender, stakingAddress, _amount ); } TransferHelper.safeTransfer( ballsToken, stakingAddress, IERC20(ballsToken).balanceOf(address(this))); } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IPokeFactory(factory).getPair(tokenA, tokenB) == address(0)) { IPokeFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = PokeLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = PokeLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'PokeRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = PokeLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'PokeRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = PokeLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IPokePair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = PokeLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IPokePair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = PokeLibrary.pairFor(factory, tokenA, tokenB); IPokePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IPokePair(pair).burn(to); (address token0,) = PokeLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'PokeRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'PokeRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = PokeLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IPokePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = PokeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPokePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = PokeLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPokePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = PokeLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? PokeLibrary.pairFor(factory, output, path[i + 2]) : _to; IPokePair(PokeLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { uint feeValue = amountIn*5/10000; amounts = PokeLibrary.getAmountsOut(factory, amountIn.sub(feeValue), path); require(amounts[amounts.length - 1] >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { uint feeValue = amountOut*5/10000; amounts = PokeLibrary.getAmountsIn(factory, amountOut.sub(feeValue), path); require(amounts[0] <= amountInMax, 'PokeRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'PokeRouter: INVALID_PATH'); uint feeValue = msg.value*5/10000 ; amounts = PokeLibrary.getAmountsOut(factory, msg.value.sub(feeValue), path); require(amounts[amounts.length - 1] >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: msg.value}(); assert(IWETH(WETH).transfer(PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'PokeRouter: INVALID_PATH'); uint feeValue = amountOut*5/10000 ; amounts = PokeLibrary.getAmountsIn(factory, amountOut.sub(feeValue), path); require(amounts[0] <= amountInMax, 'PokeRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'PokeRouter: INVALID_PATH'); uint feeValue = amountIn*5/10000 ; amounts = PokeLibrary.getAmountsOut(factory, amountIn.sub(feeValue), path); require(amounts[amounts.length - 1] >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'PokeRouter: INVALID_PATH'); uint feeValue = amountOut*5/10000 ; amounts = PokeLibrary.getAmountsIn(factory, amountOut.sub(feeValue), path); require(amounts[0] <= msg.value, 'PokeRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amountOut}(); assert(IWETH(WETH).transfer(PokeLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = PokeLibrary.sortTokens(input, output); IPokePair pair = IPokePair(PokeLibrary.pairFor(factory, input, output)); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = PokeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? PokeLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { uint feeValue = amountIn*5/10000 ; TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amountIn.sub(feeValue) ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amountIn.sub(feeValue)); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'PokeRouter: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); uint feeValue = amountIn*5/10000 ; assert(IWETH(WETH).transfer(PokeLibrary.pairFor(factory, path[0], path[1]), amountIn.sub(feeValue))); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amountIn.sub(feeValue)); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'PokeRouter: INVALID_PATH'); uint feeValue = amountIn*5/10000 ; TransferHelper.safeTransferFrom( path[0], msg.sender, PokeLibrary.pairFor(factory, path[0], path[1]), amountIn.sub(feeValue) ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'PokeRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); _toBuyPlatToken( msg.sender, path[0], feeValue ,path); _updatePairTradeAmount(PokeLibrary.pairFor(factory, path[0], path[1]),path[0],msg.sender,amountIn.sub(feeValue)); } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return PokeLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return PokeLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return PokeLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return PokeLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return PokeLibrary.getAmountsIn(factory, amountOut, path); } } // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } } library PokeLibrary { using SafeMath for uint; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'PokeLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'PokeLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'4937e9c51bcbbc6d7614d23716d92f73a77dc8682a71192b746780302a9d64be' // init code hash )))); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IPokePair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) { require(amountA > 0, 'PokeLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'PokeLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'PokeLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PokeLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(9975); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'PokeLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'PokeLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'PokeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'PokeLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint 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, uint 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, uint 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, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_skating","type":"address"},{"internalType":"address","name":"_ballsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ballsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newReward","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516200534d3803806200534d8339818101604052608081101561003557600080fd5b508051602082015160408301516060938401516001600160601b031993851b84166080529190931b90911660a052600080546001600160a01b039384166001600160a01b0319918216179091556001805493909216928116929092179055600280549091163317905560805160601c60a05160601c6151226200022b600039806101e15280610e205280610e5b5280610f52528061118152806115c8528061173f5280611c295280611d295280611ddf5280611ead5280611fd5528061204952806122ca528061234552806123f452806124cb528061256052806125e75280612c005280612e735280612ec95280612efd5280612f71528061314a528061326552806132d95280613d975280613dec5280613ec55280613eea5280613f245280613fc2528061406c52806140ff52806143025280614389525080610fe852806110c85280611298528061132c528061136552806114a8528061165e528061171d52806118935280611b265280611f4c528061207b5280612195528061222c528061261952806128d3528061297e5280612b765280612b9f5280612bde5280612d4b5280612ea752806131e5528061330b5280613bfe5280613c415280613e3f5280613e715280613fa1528061409e52806143dc528061462452806147a35280614baf5280614c5d5280614cdd52506151226000f3fe6080604052600436106101d15760003560e01c80638cf57cb9116100f7578063c45a015511610095578063e8e3370011610064578063e8e3370014610c56578063f305d71914610cd6578063f5a1f5b414610d1c578063fb3bdb4114610d4f5761020a565b8063c45a015514610b04578063d06ca61f14610b19578063d7b4be2414610bce578063ded9382a14610be35761020a565b8063ad615dec116100d1578063ad615dec1461099a578063af2979eb146109d0578063b6f9de9514610a23578063baa2abde14610aa75761020a565b80638cf57cb91461095b5780638da5cb5b14610970578063ad5c4648146109855761020a565b80635b0d59841161016f578063791ac9471161013e578063791ac947146107755780637ff36ab51461080b57806385f8c2591461088f5780638803dbee146108c55761020a565b80635b0d5984146106085780635c11d7951461067b5780635e00e6791461071157806365347fdc146107445761020a565b80631f00ca74116101ab5780631f00ca74146103a95780632195995c1461045e57806338ed1739146104dc5780634a25d94a146105725761020a565b806302751cec1461020f578063054d50d41461027b57806318cbafe5146102c35761020a565b3661020a57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dd3565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b506102b16004803603606081101561029e57600080fd5b5080359060208101359060400135610eed565b60408051918252519081900360200190f35b3480156102cf57600080fd5b50610359600480360360a08110156102e657600080fd5b813591602081013591810190606081016040820135600160201b81111561030c57600080fd5b82018360208201111561031e57600080fd5b803590602001918460208302840111600160201b8311171561033f57600080fd5b91935091506001600160a01b038135169060200135610f02565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561039557818101518382015260200161037d565b505050509050019250505060405180910390f35b3480156103b557600080fd5b50610359600480360360408110156103cc57600080fd5b81359190810190604081016020820135600160201b8111156103ed57600080fd5b8201836020820111156103ff57600080fd5b803590602001918460208302840111600160201b8311171561042057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611325945050505050565b34801561046a57600080fd5b50610262600480360361016081101561048257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561135b565b3480156104e857600080fd5b50610359600480360360a08110156104ff57600080fd5b813591602081013591810190606081016040820135600160201b81111561052557600080fd5b82018360208201111561053757600080fd5b803590602001918460208302840111600160201b8311171561055857600080fd5b91935091506001600160a01b038135169060200135611455565b34801561057e57600080fd5b50610359600480360360a081101561059557600080fd5b813591602081013591810190606081016040820135600160201b8111156105bb57600080fd5b8201836020820111156105cd57600080fd5b803590602001918460208302840111600160201b831117156105ee57600080fd5b91935091506001600160a01b038135169060200135611578565b34801561061457600080fd5b506102b1600480360361014081101561062c57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611715565b34801561068757600080fd5b50610208600480360360a081101561069e57600080fd5b813591602081013591810190606081016040820135600160201b8111156106c457600080fd5b8201836020820111156106d657600080fd5b803590602001918460208302840111600160201b831117156106f757600080fd5b91935091506001600160a01b038135169060200135611823565b34801561071d57600080fd5b506102086004803603602081101561073457600080fd5b50356001600160a01b0316611b93565b34801561075057600080fd5b50610759611bcc565b604080516001600160a01b039092168252519081900360200190f35b34801561078157600080fd5b50610208600480360360a081101561079857600080fd5b813591602081013591810190606081016040820135600160201b8111156107be57600080fd5b8201836020820111156107d057600080fd5b803590602001918460208302840111600160201b831117156107f157600080fd5b91935091506001600160a01b038135169060200135611bdb565b6103596004803603608081101561082157600080fd5b81359190810190604081016020820135600160201b81111561084257600080fd5b82018360208201111561085457600080fd5b803590602001918460208302840111600160201b8311171561087557600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561089b57600080fd5b506102b1600480360360608110156108b257600080fd5b50803590602081013590604001356121cc565b3480156108d157600080fd5b50610359600480360360a08110156108e857600080fd5b813591602081013591810190606081016040820135600160201b81111561090e57600080fd5b82018360208201111561092057600080fd5b803590602001918460208302840111600160201b8311171561094157600080fd5b91935091506001600160a01b0381351690602001356121d9565b34801561096757600080fd5b506107596122aa565b34801561097c57600080fd5b506107596122b9565b34801561099157600080fd5b506107596122c8565b3480156109a657600080fd5b506102b1600480360360608110156109bd57600080fd5b50803590602081013590604001356122ec565b3480156109dc57600080fd5b506102b1600480360360c08110156109f357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356122f9565b61020860048036036080811015610a3957600080fd5b81359190810190604081016020820135600160201b811115610a5a57600080fd5b820183602082011115610a6c57600080fd5b803590602001918460208302840111600160201b83111715610a8d57600080fd5b91935091506001600160a01b038135169060200135612485565b348015610ab357600080fd5b50610262600480360360e0811015610aca57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612930565b348015610b1057600080fd5b50610759612b74565b348015610b2557600080fd5b5061035960048036036040811015610b3c57600080fd5b81359190810190604081016020820135600160201b811115610b5d57600080fd5b820183602082011115610b6f57600080fd5b803590602001918460208302840111600160201b83111715610b9057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b98945050505050565b348015610bda57600080fd5b50610759612bc5565b348015610bef57600080fd5b506102626004803603610140811015610c0757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612bd4565b348015610c6257600080fd5b50610cb86004803603610100811015610c7a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612ce8565b60408051938452602084019290925282820152519081900360600190f35b610cb8600480360360c0811015610cec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e24565b348015610d2857600080fd5b5061020860048036036020811015610d3f57600080fd5b50356001600160a01b03166130c9565b61035960048036036080811015610d6557600080fd5b81359190810190604081016020820135600160201b811115610d8657600080fd5b820183602082011115610d9857600080fd5b803590602001918460208302840111600160201b83111715610db957600080fd5b91935091506001600160a01b038135169060200135613102565b6000808242811015610e1a576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b610e49897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612930565b9093509150610e59898685613448565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b50505050610ee185836135b2565b50965096945050505050565b6000610efa8484846136aa565b949350505050565b60608142811015610f48576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610f8257fe5b905060200201356001600160a01b03166001600160a01b031614610fdb576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b612710600589020461104a7f00000000000000000000000000000000000000000000000000000000000000006110118b8461379a565b8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137ea92505050565b9250878360018551038151811061105d57fe5b602002602001015110156110a25760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611140878760008181106110b257fe5b905060200201356001600160a01b0316336111267f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106110f457fe5b905060200201356001600160a01b03168c8c600181811061111157fe5b905060200201356001600160a01b0316613932565b8660008151811061113357fe5b60200260200101516139f2565b61117f83888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b4f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d846001865103815181106111be57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156111fc57600080fd5b505af1158015611210573d6000803e3d6000fd5b50505050611235858460018651038151811061122857fe5b60200260200101516135b2565b611290338888600081811061124657fe5b905060200201356001600160a01b0316838a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b6113196112e17f0000000000000000000000000000000000000000000000000000000000000000898960008181106112c457fe5b905060200201356001600160a01b03168a8a600181811061111157fe5b888860008181106112ee57fe5b905060200201356001600160a01b0316338660008151811061130c57fe5b6020026020010151614285565b50509695505050505050565b60606113527f00000000000000000000000000000000000000000000000000000000000000008484614499565b90505b92915050565b600080600061138b7f00000000000000000000000000000000000000000000000000000000000000008f8f613932565b905060008761139a578c61139e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561141457600080fd5b505af1158015611428573d6000803e3d6000fd5b5050505061143b8f8f8f8f8f8f8f612930565b809450819550505050509b509b9950505050505050505050565b6060814281101561149b576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058902046114d17f00000000000000000000000000000000000000000000000000000000000000006110118b8461379a565b925087836001855103815181106114e457fe5b602002602001015110156115295760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611539878760008181106110b257fe5b611235838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b606081428110156115be576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106115f857fe5b905060200201356001600160a01b03166001600160a01b031614611651576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b61271060058902046116c07f00000000000000000000000000000000000000000000000000000000000000006116878b8461379a565b89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061449992505050565b925087836000815181106116d057fe5b602002602001015111156110a25760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b6000806117637f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613932565b9050600086611772578b611776565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050506118128d8d8d8d8d8d6122f9565b9d9c50505050505050505050505050565b8042811015611867576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058802046118f1868660008161187d57fe5b905060200201356001600160a01b0316336118dc7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106118bf57fe5b905060200201356001600160a01b03168b8b600181811061111157fe5b6118ec8c8663ffffffff61379a16565b6139f2565b60008686600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561196857600080fd5b505afa15801561197c573d6000803e3d6000fd5b505050506040513d602081101561199257600080fd5b505160408051602089810282810182019093528982529293506119d49290918a918a9182918501908490808284376000920191909152508992506145cd915050565b87611a8682898960001981018181106119e957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b50519063ffffffff61379a16565b1015611ac35760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611b1e3388886000818110611ad457fe5b905060200201356001600160a01b0316848a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b611b88611b527f0000000000000000000000000000000000000000000000000000000000000000898960008181106112c457fe5b88886000818110611b5f57fe5b905060200201356001600160a01b031633611b83868e61379a90919063ffffffff16565b614285565b505050505050505050565b6002546001600160a01b03163314611baa57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b8042811015611c1f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611c5957fe5b905060200201356001600160a01b03166001600160a01b031614611cb2576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b6127106005880204611cc8868660008161187d57fe5b611d068686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506145cd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611d7057600080fd5b505afa158015611d84573d6000803e3d6000fd5b505050506040513d6020811015611d9a57600080fd5b5051905087811015611ddd5760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b50505050611ac385826135b2565b60608142811015611eab576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611ee257fe5b905060200201356001600160a01b03166001600160a01b031614611f3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b600061271060053402049050611f7b7f0000000000000000000000000000000000000000000000000000000000000000611011348463ffffffff61379a16565b92508783600185510381518110611f8e57fe5b60200260200101511015611fd35760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561202e57600080fd5b505af1158015612042573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6120a77f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106118bf57fe5b856000815181106120b457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561210b57600080fd5b505af115801561211f573d6000803e3d6000fd5b505050506040513d602081101561213557600080fd5b505161213d57fe5b61217c838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b61218d338888600081811061124657fe5b6121c16112e17f0000000000000000000000000000000000000000000000000000000000000000898960008181106112c457fe5b505095945050505050565b6000610efa8484846148d8565b6060814281101561221f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058902046122557f00000000000000000000000000000000000000000000000000000000000000006116878b8461379a565b9250878360008151811061226557fe5b602002602001015111156115295760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b6003546001600160a01b031681565b6002546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610efa8484846149c8565b6000814281101561233f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61236e887f00000000000000000000000000000000000000000000000000000000000000008989893089612930565b604080516370a0823160e01b815230600482015290519194506123f292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156123c157600080fd5b505afa1580156123d5573d6000803e3d6000fd5b505050506040513d60208110156123eb57600080fd5b5051613448565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561245857600080fd5b505af115801561246c573d6000803e3d6000fd5b5050505061247a84836135b2565b509695505050505050565b80428110156124c9576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061250057fe5b905060200201356001600160a01b03166001600160a01b031614612559576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125b957600080fd5b505af11580156125cd573d6000803e3d6000fd5b5050505050600061271082600502816125e257fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6126457f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106118bf57fe5b612655858563ffffffff61379a16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b505050506040513d60208110156126ce57600080fd5b50516126d657fe5b6000878760001981018181106126e857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561274d57600080fd5b505afa158015612761573d6000803e3d6000fd5b505050506040513d602081101561277757600080fd5b50516040805160208a810282810182019093528a82529293506127b99290918b918b9182918501908490808284376000920191909152508a92506145cd915050565b88612833828a8a60001981018181106127ce57fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b10156128705760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b6128cb338989600081811061288157fe5b905060200201356001600160a01b0316848b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b611b886128ff7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106118bf57fe5b8989600081811061290c57fe5b905060200201356001600160a01b031633611b83868861379a90919063ffffffff16565b6000808242811015612977576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b60006129a47f00000000000000000000000000000000000000000000000000000000000000008c8c613932565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156129ff57600080fd5b505af1158015612a13573d6000803e3d6000fd5b505050506040513d6020811015612a2957600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612a7657600080fd5b505af1158015612a8a573d6000803e3d6000fd5b505050506040513d6040811015612aa057600080fd5b50805160209091015190925090506000612aba8e8e614a8a565b509050806001600160a01b03168e6001600160a01b031614612add578183612ae0565b82825b90975095508a871015612b245760405162461bcd60e51b81526004018080602001828103825260218152602001806150a86021913960400191505060405180910390fd5b89861015612b635760405162461bcd60e51b81526004018080602001828103825260218152602001806150876021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113527f000000000000000000000000000000000000000000000000000000000000000084846137ea565b6000546001600160a01b031681565b6000806000612c247f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613932565b9050600087612c33578c612c37565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50505050612cd38e8e8e8e8e8e610dd3565b909f909e509c50505050505050505050505050565b60008060008342811015612d31576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b612d3f8c8c8c8c8c8c614b7e565b90945092506000612d717f00000000000000000000000000000000000000000000000000000000000000008e8e613932565b9050612d7f8d3383886139f2565b612d8b8c3383876139f2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612de357600080fd5b505af1158015612df7573d6000803e3d6000fd5b505050506040513d6020811015612e0d57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612e6d576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b612e9b8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614b7e565b90945092506000612eed7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613932565b9050612efb8b3383886139f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f5657600080fd5b505af1158015612f6a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050506040513d602081101561301957600080fd5b505161302157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561307957600080fd5b505af115801561308d573d6000803e3d6000fd5b505050506040513d60208110156130a357600080fd5b50519250348410156130bb576130bb338534036135b2565b505096509650969350505050565b6002546001600160a01b031633146130e057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60608142811015613148576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061317f57fe5b905060200201356001600160a01b03166001600160a01b0316146131d8576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b612710600588020461320e7f00000000000000000000000000000000000000000000000000000000000000006116878a8461379a565b9250348360008151811061321e57fe5b602002602001015111156132635760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0896040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132be57600080fd5b505af11580156132d2573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6133377f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106118bf57fe5b8560008151811061334457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b505050506040513d60208110156133c557600080fd5b50516133cd57fe5b61340c838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b8260008151811061341957fe5b602002602001015134111561217c5761217c338460008151811061343957fe5b602002602001015134036135b2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106134c55780518252601f1990920191602091820191016134a6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613527576040519150601f19603f3d011682016040523d82523d6000602084013e61352c565b606091505b509150915081801561355a57508051158061355a575080806020019051602081101561355757600080fd5b50515b6135ab576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135fe5780518252601f1990920191602091820191016135df565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613660576040519150601f19603f3d011682016040523d82523d6000602084013e613665565b606091505b50509050806136a55760405162461bcd60e51b81526004018080602001828103825260238152602001806150646023913960400191505060405180910390fd5b505050565b60008084116136ea5760405162461bcd60e51b815260040180806020018281038252602681526020018061503e6026913960400191505060405180910390fd5b6000831180156136fa5750600082115b6137355760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b6000613749856126f763ffffffff614df216565b9050600061375d828563ffffffff614df216565b90506000613783836137778861271063ffffffff614df216565b9063ffffffff614e5516565b905080828161378e57fe5b04979650505050505050565b80820382811115611355576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b606060028251101561383f576040805162461bcd60e51b81526020600482015260196024820152780a0ded6ca98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561385757600080fd5b50604051908082528060200260200182016040528015613881578160200160208202803683370190505b509050828160008151811061389257fe5b60200260200101818152505060005b600183510381101561392a576000806138e4878685815181106138c057fe5b60200260200101518786600101815181106138d757fe5b6020026020010151614ea4565b915091506139068484815181106138f757fe5b602002602001015183836136aa565b84846001018151811061391557fe5b602090810291909101015250506001016138a1565b509392505050565b60008060006139418585614a8a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4937e9c51bcbbc6d7614d23716d92f73a77dc8682a71192b746780302a9d64be609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613a775780518252601f199092019160209182019101613a58565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ad9576040519150601f19603f3d011682016040523d82523d6000602084013e613ade565b606091505b5091509150818015613b0c575080511580613b0c5750808060200190516020811015613b0957600080fd5b50515b613b475760405162461bcd60e51b81526004018080602001828103825260248152602001806150c96024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613d8f57600080848381518110613b6d57fe5b6020026020010151858460010181518110613b8457fe5b6020026020010151915091506000613b9c8383614a8a565b5090506000878560010181518110613bb057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613bde57826000613be2565b6000835b91509150600060028a51038810613bf95788613c3a565b613c3a7f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613c2d57fe5b6020026020010151613932565b9050613c677f00000000000000000000000000000000000000000000000000000000000000008888613932565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ca4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613d15578181015183820152602001613cfd565b50505050905090810190601f168015613d425780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d6457600080fd5b505af1158015613d78573d6000803e3d6000fd5b505060019099019850613b52975050505050505050565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015613de557506001546001600160a01b03848116911614155b15613ee8577f000000000000000000000000000000000000000000000000000000000000000081600181518110613e1857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060613e657f000000000000000000000000000000000000000000000000000000000000000084846137ea565b9050613eb88486613eb27f000000000000000000000000000000000000000000000000000000000000000086600081518110613e9d57fe5b602002602001015187600181518110613c2d57fe5b866139f2565b613ec3818330613b4f565b7f00000000000000000000000000000000000000000000000000000000000000009350505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156141ff577f000000000000000000000000000000000000000000000000000000000000000081600081518110613f5057fe5b6001600160a01b0392831660209182029290920101526001805483519216918391908110613f7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060606140687f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561403657600080fd5b505afa15801561404a573d6000803e3d6000fd5b505050506040513d602081101561406057600080fd5b5051846137ea565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6140df7f0000000000000000000000000000000000000000000000000000000000000000856000815181106140ca57fe5b602002602001015186600181518110613c2d57fe5b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561414557600080fd5b505afa158015614159573d6000803e3d6000fd5b505050506040513d602081101561416f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156141c057600080fd5b505af11580156141d4573d6000803e3d6000fd5b505050506040513d60208110156141ea57600080fd5b50516141f257fe5b6141fd818330613b4f565b505b6001546001600160a01b038481169116141561422f5760005461422f90849086906001600160a01b0316856139f2565b600154600054604080516370a0823160e01b81523060048201529051613d8f936001600160a01b0390811693169183916370a0823191602480820192602092909190829003018186803b1580156123c157600080fd5b60035460408051631d2c5c8d60e11b815290516000926001600160a01b031691633a58b91a916004808301926020929190829003018186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d60208110156142f457600080fd5b50511161430057600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461441e576040805160028082526060808301845292602083019080368337019050509050838160008151811061436757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106143b557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060606144027f000000000000000000000000000000000000000000000000000000000000000084846137ea565b90508060018151811061441157fe5b6020026020010151925050505b6003546040805163f7bfe26760e01b81526001600160a01b0387811660048301528581166024830152604482018590529151919092169163f7bfe26791606480830192600092919082900301818387803b15801561447b57600080fd5b505af115801561448f573d6000803e3d6000fd5b5050505050505050565b60606002825110156144ee576040805162461bcd60e51b81526020600482015260196024820152780a0ded6ca98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561450657600080fd5b50604051908082528060200260200182016040528015614530578160200160208202803683370190505b509050828160018351038151811061454457fe5b60209081029190910101528151600019015b801561392a576000806145868786600186038151811061457257fe5b60200260200101518786815181106138d757fe5b915091506145a884848151811061459957fe5b602002602001015183836148d8565b8460018503815181106145b757fe5b6020908102919091010152505060001901614556565b60005b60018351038110156136a5576000808483815181106145eb57fe5b602002602001015185846001018151811061460257fe5b602002602001015191509150600061461a8383614a8a565b509050600061464a7f00000000000000000000000000000000000000000000000000000000000000008585613932565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561468b57600080fd5b505afa15801561469f573d6000803e3d6000fd5b505050506040513d60608110156146b557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a8116908916146146eb5782846146ee565b83835b9150915061474c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b95506147598683836136aa565b945050505050600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147d2565b6147d27f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613c2d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561485c578181015183820152602001614844565b50505050905090810190601f1680156148895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156148ab57600080fd5b505af11580156148bf573d6000803e3d6000fd5b50506001909b019a506145d09950505050505050505050565b60008084116149185760405162461bcd60e51b8152600401808060200182810382526027815260200180614ff76027913960400191505060405180910390fd5b6000831180156149285750600082115b6149635760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b600061498761271061497b868863ffffffff614df216565b9063ffffffff614df216565b905060006149a16126f761497b868963ffffffff61379a16565b90506149be60018284816149b157fe5b049063ffffffff614e5516565b9695505050505050565b6000808411614a1e576040805162461bcd60e51b815260206004820181905260248201527f506f6b654c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614a2e5750600082115b614a695760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b82614a7a858463ffffffff614df216565b81614a8157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614af4576040805162461bcd60e51b815260206004820181905260248201527f506f6b654c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610614b14578284614b17565b83835b90925090506001600160a01b038216614b77576040805162461bcd60e51b815260206004820152601960248201527f506f6b654c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614bf857600080fd5b505afa158015614c0c573d6000803e3d6000fd5b505050506040513d6020811015614c2257600080fd5b50516001600160a01b03161415614cd557604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614ca857600080fd5b505af1158015614cbc573d6000803e3d6000fd5b505050506040513d6020811015614cd257600080fd5b50505b600080614d037f00000000000000000000000000000000000000000000000000000000000000008b8b614ea4565b91509150816000148015614d15575080155b15614d2557879350869250614de5565b6000614d328984846149c8565b9050878111614d855785811015614d7a5760405162461bcd60e51b81526004018080602001828103825260218152602001806150876021913960400191505060405180910390fd5b889450925082614de3565b6000614d928984866149c8565b905089811115614d9e57fe5b87811015614ddd5760405162461bcd60e51b81526004018080602001828103825260218152602001806150a86021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614e0d57505080820282828281614e0a57fe5b04145b611355576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611355576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614eb38585614a8a565b509050600080614ec4888888613932565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614efc57600080fd5b505afa158015614f10573d6000803e3d6000fd5b505050506040513d6060811015614f2657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614f59578082614f5c565b81815b9099909850965050505050505056fe506f6b654c6962726172793a20494e53554646494349454e545f4c4951554944495459506f6b65526f757465723a204558434553534956455f494e5055545f414d4f554e54506f6b65526f757465723a204558504952454400000000000000000000000000506f6b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6b65526f757465723a20494e56414c49445f504154480000000000000000506f6b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544506f6b65526f757465723a20494e53554646494349454e545f425f414d4f554e54506f6b65526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220774af0d8404fc91223e4ab92afe84c349a37f31ccc8bd826afe6a1de3d1edfda64736f6c63430006060033000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000056715c09f2d9fcefdbff6d2a06d2a91ec079c04200000000000000000000000056831a7b5e61d6453c203cb22b7a89e016b05ecb
Deployed Bytecode
0x6080604052600436106101d15760003560e01c80638cf57cb9116100f7578063c45a015511610095578063e8e3370011610064578063e8e3370014610c56578063f305d71914610cd6578063f5a1f5b414610d1c578063fb3bdb4114610d4f5761020a565b8063c45a015514610b04578063d06ca61f14610b19578063d7b4be2414610bce578063ded9382a14610be35761020a565b8063ad615dec116100d1578063ad615dec1461099a578063af2979eb146109d0578063b6f9de9514610a23578063baa2abde14610aa75761020a565b80638cf57cb91461095b5780638da5cb5b14610970578063ad5c4648146109855761020a565b80635b0d59841161016f578063791ac9471161013e578063791ac947146107755780637ff36ab51461080b57806385f8c2591461088f5780638803dbee146108c55761020a565b80635b0d5984146106085780635c11d7951461067b5780635e00e6791461071157806365347fdc146107445761020a565b80631f00ca74116101ab5780631f00ca74146103a95780632195995c1461045e57806338ed1739146104dc5780634a25d94a146105725761020a565b806302751cec1461020f578063054d50d41461027b57806318cbafe5146102c35761020a565b3661020a57336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dd3565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b506102b16004803603606081101561029e57600080fd5b5080359060208101359060400135610eed565b60408051918252519081900360200190f35b3480156102cf57600080fd5b50610359600480360360a08110156102e657600080fd5b813591602081013591810190606081016040820135600160201b81111561030c57600080fd5b82018360208201111561031e57600080fd5b803590602001918460208302840111600160201b8311171561033f57600080fd5b91935091506001600160a01b038135169060200135610f02565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561039557818101518382015260200161037d565b505050509050019250505060405180910390f35b3480156103b557600080fd5b50610359600480360360408110156103cc57600080fd5b81359190810190604081016020820135600160201b8111156103ed57600080fd5b8201836020820111156103ff57600080fd5b803590602001918460208302840111600160201b8311171561042057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611325945050505050565b34801561046a57600080fd5b50610262600480360361016081101561048257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561135b565b3480156104e857600080fd5b50610359600480360360a08110156104ff57600080fd5b813591602081013591810190606081016040820135600160201b81111561052557600080fd5b82018360208201111561053757600080fd5b803590602001918460208302840111600160201b8311171561055857600080fd5b91935091506001600160a01b038135169060200135611455565b34801561057e57600080fd5b50610359600480360360a081101561059557600080fd5b813591602081013591810190606081016040820135600160201b8111156105bb57600080fd5b8201836020820111156105cd57600080fd5b803590602001918460208302840111600160201b831117156105ee57600080fd5b91935091506001600160a01b038135169060200135611578565b34801561061457600080fd5b506102b1600480360361014081101561062c57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611715565b34801561068757600080fd5b50610208600480360360a081101561069e57600080fd5b813591602081013591810190606081016040820135600160201b8111156106c457600080fd5b8201836020820111156106d657600080fd5b803590602001918460208302840111600160201b831117156106f757600080fd5b91935091506001600160a01b038135169060200135611823565b34801561071d57600080fd5b506102086004803603602081101561073457600080fd5b50356001600160a01b0316611b93565b34801561075057600080fd5b50610759611bcc565b604080516001600160a01b039092168252519081900360200190f35b34801561078157600080fd5b50610208600480360360a081101561079857600080fd5b813591602081013591810190606081016040820135600160201b8111156107be57600080fd5b8201836020820111156107d057600080fd5b803590602001918460208302840111600160201b831117156107f157600080fd5b91935091506001600160a01b038135169060200135611bdb565b6103596004803603608081101561082157600080fd5b81359190810190604081016020820135600160201b81111561084257600080fd5b82018360208201111561085457600080fd5b803590602001918460208302840111600160201b8311171561087557600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561089b57600080fd5b506102b1600480360360608110156108b257600080fd5b50803590602081013590604001356121cc565b3480156108d157600080fd5b50610359600480360360a08110156108e857600080fd5b813591602081013591810190606081016040820135600160201b81111561090e57600080fd5b82018360208201111561092057600080fd5b803590602001918460208302840111600160201b8311171561094157600080fd5b91935091506001600160a01b0381351690602001356121d9565b34801561096757600080fd5b506107596122aa565b34801561097c57600080fd5b506107596122b9565b34801561099157600080fd5b506107596122c8565b3480156109a657600080fd5b506102b1600480360360608110156109bd57600080fd5b50803590602081013590604001356122ec565b3480156109dc57600080fd5b506102b1600480360360c08110156109f357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356122f9565b61020860048036036080811015610a3957600080fd5b81359190810190604081016020820135600160201b811115610a5a57600080fd5b820183602082011115610a6c57600080fd5b803590602001918460208302840111600160201b83111715610a8d57600080fd5b91935091506001600160a01b038135169060200135612485565b348015610ab357600080fd5b50610262600480360360e0811015610aca57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612930565b348015610b1057600080fd5b50610759612b74565b348015610b2557600080fd5b5061035960048036036040811015610b3c57600080fd5b81359190810190604081016020820135600160201b811115610b5d57600080fd5b820183602082011115610b6f57600080fd5b803590602001918460208302840111600160201b83111715610b9057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b98945050505050565b348015610bda57600080fd5b50610759612bc5565b348015610bef57600080fd5b506102626004803603610140811015610c0757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612bd4565b348015610c6257600080fd5b50610cb86004803603610100811015610c7a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612ce8565b60408051938452602084019290925282820152519081900360600190f35b610cb8600480360360c0811015610cec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e24565b348015610d2857600080fd5b5061020860048036036020811015610d3f57600080fd5b50356001600160a01b03166130c9565b61035960048036036080811015610d6557600080fd5b81359190810190604081016020820135600160201b811115610d8657600080fd5b820183602082011115610d9857600080fd5b803590602001918460208302840111600160201b83111715610db957600080fd5b91935091506001600160a01b038135169060200135613102565b6000808242811015610e1a576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b610e49897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a612930565b9093509150610e59898685613448565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b50505050610ee185836135b2565b50965096945050505050565b6000610efa8484846136aa565b949350505050565b60608142811015610f48576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21686866000198101818110610f8257fe5b905060200201356001600160a01b03166001600160a01b031614610fdb576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b612710600589020461104a7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a6110118b8461379a565b8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137ea92505050565b9250878360018551038151811061105d57fe5b602002602001015110156110a25760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611140878760008181106110b257fe5b905060200201356001600160a01b0316336111267f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8b8b60008181106110f457fe5b905060200201356001600160a01b03168c8c600181811061111157fe5b905060200201356001600160a01b0316613932565b8660008151811061113357fe5b60200260200101516139f2565b61117f83888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b4f915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d846001865103815181106111be57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156111fc57600080fd5b505af1158015611210573d6000803e3d6000fd5b50505050611235858460018651038151811061122857fe5b60200260200101516135b2565b611290338888600081811061124657fe5b905060200201356001600160a01b0316838a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b6113196112e17f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a898960008181106112c457fe5b905060200201356001600160a01b03168a8a600181811061111157fe5b888860008181106112ee57fe5b905060200201356001600160a01b0316338660008151811061130c57fe5b6020026020010151614285565b50509695505050505050565b60606113527f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8484614499565b90505b92915050565b600080600061138b7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8f8f613932565b905060008761139a578c61139e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561141457600080fd5b505af1158015611428573d6000803e3d6000fd5b5050505061143b8f8f8f8f8f8f8f612930565b809450819550505050509b509b9950505050505050505050565b6060814281101561149b576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058902046114d17f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a6110118b8461379a565b925087836001855103815181106114e457fe5b602002602001015110156115295760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611539878760008181106110b257fe5b611235838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b606081428110156115be576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216868660001981018181106115f857fe5b905060200201356001600160a01b03166001600160a01b031614611651576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b61271060058902046116c07f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a6116878b8461379a565b89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061449992505050565b925087836000815181106116d057fe5b602002602001015111156110a25760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b6000806117637f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613932565b9050600086611772578b611776565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b505050506118128d8d8d8d8d8d6122f9565b9d9c50505050505050505050505050565b8042811015611867576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058802046118f1868660008161187d57fe5b905060200201356001600160a01b0316336118dc7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8a8a60008181106118bf57fe5b905060200201356001600160a01b03168b8b600181811061111157fe5b6118ec8c8663ffffffff61379a16565b6139f2565b60008686600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561196857600080fd5b505afa15801561197c573d6000803e3d6000fd5b505050506040513d602081101561199257600080fd5b505160408051602089810282810182019093528982529293506119d49290918a918a9182918501908490808284376000920191909152508992506145cd915050565b87611a8682898960001981018181106119e957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b50519063ffffffff61379a16565b1015611ac35760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b611b1e3388886000818110611ad457fe5b905060200201356001600160a01b0316848a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b611b88611b527f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a898960008181106112c457fe5b88886000818110611b5f57fe5b905060200201356001600160a01b031633611b83868e61379a90919063ffffffff16565b614285565b505050505050505050565b6002546001600160a01b03163314611baa57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b8042811015611c1f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21685856000198101818110611c5957fe5b905060200201356001600160a01b03166001600160a01b031614611cb2576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b6127106005880204611cc8868660008161187d57fe5b611d068686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506145cd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b158015611d7057600080fd5b505afa158015611d84573d6000803e3d6000fd5b505050506040513d6020811015611d9a57600080fd5b5051905087811015611ddd5760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b50505050611ac385826135b2565b60608142811015611eab576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110611ee257fe5b905060200201356001600160a01b03166001600160a01b031614611f3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b600061271060053402049050611f7b7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a611011348463ffffffff61379a16565b92508783600185510381518110611f8e57fe5b60200260200101511015611fd35760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561202e57600080fd5b505af1158015612042573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6120a77f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8a8a60008181106118bf57fe5b856000815181106120b457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561210b57600080fd5b505af115801561211f573d6000803e3d6000fd5b505050506040513d602081101561213557600080fd5b505161213d57fe5b61217c838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b61218d338888600081811061124657fe5b6121c16112e17f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a898960008181106112c457fe5b505095945050505050565b6000610efa8484846148d8565b6060814281101561221f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61271060058902046122557f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a6116878b8461379a565b9250878360008151811061226557fe5b602002602001015111156115295760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b6003546001600160a01b031681565b6002546001600160a01b031681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000610efa8484846149c8565b6000814281101561233f576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b61236e887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089612930565b604080516370a0823160e01b815230600482015290519194506123f292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156123c157600080fd5b505afa1580156123d5573d6000803e3d6000fd5b505050506040513d60208110156123eb57600080fd5b5051613448565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561245857600080fd5b505af115801561246c573d6000803e3d6000fd5b5050505061247a84836135b2565b509695505050505050565b80428110156124c9576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168585600081811061250057fe5b905060200201356001600160a01b03166001600160a01b031614612559576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125b957600080fd5b505af11580156125cd573d6000803e3d6000fd5b5050505050600061271082600502816125e257fe5b0490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6126457f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8a8a60008181106118bf57fe5b612655858563ffffffff61379a16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b505050506040513d60208110156126ce57600080fd5b50516126d657fe5b6000878760001981018181106126e857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561274d57600080fd5b505afa158015612761573d6000803e3d6000fd5b505050506040513d602081101561277757600080fd5b50516040805160208a810282810182019093528a82529293506127b99290918b918b9182918501908490808284376000920191909152508a92506145cd915050565b88612833828a8a60001981018181106127ce57fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b10156128705760405162461bcd60e51b8152600401808060200182810382526026815260200180614fd16026913960400191505060405180910390fd5b6128cb338989600081811061288157fe5b905060200201356001600160a01b0316848b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d9592505050565b611b886128ff7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8a8a60008181106118bf57fe5b8989600081811061290c57fe5b905060200201356001600160a01b031633611b83868861379a90919063ffffffff16565b6000808242811015612977576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b60006129a47f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8c8c613932565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156129ff57600080fd5b505af1158015612a13573d6000803e3d6000fd5b505050506040513d6020811015612a2957600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612a7657600080fd5b505af1158015612a8a573d6000803e3d6000fd5b505050506040513d6040811015612aa057600080fd5b50805160209091015190925090506000612aba8e8e614a8a565b509050806001600160a01b03168e6001600160a01b031614612add578183612ae0565b82825b90975095508a871015612b245760405162461bcd60e51b81526004018080602001828103825260218152602001806150a86021913960400191505060405180910390fd5b89861015612b635760405162461bcd60e51b81526004018080602001828103825260218152602001806150876021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a81565b60606113527f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a84846137ea565b6000546001600160a01b031681565b6000806000612c247f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613932565b9050600087612c33578c612c37565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b50505050612cd38e8e8e8e8e8e610dd3565b909f909e509c50505050505050505050505050565b60008060008342811015612d31576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b612d3f8c8c8c8c8c8c614b7e565b90945092506000612d717f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8e8e613932565b9050612d7f8d3383886139f2565b612d8b8c3383876139f2565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612de357600080fd5b505af1158015612df7573d6000803e3d6000fd5b505050506040513d6020811015612e0d57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612e6d576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b612e9b8a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c614b7e565b90945092506000612eed7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613932565b9050612efb8b3383886139f2565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f5657600080fd5b505af1158015612f6a573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050506040513d602081101561301957600080fd5b505161302157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561307957600080fd5b505af115801561308d573d6000803e3d6000fd5b505050506040513d60208110156130a357600080fd5b50519250348410156130bb576130bb338534036135b2565b505096509650969350505050565b6002546001600160a01b031633146130e057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60608142811015613148576040805162461bcd60e51b81526020600482015260136024820152600080516020614fb1833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168686600081811061317f57fe5b905060200201356001600160a01b03166001600160a01b0316146131d8576040805162461bcd60e51b8152602060048201526018602482015260008051602061501e833981519152604482015290519081900360640190fd5b612710600588020461320e7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a6116878a8461379a565b9250348360008151811061321e57fe5b602002602001015111156132635760405162461bcd60e51b8152600401808060200182810382526022815260200180614f8f6022913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0896040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132be57600080fd5b505af11580156132d2573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6133377f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8a8a60008181106118bf57fe5b8560008151811061334457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b505050506040513d60208110156133c557600080fd5b50516133cd57fe5b61340c838888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613b4f915050565b8260008151811061341957fe5b602002602001015134111561217c5761217c338460008151811061343957fe5b602002602001015134036135b2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106134c55780518252601f1990920191602091820191016134a6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613527576040519150601f19603f3d011682016040523d82523d6000602084013e61352c565b606091505b509150915081801561355a57508051158061355a575080806020019051602081101561355757600080fd5b50515b6135ab576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135fe5780518252601f1990920191602091820191016135df565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613660576040519150601f19603f3d011682016040523d82523d6000602084013e613665565b606091505b50509050806136a55760405162461bcd60e51b81526004018080602001828103825260238152602001806150646023913960400191505060405180910390fd5b505050565b60008084116136ea5760405162461bcd60e51b815260040180806020018281038252602681526020018061503e6026913960400191505060405180910390fd5b6000831180156136fa5750600082115b6137355760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b6000613749856126f763ffffffff614df216565b9050600061375d828563ffffffff614df216565b90506000613783836137778861271063ffffffff614df216565b9063ffffffff614e5516565b905080828161378e57fe5b04979650505050505050565b80820382811115611355576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b606060028251101561383f576040805162461bcd60e51b81526020600482015260196024820152780a0ded6ca98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561385757600080fd5b50604051908082528060200260200182016040528015613881578160200160208202803683370190505b509050828160008151811061389257fe5b60200260200101818152505060005b600183510381101561392a576000806138e4878685815181106138c057fe5b60200260200101518786600101815181106138d757fe5b6020026020010151614ea4565b915091506139068484815181106138f757fe5b602002602001015183836136aa565b84846001018151811061391557fe5b602090810291909101015250506001016138a1565b509392505050565b60008060006139418585614a8a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f4937e9c51bcbbc6d7614d23716d92f73a77dc8682a71192b746780302a9d64be609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613a775780518252601f199092019160209182019101613a58565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ad9576040519150601f19603f3d011682016040523d82523d6000602084013e613ade565b606091505b5091509150818015613b0c575080511580613b0c5750808060200190516020811015613b0957600080fd5b50515b613b475760405162461bcd60e51b81526004018080602001828103825260248152602001806150c96024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613d8f57600080848381518110613b6d57fe5b6020026020010151858460010181518110613b8457fe5b6020026020010151915091506000613b9c8383614a8a565b5090506000878560010181518110613bb057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613bde57826000613be2565b6000835b91509150600060028a51038810613bf95788613c3a565b613c3a7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a878c8b60020181518110613c2d57fe5b6020026020010151613932565b9050613c677f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8888613932565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ca4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613d15578181015183820152602001613cfd565b50505050905090810190601f168015613d425780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d6457600080fd5b505af1158015613d78573d6000803e3d6000fd5b505060019099019850613b52975050505050505050565b50505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316836001600160a01b031614158015613de557506001546001600160a01b03848116911614155b15613ee8577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110613e1857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060613e657f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a84846137ea565b9050613eb88486613eb27f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a86600081518110613e9d57fe5b602002602001015187600181518110613c2d57fe5b866139f2565b613ec3818330613b4f565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29350505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316836001600160a01b031614156141ff577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110613f5057fe5b6001600160a01b0392831660209182029290920101526001805483519216918391908110613f7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060606140687f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561403657600080fd5b505afa15801561404a573d6000803e3d6000fd5b505050506040513d602081101561406057600080fd5b5051846137ea565b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6140df7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a856000815181106140ca57fe5b602002602001015186600181518110613c2d57fe5b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a08231916024808301926020929190829003018186803b15801561414557600080fd5b505afa158015614159573d6000803e3d6000fd5b505050506040513d602081101561416f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156141c057600080fd5b505af11580156141d4573d6000803e3d6000fd5b505050506040513d60208110156141ea57600080fd5b50516141f257fe5b6141fd818330613b4f565b505b6001546001600160a01b038481169116141561422f5760005461422f90849086906001600160a01b0316856139f2565b600154600054604080516370a0823160e01b81523060048201529051613d8f936001600160a01b0390811693169183916370a0823191602480820192602092909190829003018186803b1580156123c157600080fd5b60035460408051631d2c5c8d60e11b815290516000926001600160a01b031691633a58b91a916004808301926020929190829003018186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d60208110156142f457600080fd5b50511161430057600080fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316836001600160a01b03161461441e576040805160028082526060808301845292602083019080368337019050509050838160008151811061436757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106143b557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060606144027f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a84846137ea565b90508060018151811061441157fe5b6020026020010151925050505b6003546040805163f7bfe26760e01b81526001600160a01b0387811660048301528581166024830152604482018590529151919092169163f7bfe26791606480830192600092919082900301818387803b15801561447b57600080fd5b505af115801561448f573d6000803e3d6000fd5b5050505050505050565b60606002825110156144ee576040805162461bcd60e51b81526020600482015260196024820152780a0ded6ca98d2c4e4c2e4f27440929cac82989288bea082a89603b1b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561450657600080fd5b50604051908082528060200260200182016040528015614530578160200160208202803683370190505b509050828160018351038151811061454457fe5b60209081029190910101528151600019015b801561392a576000806145868786600186038151811061457257fe5b60200260200101518786815181106138d757fe5b915091506145a884848151811061459957fe5b602002602001015183836148d8565b8460018503815181106145b757fe5b6020908102919091010152505060001901614556565b60005b60018351038110156136a5576000808483815181106145eb57fe5b602002602001015185846001018151811061460257fe5b602002602001015191509150600061461a8383614a8a565b509050600061464a7f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8585613932565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561468b57600080fd5b505afa15801561469f573d6000803e3d6000fd5b505050506040513d60608110156146b557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a8116908916146146eb5782846146ee565b83835b9150915061474c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4e57600080fd5b95506147598683836136aa565b945050505050600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147d2565b6147d27f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a898e8d60020181518110613c2d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561485c578181015183820152602001614844565b50505050905090810190601f1680156148895780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156148ab57600080fd5b505af11580156148bf573d6000803e3d6000fd5b50506001909b019a506145d09950505050505050505050565b60008084116149185760405162461bcd60e51b8152600401808060200182810382526027815260200180614ff76027913960400191505060405180910390fd5b6000831180156149285750600082115b6149635760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b600061498761271061497b868863ffffffff614df216565b9063ffffffff614df216565b905060006149a16126f761497b868963ffffffff61379a16565b90506149be60018284816149b157fe5b049063ffffffff614e5516565b9695505050505050565b6000808411614a1e576040805162461bcd60e51b815260206004820181905260248201527f506f6b654c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614a2e5750600082115b614a695760405162461bcd60e51b8152600401808060200182810382526023815260200180614f6c6023913960400191505060405180910390fd5b82614a7a858463ffffffff614df216565b81614a8157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614af4576040805162461bcd60e51b815260206004820181905260248201527f506f6b654c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610614b14578284614b17565b83835b90925090506001600160a01b038216614b77576040805162461bcd60e51b815260206004820152601960248201527f506f6b654c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a9092169163e6a4390591604480820192602092909190829003018186803b158015614bf857600080fd5b505afa158015614c0c573d6000803e3d6000fd5b505050506040513d6020811015614c2257600080fd5b50516001600160a01b03161415614cd557604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a9092169163c9c65396916044808201926020929091908290030181600087803b158015614ca857600080fd5b505af1158015614cbc573d6000803e3d6000fd5b505050506040513d6020811015614cd257600080fd5b50505b600080614d037f000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a8b8b614ea4565b91509150816000148015614d15575080155b15614d2557879350869250614de5565b6000614d328984846149c8565b9050878111614d855785811015614d7a5760405162461bcd60e51b81526004018080602001828103825260218152602001806150876021913960400191505060405180910390fd5b889450925082614de3565b6000614d928984866149c8565b905089811115614d9e57fe5b87811015614ddd5760405162461bcd60e51b81526004018080602001828103825260218152602001806150a86021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614e0d57505080820282828281614e0a57fe5b04145b611355576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611355576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614eb38585614a8a565b509050600080614ec4888888613932565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614efc57600080fd5b505afa158015614f10573d6000803e3d6000fd5b505050506040513d6060811015614f2657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614f59578082614f5c565b81815b9099909850965050505050505056fe506f6b654c6962726172793a20494e53554646494349454e545f4c4951554944495459506f6b65526f757465723a204558434553534956455f494e5055545f414d4f554e54506f6b65526f757465723a204558504952454400000000000000000000000000506f6b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6b65526f757465723a20494e56414c49445f504154480000000000000000506f6b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544506f6b65526f757465723a20494e53554646494349454e545f425f414d4f554e54506f6b65526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220774af0d8404fc91223e4ab92afe84c349a37f31ccc8bd826afe6a1de3d1edfda64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000056715c09f2d9fcefdbff6d2a06d2a91ec079c04200000000000000000000000056831a7b5e61d6453c203cb22b7a89e016b05ecb
-----Decoded View---------------
Arg [0] : _factory (address): 0xEecA00375bb46E60D7D6dD7887488B5694d0878A
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _skating (address): 0x56715C09F2D9fCEFDBFf6d2a06d2A91ec079C042
Arg [3] : _ballsToken (address): 0x56831A7b5E61D6453c203cb22B7A89e016b05ecb
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000eeca00375bb46e60d7d6dd7887488b5694d0878a
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 00000000000000000000000056715c09f2d9fcefdbff6d2a06d2a91ec079c042
Arg [3] : 00000000000000000000000056831a7b5e61d6453c203cb22b7a89e016b05ecb
Deployed Bytecode Sourcemap
8297:22823:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9331:10;-1:-1:-1;;;;;9345:4:0;9331:18;;9324:26;;;;8297:22823;;12:1:-1;9;2:12;15240:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15240:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15240:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30084:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30084:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30084:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23245:1074;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23245:1074:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23245:1074:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23245:1074:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23245:1074:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23245:1074:0;;-1:-1:-1;23245:1074:0;-1:-1:-1;;;;;;23245:1074:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23245:1074:0;;;;;;;;;;;;;;;;;30869:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30869:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30869:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30869:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30869:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30869:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30869:248:0;;-1:-1:-1;30869:248:0;;-1:-1:-1;;;;;30869:248:0:i;15919:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15919:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15919:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19576:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19576:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19576:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19576:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19576:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19576:846:0;;-1:-1:-1;19576:846:0;-1:-1:-1;;;;;;19576:846:0;;;;;;;;:::i;22186:1053::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22186:1053:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22186:1053:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22186:1053:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22186:1053:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22186:1053:0;;-1:-1:-1;22186:1053:0;-1:-1:-1;;;;;;22186:1053:0;;;;;;;;:::i;18036:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18036:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18036:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26702:960::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26702:960:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26702:960:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26702:960:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26702:960:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26702:960:0;;-1:-1:-1;26702:960:0;-1:-1:-1;;;;;;26702:960:0;;;;;;;;:::i;9172:108::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9172:108:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9172:108:0;-1:-1:-1;;;;;9172:108:0;;:::i;8502:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8502:25:0;;;:::i;:::-;;;;-1:-1:-1;;;;;8502:25:0;;;;;;;;;;;;;;28765:1084;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28765:1084:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28765:1084:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28765:1084:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28765:1084:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28765:1084:0;;-1:-1:-1;28765:1084:0;-1:-1:-1;;;;;;28765:1084:0;;;;;;;;:::i;21259:921::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21259:921:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21259:921:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21259:921:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21259:921:0;;-1:-1:-1;21259:921:0;-1:-1:-1;;;;;;21259:921:0;;;;;;;;:::i;30349:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30349:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30349:256:0;;;;;;;;;;;;:::i;20428:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20428:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20428:825:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20428:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20428:825:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20428:825:0;;-1:-1:-1;20428:825:0;-1:-1:-1;;;;;;20428:825:0;;;;;;;;:::i;8561:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8561:28:0;;;:::i;8534:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8534:20:0;;;:::i;8421:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8421:38:0;;;:::i;29893:183::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29893:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29893:183:0;;;;;;;;;;;;:::i;17330:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17330:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17330:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27668:1091::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27668:1091:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27668:1091:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27668:1091:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27668:1091:0;;-1:-1:-1;27668:1091:0;-1:-1:-1;;;;;;27668:1091:0;;;;;;;;:::i;14399:835::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14399:835:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14399:835:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8373:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8373:41:0;;;:::i;30613:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30613:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30613:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30613:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30613:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30613:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30613:248:0;;-1:-1:-1;30613:248:0;;-1:-1:-1;;;;;30613:248:0:i;8466:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8466:29:0;;;:::i;16592:659::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16592:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16592:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12658:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12658:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12658:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13392:964;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13392:964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9067:93::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9067:93:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9067:93:0;-1:-1:-1;;;;;9067:93:0;;:::i;24325:1034::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24325:1034:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24325:1034:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24325:1034:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24325:1034:0;;-1:-1:-1;24325:1034:0;-1:-1:-1;;;;;;24325:1034:0;;;;;;;;:::i;15240:673::-;15477:16;15495:14;15458:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;15549:196:::1;15579:5;15599:4;15618:9;15642:14;15671:12;15706:4;15726:8;15549:15;:196::i;:::-;15522:223:::0;;-1:-1:-1;15522:223:0;-1:-1:-1;15756:51:0::1;15784:5:::0;15791:2;15522:223;15756:27:::1;:51::i;:::-;15824:4;-1:-1:-1::0;;;;;15818:20:0::1;;15839:9;15818:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15818:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15818:31:0;;;;15860:45;15891:2;15895:9;15860:30;:45::i;:::-;15240:673:::0;;;;;;;;;;:::o;30084:257::-;30237:14;30276:57;30301:8;30311:9;30322:10;30276:24;:57::i;:::-;30269:64;30084:257;-1:-1:-1;;;;30084:257:0:o;23245:1074::-;23459:21;23431:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23531:4:0::1;23506:29;:4:::0;;-1:-1:-1;;23511:15:0;;23506:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;23506:21:0::1;-1:-1:-1::0;;;;;23506:29:0::1;;23498:66;;;::::0;;-1:-1:-1;;;23498:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;23498:66:0;;;;;;;;;;;;;::::1;;23612:5;23610:1;23601:10:::0;::::1;:16;23639:64;23665:7;23674:22;23601:10:::0;:16;23674:12:::1;:22::i;:::-;23698:4;;23639:64;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23639:25:0::1;::::0;-1:-1:-1;;;23639:64:0:i:1;:::-;23629:74;;23753:12;23722:7;23747:1;23730:7;:14;:18;23722:27;;;;;;;;;;;;;;:43;;23714:94;;;;-1:-1:-1::0;;;23714:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23819:136;23865:4;;23870:1;23865:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23865:7:0::1;23874:10;23886:46;23906:7;23915:4;;23920:1;23915:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23915:7:0::1;23924:4;;23929:1;23924:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23924:7:0::1;23886:19;:46::i;:::-;23934:7;23942:1;23934:10;;;;;;;;;;;;;;23819:31;:136::i;:::-;23966:35;23972:7;23981:4;;23966:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23995:4:0::1;::::0;-1:-1:-1;23966:5:0::1;::::0;-1:-1:-1;;23966:35:0:i:1;:::-;24018:4;-1:-1:-1::0;;;;;24012:20:0::1;;24033:7;24058:1;24041:7;:14;:18;24033:27;;;;;;;;;;;;;;24012:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24012:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24012:49:0;;;;24072:63;24103:2;24107:7;24132:1;24115:7;:14;:18;24107:27;;;;;;;;;;;;;;24072:30;:63::i;:::-;24146:54;24163:10;24175:4;;24180:1;24175:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24175:7:0::1;24185:8;24195:4;;24146:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24146:15:0::1;::::0;-1:-1:-1;;;24146:54:0:i:1;:::-;24211:100;24234:46;24254:7;24263:4;;24268:1;24263:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24263:7:0::1;24272:4;;24277:1;24272:7;;;;;;24234:46;24281:4;;24286:1;24281:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24281:7:0::1;24289:10;24300:7;24308:1;24300:10;;;;;;;;;;;;;;24211:22;:100::i;:::-;8710:1;23245:1074:::0;;;;;;;;;:::o;30869:248::-;31013:21;31059:50;31084:7;31093:9;31104:4;31059:24;:50::i;:::-;31052:57;;30869:248;;;;;:::o;15919:667::-;16225:12;16239;16264;16279:44;16299:7;16308:6;16316;16279:19;:44::i;:::-;16264:59;;16334:10;16347;:33;;16371:9;16347:33;;;-1:-1:-1;;16347:33:0;16391:75;;;-1:-1:-1;;;16391:75:0;;16414:10;16391:75;;;;16434:4;16391:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16334:46;;-1:-1:-1;;;;;;16391:22:0;;;;;:75;;;;;-1:-1:-1;;16391:75:0;;;;;;;;-1:-1:-1;16391:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;16391:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16391:75:0;;;;16498:80;16514:6;16522;16530:9;16541:10;16553;16565:2;16569:8;16498:15;:80::i;:::-;16477:101;;;;;;;;15919:667;;;;;;;;;;;;;;;;:::o;19576:846::-;19800:21;19781:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;19861:5:::1;19859:1;19850:10:::0;::::1;:16;19887:64;19913:7;19922:22;19850:10:::0;:16;19922:12:::1;:22::i;19887:64::-;19877:74;;20001:12;19970:7;19995:1;19978:7;:14;:18;19970:27;;;;;;;;;;;;;;:43;;19962:94;;;;-1:-1:-1::0;;;19962:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20067:136;20113:4;;20118:1;20113:7;;;;;;20067:136;20214:24;20220:7;20229:4;;20214:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20235:2:0;;-1:-1:-1;20214:5:0::1;::::0;-1:-1:-1;;20214:24:0:i:1;22186:1053::-:0;22400:21;22372:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22472:4:0::1;22447:29;:4:::0;;-1:-1:-1;;22452:15:0;;22447:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;22447:21:0::1;-1:-1:-1::0;;;;;22447:29:0::1;;22439:66;;;::::0;;-1:-1:-1;;;22439:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22439:66:0;;;;;;;;;;;;;::::1;;22554:5;22552:1;22542:11:::0;::::1;:17;22581:64;22606:7;22615:23;22542:11:::0;:17;22615:13:::1;:23::i;:::-;22640:4;;22581:64;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22581:24:0::1;::::0;-1:-1:-1;;;22581:64:0:i:1;:::-;22571:74;;22678:11;22664:7;22672:1;22664:10;;;;;;;;;;;;;;:25;;22656:72;;;;-1:-1:-1::0;;;22656:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18036:708:::0;18354:14;18381:12;18396:41;18416:7;18425:5;18432:4;18396:19;:41::i;:::-;18381:56;;18448:10;18461;:33;;18485:9;18461:33;;;-1:-1:-1;;18461:33:0;18505:75;;;-1:-1:-1;;;18505:75:0;;18528:10;18505:75;;;;18548:4;18505:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:46;;-1:-1:-1;;;;;;18505:22:0;;;;;:75;;;;;-1:-1:-1;;18505:75:0;;;;;;;;-1:-1:-1;18505:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;18505:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18505:75:0;;;;18603:133;18665:5;18672:9;18683:14;18699:12;18713:2;18717:8;18603:47;:133::i;:::-;18591:145;18036:708;-1:-1:-1;;;;;;;;;;;;;18036:708:0:o;26702:960::-;26936:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;26994:5:::1;26992:1;26983:10:::0;::::1;:16;27011:148;27057:4:::0;;26967:13:::1;27057:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;27057:7:0::1;27066:10;27078:46;27098:7;27107:4;;27112:1;27107:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27107:7:0::1;27116:4;;27121:1;27116:7;;;;;;27078:46;27126:22;:8:::0;27139;27126:22:::1;:12;:22;:::i;:::-;27011:31;:148::i;:::-;27170:18;27198:4:::0;;-1:-1:-1;;27203:15:0;;27198:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27198:21:0::1;-1:-1:-1::0;;;;;27191:39:0::1;;27231:2;27191:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27191:43:0::1;-1:-1:-1::0;;;;;27191:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27191:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27191:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27191:43:0;27245:44:::1;::::0;;27191:43:::1;27245:44:::0;;::::1;::::0;;;;;;;;;;;27191:43;;-1:-1:-1;27245:44:0::1;::::0;;;27280:4;;;;;;27245:44;::::1;::::0;27280:4;;27245:44;27280:4;27245:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27286:2:0;;-1:-1:-1;27245:34:0::1;::::0;-1:-1:-1;;27245:44:0:i:1;:::-;27388:12:::0;27322:62:::1;27370:13:::0;27329:4;;-1:-1:-1;;27334:15:0;;27329:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27329:21:0::1;-1:-1:-1::0;;;;;27322:39:0::1;;27362:2;27322:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27322:43:0::1;-1:-1:-1::0;;;;;27322:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27322:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27322:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27322:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;27300:166;;;;-1:-1:-1::0;;;27300:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27477:54;27494:10;27506:4;;27511:1;27506:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27506:7:0::1;27516:8;27526:4;;27477:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27477:15:0::1;::::0;-1:-1:-1;;;27477:54:0:i:1;:::-;27542:112;27565:46;27585:7;27594:4;;27599:1;27594:7;;;;;;27565:46;27612:4;;27617:1;27612:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27612:7:0::1;27620:10;27631:22;27644:8;27631;:12;;:22;;;;:::i;:::-;27542;:112::i;:::-;8710:1;;26702:960:::0;;;;;;;:::o;9172:108::-;8765:5;;-1:-1:-1;;;;;8765:5:0;8774:10;8765:19;8757:28;;12:1:-1;9;2:12;8757:28:0;9246:13:::1;:26:::0;;-1:-1:-1;;;;;;9246:26:0::1;-1:-1:-1::0;;;;;9246:26:0;;;::::1;::::0;;;::::1;::::0;;9172:108::o;8502:25::-;;;-1:-1:-1;;;;;8502:25:0;;:::o;28765:1084::-;29032:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29091:4:0::1;29066:29;:4:::0;;-1:-1:-1;;29071:15:0;;29066:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29066:21:0::1;-1:-1:-1::0;;;;;29066:29:0::1;;29058:66;;;::::0;;-1:-1:-1;;;29058:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29058:66:0;;;;;;;;;;;;;::::1;;29172:5;29170:1;29161:10:::0;::::1;:16;29189:148;29235:4:::0;;29145:13:::1;29235:7:::0;::::1;;;29189:148;29348:55;29383:4;;29348:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29397:4:0::1;::::0;-1:-1:-1;29348:34:0::1;::::0;-1:-1:-1;;29348:55:0:i:1;:::-;29431:37;::::0;;-1:-1:-1;;;29431:37:0;;29462:4:::1;29431:37;::::0;::::1;::::0;;;29414:14:::1;::::0;-1:-1:-1;;;;;29438:4:0::1;29431:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29431:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29431:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29431:37:0;;-1:-1:-1;29487:25:0;;::::1;;29479:76;;;;-1:-1:-1::0;;;29479:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29572:4;-1:-1:-1::0;;;;;29566:20:0::1;;29587:9;29566:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29566:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29566:31:0;;;;29608:45;29639:2;29643:9;29608:30;:45::i;21259:921::-:0;21475:21;21447:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;21533:4:::1;-1:-1:-1::0;;;;;21522:15:0::1;:4;;21527:1;21522:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21522:7:0::1;-1:-1:-1::0;;;;;21522:15:0::1;;21514:52;;;::::0;;-1:-1:-1;;;21514:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21514:52:0;;;;;;;;;;;;;::::1;;21587:13;21615:5;21613:1;21603:9;:11;:17;::::0;-1:-1:-1;21642:65:0::1;21668:7;21677:23;:9;21603:17:::0;21677:23:::1;:13;:23;:::i;21642:65::-;21632:75;;21757:12;21726:7;21751:1;21734:7;:14;:18;21726:27;;;;;;;;;;;;;;:43;;21718:94;;;;-1:-1:-1::0;;;21718:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21829:4;-1:-1:-1::0;;;;;21823:19:0::1;;21850:9;21823:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21823:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21823:39:0;;;;;21886:4;-1:-1:-1::0;;;;;21880:20:0::1;;21901:46;21921:7;21930:4;;21935:1;21930:7;;;;;;21901:46;21949:7;21957:1;21949:10;;;;;;;;;;;;;;21880:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;21880:80:0::1;-1:-1:-1::0;;;;;21880:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21880:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21880:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21880:80:0;21873:88:::1;;;;21972:24;21978:7;21987:4;;21972:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21993:2:0;;-1:-1:-1;21972:5:0::1;::::0;-1:-1:-1;;21972:24:0:i:1;:::-;22007:54;22024:10;22036:4;;22041:1;22036:7;;;;;;22007:54;22072:100;22095:46;22115:7;22124:4;;22129:1;22124:7;;;;;;22072:100;8710:1;21259:921:::0;;;;;;;;:::o;30349:256::-;30502:13;30540:57;30564:9;30575;30586:10;30540:23;:57::i;20428:825::-;20652:21;20633:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;20714:5:::1;20712:1;20702:11:::0;::::1;:17;20740:64;20765:7;20774:23;20702:11:::0;:17;20774:13:::1;:23::i;20740:64::-;20730:74;;20837:11;20823:7;20831:1;20823:10;;;;;;;;;;;;;;:25;;20815:72;;;;-1:-1:-1::0;;;20815:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8561:28:::0;;;-1:-1:-1;;;;;8561:28:0;;:::o;8534:20::-;;;-1:-1:-1;;;;;8534:20:0;;:::o;8421:38::-;;;:::o;29893:183::-;29990:12;30022:46;30040:7;30049:8;30059;30022:17;:46::i;17330:700::-;17596:14;17577:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;17639:196:::1;17669:5;17689:4;17708:9;17732:14;17761:12;17796:4;17816:8;17639:15;:196::i;:::-;17885:38;::::0;;-1:-1:-1;;;17885:38:0;;17917:4:::1;17885:38;::::0;::::1;::::0;;;17623:212;;-1:-1:-1;17846:78:0::1;::::0;-1:-1:-1;17874:5:0;;17881:2;;-1:-1:-1;;;;;17885:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;17885:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17885:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17885:38:0;17846:27:::1;:78::i;:::-;17941:4;-1:-1:-1::0;;;;;17935:20:0::1;;17956:9;17935:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17935:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17935:31:0;;;;17977:45;18008:2;18012:9;17977:30;:45::i;:::-;17330:700:::0;;;;;;;;;:::o;27668:1091::-;27928:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;27973:4:::1;-1:-1:-1::0;;;;;27962:15:0::1;:4;;27967:1;27962:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27962:7:0::1;-1:-1:-1::0;;;;;27962:15:0::1;;27954:52;;;::::0;;-1:-1:-1;;;27954:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27954:52:0;;;;;;;;;;;;;::::1;;28027:13;28043:9;28027:25;;28069:4;-1:-1:-1::0;;;;;28063:19:0::1;;28090:8;28063:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28063:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28063:38:0;;;;;28112:13;28139:5;28128:8;28137:1;28128:10;:16;;;;;;28112:32;;28169:4;-1:-1:-1::0;;;;;28163:20:0::1;;28184:46;28204:7;28213:4;;28218:1;28213:7;;;;;;28184:46;28232:22;:8:::0;28245;28232:22:::1;:12;:22;:::i;:::-;28163:92;;;;;;;;;;;;;-1:-1:-1::0;;;;;28163:92:0::1;-1:-1:-1::0;;;;;28163:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28163:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28163:92:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28163:92:0;28156:100:::1;;;;28267:18;28295:4:::0;;-1:-1:-1;;28300:15:0;;28295:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28295:21:0::1;-1:-1:-1::0;;;;;28288:39:0::1;;28328:2;28288:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28288:43:0::1;-1:-1:-1::0;;;;;28288:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28288:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28288:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28288:43:0;28342:44:::1;::::0;;28288:43:::1;28342:44:::0;;::::1;::::0;;;;;;;;;;;28288:43;;-1:-1:-1;28342:44:0::1;::::0;;;28377:4;;;;;;28342:44;::::1;::::0;28377:4;;28342:44;28377:4;28342:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28383:2:0;;-1:-1:-1;28342:34:0::1;::::0;-1:-1:-1;;28342:44:0:i:1;:::-;28485:12:::0;28419:62:::1;28467:13:::0;28426:4;;-1:-1:-1;;28431:15:0;;28426:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28426:21:0::1;-1:-1:-1::0;;;;;28419:39:0::1;;28459:2;28419:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28419:43:0::1;-1:-1:-1::0;;;;;28419:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;28419:62:0;:78;;28397:166;;;;-1:-1:-1::0;;;28397:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28574:54;28591:10;28603:4;;28608:1;28603:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28603:7:0::1;28613:8;28623:4;;28574:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28574:15:0::1;::::0;-1:-1:-1;;;28574:54:0:i:1;:::-;28639:112;28662:46;28682:7;28691:4;;28696:1;28691:7;;;;;;28662:46;28709:4;;28714:1;28709:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28709:7:0::1;28717:10;28728:22;28741:8;28728;:12;;:22;;;;:::i;14399:835::-:0;14653:12;14667;14634:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;14692:12:::1;14707:44;14727:7;14736:6;14744;14707:19;:44::i;:::-;14762:57;::::0;;-1:-1:-1;;;14762:57:0;;14791:10:::1;14762:57;::::0;::::1;::::0;-1:-1:-1;;;;;14762:28:0;::::1;:57:::0;;;;;;;;;;;;;;14692:59;;-1:-1:-1;14762:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;14762:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14762:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14762:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;14887:24:0::1;::::0;;-1:-1:-1;;;14887:24:0;;-1:-1:-1;;;;;14887:24:0;;::::1;;::::0;::::1;::::0;;;14857:12:::1;::::0;;;14887:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;14857:12;14887:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14887:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14887:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14887:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14887:24:0;-1:-1:-1;14923:14:0::1;14942:38;14965:6:::0;14973;14942:22:::1;:38::i;:::-;14922:58;;;15022:6;-1:-1:-1::0;;;;;15012:16:0::1;:6;-1:-1:-1::0;;;;;15012:16:0::1;;:58;;15053:7;15062;15012:58;;;15032:7;15041;15012:58;14991:79:::0;;-1:-1:-1;14991:79:0;-1:-1:-1;15089:21:0;;::::1;;15081:67;;;;-1:-1:-1::0;;;15081:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15178:10;15167:7;:21;;15159:67;;;;-1:-1:-1::0;;;15159:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8710:1;;;;14399:835:::0;;;;;;;;;;;:::o;8373:41::-;;;:::o;30613:248::-;30757:21;30803:50;30829:7;30838:8;30848:4;30803:25;:50::i;8466:29::-;;;-1:-1:-1;;;;;8466:29:0;;:::o;16592:659::-;16881:16;16899:14;16926:12;16941:41;16961:7;16970:5;16977:4;16941:19;:41::i;:::-;16926:56;;16993:10;17006;:33;;17030:9;17006:33;;;-1:-1:-1;;17006:33:0;17050:75;;;-1:-1:-1;;;17050:75:0;;17073:10;17050:75;;;;17093:4;17050:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16993:46;;-1:-1:-1;;;;;;17050:22:0;;;;;:75;;;;;-1:-1:-1;;17050:75:0;;;;;;;;-1:-1:-1;17050:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;17050:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17050:75:0;;;;17163:80;17182:5;17189:9;17200:14;17216:12;17230:2;17234:8;17163:18;:80::i;:::-;17136:107;;;;-1:-1:-1;16592:659:0;-1:-1:-1;;;;;;;;;;;;;16592:659:0:o;12658:728::-;12946:12;12960;12974:14;12927:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;13022:85:::1;13036:6;13044;13052:14;13068;13084:10;13096;13022:13;:85::i;:::-;13001:106:::0;;-1:-1:-1;13001:106:0;-1:-1:-1;13118:12:0::1;13133:44;13153:7;13162:6:::0;13170;13133:19:::1;:44::i;:::-;13118:59;;13188:66;13220:6;13228:10;13240:4;13246:7;13188:31;:66::i;:::-;13265;13297:6;13305:10;13317:4;13323:7;13265:31;:66::i;:::-;13364:4;-1:-1:-1::0;;;;;13354:20:0::1;;13375:2;13354:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;13354:24:0::1;-1:-1:-1::0;;;;;13354:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13354:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13354:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13354:24:0;12658:728;;;;-1:-1:-1;13354:24:0;;-1:-1:-1;12658:728:0;;-1:-1:-1;;;;;;;;;12658:728:0:o;13392:964::-;13645:16;13663:14;13679;13626:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;13733:176:::1;13761:5;13781:4;13800:18;13833:9;13857:14;13886:12;13733:13;:176::i;:::-;13706:203:::0;;-1:-1:-1;13706:203:0;-1:-1:-1;13920:12:0::1;13935:41;13955:7;13964:5:::0;13971:4:::1;13935:19;:41::i;:::-;13920:56;;13987:69;14019:5;14026:10;14038:4;14044:11;13987:31;:69::i;:::-;14073:4;-1:-1:-1::0;;;;;14067:19:0::1;;14094:9;14067:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14067:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14067:39:0;;;;;14130:4;-1:-1:-1::0;;;;;14124:20:0::1;;14145:4;14151:9;14124:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;14124:37:0::1;-1:-1:-1::0;;;;;14124:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14124:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14124:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14124:37:0;14117:45:::1;;;;14195:4;-1:-1:-1::0;;;;;14185:20:0::1;;14206:2;14185:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;14185:24:0::1;-1:-1:-1::0;;;;;14185:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14185:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14185:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14185:24:0;;-1:-1:-1;14260:9:0::1;:21:::0;-1:-1:-1;14256:92:0::1;;;14283:65;14314:10;14338:9;14326;:21;14283:30;:65::i;:::-;8710:1;13392:964:::0;;;;;;;;;;;:::o;9067:93::-;8765:5;;-1:-1:-1;;;;;8765:5:0;8774:10;8765:19;8757:28;;12:1:-1;9;2:12;8757:28:0;9135:5:::1;:17:::0;;-1:-1:-1;;;;;;9135:17:0::1;-1:-1:-1::0;;;;;9135:17:0;;;::::1;::::0;;;::::1;::::0;;9067:93::o;24325:1034::-;24538:21;24510:8;8660:15;8648:8;:27;;8640:59;;;;;-1:-1:-1;;;8640:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8640:59:0;;;;;;;;;;;;;;;24596:4:::1;-1:-1:-1::0;;;;;24585:15:0::1;:4;;24590:1;24585:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24585:7:0::1;-1:-1:-1::0;;;;;24585:15:0::1;;24577:52;;;::::0;;-1:-1:-1;;;24577:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24577:52:0;;;;;;;;;;;;;::::1;;24678:5;24676:1;24666:11:::0;::::1;:17;24705:64;24730:7;24739:23;24666:11:::0;:17;24739:13:::1;:23::i;24705:64::-;24695:74;;24802:9;24788:7;24796:1;24788:10;;;;;;;;;;;;;;:23;;24780:70;;;;-1:-1:-1::0;;;24780:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24867:4;-1:-1:-1::0;;;;;24861:19:0::1;;24888:9;24861:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24861:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24861:39:0;;;;;24924:4;-1:-1:-1::0;;;;;24918:20:0::1;;24939:46;24959:7;24968:4;;24973:1;24968:7;;;;;;24939:46;24987:7;24995:1;24987:10;;;;;;;;;;;;;;24918:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;24918:80:0::1;-1:-1:-1::0;;;;;24918:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24918:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24918:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24918:80:0;24911:88:::1;;;;25010:24;25016:7;25025:4;;25010:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25031:2:0;;-1:-1:-1;25010:5:0::1;::::0;-1:-1:-1;;25010:24:0:i:1;:::-;25097:7;25105:1;25097:10;;;;;;;;;;;;;;25085:9;:22;25081:94;;;25109:66;25140:10;25164:7;25172:1;25164:10;;;;;;;;;;;;;;25152:9;:22;25109:30;:66::i;36970:361::-:0;37165:45;;;-1:-1:-1;;;;;37165:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37165:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;37154:57:0;;;;37119:12;;37133:17;;37154:10;;;;37165:45;37154:57;;;25:18:-1;37154:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;37154:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;37118:93:0;;;;37230:7;:57;;;;-1:-1:-1;37242:11:0;;:16;;:44;;;37273:4;37262:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37262:24:0;37242:44;37222:101;;;;;-1:-1:-1;;;37222:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36970:361;;;;;:::o;37749:195::-;37857:12;;;37819;37857;;;;;;;;;-1:-1:-1;;;;;37836:7:0;;;37850:5;;37836:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;37836:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;37818:52:0;;;37889:7;37881:55;;;;-1:-1:-1;;;37881:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37749:195;;;:::o;34165:509::-;34258:14;34304:1;34293:8;:12;34285:63;;;;-1:-1:-1;;;34285:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34379:1;34367:9;:13;:31;;;;;34397:1;34384:10;:14;34367:31;34359:79;;;;-1:-1:-1;;;34359:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34449:20;34472:18;:8;34485:4;34472:18;:12;:18;:::i;:::-;34449:41;-1:-1:-1;34501:14:0;34518:31;34449:41;34538:10;34518:31;:19;:31;:::i;:::-;34501:48;-1:-1:-1;34560:16:0;34579:41;34604:15;34579:20;:9;34593:5;34579:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;34560:60;;34655:11;34643:9;:23;;;;;;;34165:509;-1:-1:-1;;;;;;;34165:509:0:o;31392:129::-;31476:5;;;31471:16;;;;31463:50;;;;;-1:-1:-1;;;31463:50:0;;;;;;;;;;;;-1:-1:-1;;;31463:50:0;;;;;;;;;;;;;;35341:506;35442:21;35499:1;35484:4;:11;:16;;35476:54;;;;;-1:-1:-1;;;35476:54:0;;;;;;;;;;;;-1:-1:-1;;;35476:54:0;;;;;;;;;;;;;;;35562:4;:11;35551:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35551:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;35551:23:0;;35541:33;;35598:8;35585:7;35593:1;35585:10;;;;;;;;;;;;;:21;;;;;35622:6;35617:223;35648:1;35634:4;:11;:15;35630:1;:19;35617:223;;;35672:14;35688:15;35707:42;35719:7;35728:4;35733:1;35728:7;;;;;;;;;;;;;;35737:4;35742:1;35746;35742:5;35737:11;;;;;;;;;;;;;;35707;:42::i;:::-;35671:78;;;;35781:47;35794:7;35802:1;35794:10;;;;;;;;;;;;;;35806:9;35817:10;35781:12;:47::i;:::-;35764:7;35772:1;35776;35772:5;35764:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;35651:3:0;;35617:223;;;;35341:506;;;;;:::o;32697:478::-;32786:12;32812:14;32828;32846:26;32857:6;32865;32846:10;:26::i;:::-;33010:32;;;-1:-1:-1;;33010:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;33010:32:0;;;;;33000:43;;;;;;-1:-1:-1;;;;;;32913:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32913:251:0;;;;;;;32903:262;;;;;;;;;32697:478;-1:-1:-1;;;;;32697:478:0:o;37339:402::-;37564:51;;;-1:-1:-1;;;;;37564:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37564:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;37553:63:0;;;;37518:12;;37532:17;;37553:10;;;;37564:51;37553:63;;;25:18:-1;37553:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;37553:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;37517:99:0;;;;37635:7;:57;;;;-1:-1:-1;37647:11:0;;:16;;:44;;;37678:4;37667:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37667:24:0;37647:44;37627:106;;;;-1:-1:-1;;;37627:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37339:402;;;;;;:::o;18855:715::-;18962:6;18957:606;18988:1;18974:4;:11;:15;18970:1;:19;18957:606;;;19012:13;19027:14;19046:4;19051:1;19046:7;;;;;;;;;;;;;;19055:4;19060:1;19064;19060:5;19055:11;;;;;;;;;;;;;;19011:56;;;;19083:14;19102:37;19125:5;19132:6;19102:22;:37::i;:::-;19082:57;;;19154:14;19171:7;19179:1;19183;19179:5;19171:14;;;;;;;;;;;;;;19154:31;;19201:15;19218;19246:6;-1:-1:-1;;;;;19237:15:0;:5;-1:-1:-1;;;;;19237:15:0;;:61;;19279:9;19295:1;19237:61;;;19261:1;19265:9;19237:61;19200:98;;;;19313:10;19344:1;19330:4;:11;:15;19326:1;:19;:77;;19400:3;19326:77;;;19348:49;19368:7;19377:6;19385:4;19390:1;19394;19390:5;19385:11;;;;;;;;;;;;;;19348:19;:49::i;:::-;19313:90;;19428:43;19448:7;19457:5;19464:6;19428:19;:43::i;:::-;-1:-1:-1;;;;;19418:59:0;;19496:10;19508;19520:2;19534:1;19524:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;19524:12:0;87:42:-1;143:17;;-1:-1;19524:12:0;;19418:133;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19418:133:0;-1:-1:-1;;;;;19418:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19418:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19418:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18991:3:0;;;;;-1:-1:-1;18957:606:0;;-1:-1:-1;;;;;;;;18957:606:0;;;18855:715;;;:::o;9989:1263::-;10143:4;-1:-1:-1;;;;;10135:12:0;:6;-1:-1:-1;;;;;10135:12:0;;;:36;;;;-1:-1:-1;10161:10:0;;-1:-1:-1;;;;;10151:20:0;;;10161:10;;10151:20;;10135:36;10132:410;;;10197:4;10187;10192:1;10187:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;10187:14:0;;;-1:-1:-1;;;;;10187:14:0;;;;;10216:21;10240:49;10266:7;10275;10284:4;10240:25;:49::i;:::-;10216:73;;10304:145;10358:6;10366:7;10375:46;10395:7;10404:4;10409:1;10404:7;;;;;;;;;;;;;;10413:4;10418:1;10413:7;;;;;;;10375:46;10423:7;10304:31;:145::i;:::-;10464:38;10471:7;10481:4;10496;10464:5;:38::i;:::-;10526:4;10517:13;;10132:410;;10565:4;-1:-1:-1;;;;;10555:14:0;:6;-1:-1:-1;;;;;10555:14:0;;10552:397;;;10595:4;10585;10590:1;10585:7;;;;;;;;-1:-1:-1;;;;;10585:14:0;;;:7;;;;;;;;;:14;10624:10;;;10614:7;;10624:10;;;10614:4;;10624:10;10614:7;;;;;;;;;;;:20;-1:-1:-1;;;;;10614:20:0;;;-1:-1:-1;;;;;10614:20:0;;;;;10649:22;10674:79;10700:7;10716:4;-1:-1:-1;;;;;10709:22:0;;10740:4;10709:37;;;;;;;;;;;;;-1:-1:-1;;;;;10709:37:0;-1:-1:-1;;;;;10709:37:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10709:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10709:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10709:37:0;10748:4;10674:25;:79::i;:::-;10649:104;;10781:4;-1:-1:-1;;;;;10775:20:0;;10796:46;10816:7;10825:4;10830:1;10825:7;;;;;;;;;;;;;;10834:4;10839:1;10834:7;;;;;;;10796:46;10844:37;;;-1:-1:-1;;;10844:37:0;;10875:4;10844:37;;;;;;-1:-1:-1;;;;;10851:4:0;10844:22;;;;:37;;;;;;;;;;;;;;:22;:37;;;2:2:-1;;;;27:1;24;17:12;2:2;10844:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10844:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10844:37:0;10775:107;;;-1:-1:-1;;;;;;10775:107:0;;;;;;;-1:-1:-1;;;;;10775:107:0;;;;;;;;;;;;;;;;;;;;10844:37;;10775:107;;;;;;;-1:-1:-1;10775:107:0;;;;2:2:-1;;;;27:1;24;17:12;2:2;10775:107:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10775:107:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10775:107:0;10768:115;;;;10898:39;10905:8;10916:4;10931;10898:5;:39::i;:::-;10552:397;;10972:10;;-1:-1:-1;;;;;10962:20:0;;;10972:10;;10962:20;10959:164;;;11069:14;;10998:113;;11052:6;;11060:7;;-1:-1:-1;;;;;11069:14:0;11085:7;10998:31;:113::i;:::-;11172:10;;;11184:14;11200:43;;;-1:-1:-1;;;11200:43:0;;11237:4;11200:43;;;;;;11143:101;;-1:-1:-1;;;;;11172:10:0;;;;11184:14;;11172:10;;11200:28;;:43;;;;;;;;;;;;;;;11172:10;11200:43;;;2:2:-1;;;;27:1;24;17:12;9427:550:0;9560:13;;9547:48;;;-1:-1:-1;;;9547:48:0;;;;9598:1;;-1:-1:-1;;;;;9560:13:0;;9547:46;;:48;;;;;;;;;;;;;;9560:13;9547:48;;;2:2:-1;;;;27:1;24;17:12;2:2;9547:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9547:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9547:48:0;:52;9539:61;;12:1:-1;9;2:12;9539:61:0;9622:4;-1:-1:-1;;;;;9614:12:0;:6;-1:-1:-1;;;;;9614:12:0;;9611:274;;9666:16;;;9680:1;9666:16;;;9642:21;9666:16;;;;;9642:21;9666:16;;;;;109:14:-1;9666:16:0;88:42:-1;144:17;;-1:-1;9666:16:0;9642:40;;9707:6;9697:4;9702:1;9697:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;9697:16:0;;;-1:-1:-1;;;;;9697:16:0;;;;;9738:4;9728;9733:1;9728:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;9728:14:0;;;-1:-1:-1;;;;;9728:14:0;;;;;9757:25;9785:49;9811:7;9820;9829:4;9785:25;:49::i;:::-;9757:77;;9859:11;9871:1;9859:14;;;;;;;;;;;;;;9849:24;;9611:274;;;9908:13;;9895:74;;;-1:-1:-1;;;9895:74:0;;-1:-1:-1;;;;;9895:74:0;;;;;;;;;;;;;;;;;;;;;;9908:13;;;;;9895:51;;:74;;;;;9908:13;;9895:74;;;;;;;9908:13;;9895:74;;;2:2:-1;;;;27:1;24;17:12;2:2;9895:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9895:74:0;;;;9427:550;;;;:::o;35928:527::-;36029:21;36086:1;36071:4;:11;:16;;36063:54;;;;;-1:-1:-1;;;36063:54:0;;;;;;;;;;;;-1:-1:-1;;;36063:54:0;;;;;;;;;;;;;;;36149:4;:11;36138:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36138:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;36138:23:0;;36128:33;;36202:9;36172:7;36197:1;36180:7;:14;:18;36172:27;;;;;;;;;;;;;;;;;:39;36236:11;;-1:-1:-1;;36236:15:0;36222:226;36253:5;;36222:226;;36281:14;36297:15;36316:42;36328:7;36337:4;36346:1;36342;:5;36337:11;;;;;;;;;;;;;;36350:4;36355:1;36350:7;;;;;;;36316:42;36280:78;;;;36390:46;36402:7;36410:1;36402:10;;;;;;;;;;;;;;36414:9;36425:10;36390:11;:46::i;:::-;36373:7;36385:1;36381;:5;36373:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;36260:3:0;36222:226;;25506:1184;25619:6;25614:1069;25645:1;25631:4;:11;:15;25627:1;:19;25614:1069;;;25669:13;25684:14;25703:4;25708:1;25703:7;;;;;;;;;;;;;;25712:4;25717:1;25721;25717:5;25712:11;;;;;;;;;;;;;;25668:56;;;;25740:14;25759:37;25782:5;25789:6;25759:22;:37::i;:::-;25739:57;;;25811:14;25838:43;25858:7;25867:5;25874:6;25838:19;:43::i;:::-;25811:71;;25897:16;25928:17;26016:13;26031;26049:4;-1:-1:-1;;;;;26049:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26049:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26049:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26049:18:0;;;;;;;-1:-1:-1;;;;;26015:52:0;;;;-1:-1:-1;26015:52:0;;-1:-1:-1;26083:17:0;;-1:-1:-1;;;;;26124:15:0;;;;;;;:61;;26166:8;26176;26124:61;;;26143:8;26153;26124:61;26082:103;;;;26214:56;26257:12;26221:5;-1:-1:-1;;;;;26214:23:0;;26246:4;26214:38;;;;;;;;;;;;;-1:-1:-1;;;;;26214:38:0;-1:-1:-1;;;;;26214:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;26214:56:0;26200:70;;26300:66;26325:11;26338:12;26352:13;26300:24;:66::i;:::-;26285:81;;25614:1069;;;;26397:15;26414;26442:6;-1:-1:-1;;;;;26433:15:0;:5;-1:-1:-1;;;;;26433:15:0;;:67;;26478:12;26497:1;26433:67;;;26457:1;26461:12;26433:67;26396:104;;;;26515:10;26546:1;26532:4;:11;:15;26528:1;:19;:77;;26602:3;26528:77;;;26550:49;26570:7;26579:6;26587:4;26592:1;26596;26592:5;26587:11;;;;;;;26550:49;26658:12;;;26668:1;26658:12;;;;;;;;;;-1:-1:-1;;;26620:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26620:51:0;;;;;;;;;;;;;;;;;;;;;;26515:90;;-1:-1:-1;26620:9:0;;;;;;26630:10;;26642;;26515:90;;26658:12;;26620:51;;;;;;;;26658:12;;26620:51;;;;26658:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26620:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26620:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25648:3:0;;;;;-1:-1:-1;25614:1069:0;;-1:-1:-1;;;;;;;;;;25614:1069:0;34795:464;34888:13;34934:1;34922:9;:13;34914:65;;;;-1:-1:-1;;;34914:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35010:1;34998:9;:13;:31;;;;;35028:1;35015:10;:14;34998:31;34990:79;;;;-1:-1:-1;;;34990:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35080:14;35097:35;35126:5;35097:24;:9;35111;35097:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;35080:52;-1:-1:-1;35143:16:0;35162:35;35192:4;35162:25;:10;35177:9;35162:25;:14;:25;:::i;:35::-;35143:54;;35219:32;35249:1;35232:11;35220:9;:23;;;;;;;35219:32;:29;:32;:::i;:::-;35208:43;34795:464;-1:-1:-1;;;;;;34795:464:0:o;33732:311::-;33814:12;33857:1;33847:7;:11;33839:56;;;;;-1:-1:-1;;;33839:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33925:1;33914:8;:12;:28;;;;;33941:1;33930:8;:12;33914:28;33906:76;;;;-1:-1:-1;;;33906:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34027:8;34003:21;:7;34015:8;34003:21;:11;:21;:::i;:::-;:32;;;;;;;33732:311;-1:-1:-1;;;;33732:311:0:o;32266:339::-;32341:14;32357;32402:6;-1:-1:-1;;;;;32392:16:0;:6;-1:-1:-1;;;;;32392:16:0;;;32384:61;;;;;-1:-1:-1;;;32384:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32484:6;-1:-1:-1;;;;;32475:15:0;:6;-1:-1:-1;;;;;32475:15:0;;:53;;32513:6;32521;32475:53;;;32494:6;32502;32475:53;32456:72;;-1:-1:-1;32456:72:0;-1:-1:-1;;;;;;32547:20:0;;32539:58;;;;;-1:-1:-1;;;32539:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32266:339;;;;;:::o;11297:1355::-;11610:45;;;-1:-1:-1;;;11610:45:0;;-1:-1:-1;;;;;11610:45:0;;;;;;;;;;;;;;;;11515:12;;;;;;11623:7;11610:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;11610:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11610:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11610:45:0;-1:-1:-1;;;;;11610:59:0;;11606:140;;;11686:48;;;-1:-1:-1;;;11686:48:0;;-1:-1:-1;;;;;11686:48:0;;;;;;;;;;;;;;;;11699:7;11686:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;11686:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;11686:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11686:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;11606:140:0;11757:13;11772;11789:48;11813:7;11822:6;11830;11789:23;:48::i;:::-;11756:81;;;;11852:8;11864:1;11852:13;:30;;;;-1:-1:-1;11869:13:0;;11852:30;11848:797;;;11921:14;;-1:-1:-1;11937:14:0;;-1:-1:-1;11848:797:0;;;11985:19;12007:53;12025:14;12041:8;12051;12007:17;:53::i;:::-;11985:75;;12097:14;12079;:32;12075:559;;12158:10;12140:14;:28;;12132:74;;;;-1:-1:-1;;;12132:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12247:14;;-1:-1:-1;12263:14:0;-1:-1:-1;12263:14:0;12075:559;;;12319:19;12341:53;12359:14;12375:8;12385;12341:17;:53::i;:::-;12319:75;;12438:14;12420;:32;;12413:40;;;;12498:10;12480:14;:28;;12472:74;;;;-1:-1:-1;;;12472:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12587:14;-1:-1:-1;12603:14:0;;-1:-1:-1;12075:559:0;11848:797;;11297:1355;;;;;;;;;;;:::o;31529:142::-;31581:6;31608;;;:30;;-1:-1:-1;;31623:5:0;;;31637:1;31632;31623:5;31632:1;31618:15;;;;;:20;31608:30;31600:63;;;;;-1:-1:-1;;;31600:63:0;;;;;;;;;;;;-1:-1:-1;;;31600:63:0;;;;;;;;;;;;;;31256:128;31340:5;;;31335:16;;;;31327:49;;;;;-1:-1:-1;;;31327:49:0;;;;;;;;;;;;-1:-1:-1;;;31327:49:0;;;;;;;;;;;;;;33233:386;33326:13;33341;33368:14;33387:26;33398:6;33406;33387:10;:26::i;:::-;33367:46;;;33425:13;33440;33468:32;33476:7;33485:6;33493;33468:7;:32::i;:::-;-1:-1:-1;;;;;33458:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33458:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33458:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33458:57:0;;;;;;;-1:-1:-1;;;;;33424:91:0;;;;-1:-1:-1;33424:91:0;;-1:-1:-1;;;;;;33549:16:0;;;;;;;:62;;33592:8;33602;33549:62;;;33569:8;33579;33549:62;33526:85;;;;-1:-1:-1;33233:386:0;-1:-1:-1;;;;;;;33233:386:0:o
Swarm Source
ipfs://774af0d8404fc91223e4ab92afe84c349a37f31ccc8bd826afe6a1de3d1edfda
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.