Overview
CRO Balance
CRO Value
Less Than $0.01 (@ $0.09/CRO)More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7444742 | 767 days ago | 133.66204596 CRO | ||||
7444742 | 767 days ago | 133.66204596 CRO | ||||
7444742 | 767 days ago | 1.20476556 CRO | ||||
7444742 | 767 days ago | 801.97227577 CRO | ||||
7444742 | 767 days ago | 803.17704134 CRO | ||||
7440439 | 767 days ago | 133.69472832 CRO | ||||
7440439 | 767 days ago | 133.69472832 CRO | ||||
7440439 | 767 days ago | 1.20506014 CRO | ||||
7440439 | 767 days ago | 802.16836996 CRO | ||||
7440439 | 767 days ago | 803.3734301 CRO | ||||
7440130 | 767 days ago | 133.67984799 CRO | ||||
7440130 | 767 days ago | 133.67984799 CRO | ||||
7440130 | 767 days ago | 1.20492602 CRO | ||||
7440130 | 767 days ago | 802.07908794 CRO | ||||
7440130 | 767 days ago | 803.28401396 CRO | ||||
7292155 | 777 days ago | 133.67608101 CRO | ||||
7292155 | 777 days ago | 133.67608101 CRO | ||||
7292155 | 777 days ago | 1.20489206 CRO | ||||
7292155 | 777 days ago | 802.05648606 CRO | ||||
7292155 | 777 days ago | 803.26137813 CRO | ||||
7115330 | 789 days ago | 133.74797519 CRO | ||||
7115330 | 789 days ago | 133.74797519 CRO | ||||
7115330 | 789 days ago | 1.20554008 CRO | ||||
7115330 | 789 days ago | 802.48785114 CRO | ||||
7115330 | 789 days ago | 803.69339122 CRO |
Loading...
Loading
Contract Name:
SphynxRewardFeeRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-14 */ pragma solidity =0.6.6; interface ISphynxFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setSwapFee(address _pair, uint32 _swapFee) external; } interface ISphynxRouter01 { 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, uint swapFee) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) 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 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 ISphynxRouter is ISphynxRouter01 { 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; } library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } 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'); } } interface ISphynxPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function 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; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function 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 swapFee() external view returns (uint32); 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; function setSwapFee(uint32) external; } library SphynxLibrary { 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, 'SphynxLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'SphynxLibrary: 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'f2af0069c0bb54e0ac59b7e6bcad73e52f364682907e1b7046ae718d0edb7c2a' // INIT_CODE_PAIR_HASH of Sphynx Factory )))); } function getSwapFee(address factory, address tokenA, address tokenB) internal view returns (uint swapFee) { swapFee = ISphynxPair(pairFor(factory, tokenA, tokenB)).swapFee(); } // 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); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = ISphynxPair(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, 'SphynxLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'SphynxLibrary: 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, uint swapFee) internal pure returns (uint amountOut) { require(amountIn > 0, 'SphynxLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'SphynxLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(uint(1000).sub(swapFee)); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).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, uint swapFee) internal pure returns (uint amountIn) { require(amountOut > 0, 'SphynxLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'SphynxLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(uint(1000).sub(swapFee)); 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, 'SphynxLibrary: 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, getSwapFee(factory, path[i], path[i + 1])); } } // 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, 'SphynxLibrary: 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, getSwapFee(factory, path[i - 1], path[i])); } } } contract SphynxRewardFeeRouter is ISphynxRouter { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public swapfeeSetter; uint256 swapFee = 15; // 0.15% swap fee default modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'SphynxRouter: EXPIRED'); _; } constructor(address _factory, address _WETH, address _feeSetter) public { factory = _factory; WETH = _WETH; swapfeeSetter = _feeSetter; } function updateSwapFee(uint256 _swapFee) external { require(msg.sender == swapfeeSetter, "SphynxRouter: UNABLE To SET FEE"); swapFee = _swapFee; } function updateSwapFeeSettor(address _swapFeeSetter) external { require(msg.sender == swapfeeSetter, "SphynxRouter: Not Fee Setter"); swapfeeSetter = _swapFeeSetter; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** 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 (ISphynxFactory(factory).getPair(tokenA, tokenB) == address(0)) { ISphynxFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = SphynxLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = SphynxLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'SphynxRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = SphynxLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'SphynxRouter: 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 = SphynxLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = ISphynxPair(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 = SphynxLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = ISphynxPair(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 = SphynxLibrary.pairFor(factory, tokenA, tokenB); ISphynxPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = ISphynxPair(pair).burn(to); (address token0,) = SphynxLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'SphynxRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'SphynxRouter: 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 = SphynxLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; ISphynxPair(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 = SphynxLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; ISphynxPair(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 = SphynxLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; ISphynxPair(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,) = SphynxLibrary.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 ? SphynxLibrary.pairFor(factory, output, path[i + 2]) : _to; ISphynxPair(SphynxLibrary.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) { amounts = SphynxLibrary.getAmountsOut(factory, amountIn * (10000 - swapFee) / 10000, path); // 0.15% swap fee require(amounts[amounts.length - 1] >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); TransferHelper.safeTransferFrom(path[0], msg.sender, ISphynxFactory(factory).feeTo(), amounts[0] * swapFee / 10000); // 0.15% default swap fee(withdraw at once) _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = SphynxLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] * (10000 + swapFee) / 10000 <= amountInMax, 'SphynxRouter: EXCESSIVE_INPUT_AMOUNT'); // 0.15% default swap fee check TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); TransferHelper.safeTransferFrom(path[0], msg.sender, ISphynxFactory(factory).feeTo(), amounts[0] * swapFee / 10000); // 0.15% default swap fee _swap(amounts, path, to); } 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, 'SphynxRouter: INVALID_PATH'); amounts = SphynxLibrary.getAmountsOut(factory, msg.value * (10000 - swapFee) / 10000, path); // 0.15% swap fee default require(amounts[amounts.length - 1] >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(SphynxLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), msg.value * swapFee / 10000); // 0.15% swap fee default(withdraw at once) } 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, 'SphynxRouter: INVALID_PATH'); amounts = SphynxLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'SphynxRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.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] * (10000 - swapFee) / 10000); // 0.15% swap fee default TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), amounts[amounts.length - 1] * swapFee / 10000); // 0.15% swap fee default(withdraw at once) } 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, 'SphynxRouter: INVALID_PATH'); amounts = SphynxLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.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] * (10000 - swapFee) / 10000); // 0.15% swap fee default TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), amounts[amounts.length - 1] * swapFee / 10000); // 0.15% swap fee default(withdraw at once) } 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, 'SphynxRouter: INVALID_PATH'); amounts = SphynxLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] * (10000 + swapFee) / 10000 <= msg.value, 'SphynxRouter: EXCESSIVE_INPUT_AMOUNT'); // swap fee check IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(SphynxLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), amounts[0] * swapFee / 10000); // 0.15% swap fee(withdraw at once) // refund dust eth, if any if (msg.value > amounts[0] * (10000 + swapFee) / 10000) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0] * (10000 + swapFee) / 10000); // 0.15% swap fee } // **** 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,) = SphynxLibrary.sortTokens(input, output); ISphynxPair pair = ISphynxPair(SphynxLibrary.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 = SphynxLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, pair.swapFee()); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? SphynxLibrary.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) { TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.pairFor(factory, path[0], path[1]), amountIn * (10000 - swapFee) / 10000 ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); TransferHelper.safeTransferFrom( path[0], msg.sender, ISphynxFactory(factory).feeTo(), amountIn * swapFee / 10000 ); // 0.15% default swap fee(withdraw at once) } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'SphynxRouter: INVALID_PATH'); uint amountIn = msg.value * (10000 - swapFee) / 10000; //0.15% swap fee default IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(SphynxLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), msg.value * swapFee / 10000); // 0.15% swap fee default(withdraw at once) } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, 'SphynxRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, SphynxLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'SphynxRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut * (10000 - swapFee) / 10000); //0.15% swap fee default TransferHelper.safeTransferETH(ISphynxFactory(factory).feeTo(), amountOut * swapFee / 10000); // 0.15% swap fee default(withdraw at once) } // **** LIBRARY FUNCTIONS **** function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return SphynxLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint _swapFee) public pure virtual override returns (uint amountOut) { return SphynxLibrary.getAmountOut(amountIn, reserveIn, reserveOut, _swapFee); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint _swapFee) public pure virtual override returns (uint amountIn) { return SphynxLibrary.getAmountIn(amountOut, reserveIn, reserveOut, _swapFee); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return SphynxLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return SphynxLibrary.getAmountsIn(factory, amountOut, path); } function withdrawToken(address _token) external { require(msg.sender == ISphynxFactory(factory).feeTo(), "permission-denied"); IERC20 token = IERC20(_token); TransferHelper.safeTransfer(_token, msg.sender, token.balanceOf(address(this))); } function withdrawNativeCoin() external payable { require(msg.sender == ISphynxFactory(factory).feeTo(), "permission-denied"); address payable msgSender = payable(msg.sender); msgSender.transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_feeSetter","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":"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"},{"internalType":"uint256","name":"_swapFee","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"},{"internalType":"uint256","name":"_swapFee","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":[{"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":[{"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"},{"inputs":[],"name":"swapfeeSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapFee","type":"uint256"}],"name":"updateSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapFeeSetter","type":"address"}],"name":"updateSwapFeeSettor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNativeCoin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600f60015534801561001557600080fd5b50604051620052ed380380620052ed8339818101604052606081101561003a57600080fd5b5080516020820151604090920151606082811b6001600160601b03199081166080529084901b1660a052600080546001600160a01b0319166001600160a01b0392831617815591811692169061511390620001da9039806101d65280610e145280610e4f5280610f31528061114f5280611702528061188d5280611d155280611e575280611f0d528061207e528061219d5280612225528061276352806127e65280612864528061293052806129d85280612a4c528061304752806132ba5280613310528061334452806133b8528061355852806136ae5280613736525080610fbf5280611096528061121b52806112ca528061130352806114ce52806115c55280611790528061186b52806119db5280611c2c5280611dc45280611fa552806121115280612257528061235d5280612443528061250652806126605280612a7e5280612ccb5280612d705280612fcc5280612ff55280613025528061319252806132ee52806135eb5280613768528061386e52806140005280614043528061454e52806147385280614a785280614b265280614ba652506151136000f3fe6080604052600436106101c65760003560e01c80638803dbee116100f7578063baa2abde11610095578063ded9382a11610064578063ded9382a14610c0a578063e8e3370014610c7d578063f305d71914610cfd578063fb3bdb4114610d43576101ff565b8063baa2abde14610ab9578063bf16f65a14610b16578063c45a015514610b40578063d06ca61f14610b55576101ff565b8063ad5c4648116100d1578063ad5c464814610997578063ad615dec146109ac578063af2979eb146109e2578063b6f9de9514610a35576101ff565b80638803dbee146108c6578063894760691461095c57806389f6457f1461098f576101ff565b80634a25d94a116101645780635b0d59841161013e5780635b0d5984146106a35780635c11d79514610716578063791ac947146107ac5780637ff36ab514610842576101ff565b80634a25d94a1461058357806352707d8c14610619578063571fd01214610667576101ff565b80632195995c116101a05780632195995c1461040b5780632d5cbba814610489578063307d033e146104bc57806338ed1739146104ed576101ff565b806302751cec1461020457806318cbafe5146102705780631f00ca7414610356576101ff565b366101ff57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101fd57fe5b005b600080fd5b34801561021057600080fd5b50610257600480360360c081101561022757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dc7565b6040805192835260208301919091528051918290030190f35b34801561027c57600080fd5b50610306600480360360a081101561029357600080fd5b813591602081013591810190606081016040820135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b91935091506001600160a01b038135169060200135610ee1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034257818101518382015260200161032a565b505050509050019250505060405180910390f35b34801561036257600080fd5b506103066004803603604081101561037957600080fd5b81359190810190604081016020820135600160201b81111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460208302840111600160201b831117156103cd57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112c3945050505050565b34801561041757600080fd5b50610257600480360361016081101561042f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356112f9565b34801561049557600080fd5b506101fd600480360360208110156104ac57600080fd5b50356001600160a01b03166113f3565b3480156104c857600080fd5b506104d1611474565b604080516001600160a01b039092168252519081900360200190f35b3480156104f957600080fd5b50610306600480360360a081101561051057600080fd5b813591602081013591810190606081016040820135600160201b81111561053657600080fd5b82018360208201111561054857600080fd5b803590602001918460208302840111600160201b8311171561056957600080fd5b91935091506001600160a01b038135169060200135611483565b34801561058f57600080fd5b50610306600480360360a08110156105a657600080fd5b813591602081013591810190606081016040820135600160201b8111156105cc57600080fd5b8201836020820111156105de57600080fd5b803590602001918460208302840111600160201b831117156105ff57600080fd5b91935091506001600160a01b0381351690602001356116b2565b34801561062557600080fd5b506106556004803603608081101561063c57600080fd5b508035906020810135906040810135906060013561183e565b60408051918252519081900360200190f35b34801561067357600080fd5b506106556004803603608081101561068a57600080fd5b5080359060208101359060408101359060600135611855565b3480156106af57600080fd5b5061065560048036036101408110156106c757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611863565b34801561072257600080fd5b506101fd600480360360a081101561073957600080fd5b813591602081013591810190606081016040820135600160201b81111561075f57600080fd5b82018360208201111561077157600080fd5b803590602001918460208302840111600160201b8311171561079257600080fd5b91935091506001600160a01b038135169060200135611971565b3480156107b857600080fd5b506101fd600480360360a08110156107cf57600080fd5b813591602081013591810190606081016040820135600160201b8111156107f557600080fd5b82018360208201111561080757600080fd5b803590602001918460208302840111600160201b8311171561082857600080fd5b91935091506001600160a01b038135169060200135611cc7565b6103066004803603608081101561085857600080fd5b81359190810190604081016020820135600160201b81111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460208302840111600160201b831117156108ac57600080fd5b91935091506001600160a01b038135169060200135612036565b3480156108d257600080fd5b50610306600480360360a08110156108e957600080fd5b813591602081013591810190606081016040820135600160201b81111561090f57600080fd5b82018360208201111561092157600080fd5b803590602001918460208302840111600160201b8311171561094257600080fd5b91935091506001600160a01b0381351690602001356123f8565b34801561096857600080fd5b506101fd6004803603602081101561097f57600080fd5b50356001600160a01b0316612504565b6101fd61265e565b3480156109a357600080fd5b506104d1612761565b3480156109b857600080fd5b50610655600480360360608110156109cf57600080fd5b5080359060208101359060400135612785565b3480156109ee57600080fd5b50610655600480360360c0811015610a0557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561279a565b6101fd60048036036080811015610a4b57600080fd5b81359190810190604081016020820135600160201b811115610a6c57600080fd5b820183602082011115610a7e57600080fd5b803590602001918460208302840111600160201b83111715610a9f57600080fd5b91935091506001600160a01b0381351690602001356128ea565b348015610ac557600080fd5b50610257600480360360e0811015610adc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d22565b348015610b2257600080fd5b506101fd60048036036020811015610b3957600080fd5b5035612f66565b348015610b4c57600080fd5b506104d1612fca565b348015610b6157600080fd5b5061030660048036036040811015610b7857600080fd5b81359190810190604081016020820135600160201b811115610b9957600080fd5b820183602082011115610bab57600080fd5b803590602001918460208302840111600160201b83111715610bcc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612fee945050505050565b348015610c1657600080fd5b506102576004803603610140811015610c2e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561301b565b348015610c8957600080fd5b50610cdf6004803603610100811015610ca157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561312f565b60408051938452602084019290925282820152519081900360600190f35b610cdf600480360360c0811015610d1357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561326b565b61030660048036036080811015610d5957600080fd5b81359190810190604081016020820135600160201b811115610d7a57600080fd5b820183602082011115610d8c57600080fd5b803590602001918460208302840111600160201b83111715610dad57600080fd5b91935091506001600160a01b038135169060200135613510565b6000808242811015610e0e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b610e3d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d22565b9093509150610e4d898685613968565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eb357600080fd5b505af1158015610ec7573d6000803e3d6000fd5b50505050610ed58583613abc565b50965096945050505050565b60608142811015610f27576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610f6157fe5b905060200201356001600160a01b03166001600160a01b031614610fba576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6110187f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bb492505050565b9150868260018451038151811061102b57fe5b602002602001015110156110705760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b61110e8686600081811061108057fe5b905060200201356001600160a01b0316336110f47f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106110c257fe5b905060200201356001600160a01b03168b8b60018181106110df57fe5b905060200201356001600160a01b0316613d34565b8560008151811061110157fe5b6020026020010151613df4565b61114d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f51915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061118c57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156111ca57600080fd5b505af11580156111de573d6000803e3d6000fd5b5050505061121684612710600154612710038560018751038151811061120057fe5b6020026020010151028161121057fe5b04613abc565b6112b87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561127257600080fd5b505afa158015611286573d6000803e3d6000fd5b505050506040513d602081101561129c57600080fd5b5051600154845161271091908690600019810190811061120057fe5b509695505050505050565b60606112f07f00000000000000000000000000000000000000000000000000000000000000008484614197565b90505b92915050565b60008060006113297f00000000000000000000000000000000000000000000000000000000000000008f8f613d34565b9050600087611338578c61133c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b505050506113d98f8f8f8f8f8f8f612d22565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b03163314611452576040805162461bcd60e51b815260206004820152601c60248201527f537068796e78526f757465723a204e6f74204665652053657474657200000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b606081428110156114c9576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61153a7f0000000000000000000000000000000000000000000000000000000000000000612710600154612710038b028161150057fe5b04888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bb492505050565b9150868260018451038151811061154d57fe5b602002602001015110156115925760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b6115a28686600081811061108057fe5b611673868660008181106115b257fe5b905060200201356001600160a01b0316337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561161c57600080fd5b505afa158015611630573d6000803e3d6000fd5b505050506040513d602081101561164657600080fd5b505160015486516127109190889060009061165d57fe5b6020026020010151028161166d57fe5b04613df4565b6112b882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b606081428110156116f8576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061173257fe5b905060200201356001600160a01b03166001600160a01b03161461178b576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6117e97f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b915086826000815181106117f957fe5b602002602001015111156110705760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b600061184c858585856142f6565b95945050505050565b600061184c858585856143f7565b6000806118b17f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613d34565b90506000866118c0578b6118c4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561193a57600080fd5b505af115801561194e573d6000803e3d6000fd5b505050506119608d8d8d8d8d8d61279a565b9d9c50505050505050505050505050565b80428110156119b5576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b611a37858560008181106119c557fe5b905060200201356001600160a01b031633611a247f000000000000000000000000000000000000000000000000000000000000000089896000818110611a0757fe5b905060200201356001600160a01b03168a8a60018181106110df57fe5b612710600154612710038c028161166d57fe5b600085856000198101818110611a4957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b50516040805160208881028281018201909352888252929350611b1a9290918991899182918501908490808284376000920191909152508892506144f7915050565b86611bcc8288886000198101818110611b2f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b505afa158015611ba8573d6000803e3d6000fd5b505050506040513d6020811015611bbe57600080fd5b50519063ffffffff61486d16565b1015611c095760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b611cbd86866000818110611c1957fe5b905060200201356001600160a01b0316337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8357600080fd5b505afa158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5051600154612710908d0261166d565b5050505050505050565b8042811015611d0b576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611d4557fe5b905060200201356001600160a01b03166001600160a01b031614611d9e576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b611df685856000818110611dae57fe5b905060200201356001600160a01b031633611df07f000000000000000000000000000000000000000000000000000000000000000089896000818110611a0757fe5b8a613df4565b611e348585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506144f7915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b5051905086811015611f0b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f7157600080fd5b505af1158015611f85573d6000803e3d6000fd5b50505050611fa0846127106001546127100384028161121057fe5b611cbd7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffc57600080fd5b505afa158015612010573d6000803e3d6000fd5b505050506040513d602081101561202657600080fd5b5051600154612710908402611210565b6060814281101561207c576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106120b357fe5b905060200201356001600160a01b03166001600160a01b03161461210c576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6121437f00000000000000000000000000000000000000000000000000000000000000006127106001546127100334028161150057fe5b9150868260018451038151811061215657fe5b6020026020010151101561219b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106121d757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220a57600080fd5b505af115801561221e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122837f000000000000000000000000000000000000000000000000000000000000000089896000818110611a0757fe5b8460008151811061229057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122e757600080fd5b505af11580156122fb573d6000803e3d6000fd5b505050506040513d602081101561231157600080fd5b505161231957fe5b61235882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b6123ee7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b505afa1580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b5051600154612710903402611210565b5095945050505050565b6060814281101561243e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61249c7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b91508661271060015461271001846000815181106124b657fe5b602002602001015102816124c657fe5b0411156115925760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561255d57600080fd5b505afa158015612571573d6000803e3d6000fd5b505050506040513d602081101561258757600080fd5b50516001600160a01b031633146125d9576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8b59195b9a5959607a1b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051829161265a91839133916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561262957600080fd5b505afa15801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b5051613968565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b757600080fd5b505afa1580156126cb573d6000803e3d6000fd5b505050506040513d60208110156126e157600080fd5b50516001600160a01b03163314612733576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8b59195b9a5959607a1b604482015290519081900360640190fd5b604051339081904780156108fc02916000818181858888f1935050505015801561265a573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60006127928484846148bd565b949350505050565b600081428110156127e0576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61280f887f00000000000000000000000000000000000000000000000000000000000000008989893089612d22565b604080516370a0823160e01b8152306004820152905191945061286292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561262957600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128c857600080fd5b505af11580156128dc573d6000803e3d6000fd5b505050506112b88483613abc565b804281101561292e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061296557fe5b905060200201356001600160a01b03166001600160a01b0316146129be576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6000612710600154612710033402816129d357fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a3157600080fd5b505af1158015612a45573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612aaa7f000000000000000000000000000000000000000000000000000000000000000089896000818110611a0757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612afa57600080fd5b505af1158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b5051612b2c57fe5b600086866000198101818110612b3e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ba357600080fd5b505afa158015612bb7573d6000803e3d6000fd5b505050506040513d6020811015612bcd57600080fd5b50516040805160208981028281018201909352898252929350612c0f9290918a918a9182918501908490808284376000920191909152508992506144f7915050565b87612c898289896000198101818110612c2457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b1015612cc65760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b611cbd7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b6000808242811015612d69576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6000612d967f00000000000000000000000000000000000000000000000000000000000000008c8c613d34565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050506040513d6020811015612e1b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612e6857600080fd5b505af1158015612e7c573d6000803e3d6000fd5b505050506040513d6040811015612e9257600080fd5b50805160209091015190925090506000612eac8e8e614969565b509050806001600160a01b03168e6001600160a01b031614612ecf578183612ed2565b82825b90975095508a871015612f165760405162461bcd60e51b8152600401808060200182810382526023815260200180614ec06023913960400191505060405180910390fd5b89861015612f555760405162461bcd60e51b8152600401808060200182810382526023815260200180614ee36023913960400191505060405180910390fd5b505050505097509795505050505050565b6000546001600160a01b03163314612fc5576040805162461bcd60e51b815260206004820152601f60248201527f537068796e78526f757465723a20554e41424c4520546f205345542046454500604482015290519081900360640190fd5b600155565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606112f07f00000000000000000000000000000000000000000000000000000000000000008484613bb4565b600080600061306b7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613d34565b905060008761307a578c61307e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b5050505061311a8e8e8e8e8e8e610dc7565b909f909e509c50505050505050505050505050565b60008060008342811015613178576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6131868c8c8c8c8c8c614a47565b909450925060006131b87f00000000000000000000000000000000000000000000000000000000000000008e8e613d34565b90506131c68d338388613df4565b6131d28c338387613df4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561322a57600080fd5b505af115801561323e573d6000803e3d6000fd5b505050506040513d602081101561325457600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156132b4576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6132e28a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614a47565b909450925060006133347f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613d34565b90506133428b338388613df4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561339d57600080fd5b505af11580156133b1573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561343657600080fd5b505af115801561344a573d6000803e3d6000fd5b505050506040513d602081101561346057600080fd5b505161346857fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156134c057600080fd5b505af11580156134d4573d6000803e3d6000fd5b505050506040513d60208110156134ea57600080fd5b50519250348410156135025761350233853403613abc565b505096509650969350505050565b60608142811015613556576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061358d57fe5b905060200201356001600160a01b03166001600160a01b0316146135e6576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6136447f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b915034612710600154612710018460008151811061365e57fe5b6020026020010151028161366e57fe5b0411156136ac5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106136e857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561371b57600080fd5b505af115801561372f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6137947f000000000000000000000000000000000000000000000000000000000000000089896000818110611a0757fe5b846000815181106137a157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156137f857600080fd5b505af115801561380c573d6000803e3d6000fd5b505050506040513d602081101561382257600080fd5b505161382a57fe5b61386982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b6139067f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156138c557600080fd5b505afa1580156138d9573d6000803e3d6000fd5b505050506040513d60208110156138ef57600080fd5b505160015484516127109190869060009061120057fe5b612710600154612710018360008151811061391d57fe5b6020026020010151028161392d57fe5b043411156123ee576123ee33612710600154612710018560008151811061395057fe5b6020026020010151028161396057fe5b043403613abc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106139e55780518252601f1990920191602091820191016139c6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a47576040519150601f19603f3d011682016040523d82523d6000602084013e613a4c565b606091505b5091509150818015613a7a575080511580613a7a5750808060200190516020811015613a7757600080fd5b50515b613ab55760405162461bcd60e51b815260040180806020018281038252602d815260200180615042602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613b085780518252601f199092019160209182019101613ae9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613b6a576040519150601f19603f3d011682016040523d82523d6000602084013e613b6f565b606091505b5050905080613baf5760405162461bcd60e51b8152600401808060200182810382526034815260200180614f606034913960400191505060405180910390fd5b505050565b6060600282511015613c0d576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c2557600080fd5b50604051908082528060200260200182016040528015613c4f578160200160208202803683370190505b5090508281600081518110613c6057fe5b60200260200101818152505060005b6001835103811015613d2c57600080613cb287868581518110613c8e57fe5b6020026020010151878660010181518110613ca557fe5b6020026020010151614cbb565b91509150613d08848481518110613cc557fe5b60200260200101518383613d038b8a8981518110613cdf57fe5b60200260200101518b8a60010181518110613cf657fe5b6020026020010151614d8e565b6142f6565b848460010181518110613d1757fe5b60209081029190910101525050600101613c6f565b509392505050565b6000806000613d438585614969565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff2af0069c0bb54e0ac59b7e6bcad73e52f364682907e1b7046ae718d0edb7c2a609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613e795780518252601f199092019160209182019101613e5a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613edb576040519150601f19603f3d011682016040523d82523d6000602084013e613ee0565b606091505b5091509150818015613f0e575080511580613f0e5750808060200190516020811015613f0b57600080fd5b50515b613f495760405162461bcd60e51b8152600401808060200182810382526031815260200180614f2f6031913960400191505060405180910390fd5b505050505050565b60005b600183510381101561419157600080848381518110613f6f57fe5b6020026020010151858460010181518110613f8657fe5b6020026020010151915091506000613f9e8383614969565b5090506000878560010181518110613fb257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613fe057826000613fe4565b6000835b91509150600060028a51038810613ffb578861403c565b61403c7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061402f57fe5b6020026020010151613d34565b90506140697f00000000000000000000000000000000000000000000000000000000000000008888613d34565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156140a6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156141175781810151838201526020016140ff565b50505050905090810190601f1680156141445780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561416657600080fd5b505af115801561417a573d6000803e3d6000fd5b505060019099019850613f54975050505050505050565b50505050565b60606002825110156141f0576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561420857600080fd5b50604051908082528060200260200182016040528015614232578160200160208202803683370190505b509050828160018351038151811061424657fe5b60209081029190910101528151600019015b8015613d2c576000806142888786600186038151811061427457fe5b6020026020010151878681518110613ca557fe5b915091506142d184848151811061429b57fe5b602002602001015183836142cc8b8a60018a03815181106142b857fe5b60200260200101518b8a81518110613cf657fe5b6143f7565b8460018503815181106142e057fe5b6020908102919091010152505060001901614258565b60008085116143365760405162461bcd60e51b81526004018080602001828103825260288152602001806150916028913960400191505060405180910390fd5b6000841180156143465750600083115b6143815760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b60006143a56143986103e88563ffffffff61486d16565b879063ffffffff614e0d16565b905060006143b9828663ffffffff614e0d16565b905060006143df836143d3896103e863ffffffff614e0d16565b9063ffffffff614e7016565b90508082816143ea57fe5b0498975050505050505050565b60008085116144375760405162461bcd60e51b8152600401808060200182810382526029815260200180614f066029913960400191505060405180910390fd5b6000841180156144475750600083115b6144825760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b60006144a66103e861449a878963ffffffff614e0d16565b9063ffffffff614e0d16565b905060006144cf6144bf6103e88663ffffffff61486d16565b61449a878a63ffffffff61486d16565b90506144ec60018284816144df57fe5b049063ffffffff614e7016565b979650505050505050565b60005b6001835103811015613baf5760008084838151811061451557fe5b602002602001015185846001018151811061452c57fe5b60200260200101519150915060006145448383614969565b50905060006145747f00000000000000000000000000000000000000000000000000000000000000008585613d34565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b557600080fd5b505afa1580156145c9573d6000803e3d6000fd5b505050506040513d60608110156145df57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614615578284614618565b83835b91509150614676828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b95506146ee8683838a6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146b757600080fd5b505afa1580156146cb573d6000803e3d6000fd5b505050506040513d60208110156146e157600080fd5b505163ffffffff166142f6565b945050505050600080856001600160a01b0316886001600160a01b0316146147185782600061471c565b6000835b91509150600060028c51038a10614733578a614767565b6147677f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061402f57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156147f15781810151838201526020016147d9565b50505050905090810190601f16801561481e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561484057600080fd5b505af1158015614854573d6000803e3d6000fd5b50506001909b019a506144fa9950505050505050505050565b808203828111156112f3576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116148fd5760405162461bcd60e51b8152600401808060200182810382526022815260200180614fb86022913960400191505060405180910390fd5b60008311801561490d5750600082115b6149485760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b82614959858463ffffffff614e0d16565b8161496057fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156149bd5760405162461bcd60e51b815260040180806020018281038252602281526020018061506f6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106149dd5782846149e0565b83835b90925090506001600160a01b038216614a40576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614ac157600080fd5b505afa158015614ad5573d6000803e3d6000fd5b505050506040513d6020811015614aeb57600080fd5b50516001600160a01b03161415614b9e57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614b7157600080fd5b505af1158015614b85573d6000803e3d6000fd5b505050506040513d6020811015614b9b57600080fd5b50505b600080614bcc7f00000000000000000000000000000000000000000000000000000000000000008b8b614cbb565b91509150816000148015614bde575080155b15614bee57879350869250614cae565b6000614bfb8984846148bd565b9050878111614c4e5785811015614c435760405162461bcd60e51b8152600401808060200182810382526023815260200180614ee36023913960400191505060405180910390fd5b889450925082614cac565b6000614c5b8984866148bd565b905089811115614c6757fe5b87811015614ca65760405162461bcd60e51b8152600401808060200182810382526023815260200180614ec06023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000806000614cca8585614969565b509050614cd8868686613d34565b50600080614ce7888888613d34565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614d1f57600080fd5b505afa158015614d33573d6000803e3d6000fd5b505050506040513d6060811015614d4957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614d7c578082614d7f565b81815b90999098509650505050505050565b6000614d9b848484613d34565b6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015614dd357600080fd5b505afa158015614de7573d6000803e3d6000fd5b505050506040513d6020811015614dfd57600080fd5b505163ffffffff16949350505050565b6000811580614e2857505080820282828281614e2557fe5b04145b6112f3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156112f3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe537068796e78526f757465723a20494e53554646494349454e545f415f414d4f554e54537068796e78526f757465723a20494e53554646494349454e545f425f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564537068796e78526f757465723a204558434553534956455f494e5055545f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f414d4f554e54537068796e78526f757465723a20455850495245440000000000000000000000537068796e78526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537068796e78526f757465723a20494e56414c49445f504154480000000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564537068796e784c6962726172793a204944454e544943414c5f414444524553534553537068796e784c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220deaa13438bfe29cda565f74cc8a57dd992c0fa4ab2119102a479bb22c7359c3764736f6c634300060600330000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000d9a1da4da2f1e8db1e2e422eaeb4e49a873d58c3
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80638803dbee116100f7578063baa2abde11610095578063ded9382a11610064578063ded9382a14610c0a578063e8e3370014610c7d578063f305d71914610cfd578063fb3bdb4114610d43576101ff565b8063baa2abde14610ab9578063bf16f65a14610b16578063c45a015514610b40578063d06ca61f14610b55576101ff565b8063ad5c4648116100d1578063ad5c464814610997578063ad615dec146109ac578063af2979eb146109e2578063b6f9de9514610a35576101ff565b80638803dbee146108c6578063894760691461095c57806389f6457f1461098f576101ff565b80634a25d94a116101645780635b0d59841161013e5780635b0d5984146106a35780635c11d79514610716578063791ac947146107ac5780637ff36ab514610842576101ff565b80634a25d94a1461058357806352707d8c14610619578063571fd01214610667576101ff565b80632195995c116101a05780632195995c1461040b5780632d5cbba814610489578063307d033e146104bc57806338ed1739146104ed576101ff565b806302751cec1461020457806318cbafe5146102705780631f00ca7414610356576101ff565b366101ff57336001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2316146101fd57fe5b005b600080fd5b34801561021057600080fd5b50610257600480360360c081101561022757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dc7565b6040805192835260208301919091528051918290030190f35b34801561027c57600080fd5b50610306600480360360a081101561029357600080fd5b813591602081013591810190606081016040820135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b91935091506001600160a01b038135169060200135610ee1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034257818101518382015260200161032a565b505050509050019250505060405180910390f35b34801561036257600080fd5b506103066004803603604081101561037957600080fd5b81359190810190604081016020820135600160201b81111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460208302840111600160201b831117156103cd57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112c3945050505050565b34801561041757600080fd5b50610257600480360361016081101561042f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356112f9565b34801561049557600080fd5b506101fd600480360360208110156104ac57600080fd5b50356001600160a01b03166113f3565b3480156104c857600080fd5b506104d1611474565b604080516001600160a01b039092168252519081900360200190f35b3480156104f957600080fd5b50610306600480360360a081101561051057600080fd5b813591602081013591810190606081016040820135600160201b81111561053657600080fd5b82018360208201111561054857600080fd5b803590602001918460208302840111600160201b8311171561056957600080fd5b91935091506001600160a01b038135169060200135611483565b34801561058f57600080fd5b50610306600480360360a08110156105a657600080fd5b813591602081013591810190606081016040820135600160201b8111156105cc57600080fd5b8201836020820111156105de57600080fd5b803590602001918460208302840111600160201b831117156105ff57600080fd5b91935091506001600160a01b0381351690602001356116b2565b34801561062557600080fd5b506106556004803603608081101561063c57600080fd5b508035906020810135906040810135906060013561183e565b60408051918252519081900360200190f35b34801561067357600080fd5b506106556004803603608081101561068a57600080fd5b5080359060208101359060408101359060600135611855565b3480156106af57600080fd5b5061065560048036036101408110156106c757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611863565b34801561072257600080fd5b506101fd600480360360a081101561073957600080fd5b813591602081013591810190606081016040820135600160201b81111561075f57600080fd5b82018360208201111561077157600080fd5b803590602001918460208302840111600160201b8311171561079257600080fd5b91935091506001600160a01b038135169060200135611971565b3480156107b857600080fd5b506101fd600480360360a08110156107cf57600080fd5b813591602081013591810190606081016040820135600160201b8111156107f557600080fd5b82018360208201111561080757600080fd5b803590602001918460208302840111600160201b8311171561082857600080fd5b91935091506001600160a01b038135169060200135611cc7565b6103066004803603608081101561085857600080fd5b81359190810190604081016020820135600160201b81111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460208302840111600160201b831117156108ac57600080fd5b91935091506001600160a01b038135169060200135612036565b3480156108d257600080fd5b50610306600480360360a08110156108e957600080fd5b813591602081013591810190606081016040820135600160201b81111561090f57600080fd5b82018360208201111561092157600080fd5b803590602001918460208302840111600160201b8311171561094257600080fd5b91935091506001600160a01b0381351690602001356123f8565b34801561096857600080fd5b506101fd6004803603602081101561097f57600080fd5b50356001600160a01b0316612504565b6101fd61265e565b3480156109a357600080fd5b506104d1612761565b3480156109b857600080fd5b50610655600480360360608110156109cf57600080fd5b5080359060208101359060400135612785565b3480156109ee57600080fd5b50610655600480360360c0811015610a0557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561279a565b6101fd60048036036080811015610a4b57600080fd5b81359190810190604081016020820135600160201b811115610a6c57600080fd5b820183602082011115610a7e57600080fd5b803590602001918460208302840111600160201b83111715610a9f57600080fd5b91935091506001600160a01b0381351690602001356128ea565b348015610ac557600080fd5b50610257600480360360e0811015610adc57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d22565b348015610b2257600080fd5b506101fd60048036036020811015610b3957600080fd5b5035612f66565b348015610b4c57600080fd5b506104d1612fca565b348015610b6157600080fd5b5061030660048036036040811015610b7857600080fd5b81359190810190604081016020820135600160201b811115610b9957600080fd5b820183602082011115610bab57600080fd5b803590602001918460208302840111600160201b83111715610bcc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612fee945050505050565b348015610c1657600080fd5b506102576004803603610140811015610c2e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561301b565b348015610c8957600080fd5b50610cdf6004803603610100811015610ca157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561312f565b60408051938452602084019290925282820152519081900360600190f35b610cdf600480360360c0811015610d1357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561326b565b61030660048036036080811015610d5957600080fd5b81359190810190604081016020820135600160201b811115610d7a57600080fd5b820183602082011115610d8c57600080fd5b803590602001918460208302840111600160201b83111715610dad57600080fd5b91935091506001600160a01b038135169060200135613510565b6000808242811015610e0e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b610e3d897f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238a8a8a308a612d22565b9093509150610e4d898685613968565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eb357600080fd5b505af1158015610ec7573d6000803e3d6000fd5b50505050610ed58583613abc565b50965096945050505050565b60608142811015610f27576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae231686866000198101818110610f6157fe5b905060200201356001600160a01b03166001600160a01b031614610fba576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6110187f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bb492505050565b9150868260018451038151811061102b57fe5b602002602001015110156110705760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b61110e8686600081811061108057fe5b905060200201356001600160a01b0316336110f47f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8a8a60008181106110c257fe5b905060200201356001600160a01b03168b8b60018181106110df57fe5b905060200201356001600160a01b0316613d34565b8560008151811061110157fe5b6020026020010151613df4565b61114d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f51915050565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d8360018551038151811061118c57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156111ca57600080fd5b505af11580156111de573d6000803e3d6000fd5b5050505061121684612710600154612710038560018751038151811061120057fe5b6020026020010151028161121057fe5b04613abc565b6112b87f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561127257600080fd5b505afa158015611286573d6000803e3d6000fd5b505050506040513d602081101561129c57600080fd5b5051600154845161271091908690600019810190811061120057fe5b509695505050505050565b60606112f07f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8484614197565b90505b92915050565b60008060006113297f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8f8f613d34565b9050600087611338578c61133c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b505050506113d98f8f8f8f8f8f8f612d22565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b03163314611452576040805162461bcd60e51b815260206004820152601c60248201527f537068796e78526f757465723a204e6f74204665652053657474657200000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031681565b606081428110156114c9576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61153a7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a612710600154612710038b028161150057fe5b04888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bb492505050565b9150868260018451038151811061154d57fe5b602002602001015110156115925760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b6115a28686600081811061108057fe5b611673868660008181106115b257fe5b905060200201356001600160a01b0316337f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561161c57600080fd5b505afa158015611630573d6000803e3d6000fd5b505050506040513d602081101561164657600080fd5b505160015486516127109190889060009061165d57fe5b6020026020010151028161166d57fe5b04613df4565b6112b882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b606081428110156116f8576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23168686600019810181811061173257fe5b905060200201356001600160a01b03166001600160a01b03161461178b576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6117e97f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b915086826000815181106117f957fe5b602002602001015111156110705760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b600061184c858585856142f6565b95945050505050565b600061184c858585856143f7565b6000806118b17f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8d7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23613d34565b90506000866118c0578b6118c4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561193a57600080fd5b505af115801561194e573d6000803e3d6000fd5b505050506119608d8d8d8d8d8d61279a565b9d9c50505050505050505050505050565b80428110156119b5576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b611a37858560008181106119c557fe5b905060200201356001600160a01b031633611a247f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89896000818110611a0757fe5b905060200201356001600160a01b03168a8a60018181106110df57fe5b612710600154612710038c028161166d57fe5b600085856000198101818110611a4957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611aae57600080fd5b505afa158015611ac2573d6000803e3d6000fd5b505050506040513d6020811015611ad857600080fd5b50516040805160208881028281018201909352888252929350611b1a9290918991899182918501908490808284376000920191909152508892506144f7915050565b86611bcc8288886000198101818110611b2f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b505afa158015611ba8573d6000803e3d6000fd5b505050506040513d6020811015611bbe57600080fd5b50519063ffffffff61486d16565b1015611c095760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b611cbd86866000818110611c1957fe5b905060200201356001600160a01b0316337f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8357600080fd5b505afa158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b5051600154612710908d0261166d565b5050505050505050565b8042811015611d0b576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae231685856000198101818110611d4557fe5b905060200201356001600160a01b03166001600160a01b031614611d9e576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b611df685856000818110611dae57fe5b905060200201356001600160a01b031633611df07f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89896000818110611a0757fe5b8a613df4565b611e348585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506144f7915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2316916370a0823191602480820192602092909190829003018186803b158015611e9e57600080fd5b505afa158015611eb2573d6000803e3d6000fd5b505050506040513d6020811015611ec857600080fd5b5051905086811015611f0b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f7157600080fd5b505af1158015611f85573d6000803e3d6000fd5b50505050611fa0846127106001546127100384028161121057fe5b611cbd7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffc57600080fd5b505afa158015612010573d6000803e3d6000fd5b505050506040513d602081101561202657600080fd5b5051600154612710908402611210565b6060814281101561207c576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316868660008181106120b357fe5b905060200201356001600160a01b03166001600160a01b03161461210c576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6121437f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6127106001546127100334028161150057fe5b9150868260018451038151811061215657fe5b6020026020010151101561219b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0836000815181106121d757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561220a57600080fd5b505af115801561221e573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb6122837f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89896000818110611a0757fe5b8460008151811061229057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122e757600080fd5b505af11580156122fb573d6000803e3d6000fd5b505050506040513d602081101561231157600080fd5b505161231957fe5b61235882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b6123ee7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b505afa1580156123c8573d6000803e3d6000fd5b505050506040513d60208110156123de57600080fd5b5051600154612710903402611210565b5095945050505050565b6060814281101561243e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61249c7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b91508661271060015461271001846000815181106124b657fe5b602002602001015102816124c657fe5b0411156115925760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561255d57600080fd5b505afa158015612571573d6000803e3d6000fd5b505050506040513d602081101561258757600080fd5b50516001600160a01b031633146125d9576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8b59195b9a5959607a1b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051829161265a91839133916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561262957600080fd5b505afa15801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b5051613968565b5050565b7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b757600080fd5b505afa1580156126cb573d6000803e3d6000fd5b505050506040513d60208110156126e157600080fd5b50516001600160a01b03163314612733576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8b59195b9a5959607a1b604482015290519081900360640190fd5b604051339081904780156108fc02916000818181858888f1935050505015801561265a573d6000803e3d6000fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2381565b60006127928484846148bd565b949350505050565b600081428110156127e0576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b61280f887f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238989893089612d22565b604080516370a0823160e01b8152306004820152905191945061286292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561262957600080fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128c857600080fd5b505af11580156128dc573d6000803e3d6000fd5b505050506112b88483613abc565b804281101561292e576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b03168585600081811061296557fe5b905060200201356001600160a01b03166001600160a01b0316146129be576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6000612710600154612710033402816129d357fe5b0490507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a3157600080fd5b505af1158015612a45573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb612aaa7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89896000818110611a0757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612afa57600080fd5b505af1158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b5051612b2c57fe5b600086866000198101818110612b3e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ba357600080fd5b505afa158015612bb7573d6000803e3d6000fd5b505050506040513d6020811015612bcd57600080fd5b50516040805160208981028281018201909352898252929350612c0f9290918a918a9182918501908490808284376000920191909152508992506144f7915050565b87612c898289896000198101818110612c2457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b1015612cc65760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffa6028913960400191505060405180910390fd5b611cbd7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b6000808242811015612d69576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6000612d967f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8c8c613d34565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050506040513d6020811015612e1b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612e6857600080fd5b505af1158015612e7c573d6000803e3d6000fd5b505050506040513d6040811015612e9257600080fd5b50805160209091015190925090506000612eac8e8e614969565b509050806001600160a01b03168e6001600160a01b031614612ecf578183612ed2565b82825b90975095508a871015612f165760405162461bcd60e51b8152600401808060200182810382526023815260200180614ec06023913960400191505060405180910390fd5b89861015612f555760405162461bcd60e51b8152600401808060200182810382526023815260200180614ee36023913960400191505060405180910390fd5b505050505097509795505050505050565b6000546001600160a01b03163314612fc5576040805162461bcd60e51b815260206004820152601f60248201527f537068796e78526f757465723a20554e41424c4520546f205345542046454500604482015290519081900360640190fd5b600155565b7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a81565b60606112f07f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8484613bb4565b600080600061306b7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8e7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23613d34565b905060008761307a578c61307e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b5050505061311a8e8e8e8e8e8e610dc7565b909f909e509c50505050505050505050505050565b60008060008342811015613178576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6131868c8c8c8c8c8c614a47565b909450925060006131b87f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8e8e613d34565b90506131c68d338388613df4565b6131d28c338387613df4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561322a57600080fd5b505af115801561323e573d6000803e3d6000fd5b505050506040513d602081101561325457600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156132b4576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b6132e28a7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238b348c8c614a47565b909450925060006133347f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8c7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23613d34565b90506133428b338388613df4565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561339d57600080fd5b505af11580156133b1573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561343657600080fd5b505af115801561344a573d6000803e3d6000fd5b505050506040513d602081101561346057600080fd5b505161346857fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156134c057600080fd5b505af11580156134d4573d6000803e3d6000fd5b505050506040513d60208110156134ea57600080fd5b50519250348410156135025761350233853403613abc565b505096509650969350505050565b60608142811015613556576040805162461bcd60e51b81526020600482015260156024820152600080516020614fda833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b03168686600081811061358d57fe5b905060200201356001600160a01b03166001600160a01b0316146135e6576040805162461bcd60e51b815260206004820152601a6024820152600080516020615022833981519152604482015290519081900360640190fd5b6136447f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061419792505050565b915034612710600154612710018460008151811061365e57fe5b6020026020010151028161366e57fe5b0411156136ac5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f946024913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0836000815181106136e857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561371b57600080fd5b505af115801561372f573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb6137947f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a89896000818110611a0757fe5b846000815181106137a157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156137f857600080fd5b505af115801561380c573d6000803e3d6000fd5b505050506040513d602081101561382257600080fd5b505161382a57fe5b61386982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613f51915050565b6139067f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a6001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156138c557600080fd5b505afa1580156138d9573d6000803e3d6000fd5b505050506040513d60208110156138ef57600080fd5b505160015484516127109190869060009061120057fe5b612710600154612710018360008151811061391d57fe5b6020026020010151028161392d57fe5b043411156123ee576123ee33612710600154612710018560008151811061395057fe5b6020026020010151028161396057fe5b043403613abc565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106139e55780518252601f1990920191602091820191016139c6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a47576040519150601f19603f3d011682016040523d82523d6000602084013e613a4c565b606091505b5091509150818015613a7a575080511580613a7a5750808060200190516020811015613a7757600080fd5b50515b613ab55760405162461bcd60e51b815260040180806020018281038252602d815260200180615042602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613b085780518252601f199092019160209182019101613ae9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613b6a576040519150601f19603f3d011682016040523d82523d6000602084013e613b6f565b606091505b5050905080613baf5760405162461bcd60e51b8152600401808060200182810382526034815260200180614f606034913960400191505060405180910390fd5b505050565b6060600282511015613c0d576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c2557600080fd5b50604051908082528060200260200182016040528015613c4f578160200160208202803683370190505b5090508281600081518110613c6057fe5b60200260200101818152505060005b6001835103811015613d2c57600080613cb287868581518110613c8e57fe5b6020026020010151878660010181518110613ca557fe5b6020026020010151614cbb565b91509150613d08848481518110613cc557fe5b60200260200101518383613d038b8a8981518110613cdf57fe5b60200260200101518b8a60010181518110613cf657fe5b6020026020010151614d8e565b6142f6565b848460010181518110613d1757fe5b60209081029190910101525050600101613c6f565b509392505050565b6000806000613d438585614969565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff2af0069c0bb54e0ac59b7e6bcad73e52f364682907e1b7046ae718d0edb7c2a609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613e795780518252601f199092019160209182019101613e5a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613edb576040519150601f19603f3d011682016040523d82523d6000602084013e613ee0565b606091505b5091509150818015613f0e575080511580613f0e5750808060200190516020811015613f0b57600080fd5b50515b613f495760405162461bcd60e51b8152600401808060200182810382526031815260200180614f2f6031913960400191505060405180910390fd5b505050505050565b60005b600183510381101561419157600080848381518110613f6f57fe5b6020026020010151858460010181518110613f8657fe5b6020026020010151915091506000613f9e8383614969565b5090506000878560010181518110613fb257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613fe057826000613fe4565b6000835b91509150600060028a51038810613ffb578861403c565b61403c7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a878c8b6002018151811061402f57fe5b6020026020010151613d34565b90506140697f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8888613d34565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156140a6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156141175781810151838201526020016140ff565b50505050905090810190601f1680156141445780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561416657600080fd5b505af115801561417a573d6000803e3d6000fd5b505060019099019850613f54975050505050505050565b50505050565b60606002825110156141f0576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561420857600080fd5b50604051908082528060200260200182016040528015614232578160200160208202803683370190505b509050828160018351038151811061424657fe5b60209081029190910101528151600019015b8015613d2c576000806142888786600186038151811061427457fe5b6020026020010151878681518110613ca557fe5b915091506142d184848151811061429b57fe5b602002602001015183836142cc8b8a60018a03815181106142b857fe5b60200260200101518b8a81518110613cf657fe5b6143f7565b8460018503815181106142e057fe5b6020908102919091010152505060001901614258565b60008085116143365760405162461bcd60e51b81526004018080602001828103825260288152602001806150916028913960400191505060405180910390fd5b6000841180156143465750600083115b6143815760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b60006143a56143986103e88563ffffffff61486d16565b879063ffffffff614e0d16565b905060006143b9828663ffffffff614e0d16565b905060006143df836143d3896103e863ffffffff614e0d16565b9063ffffffff614e7016565b90508082816143ea57fe5b0498975050505050505050565b60008085116144375760405162461bcd60e51b8152600401808060200182810382526029815260200180614f066029913960400191505060405180910390fd5b6000841180156144475750600083115b6144825760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b60006144a66103e861449a878963ffffffff614e0d16565b9063ffffffff614e0d16565b905060006144cf6144bf6103e88663ffffffff61486d16565b61449a878a63ffffffff61486d16565b90506144ec60018284816144df57fe5b049063ffffffff614e7016565b979650505050505050565b60005b6001835103811015613baf5760008084838151811061451557fe5b602002602001015185846001018151811061452c57fe5b60200260200101519150915060006145448383614969565b50905060006145747f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8585613d34565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b557600080fd5b505afa1580156145c9573d6000803e3d6000fd5b505050506040513d60608110156145df57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614615578284614618565b83835b91509150614676828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b9457600080fd5b95506146ee8683838a6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146b757600080fd5b505afa1580156146cb573d6000803e3d6000fd5b505050506040513d60208110156146e157600080fd5b505163ffffffff166142f6565b945050505050600080856001600160a01b0316886001600160a01b0316146147185782600061471c565b6000835b91509150600060028c51038a10614733578a614767565b6147677f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a898e8d6002018151811061402f57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156147f15781810151838201526020016147d9565b50505050905090810190601f16801561481e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561484057600080fd5b505af1158015614854573d6000803e3d6000fd5b50506001909b019a506144fa9950505050505050505050565b808203828111156112f3576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116148fd5760405162461bcd60e51b8152600401808060200182810382526022815260200180614fb86022913960400191505060405180910390fd5b60008311801561490d5750600082115b6149485760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b82614959858463ffffffff614e0d16565b8161496057fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156149bd5760405162461bcd60e51b815260040180806020018281038252602281526020018061506f6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106149dd5782846149e0565b83835b90925090506001600160a01b038216614a40576040805162461bcd60e51b815260206004820152601b60248201527f537068796e784c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a9092169163e6a4390591604480820192602092909190829003018186803b158015614ac157600080fd5b505afa158015614ad5573d6000803e3d6000fd5b505050506040513d6020811015614aeb57600080fd5b50516001600160a01b03161415614b9e57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a9092169163c9c65396916044808201926020929091908290030181600087803b158015614b7157600080fd5b505af1158015614b85573d6000803e3d6000fd5b505050506040513d6020811015614b9b57600080fd5b50505b600080614bcc7f0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a8b8b614cbb565b91509150816000148015614bde575080155b15614bee57879350869250614cae565b6000614bfb8984846148bd565b9050878111614c4e5785811015614c435760405162461bcd60e51b8152600401808060200182810382526023815260200180614ee36023913960400191505060405180910390fd5b889450925082614cac565b6000614c5b8984866148bd565b905089811115614c6757fe5b87811015614ca65760405162461bcd60e51b8152600401808060200182810382526023815260200180614ec06023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000806000614cca8585614969565b509050614cd8868686613d34565b50600080614ce7888888613d34565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614d1f57600080fd5b505afa158015614d33573d6000803e3d6000fd5b505050506040513d6060811015614d4957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614d7c578082614d7f565b81815b90999098509650505050505050565b6000614d9b848484613d34565b6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015614dd357600080fd5b505afa158015614de7573d6000803e3d6000fd5b505050506040513d6020811015614dfd57600080fd5b505163ffffffff16949350505050565b6000811580614e2857505080820282828281614e2557fe5b04145b6112f3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156112f3576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe537068796e78526f757465723a20494e53554646494349454e545f415f414d4f554e54537068796e78526f757465723a20494e53554646494349454e545f425f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564537068796e78526f757465723a204558434553534956455f494e5055545f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f414d4f554e54537068796e78526f757465723a20455850495245440000000000000000000000537068796e78526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537068796e78526f757465723a20494e56414c49445f504154480000000000005472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564537068796e784c6962726172793a204944454e544943414c5f414444524553534553537068796e784c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54537068796e784c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220deaa13438bfe29cda565f74cc8a57dd992c0fa4ab2119102a479bb22c7359c3764736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23000000000000000000000000d9a1da4da2f1e8db1e2e422eaeb4e49a873d58c3
-----Decoded View---------------
Arg [0] : _factory (address): 0x5019EF5dd93A7528103BB759Bb2F784D065b826a
Arg [1] : _WETH (address): 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
Arg [2] : _feeSetter (address): 0xD9a1DA4Da2F1E8dB1E2E422EAEb4E49A873d58c3
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005019ef5dd93a7528103bb759bb2f784d065b826a
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Arg [2] : 000000000000000000000000d9a1da4da2f1e8db1e2e422eaeb4e49a873d58c3
Deployed Bytecode Sourcemap
16070:21413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17068:10;-1:-1:-1;;;;;17082:4:0;17068:18;;17061:26;;;;16070:21413;;12:1:-1;9;2:12;21167:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21167:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21167:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29112:1057;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29112:1057:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29112:1057:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29112:1057:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29112:1057: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;29112:1057:0;;-1:-1:-1;29112:1057:0;-1:-1:-1;;;;;;29112:1057: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;29112:1057:0;;;;;;;;;;;;;;;;;36691:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36691:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36691:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36691:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36691:250: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;36691:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36691:250:0;;-1:-1:-1;36691:250:0;;-1:-1:-1;;;;;36691:250:0:i;21846:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21846:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21846:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16825:190::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16825:190:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16825:190:0;-1:-1:-1;;;;;16825:190:0;;:::i;16250:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16250:28:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16250:28:0;;;;;;;;;;;;;;25523:835;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25523:835:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25523:835:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25523:835:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25523:835: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;25523:835:0;;-1:-1:-1;25523:835:0;-1:-1:-1;;;;;;25523:835:0;;;;;;;;:::i;28071:1035::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28071:1035:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28071:1035:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28071:1035:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28071:1035: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;28071:1035:0;;-1:-1:-1;28071:1035:0;-1:-1:-1;;;;;;28071:1035:0;;;;;;;;:::i;35850:284::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35850:284:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35850:284:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36142:283;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36142:283:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;36142:283:0;;;;;;;;;;;;;;;;;:::i;23971:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23971:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23971:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32598:928::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32598:928:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32598:928:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32598:928:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32598:928: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;32598:928:0;;-1:-1:-1;32598:928:0;-1:-1:-1;;;;;;32598:928:0;;;;;;;;:::i;34579:1034::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34579:1034:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34579:1034:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34579:1034:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34579: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;34579:1034:0;;-1:-1:-1;34579:1034:0;-1:-1:-1;;;;;;34579:1034:0;;;;;;;;:::i;27179:886::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27179:886:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27179:886:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27179:886: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;27179:886:0;;-1:-1:-1;27179:886:0;-1:-1:-1;;;;;;27179:886:0;;;;;;;;:::i;26364:809::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26364:809:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26364:809:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26364:809:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26364:809: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;26364:809:0;;-1:-1:-1;26364:809:0;-1:-1:-1;;;;;;26364:809:0;;;;;;;;:::i;36949:272::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36949:272:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36949:272:0;-1:-1:-1;;;;;36949:272:0;;:::i;37229:251::-;;;:::i;16205:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16205:38:0;;;:::i;35657:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35657:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35657:185:0;;;;;;;;;;;;:::i;23265:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23265:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23265:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33532:1041::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33532:1041:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33532:1041:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33532:1041: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;33532:1041:0;;-1:-1:-1;33532:1041:0;-1:-1:-1;;;;;;33532:1041:0;;;;;;;;:::i;20314:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20314:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20314:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16648:169::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16648:169:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16648:169:0;;:::i;16157:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16157:41:0;;;:::i;36433:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36433:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36433:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36433:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36433:250: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;36433:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36433:250:0;;-1:-1:-1;36433:250:0;;-1:-1:-1;;;;;36433:250:0:i;22523:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22523:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22523:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18565:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18565:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18565:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19303:968;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19303:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30175:1058::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30175:1058:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30175:1058:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30175:1058: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;30175:1058:0;;-1:-1:-1;30175:1058:0;-1:-1:-1;;;;;;30175:1058:0;;;;;;;;:::i;21167:673::-;21404:16;21422:14;21385:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;21476:196:::1;21506:5;21526:4;21545:9;21569:14;21598:12;21633:4;21653:8;21476:15;:196::i;:::-;21449:223:::0;;-1:-1:-1;21449:223:0;-1:-1:-1;21683:51:0::1;21711:5:::0;21718:2;21449:223;21683:27:::1;:51::i;:::-;21751:4;-1:-1:-1::0;;;;;21745:20:0::1;;21766:9;21745:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21745:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21745:31:0;;;;21787:45;21818:2;21822:9;21787:30;:45::i;:::-;21167:673:::0;;;;;;;;;;:::o;29112:1057::-;29326:21;29298:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29398:4:0::1;29373:29;:4:::0;;-1:-1:-1;;29378:15:0;;29373:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29373:21:0::1;-1:-1:-1::0;;;;;29373:29:0::1;;29365:68;;;::::0;;-1:-1:-1;;;29365:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29365:68:0;;;;;;;;;;;;;::::1;;29454:52;29482:7;29491:8;29501:4;;29454:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29454:27:0::1;::::0;-1:-1:-1;;;29454:52:0:i:1;:::-;29444:62;;29556:12;29525:7;29550:1;29533:7;:14;:18;29525:27;;;;;;;;;;;;;;:43;;29517:96;;;;-1:-1:-1::0;;;29517:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29624:138;29670:4;;29675:1;29670:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29670:7:0::1;29679:10;29691:48;29713:7;29722:4;;29727:1;29722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29722:7:0::1;29731:4;;29736:1;29731:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29731:7:0::1;29691:21;:48::i;:::-;29741:7;29749:1;29741:10;;;;;;;;;;;;;;29624:31;:138::i;:::-;29773:35;29779:7;29788:4;;29773:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29802:4:0::1;::::0;-1:-1:-1;29773:5:0::1;::::0;-1:-1:-1;;29773:35:0:i:1;:::-;29825:4;-1:-1:-1::0;;;;;29819:20:0::1;;29840:7;29865:1;29848:7;:14;:18;29840:27;;;;;;;;;;;;;;29819:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29819:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29819:49:0;;;;29879:91;29910:2;29964:5;29953:7;;29945:5;:15;29914:7;29939:1;29922:7;:14;:18;29914:27;;;;;;;;;;;;;;:47;:55;;;;;;29879:30;:91::i;:::-;30007:110;30053:7;-1:-1:-1::0;;;;;30038:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30038:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30038:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30038:31:0;30101:7:::1;::::0;30079:14;;30111:5:::1;::::0;30101:7;30071;;-1:-1:-1;;30079:18:0;;;30071:27;::::1;;;;30007:110;29112:1057:::0;;;;;;;;;:::o;36691:250::-;36835:21;36881:52;36908:7;36917:9;36928:4;36881:26;:52::i;:::-;36874:59;;36691:250;;;;;:::o;21846:671::-;22152:12;22166;22191;22206:46;22228:7;22237:6;22245;22206:21;:46::i;:::-;22191:61;;22263:10;22276;:33;;22300:9;22276:33;;;-1:-1:-1;;22276:33:0;22320:77;;;-1:-1:-1;;;22320:77:0;;22345:10;22320:77;;;;22365:4;22320:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22263:46;;-1:-1:-1;;;;;;22320:24:0;;;;;:77;;;;;-1:-1:-1;;22320:77:0;;;;;;;;-1:-1:-1;22320:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;22320:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22320:77:0;;;;22429:80;22445:6;22453;22461:9;22472:10;22484;22496:2;22500:8;22429:15;:80::i;:::-;22408:101;;;;;;;;21846:671;;;;;;;;;;;;;;;;:::o;16825:190::-;16920:13;;-1:-1:-1;;;;;16920:13:0;16906:10;:27;16898:68;;;;;-1:-1:-1;;;16898:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16977:13;:30;;-1:-1:-1;;;;;;16977:30:0;-1:-1:-1;;;;;16977:30:0;;;;;;;;;;16825:190::o;16250:28::-;;;-1:-1:-1;;;;;16250:28:0;;:::o;25523:835::-;25747:21;25728:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;25791:80:::1;25819:7;25859:5;25848:7;;25840:5;:15;25828:8;:28;:36;;;;;;25866:4;;25791:80;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25791:27:0::1;::::0;-1:-1:-1;;;25791:80:0:i:1;:::-;25781:90;;25939:12;25908:7;25933:1;25916:7;:14;:18;25908:27;;;;;;;;;;;;;;:43;;25900:96;;;;-1:-1:-1::0;;;25900:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26007:138;26053:4;;26058:1;26053:7;;;;;;26007:138;26156:115;26188:4;;26193:1;26188:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26188:7:0::1;26197:10;26224:7;-1:-1:-1::0;;;;;26209:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26209:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26209:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26209:31:0;26255:7:::1;::::0;26242:10;;26265:5:::1;::::0;26255:7;26242;;26250:1:::1;::::0;26242:10:::1;;;;;;;;;;:20;:28;;;;;;26156:31;:115::i;:::-;26326:24;26332:7;26341:4;;26326:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26347:2:0;;-1:-1:-1;26326:5:0::1;::::0;-1:-1:-1;;26326:24:0:i:1;28071:1035::-:0;28285:21;28257:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28357:4:0::1;28332:29;:4:::0;;-1:-1:-1;;28337:15:0;;28332:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28332:21:0::1;-1:-1:-1::0;;;;;28332:29:0::1;;28324:68;;;::::0;;-1:-1:-1;;;28324:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28324:68:0;;;;;;;;;;;;;::::1;;28413:52;28440:7;28449:9;28460:4;;28413:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28413:26:0::1;::::0;-1:-1:-1;;;28413:52:0:i:1;:::-;28403:62;;28498:11;28484:7;28492:1;28484:10;;;;;;;;;;;;;;:25;;28476:74;;;;-1:-1:-1::0;;;28476:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35850:284:::0;36018:14;36057:69;36084:8;36094:9;36105:10;36117:8;36057:26;:69::i;:::-;36050:76;35850:284;-1:-1:-1;;;;;35850:284:0:o;36142:283::-;36310:13;36348:69;36374:9;36385;36396:10;36408:8;36348:25;:69::i;23971:712::-;24289:14;24316:12;24331:43;24353:7;24362:5;24369:4;24331:21;:43::i;:::-;24316:58;;24385:10;24398;:33;;24422:9;24398:33;;;-1:-1:-1;;24398:33:0;24442:77;;;-1:-1:-1;;;24442:77:0;;24467:10;24442:77;;;;24487:4;24442:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24385:46;;-1:-1:-1;;;;;;24442:24:0;;;;;:77;;;;;-1:-1:-1;;24442:77:0;;;;;;;;-1:-1:-1;24442:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;24442:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24442:77:0;;;;24542:133;24604:5;24611:9;24622:14;24638:12;24652:2;24656:8;24542:47;:133::i;:::-;24530:145;23971:712;-1:-1:-1;;;;;;;;;;;;;23971:712:0:o;32598:928::-;32832:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;32853:164:::1;32899:4;;32904:1;32899:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32899:7:0::1;32908:10;32920:48;32942:7;32951:4;;32956:1;32951:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32951:7:0::1;32960:4;;32965:1;32960:7;;;;;;32920:48;33001:5;32990:7;;32982:5;:15;32970:8;:28;:36;;;;32853:164;33028:18;33056:4:::0;;-1:-1:-1;;33061:15:0;;33056:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33056:21:0::1;-1:-1:-1::0;;;;;33049:39:0::1;;33089:2;33049:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33049:43:0::1;-1:-1:-1::0;;;;;33049:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33049:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33049:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33049:43:0;33103:44:::1;::::0;;33049:43:::1;33103:44:::0;;::::1;::::0;;;;;;;;;;;33049:43;;-1:-1:-1;33103:44:0::1;::::0;;;33138:4;;;;;;33103:44;::::1;::::0;33138:4;;33103:44;33138:4;33103:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33144:2:0;;-1:-1:-1;33103:34:0::1;::::0;-1:-1:-1;;33103:44:0:i:1;:::-;33246:12:::0;33180:62:::1;33228:13:::0;33187:4;;-1:-1:-1;;33192:15:0;;33187:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33187:21:0::1;-1:-1:-1::0;;;;;33180:39:0::1;;33220:2;33180:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33180:43:0::1;-1:-1:-1::0;;;;;33180:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33180:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33180:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33180:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;33158:168;;;;-1:-1:-1::0;;;33158:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33337:137;33383:4;;33388:1;33383:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33383:7:0::1;33392:10;33419:7;-1:-1:-1::0;;;;;33404:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33404:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33404:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33404:31:0;33448:7:::1;::::0;33458:5:::1;::::0;33437:18;::::1;:26;::::0;33337:137:::1;16454:1;32598:928:::0;;;;;;;:::o;34579:1034::-;34846:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34905:4:0::1;34880:29;:4:::0;;-1:-1:-1;;34885:15:0;;34880:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34880:21:0::1;-1:-1:-1::0;;;;;34880:29:0::1;;34872:68;;;::::0;;-1:-1:-1;;;34872:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34872:68:0;;;;;;;;;;;;;::::1;;34951:136;34997:4;;35002:1;34997:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34997:7:0::1;35006:10;35018:48;35040:7;35049:4;;35054:1;35049:7;;;;;;35018:48;35068:8;34951:31;:136::i;:::-;35098:55;35133:4;;35098:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35147:4:0::1;::::0;-1:-1:-1;35098:34:0::1;::::0;-1:-1:-1;;35098:55:0:i:1;:::-;35181:37;::::0;;-1:-1:-1;;;35181:37:0;;35212:4:::1;35181:37;::::0;::::1;::::0;;;35164:14:::1;::::0;-1:-1:-1;;;;;35188:4:0::1;35181:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35181:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35181:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35181:37:0;;-1:-1:-1;35237:25:0;;::::1;;35229:78;;;;-1:-1:-1::0;;;35229:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35324:4;-1:-1:-1::0;;;;;35318:20:0::1;;35339:9;35318:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35318:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35318:31:0;;;;35360:73;35391:2;35427:5;35416:7;;35408:5;:15;35395:9;:29;:37;;;;35360:73;35469:92;35515:7;-1:-1:-1::0;;;;;35500:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35500:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35500:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35500:31:0;35545:7:::1;::::0;35555:5:::1;::::0;35533:19;::::1;:27;::::0;27179:886;27395:21;27367:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;27453:4:::1;-1:-1:-1::0;;;;;27442:15:0::1;:4;;27447:1;27442:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27442:7:0::1;-1:-1:-1::0;;;;;27442:15:0::1;;27434:54;;;::::0;;-1:-1:-1;;;27434:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27434:54:0;;;;;;;;;;;;;::::1;;27509:81;27537:7;27578:5;27567:7;;27559:5;:15;27546:9;:29;:37;;;;27509:81;27499:91;;27666:12;27635:7;27660:1;27643:7;:14;:18;27635:27;;;;;;;;;;;;;;:43;;27627:96;;;;-1:-1:-1::0;;;27627:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27740:4;-1:-1:-1::0;;;;;27734:19:0::1;;27761:7;27769:1;27761:10;;;;;;;;;;;;;;27734:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27734:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27734:40:0;;;;;27798:4;-1:-1:-1::0;;;;;27792:20:0::1;;27813:48;27835:7;27844:4;;27849:1;27844:7;;;;;;27813:48;27863:7;27871:1;27863:10;;;;;;;;;;;;;;27792:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;27792:82:0::1;-1:-1:-1::0;;;;;27792:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27792:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27792:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27792:82:0;27785:90:::1;;;;27886:24;27892:7;27901:4;;27886:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27907:2:0;;-1:-1:-1;27886:5:0::1;::::0;-1:-1:-1;;27886:24:0:i:1;:::-;27921:92;27967:7;-1:-1:-1::0;;;;;27952:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27952:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27952:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27952:31:0;27997:7:::1;::::0;28007:5:::1;::::0;27985:9:::1;:19;:27;::::0;27921:92:::1;27179:886:::0;;;;;;;;:::o;26364:809::-;26588:21;26569:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;26632:52:::1;26659:7;26668:9;26679:4;;26632:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26632:26:0::1;::::0;-1:-1:-1;;;26632:52:0:i:1;:::-;26622:62;;26745:11;26736:5;26725:7;;26717:5;:15;26703:7;26711:1;26703:10;;;;;;;;;;;;;;:30;:38;;;;;;:53;;26695:102;;;;-1:-1:-1::0;;;26695:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36949:272:::0;37045:7;-1:-1:-1;;;;;37030:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37030:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37030:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37030:31:0;-1:-1:-1;;;;;37016:45:0;:10;:45;37008:75;;;;;-1:-1:-1;;;37008:75:0;;;;;;;;;;;;-1:-1:-1;;;37008:75:0;;;;;;;;;;;;;;;37182:30;;;-1:-1:-1;;;37182:30:0;;37206:4;37182:30;;;;;;37116:6;;37134:79;;37116:6;;37170:10;;-1:-1:-1;;;;;37182:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;2:2:-1;;;;27:1;24;17:12;2:2;37182:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37182:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37182:30:0;37134:27;:79::i;:::-;36949:272;;:::o;37229:251::-;37324:7;-1:-1:-1;;;;;37309:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37309:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37309:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37309:31:0;-1:-1:-1;;;;;37295:45:0;:10;:45;37287:75;;;;;-1:-1:-1;;;37287:75:0;;;;;;;;;;;;-1:-1:-1;;;37287:75:0;;;;;;;;;;;;;;;37431:41;;37409:10;;;;37450:21;37431:41;;;;;37373:25;37431:41;37373:25;37431:41;37450:21;37409:10;37431:41;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;16205:38:0;;;:::o;35657:185::-;35754:12;35786:48;35806:7;35815:8;35825;35786:19;:48::i;:::-;35779:55;35657:185;-1:-1:-1;;;;35657:185:0:o;23265:700::-;23531:14;23512:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;23574:196:::1;23604:5;23624:4;23643:9;23667:14;23696:12;23731:4;23751:8;23574:15;:196::i;:::-;23820:38;::::0;;-1:-1:-1;;;23820:38:0;;23852:4:::1;23820:38;::::0;::::1;::::0;;;23558:212;;-1:-1:-1;23781:78:0::1;::::0;-1:-1:-1;23809:5:0;;23816:2;;-1:-1:-1;;;;;23820:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;23781:78:0;23876:4;-1:-1:-1::0;;;;;23870:20:0::1;;23891:9;23870:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23870:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23870:31:0;;;;23912:45;23943:2;23947:9;23912:30;:45::i;33532:1041::-:0;33792:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;33837:4:::1;-1:-1:-1::0;;;;;33826:15:0::1;:4;;33831:1;33826:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33826:7:0::1;-1:-1:-1::0;;;;;33826:15:0::1;;33818:54;;;::::0;;-1:-1:-1;;;33818:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33818:54:0;;;;;;;;;;;;;::::1;;33883:13;33931:5;33920:7;;33912:5;:15;33899:9;:29;:37;;;;;;33883:53;;33978:4;-1:-1:-1::0;;;;;33972:19:0::1;;33999:8;33972:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33972:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33972:38:0;;;;;34034:4;-1:-1:-1::0;;;;;34028:20:0::1;;34049:48;34071:7;34080:4;;34085:1;34080:7;;;;;;34049:48;34099:8;34028:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;34028:80:0::1;-1:-1:-1::0;;;;;34028:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34028:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34028:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34028:80:0;34021:88:::1;;;;34120:18;34148:4:::0;;-1:-1:-1;;34153:15:0;;34148:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34148:21:0::1;-1:-1:-1::0;;;;;34141:39:0::1;;34181:2;34141:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34141:43:0::1;-1:-1:-1::0;;;;;34141:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34141:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34141:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34141:43:0;34195:44:::1;::::0;;34141:43:::1;34195:44:::0;;::::1;::::0;;;;;;;;;;;34141:43;;-1:-1:-1;34195:44:0::1;::::0;;;34230:4;;;;;;34195:44;::::1;::::0;34230:4;;34195:44;34230:4;34195:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34236:2:0;;-1:-1:-1;34195:34:0::1;::::0;-1:-1:-1;;34195:44:0:i:1;:::-;34338:12:::0;34272:62:::1;34320:13:::0;34279:4;;-1:-1:-1;;34284:15:0;;34279:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34279:21:0::1;-1:-1:-1::0;;;;;34272:39:0::1;;34312:2;34272:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34272:43:0::1;-1:-1:-1::0;;;;;34272:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;34272:62:0;:78;;34250:168;;;;-1:-1:-1::0;;;34250:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34429:92;34475:7;-1:-1:-1::0;;;;;34460:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20314:847:0::0;20568:12;20582;20549:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;20607:12:::1;20622:46;20644:7;20653:6;20661;20622:21;:46::i;:::-;20679:59;::::0;;-1:-1:-1;;;20679:59:0;;20710:10:::1;20679:59;::::0;::::1;::::0;-1:-1:-1;;;;;20679:30:0;::::1;:59:::0;;;;;;;;;;;;;;20607:61;;-1:-1:-1;20679:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20679:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20679:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20679:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20806:26:0::1;::::0;;-1:-1:-1;;;20806:26:0;;-1:-1:-1;;;;;20806:26:0;;::::1;;::::0;::::1;::::0;;;20776:12:::1;::::0;;;20806:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;20776:12;20806:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20806:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20806:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20806:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20806:26:0;-1:-1:-1;20844:14:0::1;20863:40;20888:6:::0;20896;20863:24:::1;:40::i;:::-;20843:60;;;20945:6;-1:-1:-1::0;;;;;20935:16:0::1;:6;-1:-1:-1::0;;;;;20935:16:0::1;;:58;;20976:7;20985;20935:58;;;20955:7;20964;20935:58;20914:79:::0;;-1:-1:-1;20914:79:0;-1:-1:-1;21012:21:0;;::::1;;21004:69;;;;-1:-1:-1::0;;;21004:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21103:10;21092:7;:21;;21084:69;;;;-1:-1:-1::0;;;21084:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16454:1;;;;20314:847:::0;;;;;;;;;;;:::o;16648:169::-;16731:13;;-1:-1:-1;;;;;16731:13:0;16717:10;:27;16709:71;;;;;-1:-1:-1;;;16709:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16791:7;:18;16648:169::o;16157:41::-;;;:::o;36433:250::-;36577:21;36623:52;36651:7;36660:8;36670:4;36623:27;:52::i;22523:663::-;22812:16;22830:14;22857:12;22872:43;22894:7;22903:5;22910:4;22872:21;:43::i;:::-;22857:58;;22926:10;22939;:33;;22963:9;22939:33;;;-1:-1:-1;;22939:33:0;22983:77;;;-1:-1:-1;;;22983:77:0;;23008:10;22983:77;;;;23028:4;22983:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:46;;-1:-1:-1;;;;;;22983:24:0;;;;;:77;;;;;-1:-1:-1;;22983:77:0;;;;;;;;-1:-1:-1;22983:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;22983:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22983:77:0;;;;23098:80;23117:5;23124:9;23135:14;23151:12;23165:2;23169:8;23098:18;:80::i;:::-;23071:107;;;;-1:-1:-1;22523:663:0;-1:-1:-1;;;;;;;;;;;;;22523:663:0:o;18565:732::-;18853:12;18867;18881:14;18834:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;18929:85:::1;18943:6;18951;18959:14;18975;18991:10;19003;18929:13;:85::i;:::-;18908:106:::0;;-1:-1:-1;18908:106:0;-1:-1:-1;19025:12:0::1;19040:46;19062:7;19071:6:::0;19079;19040:21:::1;:46::i;:::-;19025:61;;19097:66;19129:6;19137:10;19149:4;19155:7;19097:31;:66::i;:::-;19174;19206:6;19214:10;19226:4;19232:7;19174:31;:66::i;:::-;19275:4;-1:-1:-1::0;;;;;19263:22:0::1;;19286:2;19263:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;19263:26:0::1;-1:-1:-1::0;;;;;19263:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19263:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19263:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19263:26:0;18565:732;;;;-1:-1:-1;19263:26:0;;-1:-1:-1;18565:732:0;;-1:-1:-1;;;;;;;;;18565:732:0:o;19303:968::-;19556:16;19574:14;19590;19537:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;19644:176:::1;19672:5;19692:4;19711:18;19744:9;19768:14;19797:12;19644:13;:176::i;:::-;19617:203:::0;;-1:-1:-1;19617:203:0;-1:-1:-1;19831:12:0::1;19846:43;19868:7;19877:5:::0;19884:4:::1;19846:21;:43::i;:::-;19831:58;;19900:69;19932:5;19939:10;19951:4;19957:11;19900:31;:69::i;:::-;19986:4;-1:-1:-1::0;;;;;19980:19:0::1;;20007:9;19980:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19980:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19980:39:0;;;;;20043:4;-1:-1:-1::0;;;;;20037:20:0::1;;20058:4;20064:9;20037:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20037:37:0::1;-1:-1:-1::0;;;;;20037:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20037:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20037:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20037:37:0;20030:45:::1;;;;20110:4;-1:-1:-1::0;;;;;20098:22:0::1;;20121:2;20098:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;20098:26:0::1;-1:-1:-1::0;;;;;20098:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20098:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20098:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20098:26:0;;-1:-1:-1;20175:9:0::1;:21:::0;-1:-1:-1;20171:92:0::1;;;20198:65;20229:10;20253:9;20241;:21;20198:30;:65::i;:::-;16454:1;19303:968:::0;;;;;;;;;;;:::o;30175:1058::-;30388:21;30360:8;16402:15;16390:8;:27;;16382:61;;;;;-1:-1:-1;;;16382:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16382:61:0;;;;;;;;;;;;;;;30446:4:::1;-1:-1:-1::0;;;;;30435:15:0::1;:4;;30440:1;30435:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30435:7:0::1;-1:-1:-1::0;;;;;30435:15:0::1;;30427:54;;;::::0;;-1:-1:-1;;;30427:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30427:54:0;;;;;;;;;;;;;::::1;;30502:52;30529:7;30538:9;30549:4;;30502:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30502:26:0::1;::::0;-1:-1:-1;;;30502:52:0:i:1;:::-;30492:62;;30615:9;30606:5;30595:7;;30587:5;:15;30573:7;30581:1;30573:10;;;;;;;;;;;;;;:30;:38;;;;;;:51;;30565:100;;;;-1:-1:-1::0;;;30565:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30700:4;-1:-1:-1::0;;;;;30694:19:0::1;;30721:7;30729:1;30721:10;;;;;;;;;;;;;;30694:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30694:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30694:40:0;;;;;30758:4;-1:-1:-1::0;;;;;30752:20:0::1;;30773:48;30795:7;30804:4;;30809:1;30804:7;;;;;;30773:48;30823:7;30831:1;30823:10;;;;;;;;;;;;;;30752:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;30752:82:0::1;-1:-1:-1::0;;;;;30752:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30752:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30752:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30752:82:0;30745:90:::1;;;;30846:24;30852:7;30861:4;;30846:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30867:2:0;;-1:-1:-1;30846:5:0::1;::::0;-1:-1:-1;;30846:24:0:i:1;:::-;30881:93;30927:7;-1:-1:-1::0;;;;;30912:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30912:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30912:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30912:31:0;30958:7:::1;::::0;30945:10;;30968:5:::1;::::0;30958:7;30945;;30953:1:::1;::::0;30945:10:::1;;;30881:93;31106:5;31095:7;;31087:5;:15;31073:7;31081:1;31073:10;;;;;;;;;;;;;;:30;:38;;;;;;31061:9;:50;31057:150;;;31113:94;31144:10;31201:5;31190:7;;31182:5;:15;31168:7;31176:1;31168:10;;;;;;;;;;;;;;:30;:38;;;;;;31156:9;:50;31113:30;:94::i;7095:449::-:0;7327:45;;;-1:-1:-1;;;;;7327:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7327:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;7316:57:0;;;;7281:12;;7295:17;;7316:10;;;;7327:45;7316:57;;;25:18:-1;7316: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;;;7316: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;;7280:93:0;;;;7406:7;:57;;;;-1:-1:-1;7418:11:0;;:16;;:44;;;7449:4;7438:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7438:24:0;7418:44;7384:152;;;;-1:-1:-1;;;7384:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7095:449;;;;;:::o;8058:217::-;8171:12;;;8131;8171;;;;;;;;;-1:-1:-1;;;;;8149:7:0;;;8164:5;;8149:35;;;;;;;;;;;;;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;;;8149:35: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;;8130:54:0;;;8203:7;8195:72;;;;-1:-1:-1;;;8195:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8058:217;;;:::o;14859:551::-;14960:21;15017:1;15002:4;:11;:16;;14994:56;;;;;-1:-1:-1;;;14994:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15082:4;:11;15071:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15071:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15071:23:0;;15061:33;;15118:8;15105:7;15113:1;15105:10;;;;;;;;;;;;;:21;;;;;15142:6;15137:266;15168:1;15154:4;:11;:15;15150:1;:19;15137:266;;;15192:14;15208:15;15227:42;15239:7;15248:4;15253:1;15248:7;;;;;;;;;;;;;;15257:4;15262:1;15266;15262:5;15257:11;;;;;;;;;;;;;;15227;:42::i;:::-;15191:78;;;;15301:90;15314:7;15322:1;15314:10;;;;;;;;;;;;;;15326:9;15337:10;15349:41;15360:7;15369:4;15374:1;15369:7;;;;;;;;;;;;;;15378:4;15383:1;15387;15383:5;15378:11;;;;;;;;;;;;;;15349:10;:41::i;:::-;15301:12;:90::i;:::-;15284:7;15292:1;15296;15292:5;15284:14;;;;;;;;;;;;;;;;;:107;-1:-1:-1;;15171:3:0;;15137:266;;;;14859:551;;;;;:::o;11871:503::-;11960:12;11986:14;12002;12020:26;12031:6;12039;12020:10;:26::i;:::-;12184:32;;;-1:-1:-1;;12184:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12184:32:0;;;;;12174:43;;;;;;-1:-1:-1;;;;;;12087:276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12087:276:0;;;;;;;12077:287;;;;;;;;;11871:503;-1:-1:-1;;;;;11871:503:0:o;7552:498::-;7823:51;;;-1:-1:-1;;;;;7823:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7823:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;7812:63:0;;;;7777:12;;7791:17;;7812:10;;;;7823:51;7812:63;;;25:18:-1;7812: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;;;7812: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;;7776:99:0;;;;7908:7;:57;;;;-1:-1:-1;7920:11:0;;:16;;:44;;;7951:4;7940:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7940:24:0;7920:44;7886:156;;;;-1:-1:-1;;;7886:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7552:498;;;;;;:::o;24794:723::-;24901:6;24896:614;24927:1;24913:4;:11;:15;24909:1;:19;24896:614;;;24951:13;24966:14;24985:4;24990:1;24985:7;;;;;;;;;;;;;;24994:4;24999:1;25003;24999:5;24994:11;;;;;;;;;;;;;;24950:56;;;;25022:14;25041:39;25066:5;25073:6;25041:24;:39::i;:::-;25021:59;;;25095:14;25112:7;25120:1;25124;25120:5;25112:14;;;;;;;;;;;;;;25095:31;;25142:15;25159;25187:6;-1:-1:-1;;;;;25178:15:0;:5;-1:-1:-1;;;;;25178:15:0;;:61;;25220:9;25236:1;25178:61;;;25202:1;25206:9;25178:61;25141:98;;;;25254:10;25285:1;25271:4;:11;:15;25267:1;:19;:79;;25343:3;25267:79;;;25289:51;25311:7;25320:6;25328:4;25333:1;25337;25333:5;25328:11;;;;;;;;;;;;;;25289:21;:51::i;:::-;25254:92;;25373:45;25395:7;25404:5;25411:6;25373:21;:45::i;:::-;-1:-1:-1;;;;;25361:63:0;;25443:10;25455;25467:2;25481:1;25471:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25471:12:0;87:42:-1;143:17;;-1:-1;25471:12:0;;25361:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25361:137:0;-1:-1:-1;;;;;25361:137: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;25361:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25361:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24930:3:0;;;;;-1:-1:-1;24896:614:0;;-1:-1:-1;;;;;;;;24896:614:0;;;24794:723;;;:::o;15491:572::-;15592:21;15649:1;15634:4;:11;:16;;15626:56;;;;;-1:-1:-1;;;15626:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15714:4;:11;15703:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15703:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15703:23:0;;15693:33;;15767:9;15737:7;15762:1;15745:7;:14;:18;15737:27;;;;;;;;;;;;;;;;;:39;15801:11;;-1:-1:-1;;15801:15:0;15787:269;15818:5;;15787:269;;15846:14;15862:15;15881:42;15893:7;15902:4;15911:1;15907;:5;15902:11;;;;;;;;;;;;;;15915:4;15920:1;15915:7;;;;;;;15881:42;15845:78;;;;15955:89;15967:7;15975:1;15967:10;;;;;;;;;;;;;;15979:9;15990:10;16002:41;16013:7;16022:4;16031:1;16027;:5;16022:11;;;;;;;;;;;;;;16035:4;16040:1;16035:7;;;;;;;16002:41;15955:11;:89::i;:::-;15938:7;15950:1;15946;:5;15938:14;;;;;;;;;;;;;;;;;:106;-1:-1:-1;;;;15825:3:0;15787:269;;13611:545;13718:14;13764:1;13753:8;:12;13745:65;;;;-1:-1:-1;;;13745:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13841:1;13829:9;:13;:31;;;;;13859:1;13846:10;:14;13829:31;13821:81;;;;-1:-1:-1;;;13821:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13913:20;13936:37;13949:23;13954:4;13964:7;13949:23;:14;:23;:::i;:::-;13936:8;;:37;:12;:37;:::i;:::-;13913:60;-1:-1:-1;13984:14:0;14001:31;13913:60;14021:10;14001:31;:19;:31;:::i;:::-;13984:48;-1:-1:-1;14043:16:0;14062:40;14086:15;14062:19;:9;14076:4;14062:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;14043:59;;14137:11;14125:9;:23;;;;;;;13611:545;-1:-1:-1;;;;;;;;13611:545:0:o;14277:500::-;14384:13;14430:1;14418:9;:13;14410:67;;;;-1:-1:-1;;;14410:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14508:1;14496:9;:13;:31;;;;;14526:1;14513:10;:14;14496:31;14488:81;;;;-1:-1:-1;;;14488:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14580:14;14597:34;14626:4;14597:24;:9;14611;14597:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;14580:51;-1:-1:-1;14642:16:0;14661:54;14691:23;14696:4;14706:7;14691:23;:14;:23;:::i;:::-;14661:25;:10;14676:9;14661:25;:14;:25;:::i;:54::-;14642:73;;14737:32;14767:1;14750:11;14738:9;:23;;;;;;;14737:32;:29;:32;:::i;:::-;14726:43;14277:500;-1:-1:-1;;;;;;;14277:500:0:o;31380:1212::-;31493:6;31488:1097;31519:1;31505:4;:11;:15;31501:1;:19;31488:1097;;;31543:13;31558:14;31577:4;31582:1;31577:7;;;;;;;;;;;;;;31586:4;31591:1;31595;31591:5;31586:11;;;;;;;;;;;;;;31542:56;;;;31614:14;31633:39;31658:5;31665:6;31633:24;:39::i;:::-;31613:59;;;31687:16;31718:45;31740:7;31749:5;31756:6;31718:21;:45::i;:::-;31687:77;;31779:16;31810:17;31898:13;31913;31931:4;-1:-1:-1;;;;;31931:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31931:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31931:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31931:18:0;;;;;;;-1:-1:-1;;;;;31897:52:0;;;;-1:-1:-1;31897:52:0;;-1:-1:-1;31965:17:0;;-1:-1:-1;;;;;32006:15:0;;;;;;;:61;;32048:8;32058;32006:61;;;32025:8;32035;32006:61;31964:103;;;;32096:56;32139:12;32103:5;-1:-1:-1;;;;;32096:23:0;;32128:4;32096:38;;;;;;;;;;;;;-1:-1:-1;;;;;32096:38:0;-1:-1:-1;;;;;32096:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32096:56:0;32082:70;;32182:84;32209:11;32222:12;32236:13;32251:4;-1:-1:-1;;;;;32251:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32251:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32251:14:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32251:14:0;32182:84;;:26;:84::i;:::-;32167:99;;31488:1097;;;;32297:15;32314;32342:6;-1:-1:-1;;;;;32333:15:0;:5;-1:-1:-1;;;;;32333:15:0;;:67;;32378:12;32397:1;32333:67;;;32357:1;32361:12;32333:67;32296:104;;;;32415:10;32446:1;32432:4;:11;:15;32428:1;:19;:79;;32504:3;32428:79;;;32450:51;32472:7;32481:6;32489:4;32494:1;32498;32494:5;32489:11;;;;;;;32450:51;32560:12;;;32570:1;32560:12;;;;;;;;;;-1:-1:-1;;;32522:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32522:51:0;;;;;;;;;;;;;;;;;;;;;;32415:92;;-1:-1:-1;32522:9:0;;;;;;32532:10;;32544;;32415:92;;32560:12;;32522:51;;;;;;;;32560:12;;32522:51;;;;32560: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;32522:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32522:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31522:3:0;;;;;-1:-1:-1;31488:1097:0;;-1:-1:-1;;;;;;;;;;31488:1097:0;8442:129;8526:5;;;8521:16;;;;8513:50;;;;;-1:-1:-1;;;8513:50:0;;;;;;;;;;;;-1:-1:-1;;;8513:50:0;;;;;;;;;;;;;;13174:315;13256:12;13299:1;13289:7;:11;13281:58;;;;-1:-1:-1;;;13281:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13369:1;13358:8;:12;:28;;;;;13385:1;13374:8;:12;13358:28;13350:78;;;;-1:-1:-1;;;13350:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13473:8;13449:21;:7;13461:8;13449:21;:11;:21;:::i;:::-;:32;;;;;;;13174:315;-1:-1:-1;;;;13174:315:0:o;11436:343::-;11511:14;11527;11572:6;-1:-1:-1;;;;;11562:16:0;:6;-1:-1:-1;;;;;11562:16:0;;;11554:63;;;;-1:-1:-1;;;11554:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11656:6;-1:-1:-1;;;;;11647:15:0;:6;-1:-1:-1;;;;;11647:15:0;;:53;;11685:6;11693;11647:53;;;11666:6;11674;11647:53;11628:72;;-1:-1:-1;11628:72:0;-1:-1:-1;;;;;;11719:20:0;;11711:60;;;;;-1:-1:-1;;;11711:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11436:343;;;;;:::o;17190:1369::-;17503:47;;;-1:-1:-1;;;17503:47:0;;-1:-1:-1;;;;;17503:47:0;;;;;;;;;;;;;;;;17408:12;;;;;;17518:7;17503:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17503:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17503:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17503:47:0;-1:-1:-1;;;;;17503:61:0;;17499:144;;;17581:50;;;-1:-1:-1;;;17581:50:0;;-1:-1:-1;;;;;17581:50:0;;;;;;;;;;;;;;;;17596:7;17581:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;17581:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17581:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17581:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17499:144:0;17654:13;17669;17686:50;17712:7;17721:6;17729;17686:25;:50::i;:::-;17653:83;;;;17751:8;17763:1;17751:13;:30;;;;-1:-1:-1;17768:13:0;;17751:30;17747:805;;;17820:14;;-1:-1:-1;17836:14:0;;-1:-1:-1;17747:805:0;;;17884:19;17906:55;17926:14;17942:8;17952;17906:19;:55::i;:::-;17884:77;;17998:14;17980;:32;17976:565;;18059:10;18041:14;:28;;18033:76;;;;-1:-1:-1;;;18033:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18150:14;;-1:-1:-1;18166:14:0;-1:-1:-1;18166:14:0;17976:565;;;18222:19;18244:55;18264:14;18280:8;18290;18244:19;:55::i;:::-;18222:77;;18343:14;18325;:32;;18318:40;;;;18403:10;18385:14;:28;;18377:76;;;;-1:-1:-1;;;18377:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18494:14;-1:-1:-1;18510:14:0;;-1:-1:-1;17976:565:0;17747:805;;17190:1369;;;;;;;;;;;:::o;12630:431::-;12723:13;12738;12765:14;12784:26;12795:6;12803;12784:10;:26::i;:::-;12764:46;;;12821:32;12829:7;12838:6;12846;12821:7;:32::i;:::-;;12865:13;12880;12910:32;12918:7;12927:6;12935;12910:7;:32::i;:::-;-1:-1:-1;;;;;12898:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12898:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12898:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12898:59:0;;;;;;;-1:-1:-1;;;;;12864:93:0;;;;-1:-1:-1;12864:93:0;;-1:-1:-1;;;;;;12991:16:0;;;;;;;:62;;13034:8;13044;12991:62;;;13011:8;13021;12991:62;12968:85;;;;-1:-1:-1;12630:431:0;-1:-1:-1;;;;;;;12630:431:0:o;12382:190::-;12474:12;12521:32;12529:7;12538:6;12546;12521:7;:32::i;:::-;-1:-1:-1;;;;;12509:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12509:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12509:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12509:55:0;12499:65;;;12382:190;-1:-1:-1;;;;12382:190:0:o;8579:142::-;8631:6;8658;;;:30;;-1:-1:-1;;8673:5:0;;;8687:1;8682;8673:5;8682:1;8668:15;;;;;:20;8658:30;8650:63;;;;;-1:-1:-1;;;8650:63:0;;;;;;;;;;;;-1:-1:-1;;;8650:63:0;;;;;;;;;;;;;;8306:128;8390:5;;;8385:16;;;;8377:49;;;;;-1:-1:-1;;;8377:49:0;;;;;;;;;;;;-1:-1:-1;;;8377:49:0;;;;;;;;;;;;;
Swarm Source
ipfs://deaa13438bfe29cda565f74cc8a57dd992c0fa4ab2119102a479bb22c7359c37
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
CRONOS | 100.00% | $0.088736 | 0.000000000000001873 | <$0.000001 |
Loading...
Loading
Loading...
Loading
[ 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.