More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 886,191 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity... | 14170722 | 6 hrs ago | IN | 0 ETH | 0.0000003 | ||||
Swap Exact Token... | 14166623 | 8 hrs ago | IN | 0 ETH | 0.00000019 | ||||
Swap Exact Token... | 14166600 | 8 hrs ago | IN | 0 ETH | 0.00000019 | ||||
Swap Exact ETH F... | 14158872 | 12 hrs ago | IN | 0.01 ETH | 0.0000002 | ||||
Swap Exact Token... | 14158175 | 13 hrs ago | IN | 0 ETH | 0.00000019 | ||||
Swap Exact Token... | 14153829 | 15 hrs ago | IN | 0 ETH | 0.00000017 | ||||
Swap Exact Token... | 14150957 | 17 hrs ago | IN | 0 ETH | 0.00000018 | ||||
Swap Exact Token... | 14150844 | 17 hrs ago | IN | 0 ETH | 0.00000017 | ||||
Remove Liquidity... | 14147371 | 19 hrs ago | IN | 0 ETH | 0.00000036 | ||||
Swap Exact Token... | 14145400 | 20 hrs ago | IN | 0 ETH | 0.00000033 | ||||
Swap Exact Token... | 14138473 | 24 hrs ago | IN | 0 ETH | 0.00000019 | ||||
Remove Liquidity... | 14136975 | 24 hrs ago | IN | 0 ETH | 0.0000004 | ||||
Remove Liquidity... | 14102165 | 44 hrs ago | IN | 0 ETH | 0.0000003 | ||||
Swap Exact Token... | 14101127 | 44 hrs ago | IN | 0 ETH | 0.00000024 | ||||
Swap Exact Token... | 14099808 | 45 hrs ago | IN | 0 ETH | 0.00000024 | ||||
Swap Exact ETH F... | 14081635 | 2 days ago | IN | 0.01 ETH | 0.00000018 | ||||
Swap Exact Token... | 14081435 | 2 days ago | IN | 0 ETH | 0.00000019 | ||||
Swap Exact Token... | 14072642 | 2 days ago | IN | 0 ETH | 0.00000024 | ||||
Swap Exact Token... | 14052462 | 2 days ago | IN | 0 ETH | 0.00000023 | ||||
Remove Liquidity... | 14051721 | 3 days ago | IN | 0 ETH | 0.00000005 | ||||
Swap Exact Token... | 14047677 | 3 days ago | IN | 0 ETH | 0.00000021 | ||||
Remove Liquidity... | 14031482 | 3 days ago | IN | 0 ETH | 0.0000003 | ||||
Remove Liquidity... | 14028652 | 3 days ago | IN | 0 ETH | 0.00000038 | ||||
Remove Liquidity... | 14028626 | 3 days ago | IN | 0 ETH | 0.00000053 | ||||
Swap Exact Token... | 14028392 | 3 days ago | IN | 0 ETH | 0.00000025 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14170722 | 6 hrs ago | 0.00108148 ETH | ||||
14170722 | 6 hrs ago | 0.00108148 ETH | ||||
14166623 | 8 hrs ago | 0.01045287 ETH | ||||
14166623 | 8 hrs ago | 0.01045287 ETH | ||||
14166600 | 8 hrs ago | 0.01408024 ETH | ||||
14166600 | 8 hrs ago | 0.01408024 ETH | ||||
14158872 | 12 hrs ago | 0.01 ETH | ||||
14158175 | 13 hrs ago | 0.00179631 ETH | ||||
14158175 | 13 hrs ago | 0.00179631 ETH | ||||
14153829 | 15 hrs ago | 0.00157678 ETH | ||||
14153829 | 15 hrs ago | 0.00157678 ETH | ||||
14150957 | 17 hrs ago | 0.01988152 ETH | ||||
14150957 | 17 hrs ago | 0.01988152 ETH | ||||
14147371 | 19 hrs ago | 0.00908404 ETH | ||||
14147371 | 19 hrs ago | 0.00908404 ETH | ||||
14138473 | 24 hrs ago | 0.00092946 ETH | ||||
14138473 | 24 hrs ago | 0.00092946 ETH | ||||
14136975 | 24 hrs ago | 0.00021394 ETH | ||||
14136975 | 24 hrs ago | 0.00021394 ETH | ||||
14102165 | 44 hrs ago | 0.01420507 ETH | ||||
14102165 | 44 hrs ago | 0.01420507 ETH | ||||
14101127 | 44 hrs ago | 0.00002964 ETH | ||||
14101127 | 44 hrs ago | 0.00002964 ETH | ||||
14099808 | 45 hrs ago | 0.0163761 ETH | ||||
14099808 | 45 hrs ago | 0.0163761 ETH |
Loading...
Loading
Contract Name:
BlasterswapV2Router02
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at blastscan.io on 2024-03-01 */ // SPDX-License-Identifier: MIT pragma solidity =0.6.6; 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'); } } interface IBlast { function configureClaimableGas() external; function configureGovernor(address governor) external; function configureClaimableYield() external; function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256); function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256); } interface IBlasterswapV2Factory { 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; } interface IBlasterswapV2Pair { 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 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, address) external; } interface IBlasterswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IBlasterswapV2Router02 is IBlasterswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IBlastPoints { function configurePointsOperator(address operator) external; } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } 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"); } } library BlasterswapV2Library { 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, "BlasterswapV2Library: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "BlasterswapV2Library: 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"9895581041f0c2ea658b6c2e615187fa4eaa05e55ab576ce8164a1090d8e6575" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint reserveA, uint reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1, ) = IBlasterswapV2Pair( 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, "BlasterswapV2Library: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "BlasterswapV2Library: INSUFFICIENT_LIQUIDITY" ); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) internal pure returns (uint amountOut) { require( amountIn > 0, "BlasterswapV2Library: INSUFFICIENT_INPUT_AMOUNT" ); require( reserveIn > 0 && reserveOut > 0, "BlasterswapV2Library: INSUFFICIENT_LIQUIDITY" ); uint amountInWithFee = amountIn.mul(997); 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 ) internal pure returns (uint amountIn) { require( amountOut > 0, "BlasterswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT" ); require( reserveIn > 0 && reserveOut > 0, "BlasterswapV2Library: INSUFFICIENT_LIQUIDITY" ); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); 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, "BlasterswapV2Library: INVALID_PATH"); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint amountOut, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "BlasterswapV2Library: 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); } } } contract BlasterswapV2Router02 is IBlasterswapV2Router02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public constant blast = 0x4300000000000000000000000000000000000002; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "BlasterswapV2Router: EXPIRED"); _; } constructor(address _factory, address _WETH, address _governor) public { require(address(0) != _governor, 'BlasterswapV2: governor is zero address'); factory = _factory; WETH = _WETH; IBlast iblast = IBlast(blast); iblast.configureClaimableGas(); iblast.configureGovernor(_governor); } 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 ( IBlasterswapV2Factory(factory).getPair(tokenA, tokenB) == address(0) ) { IBlasterswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = BlasterswapV2Library.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = BlasterswapV2Library.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "BlasterswapV2Router: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = BlasterswapV2Library.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "BlasterswapV2Router: 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 = BlasterswapV2Library.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IBlasterswapV2Pair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = BlasterswapV2Library.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IBlasterswapV2Pair(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 = BlasterswapV2Library.pairFor(factory, tokenA, tokenB); IBlasterswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IBlasterswapV2Pair(pair).burn(to); (address token0, ) = BlasterswapV2Library.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require( amountA >= amountAMin, "BlasterswapV2Router: INSUFFICIENT_A_AMOUNT" ); require( amountB >= amountBMin, "BlasterswapV2Router: 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 = BlasterswapV2Library.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IBlasterswapV2Pair(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 = BlasterswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IBlasterswapV2Pair(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 = BlasterswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IBlasterswapV2Pair(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, ) = BlasterswapV2Library.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 ? BlasterswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IBlasterswapV2Pair( BlasterswapV2Library.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 = BlasterswapV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, BlasterswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _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 = BlasterswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "BlasterswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, BlasterswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "BlasterswapV2Router: INVALID_PATH"); amounts = BlasterswapV2Library.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( BlasterswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } 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, "BlasterswapV2Router: INVALID_PATH" ); amounts = BlasterswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "BlasterswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, BlasterswapV2Library.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]); } 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, "BlasterswapV2Router: INVALID_PATH" ); amounts = BlasterswapV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, BlasterswapV2Library.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]); } function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "BlasterswapV2Router: INVALID_PATH"); amounts = BlasterswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "BlasterswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( BlasterswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** 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, ) = BlasterswapV2Library.sortTokens(input, output); IBlasterswapV2Pair pair = IBlasterswapV2Pair( BlasterswapV2Library.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 = BlasterswapV2Library.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? BlasterswapV2Library.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, BlasterswapV2Library.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, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "BlasterswapV2Router: INVALID_PATH"); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( BlasterswapV2Library.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, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require( path[path.length - 1] == WETH, "BlasterswapV2Router: INVALID_PATH" ); TransferHelper.safeTransferFrom( path[0], msg.sender, BlasterswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "BlasterswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint amountA, uint reserveA, uint reserveB ) public pure virtual override returns (uint amountB) { return BlasterswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountOut) { return BlasterswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountIn) { return BlasterswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint amountIn, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return BlasterswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint amountOut, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return BlasterswapV2Library.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_governor","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":"blast","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162004bcc38038062004bcc833981810160405260608110156200003757600080fd5b50805160208201516040909201519091906001600160a01b0381166200008f5760405162461bcd60e51b815260040180806020018281038252602781526020018062004ba56027913960400191505060405180910390fd5b6001600160601b0319606084811b821660805283901b1660a05260408051634e606c4760e01b81529051734300000000000000000000000000000000000002918291634e606c479160048082019260009290919082900301818387803b158015620000f957600080fd5b505af11580156200010e573d6000803e3d6000fd5b50505050806001600160a01b031663eb864698836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156200016b57600080fd5b505af115801562000180573d6000803e3d6000fd5b505050505050505060805160601c60a05160601c6148ef620002b6600039806101aa5280610d6c5280610da75280610ec852806110e2528061149052806115f252806119dd5280611aec5280611ba25280611c825280611dc45280611e4c52806120a3528061213052806121f852806122d6528061236752806123db528061291d5280612bb45280612c0a5280612c3e5280612cb25280612e645280612fa3528061302b525080610f52528061102952806111a852806111e1528061132e528061151a52806115d052806117525280611d115280611e7e5280611ff3528061240d528061267852806128a252806128cb52806128fb5280612a7a5280612be85280612ef3528061305d528061395f52806139a25280613c6f5280613df552806142495280614310528061439052506148ef6000f3fe60806040526004361061019a5760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610b4e578063e8e3370014610bc1578063f305d71914610c41578063fb3bdb4114610c87576101d3565b8063baa2abde14610a25578063c45a015514610a82578063d06ca61f14610a97576101d3565b8063ad615dec116100bb578063ad615dec14610916578063af2979eb1461094c578063b6f9de951461099f576101d3565b806385f8c259146108335780638803dbee14610869578063ad5c464814610901576101d3565b806338ed1739116101435780635c11d7951161011d5780635c11d7951461067d578063791ac947146107155780637ff36ab5146107ad576101d3565b806338ed1739146104da5780634a25d94a146105725780635b0d59841461060a576101d3565b806318cbafe51161017457806318cbafe5146102bd5780631f00ca74146103a55780632195995c1461045c576101d3565b806302751cec146101d8578063054d50d414610244578063175e1a7d1461028c576101d3565b366101d357336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101d157fe5b005b600080fd5b3480156101e457600080fd5b5061022b600480360360c08110156101fb57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610d0d565b6040805192835260208301919091528051918290030190f35b34801561025057600080fd5b5061027a6004803603606081101561026757600080fd5b5080359060208101359060400135610e39565b60408051918252519081900360200190f35b34801561029857600080fd5b506102a1610e4e565b604080516001600160a01b039092168252519081900360200190f35b3480156102c957600080fd5b50610355600480360360a08110156102e057600080fd5b81359160208101359181019060608101604082013564010000000081111561030757600080fd5b82018360208201111561031957600080fd5b8035906020019184602083028401116401000000008311171561033b57600080fd5b91935091506001600160a01b038135169060200135610e66565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610391578181015183820152602001610379565b505050509050019250505060405180910390f35b3480156103b157600080fd5b50610355600480360360408110156103c857600080fd5b813591908101906040810160208201356401000000008111156103ea57600080fd5b8201836020820111156103fc57600080fd5b8035906020019184602083028401116401000000008311171561041e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111a1945050505050565b34801561046857600080fd5b5061022b600480360361016081101561048057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111d7565b3480156104e657600080fd5b50610355600480360360a08110156104fd57600080fd5b81359160208101359181019060608101604082013564010000000081111561052457600080fd5b82018360208201111561053657600080fd5b8035906020019184602083028401116401000000008311171561055857600080fd5b91935091506001600160a01b0381351690602001356112d1565b34801561057e57600080fd5b50610355600480360360a081101561059557600080fd5b8135916020810135918101906060810160408201356401000000008111156105bc57600080fd5b8201836020820111156105ce57600080fd5b803590602001918460208302840111640100000000831117156105f057600080fd5b91935091506001600160a01b03813516906020013561142e565b34801561061657600080fd5b5061027a600480360361014081101561062e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356115c8565b34801561068957600080fd5b506101d1600480360360a08110156106a057600080fd5b8135916020810135918101906060810160408201356401000000008111156106c757600080fd5b8201836020820111156106d957600080fd5b803590602001918460208302840111640100000000831117156106fb57600080fd5b91935091506001600160a01b0381351690602001356116d6565b34801561072157600080fd5b506101d1600480360360a081101561073857600080fd5b81359160208101359181019060608101604082013564010000000081111561075f57600080fd5b82018360208201111561077157600080fd5b8035906020019184602083028401116401000000008311171561079357600080fd5b91935091506001600160a01b03813516906020013561197d565b610355600480360360808110156107c357600080fd5b813591908101906040810160208201356401000000008111156107e557600080fd5b8201836020820111156107f757600080fd5b8035906020019184602083028401116401000000008311171561081957600080fd5b91935091506001600160a01b038135169060200135611c28565b34801561083f57600080fd5b5061027a6004803603606081101561085657600080fd5b5080359060208101359060400135611f89565b34801561087557600080fd5b50610355600480360360a081101561088c57600080fd5b8135916020810135918101906060810160408201356401000000008111156108b357600080fd5b8201836020820111156108c557600080fd5b803590602001918460208302840111640100000000831117156108e757600080fd5b91935091506001600160a01b038135169060200135611f96565b34801561090d57600080fd5b506102a16120a1565b34801561092257600080fd5b5061027a6004803603606081101561093957600080fd5b50803590602081013590604001356120c5565b34801561095857600080fd5b5061027a600480360360c081101561096f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356120d2565b6101d1600480360360808110156109b557600080fd5b813591908101906040810160208201356401000000008111156109d757600080fd5b8201836020820111156109e957600080fd5b80359060200191846020830284011164010000000083111715610a0b57600080fd5b91935091506001600160a01b03813516906020013561227e565b348015610a3157600080fd5b5061022b600480360360e0811015610a4857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612618565b348015610a8e57600080fd5b506102a16128a0565b348015610aa357600080fd5b5061035560048036036040811015610aba57600080fd5b81359190810190604081016020820135640100000000811115610adc57600080fd5b820183602082011115610aee57600080fd5b80359060200191846020830284011164010000000083111715610b1057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506128c4945050505050565b348015610b5a57600080fd5b5061022b6004803603610140811015610b7257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356128f1565b348015610bcd57600080fd5b50610c236004803603610100811015610be557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612a05565b60408051938452602084019290925282820152519081900360600190f35b610c23600480360360c0811015610c5757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612b53565b61035560048036036080811015610c9d57600080fd5b81359190810190604081016020820135640100000000811115610cbf57600080fd5b820183602082011115610cd157600080fd5b80359060200191846020830284011164010000000083111715610cf357600080fd5b91935091506001600160a01b038135169060200135612e0a565b6000808242811015610d66576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b610d95897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612618565b9093509150610da589868561319a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e0b57600080fd5b505af1158015610e1f573d6000803e3d6000fd5b50505050610e2d858361331c565b50965096945050505050565b6000610e46848484613414565b949350505050565b73430000000000000000000000000000000000000281565b60608142811015610ebe576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610ef857fe5b905060200201356001600160a01b03166001600160a01b031614610f4d5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b610fab7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b91508682600184510381518110610fbe57fe5b602002602001015110156110035760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b6110a18686600081811061101357fe5b905060200201356001600160a01b0316336110877f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061105557fe5b905060200201356001600160a01b03168b8b600181811061107257fe5b905060200201356001600160a01b031661363a565b8560008151811061109457fe5b6020026020010151613725565b6110e0828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138b0915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061111f57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b50505050611196848360018551038151811061118957fe5b602002602001015161331c565b509695505050505050565b60606111ce7f00000000000000000000000000000000000000000000000000000000000000008484613af6565b90505b92915050565b60008060006112077f00000000000000000000000000000000000000000000000000000000000000008f8f61363a565b9050600087611216578c61121a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b505050506112b78f8f8f8f8f8f8f612618565b809450819550505050509b509b9950505050505050505050565b60608142811015611329576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6113877f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b9150868260018451038151811061139a57fe5b602002602001015110156113df5760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b6113ef8686600081811061101357fe5b611196828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b60608142811015611486576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106114c057fe5b905060200201356001600160a01b03166001600160a01b0316146115155760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b6115737f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b9150868260008151811061158357fe5b602002602001015111156110035760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b6000806116167f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061363a565b9050600086611625578b611629565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506116c58d8d8d8d8d8d6120d2565b9d9c50505050505050505050505050565b804281101561172c576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6117a18585600081811061173c57fe5b905060200201356001600160a01b03163361179b7f00000000000000000000000000000000000000000000000000000000000000008989600081811061177e57fe5b905060200201356001600160a01b03168a8a600181811061107257fe5b8a613725565b6000858560001981018181106117b357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b50516040805160208881028281018201909352888252929350611884929091899189918291850190849080828437600092019190915250889250613c18915050565b86611936828888600019810181811061189957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b50519063ffffffff613f4316565b10156119735760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b5050505050505050565b80428110156119d3576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611a0d57fe5b905060200201356001600160a01b03166001600160a01b031614611a625760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b611a728585600081811061173c57fe5b611ab0858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613c18915050565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611b3357600080fd5b505afa158015611b47573d6000803e3d6000fd5b505050506040513d6020811015611b5d57600080fd5b5051905086811015611ba05760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c0657600080fd5b505af1158015611c1a573d6000803e3d6000fd5b50505050611973848261331c565b60608142811015611c80576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611cb757fe5b905060200201356001600160a01b03166001600160a01b031614611d0c5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b611d6a7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b91508682600184510381518110611d7d57fe5b60200260200101511015611dc25760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611dfe57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e3157600080fd5b505af1158015611e45573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611eaa7f00000000000000000000000000000000000000000000000000000000000000008989600081811061177e57fe5b84600081518110611eb757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f0e57600080fd5b505af1158015611f22573d6000803e3d6000fd5b505050506040513d6020811015611f3857600080fd5b5051611f4057fe5b611f7f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b5095945050505050565b6000610e46848484613f9b565b60608142811015611fee576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b61204c7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b9150868260008151811061205c57fe5b602002602001015111156113df5760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e4684848461408b565b6000814281101561212a576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612159887f00000000000000000000000000000000000000000000000000000000000000008989893089612618565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506121f692508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d60208110156121ef57600080fd5b505161319a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561225c57600080fd5b505af1158015612270573d6000803e3d6000fd5b50505050611196848361331c565b80428110156122d4576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061230b57fe5b905060200201356001600160a01b03166001600160a01b0316146123605760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123c057600080fd5b505af11580156123d4573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6124397f00000000000000000000000000000000000000000000000000000000000000008989600081811061177e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505050506040513d60208110156124b357600080fd5b50516124bb57fe5b6000868660001981018181106124cd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d602081101561255c57600080fd5b5051604080516020898102828101820190935289825292935061259e9290918a918a918291850190849080828437600092019190915250899250613c18915050565b8761193682898960001981018181106125b357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b6000808242811015612671576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b600061269e7f00000000000000000000000000000000000000000000000000000000000000008c8c61363a565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561271257600080fd5b505af1158015612726573d6000803e3d6000fd5b505050506040513d602081101561273c57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b505050506040513d60408110156127cc57600080fd5b508051602090910151909250905060006127e68e8e614137565b509050806001600160a01b03168e6001600160a01b03161461280957818361280c565b82825b90975095508a8710156128505760405162461bcd60e51b815260040180806020018281038252602a815260200180614712602a913960400191505060405180910390fd5b8986101561288f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614683602a913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111ce7f00000000000000000000000000000000000000000000000000000000000000008484613504565b60008060006129417f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061363a565b9050600087612950578c612954565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b505050506129f08e8e8e8e8e8e610d0d565b909f909e509c50505050505050505050505050565b60008060008342811015612a60576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612a6e8c8c8c8c8c8c6141ff565b90945092506000612aa07f00000000000000000000000000000000000000000000000000000000000000008e8e61363a565b9050612aae8d338388613725565b612aba8c338387613725565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612b1257600080fd5b505af1158015612b26573d6000803e3d6000fd5b505050506040513d6020811015612b3c57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612bae576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612bdc8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141ff565b90945092506000612c2e7f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061363a565b9050612c3c8b338388613725565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c9757600080fd5b505af1158015612cab573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b505050506040513d6020811015612d5a57600080fd5b5051612d6257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b505050506040513d6020811015612de457600080fd5b5051925034841015612dfc57612dfc3385340361331c565b505096509650969350505050565b60608142811015612e62576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612e9957fe5b905060200201356001600160a01b03166001600160a01b031614612eee5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b612f4c7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b91503482600081518110612f5c57fe5b60200260200101511115612fa15760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612fdd57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6130897f00000000000000000000000000000000000000000000000000000000000000008989600081811061177e57fe5b8460008151811061309657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050506040513d602081101561311757600080fd5b505161311f57fe5b61315e828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b8160008151811061316b57fe5b6020026020010151341115611f7f57611f7f338360008151811061318b57fe5b6020026020010151340361331c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106132455780518252601f199092019160209182019101613226565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146132a7576040519150601f19603f3d011682016040523d82523d6000602084013e6132ac565b606091505b50915091508180156132da5750805115806132da57508080602001905160208110156132d757600080fd5b50515b6133155760405162461bcd60e51b815260040180806020018281038252602d815260200180614836602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106133685780518252601f199092019160209182019101613349565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133ca576040519150601f19603f3d011682016040523d82523d6000602084013e6133cf565b606091505b505090508061340f5760405162461bcd60e51b81526004018080602001828103825260348152602001806146de6034913960400191505060405180910390fd5b505050565b60008084116134545760405162461bcd60e51b815260040180806020018281038252602f8152602001806147d8602f913960400191505060405180910390fd5b6000831180156134645750600082115b61349f5760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b60006134b3856103e563ffffffff6144a516565b905060006134c7828563ffffffff6144a516565b905060006134ed836134e1886103e863ffffffff6144a516565b9063ffffffff61451116565b90508082816134f857fe5b04979650505050505050565b60606002825110156135475760405162461bcd60e51b81526004018080602001828103825260228152602001806146616022913960400191505060405180910390fd5b815167ffffffffffffffff8111801561355f57600080fd5b50604051908082528060200260200182016040528015613589578160200160208202803683370190505b509050828160008151811061359a57fe5b60200260200101818152505060005b6001835103811015613632576000806135ec878685815181106135c857fe5b60200260200101518786600101815181106135df57fe5b6020026020010151614569565b9150915061360e8484815181106135ff57fe5b60200260200101518383613414565b84846001018151811061361d57fe5b602090810291909101015250506001016135a9565b509392505050565b60008060006136498585614137565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f9895581041f0c2ea658b6c2e615187fa4eaa05e55ab576ce8164a1090d8e6575609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106137d85780518252601f1990920191602091820191016137b9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461383a576040519150601f19603f3d011682016040523d82523d6000602084013e61383f565b606091505b509150915081801561386d57508051158061386d575080806020019051602081101561386a57600080fd5b50515b6138a85760405162461bcd60e51b81526004018080602001828103825260318152602001806146ad6031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613af0576000808483815181106138ce57fe5b60200260200101518584600101815181106138e557fe5b60200260200101519150915060006138fd8383614137565b509050600087856001018151811061391157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461393f57826000613943565b6000835b91509150600060028a5103881061395a578861399b565b61399b7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061398e57fe5b602002602001015161363a565b90506139c87f0000000000000000000000000000000000000000000000000000000000000000888861363a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a05576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a76578181015183820152602001613a5e565b50505050905090810190601f168015613aa35780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ac557600080fd5b505af1158015613ad9573d6000803e3d6000fd5b5050600190990198506138b3975050505050505050565b50505050565b6060600282511015613b395760405162461bcd60e51b81526004018080602001828103825260228152602001806146616022913960400191505060405180910390fd5b815167ffffffffffffffff81118015613b5157600080fd5b50604051908082528060200260200182016040528015613b7b578160200160208202803683370190505b5090508281600183510381518110613b8f57fe5b60209081029190910101528151600019015b801561363257600080613bd187866001860381518110613bbd57fe5b60200260200101518786815181106135df57fe5b91509150613bf3848481518110613be457fe5b60200260200101518383613f9b565b846001850381518110613c0257fe5b6020908102919091010152505060001901613ba1565b60005b600183510381101561340f57600080848381518110613c3657fe5b6020026020010151858460010181518110613c4d57fe5b6020026020010151915091506000613c658383614137565b5090506000613c957f0000000000000000000000000000000000000000000000000000000000000000858561363a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050506040513d6060811015613d0057600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613d3d578284613d40565b83835b91509150613d9e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b9550613dab868383613414565b945050505050600080856001600160a01b0316886001600160a01b031614613dd557826000613dd9565b6000835b91509150600060028c51038a10613df0578a613e24565b613e247f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061398e57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613ec7578181015183820152602001613eaf565b50505050905090810190601f168015613ef45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f1657600080fd5b505af1158015613f2a573d6000803e3d6000fd5b50506001909b019a50613c1b9950505050505050505050565b808203828111156111d1576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613fdb5760405162461bcd60e51b815260040180806020018281038252603081526020018061477f6030913960400191505060405180910390fd5b600083118015613feb5750600082115b6140265760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b600061404a6103e861403e868863ffffffff6144a516565b9063ffffffff6144a516565b905060006140646103e561403e868963ffffffff613f4316565b9050614081600182848161407457fe5b049063ffffffff61451116565b9695505050505050565b60008084116140cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806146386029913960400191505060405180910390fd5b6000831180156140db5750600082115b6141165760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b82614127858463ffffffff6144a516565b8161412e57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561418b5760405162461bcd60e51b81526004018080602001828103825260298152602001806147af6029913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106141ab5782846141ae565b83835b90925090506001600160a01b0382166141f85760405162461bcd60e51b815260040180806020018281038252602281526020018061473c6022913960400191505060405180910390fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561429257600080fd5b505afa1580156142a6573d6000803e3d6000fd5b505050506040513d60208110156142bc57600080fd5b50516001600160a01b0316141561438857604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561435b57600080fd5b505af115801561436f573d6000803e3d6000fd5b505050506040513d602081101561438557600080fd5b50505b6000806143b67f00000000000000000000000000000000000000000000000000000000000000008b8b614569565b915091508160001480156143c8575080155b156143d857879350869250614498565b60006143e589848461408b565b9050878111614438578581101561442d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614683602a913960400191505060405180910390fd5b889450925082614496565b600061444589848661408b565b90508981111561445157fe5b878110156144905760405162461bcd60e51b815260040180806020018281038252602a815260200180614712602a913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806144c0575050808202828282816144bd57fe5b04145b6111d1576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156111d1576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006145788585614137565b50905060008061458988888861363a565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145c157600080fd5b505afa1580156145d5573d6000803e3d6000fd5b505050506040513d60608110156145eb57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614625578082614628565b81815b9099909850965050505050505056fe426c61737465727377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54426c61737465727377617056324c6962726172793a20494e56414c49445f50415448426c6173746572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564426c6173746572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54426c61737465727377617056324c6962726172793a205a45524f5f41444452455353426c6173746572737761705632526f757465723a20494e56414c49445f50415448426c61737465727377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54426c61737465727377617056324c6962726172793a204944454e544943414c5f414444524553534553426c61737465727377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54426c6173746572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564426c6173746572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54426c61737465727377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220d2e47ebbe94a0e3392d4fcf2195909630855a0b6db3df7ec548c324b9f7bde2a64736f6c63430006060033426c61737465727377617056323a20676f7665726e6f72206973207a65726f20616464726573730000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd00000000000000000000000043000000000000000000000000000000000000040000000000000000000000006b5d3df5269d324c29da4718b406c4a4057fb792
Deployed Bytecode
0x60806040526004361061019a5760003560e01c806385f8c259116100e1578063baa2abde1161008a578063ded9382a11610064578063ded9382a14610b4e578063e8e3370014610bc1578063f305d71914610c41578063fb3bdb4114610c87576101d3565b8063baa2abde14610a25578063c45a015514610a82578063d06ca61f14610a97576101d3565b8063ad615dec116100bb578063ad615dec14610916578063af2979eb1461094c578063b6f9de951461099f576101d3565b806385f8c259146108335780638803dbee14610869578063ad5c464814610901576101d3565b806338ed1739116101435780635c11d7951161011d5780635c11d7951461067d578063791ac947146107155780637ff36ab5146107ad576101d3565b806338ed1739146104da5780634a25d94a146105725780635b0d59841461060a576101d3565b806318cbafe51161017457806318cbafe5146102bd5780631f00ca74146103a55780632195995c1461045c576101d3565b806302751cec146101d8578063054d50d414610244578063175e1a7d1461028c576101d3565b366101d357336001600160a01b037f000000000000000000000000430000000000000000000000000000000000000416146101d157fe5b005b600080fd5b3480156101e457600080fd5b5061022b600480360360c08110156101fb57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610d0d565b6040805192835260208301919091528051918290030190f35b34801561025057600080fd5b5061027a6004803603606081101561026757600080fd5b5080359060208101359060400135610e39565b60408051918252519081900360200190f35b34801561029857600080fd5b506102a1610e4e565b604080516001600160a01b039092168252519081900360200190f35b3480156102c957600080fd5b50610355600480360360a08110156102e057600080fd5b81359160208101359181019060608101604082013564010000000081111561030757600080fd5b82018360208201111561031957600080fd5b8035906020019184602083028401116401000000008311171561033b57600080fd5b91935091506001600160a01b038135169060200135610e66565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610391578181015183820152602001610379565b505050509050019250505060405180910390f35b3480156103b157600080fd5b50610355600480360360408110156103c857600080fd5b813591908101906040810160208201356401000000008111156103ea57600080fd5b8201836020820111156103fc57600080fd5b8035906020019184602083028401116401000000008311171561041e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111a1945050505050565b34801561046857600080fd5b5061022b600480360361016081101561048057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111d7565b3480156104e657600080fd5b50610355600480360360a08110156104fd57600080fd5b81359160208101359181019060608101604082013564010000000081111561052457600080fd5b82018360208201111561053657600080fd5b8035906020019184602083028401116401000000008311171561055857600080fd5b91935091506001600160a01b0381351690602001356112d1565b34801561057e57600080fd5b50610355600480360360a081101561059557600080fd5b8135916020810135918101906060810160408201356401000000008111156105bc57600080fd5b8201836020820111156105ce57600080fd5b803590602001918460208302840111640100000000831117156105f057600080fd5b91935091506001600160a01b03813516906020013561142e565b34801561061657600080fd5b5061027a600480360361014081101561062e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356115c8565b34801561068957600080fd5b506101d1600480360360a08110156106a057600080fd5b8135916020810135918101906060810160408201356401000000008111156106c757600080fd5b8201836020820111156106d957600080fd5b803590602001918460208302840111640100000000831117156106fb57600080fd5b91935091506001600160a01b0381351690602001356116d6565b34801561072157600080fd5b506101d1600480360360a081101561073857600080fd5b81359160208101359181019060608101604082013564010000000081111561075f57600080fd5b82018360208201111561077157600080fd5b8035906020019184602083028401116401000000008311171561079357600080fd5b91935091506001600160a01b03813516906020013561197d565b610355600480360360808110156107c357600080fd5b813591908101906040810160208201356401000000008111156107e557600080fd5b8201836020820111156107f757600080fd5b8035906020019184602083028401116401000000008311171561081957600080fd5b91935091506001600160a01b038135169060200135611c28565b34801561083f57600080fd5b5061027a6004803603606081101561085657600080fd5b5080359060208101359060400135611f89565b34801561087557600080fd5b50610355600480360360a081101561088c57600080fd5b8135916020810135918101906060810160408201356401000000008111156108b357600080fd5b8201836020820111156108c557600080fd5b803590602001918460208302840111640100000000831117156108e757600080fd5b91935091506001600160a01b038135169060200135611f96565b34801561090d57600080fd5b506102a16120a1565b34801561092257600080fd5b5061027a6004803603606081101561093957600080fd5b50803590602081013590604001356120c5565b34801561095857600080fd5b5061027a600480360360c081101561096f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356120d2565b6101d1600480360360808110156109b557600080fd5b813591908101906040810160208201356401000000008111156109d757600080fd5b8201836020820111156109e957600080fd5b80359060200191846020830284011164010000000083111715610a0b57600080fd5b91935091506001600160a01b03813516906020013561227e565b348015610a3157600080fd5b5061022b600480360360e0811015610a4857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612618565b348015610a8e57600080fd5b506102a16128a0565b348015610aa357600080fd5b5061035560048036036040811015610aba57600080fd5b81359190810190604081016020820135640100000000811115610adc57600080fd5b820183602082011115610aee57600080fd5b80359060200191846020830284011164010000000083111715610b1057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506128c4945050505050565b348015610b5a57600080fd5b5061022b6004803603610140811015610b7257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356128f1565b348015610bcd57600080fd5b50610c236004803603610100811015610be557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612a05565b60408051938452602084019290925282820152519081900360600190f35b610c23600480360360c0811015610c5757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612b53565b61035560048036036080811015610c9d57600080fd5b81359190810190604081016020820135640100000000811115610cbf57600080fd5b820183602082011115610cd157600080fd5b80359060200191846020830284011164010000000083111715610cf357600080fd5b91935091506001600160a01b038135169060200135612e0a565b6000808242811015610d66576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b610d95897f00000000000000000000000043000000000000000000000000000000000000048a8a8a308a612618565b9093509150610da589868561319a565b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e0b57600080fd5b505af1158015610e1f573d6000803e3d6000fd5b50505050610e2d858361331c565b50965096945050505050565b6000610e46848484613414565b949350505050565b73430000000000000000000000000000000000000281565b60608142811015610ebe576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000043000000000000000000000000000000000000041686866000198101818110610ef857fe5b905060200201356001600160a01b03166001600160a01b031614610f4d5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b610fab7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b91508682600184510381518110610fbe57fe5b602002602001015110156110035760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b6110a18686600081811061101357fe5b905060200201356001600160a01b0316336110877f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8a8a600081811061105557fe5b905060200201356001600160a01b03168b8b600181811061107257fe5b905060200201356001600160a01b031661363a565b8560008151811061109457fe5b6020026020010151613725565b6110e0828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138b0915050565b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b0316632e1a7d4d8360018551038151811061111f57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b50505050611196848360018551038151811061118957fe5b602002602001015161331c565b509695505050505050565b60606111ce7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8484613af6565b90505b92915050565b60008060006112077f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8f8f61363a565b9050600087611216578c61121a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b505050506112b78f8f8f8f8f8f8f612618565b809450819550505050509b509b9950505050505050505050565b60608142811015611329576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6113877f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b9150868260018451038151811061139a57fe5b602002602001015110156113df5760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b6113ef8686600081811061101357fe5b611196828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b60608142811015611486576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000430000000000000000000000000000000000000416868660001981018181106114c057fe5b905060200201356001600160a01b03166001600160a01b0316146115155760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b6115737f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b9150868260008151811061158357fe5b602002602001015111156110035760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b6000806116167f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8d7f000000000000000000000000430000000000000000000000000000000000000461363a565b9050600086611625578b611629565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506116c58d8d8d8d8d8d6120d2565b9d9c50505050505050505050505050565b804281101561172c576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6117a18585600081811061173c57fe5b905060200201356001600160a01b03163361179b7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8989600081811061177e57fe5b905060200201356001600160a01b03168a8a600181811061107257fe5b8a613725565b6000858560001981018181106117b357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181857600080fd5b505afa15801561182c573d6000803e3d6000fd5b505050506040513d602081101561184257600080fd5b50516040805160208881028281018201909352888252929350611884929091899189918291850190849080828437600092019190915250889250613c18915050565b86611936828888600019810181811061189957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b50519063ffffffff613f4316565b10156119735760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b5050505050505050565b80428110156119d3576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000043000000000000000000000000000000000000041685856000198101818110611a0d57fe5b905060200201356001600160a01b03166001600160a01b031614611a625760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b611a728585600081811061173c57fe5b611ab0858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613c18915050565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b037f000000000000000000000000430000000000000000000000000000000000000416916370a0823191602480820192602092909190829003018186803b158015611b3357600080fd5b505afa158015611b47573d6000803e3d6000fd5b505050506040513d6020811015611b5d57600080fd5b5051905086811015611ba05760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c0657600080fd5b505af1158015611c1a573d6000803e3d6000fd5b50505050611973848261331c565b60608142811015611c80576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031686866000818110611cb757fe5b905060200201356001600160a01b03166001600160a01b031614611d0c5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b611d6a7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd3488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350492505050565b91508682600184510381518110611d7d57fe5b60200260200101511015611dc25760405162461bcd60e51b815260040180806020018281038252602f815260200180614807602f913960400191505060405180910390fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663d0e30db083600081518110611dfe57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e3157600080fd5b505af1158015611e45573d6000803e3d6000fd5b50505050507f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663a9059cbb611eaa7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8989600081811061177e57fe5b84600081518110611eb757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f0e57600080fd5b505af1158015611f22573d6000803e3d6000fd5b505050506040513d6020811015611f3857600080fd5b5051611f4057fe5b611f7f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b5095945050505050565b6000610e46848484613f9b565b60608142811015611fee576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b61204c7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b9150868260008151811061205c57fe5b602002602001015111156113df5760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b7f000000000000000000000000430000000000000000000000000000000000000481565b6000610e4684848461408b565b6000814281101561212a576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612159887f00000000000000000000000043000000000000000000000000000000000000048989893089612618565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506121f692508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d60208110156121ef57600080fd5b505161319a565b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561225c57600080fd5b505af1158015612270573d6000803e3d6000fd5b50505050611196848361331c565b80428110156122d4576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b03168585600081811061230b57fe5b905060200201356001600160a01b03166001600160a01b0316146123605760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b60003490507f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123c057600080fd5b505af11580156123d4573d6000803e3d6000fd5b50505050507f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663a9059cbb6124397f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8989600081811061177e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505050506040513d60208110156124b357600080fd5b50516124bb57fe5b6000868660001981018181106124cd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d602081101561255c57600080fd5b5051604080516020898102828101820190935289825292935061259e9290918a918a918291850190849080828437600092019190915250899250613c18915050565b8761193682898960001981018181106125b357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b6000808242811015612671576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b600061269e7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8c8c61363a565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561271257600080fd5b505af1158015612726573d6000803e3d6000fd5b505050506040513d602081101561273c57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b505050506040513d60408110156127cc57600080fd5b508051602090910151909250905060006127e68e8e614137565b509050806001600160a01b03168e6001600160a01b03161461280957818361280c565b82825b90975095508a8710156128505760405162461bcd60e51b815260040180806020018281038252602a815260200180614712602a913960400191505060405180910390fd5b8986101561288f5760405162461bcd60e51b815260040180806020018281038252602a815260200180614683602a913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd81565b60606111ce7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8484613504565b60008060006129417f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8e7f000000000000000000000000430000000000000000000000000000000000000461363a565b9050600087612950578c612954565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b505050506129f08e8e8e8e8e8e610d0d565b909f909e509c50505050505050505050505050565b60008060008342811015612a60576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612a6e8c8c8c8c8c8c6141ff565b90945092506000612aa07f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8e8e61363a565b9050612aae8d338388613725565b612aba8c338387613725565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612b1257600080fd5b505af1158015612b26573d6000803e3d6000fd5b505050506040513d6020811015612b3c57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612bae576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b612bdc8a7f00000000000000000000000043000000000000000000000000000000000000048b348c8c6141ff565b90945092506000612c2e7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8c7f000000000000000000000000430000000000000000000000000000000000000461363a565b9050612c3c8b338388613725565b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c9757600080fd5b505af1158015612cab573d6000803e3d6000fd5b50505050507f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b505050506040513d6020811015612d5a57600080fd5b5051612d6257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b505050506040513d6020811015612de457600080fd5b5051925034841015612dfc57612dfc3385340361331c565b505096509650969350505050565b60608142811015612e62576040805162461bcd60e51b815260206004820152601c60248201527f426c6173746572737761705632526f757465723a204558504952454400000000604482015290519081900360640190fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031686866000818110612e9957fe5b905060200201356001600160a01b03166001600160a01b031614612eee5760405162461bcd60e51b815260040180806020018281038252602181526020018061475e6021913960400191505060405180910390fd5b612f4c7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd88888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af692505050565b91503482600081518110612f5c57fe5b60200260200101511115612fa15760405162461bcd60e51b815260040180806020018281038252602b815260200180614863602b913960400191505060405180910390fd5b7f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663d0e30db083600081518110612fdd57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050507f00000000000000000000000043000000000000000000000000000000000000046001600160a01b031663a9059cbb6130897f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8989600081811061177e57fe5b8460008151811061309657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050506040513d602081101561311757600080fd5b505161311f57fe5b61315e828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138b0915050565b8160008151811061316b57fe5b6020026020010151341115611f7f57611f7f338360008151811061318b57fe5b6020026020010151340361331c565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106132455780518252601f199092019160209182019101613226565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146132a7576040519150601f19603f3d011682016040523d82523d6000602084013e6132ac565b606091505b50915091508180156132da5750805115806132da57508080602001905160208110156132d757600080fd5b50515b6133155760405162461bcd60e51b815260040180806020018281038252602d815260200180614836602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106133685780518252601f199092019160209182019101613349565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133ca576040519150601f19603f3d011682016040523d82523d6000602084013e6133cf565b606091505b505090508061340f5760405162461bcd60e51b81526004018080602001828103825260348152602001806146de6034913960400191505060405180910390fd5b505050565b60008084116134545760405162461bcd60e51b815260040180806020018281038252602f8152602001806147d8602f913960400191505060405180910390fd5b6000831180156134645750600082115b61349f5760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b60006134b3856103e563ffffffff6144a516565b905060006134c7828563ffffffff6144a516565b905060006134ed836134e1886103e863ffffffff6144a516565b9063ffffffff61451116565b90508082816134f857fe5b04979650505050505050565b60606002825110156135475760405162461bcd60e51b81526004018080602001828103825260228152602001806146616022913960400191505060405180910390fd5b815167ffffffffffffffff8111801561355f57600080fd5b50604051908082528060200260200182016040528015613589578160200160208202803683370190505b509050828160008151811061359a57fe5b60200260200101818152505060005b6001835103811015613632576000806135ec878685815181106135c857fe5b60200260200101518786600101815181106135df57fe5b6020026020010151614569565b9150915061360e8484815181106135ff57fe5b60200260200101518383613414565b84846001018151811061361d57fe5b602090810291909101015250506001016135a9565b509392505050565b60008060006136498585614137565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f9895581041f0c2ea658b6c2e615187fa4eaa05e55ab576ce8164a1090d8e6575609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106137d85780518252601f1990920191602091820191016137b9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461383a576040519150601f19603f3d011682016040523d82523d6000602084013e61383f565b606091505b509150915081801561386d57508051158061386d575080806020019051602081101561386a57600080fd5b50515b6138a85760405162461bcd60e51b81526004018080602001828103825260318152602001806146ad6031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613af0576000808483815181106138ce57fe5b60200260200101518584600101815181106138e557fe5b60200260200101519150915060006138fd8383614137565b509050600087856001018151811061391157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461393f57826000613943565b6000835b91509150600060028a5103881061395a578861399b565b61399b7f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd878c8b6002018151811061398e57fe5b602002602001015161363a565b90506139c87f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd888861363a565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a05576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a76578181015183820152602001613a5e565b50505050905090810190601f168015613aa35780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ac557600080fd5b505af1158015613ad9573d6000803e3d6000fd5b5050600190990198506138b3975050505050505050565b50505050565b6060600282511015613b395760405162461bcd60e51b81526004018080602001828103825260228152602001806146616022913960400191505060405180910390fd5b815167ffffffffffffffff81118015613b5157600080fd5b50604051908082528060200260200182016040528015613b7b578160200160208202803683370190505b5090508281600183510381518110613b8f57fe5b60209081029190910101528151600019015b801561363257600080613bd187866001860381518110613bbd57fe5b60200260200101518786815181106135df57fe5b91509150613bf3848481518110613be457fe5b60200260200101518383613f9b565b846001850381518110613c0257fe5b6020908102919091010152505060001901613ba1565b60005b600183510381101561340f57600080848381518110613c3657fe5b6020026020010151858460010181518110613c4d57fe5b6020026020010151915091506000613c658383614137565b5090506000613c957f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd858561363a565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613cd657600080fd5b505afa158015613cea573d6000803e3d6000fd5b505050506040513d6060811015613d0057600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613d3d578284613d40565b83835b91509150613d9e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118fe57600080fd5b9550613dab868383613414565b945050505050600080856001600160a01b0316886001600160a01b031614613dd557826000613dd9565b6000835b91509150600060028c51038a10613df0578a613e24565b613e247f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd898e8d6002018151811061398e57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613ec7578181015183820152602001613eaf565b50505050905090810190601f168015613ef45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f1657600080fd5b505af1158015613f2a573d6000803e3d6000fd5b50506001909b019a50613c1b9950505050505050505050565b808203828111156111d1576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613fdb5760405162461bcd60e51b815260040180806020018281038252603081526020018061477f6030913960400191505060405180910390fd5b600083118015613feb5750600082115b6140265760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b600061404a6103e861403e868863ffffffff6144a516565b9063ffffffff6144a516565b905060006140646103e561403e868963ffffffff613f4316565b9050614081600182848161407457fe5b049063ffffffff61451116565b9695505050505050565b60008084116140cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806146386029913960400191505060405180910390fd5b6000831180156140db5750600082115b6141165760405162461bcd60e51b815260040180806020018281038252602c81526020018061488e602c913960400191505060405180910390fd5b82614127858463ffffffff6144a516565b8161412e57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561418b5760405162461bcd60e51b81526004018080602001828103825260298152602001806147af6029913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106141ab5782846141ae565b83835b90925090506001600160a01b0382166141f85760405162461bcd60e51b815260040180806020018281038252602281526020018061473c6022913960400191505060405180910390fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd9092169163e6a4390591604480820192602092909190829003018186803b15801561429257600080fd5b505afa1580156142a6573d6000803e3d6000fd5b505050506040513d60208110156142bc57600080fd5b50516001600160a01b0316141561438857604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd9092169163c9c65396916044808201926020929091908290030181600087803b15801561435b57600080fd5b505af115801561436f573d6000803e3d6000fd5b505050506040513d602081101561438557600080fd5b50505b6000806143b67f0000000000000000000000009cc1599d4378ea41d444642d18aa9be44f709ffd8b8b614569565b915091508160001480156143c8575080155b156143d857879350869250614498565b60006143e589848461408b565b9050878111614438578581101561442d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614683602a913960400191505060405180910390fd5b889450925082614496565b600061444589848661408b565b90508981111561445157fe5b878110156144905760405162461bcd60e51b815260040180806020018281038252602a815260200180614712602a913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806144c0575050808202828282816144bd57fe5b04145b6111d1576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156111d1576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006145788585614137565b50905060008061458988888861363a565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145c157600080fd5b505afa1580156145d5573d6000803e3d6000fd5b505050506040513d60608110156145eb57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614625578082614628565b81815b9099909850965050505050505056fe426c61737465727377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54426c61737465727377617056324c6962726172793a20494e56414c49445f50415448426c6173746572737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564426c6173746572737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54426c61737465727377617056324c6962726172793a205a45524f5f41444452455353426c6173746572737761705632526f757465723a20494e56414c49445f50415448426c61737465727377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54426c61737465727377617056324c6962726172793a204944454e544943414c5f414444524553534553426c61737465727377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54426c6173746572737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564426c6173746572737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54426c61737465727377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220d2e47ebbe94a0e3392d4fcf2195909630855a0b6db3df7ec548c324b9f7bde2a64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009CC1599D4378Ea41d444642D18AA9Be44f709ffD00000000000000000000000043000000000000000000000000000000000000040000000000000000000000006b5d3Df5269d324c29dA4718b406C4a4057fB792
-----Decoded View---------------
Arg [0] : _factory (address): 0x9CC1599D4378Ea41d444642D18AA9Be44f709ffD
Arg [1] : _WETH (address): 0x4300000000000000000000000000000000000004
Arg [2] : _governor (address): 0x6b5d3Df5269d324c29dA4718b406C4a4057fB792
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009CC1599D4378Ea41d444642D18AA9Be44f709ffD
Arg [1] : 0000000000000000000000004300000000000000000000000000000000000004
Arg [2] : 0000000000000000000000006b5d3Df5269d324c29dA4718b406C4a4057fB792
Deployed Bytecode Sourcemap
17189:22073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18000:10;-1:-1:-1;;;;;18014:4:0;18000:18;;17993:26;;;;17189:22073;;12:1:-1;9;2:12;22924:723:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22924:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22924:723:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38246:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38246:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38246:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17380:74;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17380:74:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17380:74:0;;;;;;;;;;;;;;31605:1031;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31605:1031:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31605:1031:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31605:1031:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31605:1031:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31605:1031:0;;-1:-1:-1;31605:1031:0;-1:-1:-1;;;;;;31605:1031: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;31605:1031:0;;;;;;;;;;;;;;;;;39027:232;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39027:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39027:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;39027:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39027:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39027:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39027:232:0;;-1:-1:-1;39027:232:0;;-1:-1:-1;;;;;39027:232:0:i;23653:916::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23653:916:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23653:916:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28196:766::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28196:766:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28196:766:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28196:766:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28196:766:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28196:766:0;;-1:-1:-1;28196:766:0;-1:-1:-1;;;;;;28196:766:0;;;;;;;;:::i;30590:1009::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30590:1009:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30590:1009:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30590:1009:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30590:1009:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30590:1009:0;;-1:-1:-1;30590:1009:0;-1:-1:-1;;;;;;30590:1009:0;;;;;;;;:::i;26305:920::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26305:920:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26305:920:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35349:778::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35349:778:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35349:778:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35349:778:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35349:778:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35349:778:0;;-1:-1:-1;35349:778:0;-1:-1:-1;;;;;;35349:778:0;;;;;;;;:::i;37041:927::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37041:927:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37041:927:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37041:927:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37041:927:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37041:927:0;;-1:-1:-1;37041:927:0;-1:-1:-1;;;;;;37041:927:0;;;;;;;;:::i;29718:866::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29718:866:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29718:866:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29718:866:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29718:866:0;;-1:-1:-1;29718:866:0;-1:-1:-1;;;;;;29718:866:0;;;;;;;;:::i;38517:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38517:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38517:262:0;;;;;;;;;;;;:::i;28968:744::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28968:744:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28968:744:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28968:744:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28968:744:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28968:744:0;;-1:-1:-1;28968:744:0;-1:-1:-1;;;;;;28968:744:0;;;;;;;;:::i;17333:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17333:38:0;;;:::i;38012:226::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38012:226:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38012:226:0;;;;;;;;;;;;:::i;25549:750::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25549:750:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25549:750:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36133:902::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36133:902:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36133:902:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36133:902:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36133:902:0;;-1:-1:-1;36133:902:0;-1:-1:-1;;;;;;36133:902:0;;;;;;;;:::i;21878:1040::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21878:1040:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21878:1040:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17285:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17285:41:0;;;:::i;38787:232::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38787:232:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38787:232:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38787:232:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38787:232:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38787:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38787:232:0;;-1:-1:-1;38787:232:0;;-1:-1:-1;;;;;38787:232:0:i;24575:895::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24575:895:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24575:895:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19890:885::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19890:885:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19890:885:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20781:1054;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20781:1054:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32642:992::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32642:992:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32642:992:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32642:992:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32642:992:0;;-1:-1:-1;32642:992:0;-1:-1:-1;;;;;;32642:992:0;;;;;;;;:::i;22924:723::-;23206:16;23224:14;23178:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23283:196:::1;23313:5;23333:4;23352:9;23376:14;23405:12;23440:4;23460:8;23283:15;:196::i;:::-;23256:223:::0;;-1:-1:-1;23256:223:0;-1:-1:-1;23490:51:0::1;23518:5:::0;23525:2;23256:223;23490:27:::1;:51::i;:::-;23558:4;-1:-1:-1::0;;;;;23552:20:0::1;;23573:9;23552:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23552:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23552:31:0;;;;23594:45;23625:2;23629:9;23594:30;:45::i;:::-;22924:723:::0;;;;;;;;;;:::o;38246:263::-;38388:14;38435:66;38469:8;38479:9;38490:10;38435:33;:66::i;:::-;38415:86;38246:263;-1:-1:-1;;;;38246:263:0:o;17380:74::-;17412:42;17380:74;:::o;31605:1031::-;31871:21;31843:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31957:4:0::1;31932:29;:4:::0;;-1:-1:-1;;31937:15:0;;31932:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31932:21:0::1;-1:-1:-1::0;;;;;31932:29:0::1;;31910:112;;;;-1:-1:-1::0;;;31910:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32043:59;32078:7;32087:8;32097:4;;32043:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32043:34:0::1;::::0;-1:-1:-1;;;32043:59:0:i:1;:::-;32033:69;;32166:12;32135:7;32160:1;32143:7;:14;:18;32135:27;;;;;;;;;;;;;;:43;;32113:140;;;;-1:-1:-1::0;;;32113:140:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32264:184;32310:4;;32315:1;32310:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32310:7:0::1;32332:10;32357:55;32386:7;32395:4;;32400:1;32395:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32395:7:0::1;32404:4;;32409:1;32404:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32404:7:0::1;32357:28;:55::i;:::-;32427:7;32435:1;32427:10;;;;;;;;;;;;;;32264:31;:184::i;:::-;32459:35;32465:7;32474:4;;32459:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32488:4:0::1;::::0;-1:-1:-1;32459:5:0::1;::::0;-1:-1:-1;;32459:35:0:i:1;:::-;32511:4;-1:-1:-1::0;;;;;32505:20:0::1;;32526:7;32551:1;32534:7;:14;:18;32526:27;;;;;;;;;;;;;;32505:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32505:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32505:49:0;;;;32565:63;32596:2;32600:7;32625:1;32608:7;:14;:18;32600:27;;;;;;;;;;;;;;32565:30;:63::i;:::-;31605:1031:::0;;;;;;;;;:::o;39027:232::-;39151:21;39192:59;39226:7;39235:9;39246:4;39192:33;:59::i;:::-;39185:66;;39027:232;;;;;:::o;23653:916::-;23986:12;24000;24025;24040:53;24069:7;24078:6;24086;24040:28;:53::i;:::-;24025:68;;24104:10;24117;:33;;24141:9;24117:33;;;-1:-1:-1;;24117:33:0;24161:186;;;-1:-1:-1;;;24161:186:0;;24207:10;24161:186;;;;24240:4;24161:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24104:46;;-1:-1:-1;;;;;;24161:31:0;;;;;:186;;;;;-1:-1:-1;;24161:186:0;;;;;;;;-1:-1:-1;24161:31:0;:186;;;2:2:-1;;;;27:1;24;17:12;2:2;24161:186:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24161:186:0;;;;24379:182;24409:6;24430;24451:9;24475:10;24500;24525:2;24542:8;24379:15;:182::i;:::-;24358:203;;;;;;;;23653:916;;;;;;;;;;;;;;;;:::o;28196:766::-;28465:21;28437:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28514:59:::1;28549:7;28558:8;28568:4;;28514:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28514:34:0::1;::::0;-1:-1:-1;;;28514:59:0:i:1;:::-;28504:69;;28637:12;28606:7;28631:1;28614:7;:14;:18;28606:27;;;;;;;;;;;;;;:43;;28584:140;;;;-1:-1:-1::0;;;28584:140:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28735:184;28781:4;;28786:1;28781:7;;;;;;28735:184;28930:24;28936:7;28945:4;;28930:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28951:2:0;;-1:-1:-1;28930:5:0::1;::::0;-1:-1:-1;;28930:24:0:i:1;30590:1009::-:0;30856:21;30828:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30942:4:0::1;30917:29;:4:::0;;-1:-1:-1;;30922:15:0;;30917:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30917:21:0::1;-1:-1:-1::0;;;;;30917:29:0::1;;30895:112;;;;-1:-1:-1::0;;;30895:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31028:59;31062:7;31071:9;31082:4;;31028:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31028:33:0::1;::::0;-1:-1:-1;;;31028:59:0:i:1;:::-;31018:69;;31134:11;31120:7;31128:1;31120:10;;;;;;;;;;;;;;:25;;31098:118;;;;-1:-1:-1::0;;;31098:118:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26305:920:::0;26650:14;26677:12;26692:50;26721:7;26730:5;26737:4;26692:28;:50::i;:::-;26677:65;;26753:10;26766;:33;;26790:9;26766:33;;;-1:-1:-1;;26766:33:0;26810:186;;;-1:-1:-1;;;26810:186:0;;26856:10;26810:186;;;;26889:4;26810:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26753:46;;-1:-1:-1;;;;;;26810:31:0;;;;;:186;;;;;-1:-1:-1;;26810:186:0;;;;;;;;-1:-1:-1;26810:31:0;:186;;;2:2:-1;;;;27:1;24;17:12;2:2;26810:186:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26810:186:0;;;;27019:198;27081:5;27101:9;27125:14;27154:12;27181:2;27198:8;27019:47;:198::i;:::-;27007:210;26305:920;-1:-1:-1;;;;;;;;;;;;;26305:920:0:o;35349:778::-;35583:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35604:182:::1;35650:4;;35655:1;35650:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35650:7:0::1;35672:10;35697:55;35726:7;35735:4;;35740:1;35735:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35735:7:0::1;35744:4;;35749:1;35744:7;;;;;;35697:55;35767:8;35604:31;:182::i;:::-;35797:18;35825:4:::0;;-1:-1:-1;;35830:15:0;;35825:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35825:21:0::1;-1:-1:-1::0;;;;;35818:39:0::1;;35858:2;35818:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;35818:43:0::1;-1:-1:-1::0;;;;;35818:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35818:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35818:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35818:43:0;35872:44:::1;::::0;;35818:43:::1;35872:44:::0;;::::1;::::0;;;;;;;;;;;35818:43;;-1:-1:-1;35872:44:0::1;::::0;;;35907:4;;;;;;35872:44;::::1;::::0;35907:4;;35872:44;35907:4;35872:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35913:2:0;;-1:-1:-1;35872:34:0::1;::::0;-1:-1:-1;;35872:44:0:i:1;:::-;36032:12:::0;35949:62:::1;35997:13:::0;35956:4;;-1:-1:-1;;35961:15:0;;35956:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35956:21:0::1;-1:-1:-1::0;;;;;35949:39:0::1;;35989:2;35949:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;35949:43:0::1;-1:-1:-1::0;;;;;35949:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35949:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35949:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35949:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;35927:192;;;;-1:-1:-1::0;;;35927:192:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17584:1;35349:778:::0;;;;;;;:::o;37041:927::-;37272:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37340:4:0::1;37315:29;:4:::0;;-1:-1:-1;;37320:15:0;;37315:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37315:21:0::1;-1:-1:-1::0;;;;;37315:29:0::1;;37293:112;;;;-1:-1:-1::0;;;37293:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37416:182;37462:4;;37467:1;37462:7;;;;;;37416:182;37609:55;37644:4;;37609:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37658:4:0::1;::::0;-1:-1:-1;37609:34:0::1;::::0;-1:-1:-1;;37609:55:0:i:1;:::-;37692:37;::::0;;;;;37723:4:::1;37692:37;::::0;::::1;::::0;;;37675:14:::1;::::0;-1:-1:-1;;;;;37699:4:0::1;37692:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37692:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37692:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37692:37:0;;-1:-1:-1;37762:25:0;;::::1;;37740:122;;;;-1:-1:-1::0;;;37740:122:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37879:4;-1:-1:-1::0;;;;;37873:20:0::1;;37894:9;37873:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37873:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37873:31:0;;;;37915:45;37946:2;37950:9;37915:30;:45::i;29718:866::-:0;29977:21;29949:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30035:4:::1;-1:-1:-1::0;;;;;30024:15:0::1;:4;;30029:1;30024:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30024:7:0::1;-1:-1:-1::0;;;;;30024:15:0::1;;30016:61;;;;-1:-1:-1::0;;;30016:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30098:60;30133:7;30142:9;30153:4;;30098:60;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30098:34:0::1;::::0;-1:-1:-1;;;30098:60:0:i:1;:::-;30088:70;;30222:12;30191:7;30216:1;30199:7;:14;:18;30191:27;;;;;;;;;;;;;;:43;;30169:140;;;;-1:-1:-1::0;;;30169:140:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30326:4;-1:-1:-1::0;;;;;30320:19:0::1;;30347:7;30355:1;30347:10;;;;;;;;;;;;;;30320:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30320:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30320:40:0;;;;;30398:4;-1:-1:-1::0;;;;;30392:20:0::1;;30431:55;30460:7;30469:4;;30474:1;30469:7;;;;;;30431:55;30505:7;30513:1;30505:10;;;;;;;;;;;;;;30392:138;;;;;;;;;;;;;-1:-1:-1::0;;;;;30392:138:0::1;-1:-1:-1::0;;;;;30392:138:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30392:138:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30392:138:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30392:138:0;30371:170:::1;;;;30552:24;30558:7;30567:4;;30552:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30573:2:0;;-1:-1:-1;30552:5:0::1;::::0;-1:-1:-1;;30552:24:0:i:1;:::-;29718:866:::0;;;;;;;;:::o;38517:262::-;38659:13;38705:66;38738:9;38749;38760:10;38705:32;:66::i;28968:744::-;29237:21;29209:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29286:59:::1;29320:7;29329:9;29340:4;;29286:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29286:33:0::1;::::0;-1:-1:-1;;;29286:59:0:i:1;:::-;29276:69;;29392:11;29378:7;29386:1;29378:10;;;;;;;;;;;;;;:25;;29356:118;;;;-1:-1:-1::0;;;29356:118:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17333:38:::0;;;:::o;38012:226::-;38143:12;38175:55;38202:7;38211:8;38221;38175:26;:55::i;25549:750::-;25815:14;25796:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25858:196:::1;25888:5;25908:4;25927:9;25951:14;25980:12;26015:4;26035:8;25858:15;:196::i;:::-;26144:38;::::0;;;;;26176:4:::1;26144:38;::::0;::::1;::::0;;;25842:212;;-1:-1:-1;26065:128:0::1;::::0;-1:-1:-1;26107:5:0;;26127:2;;-1:-1:-1;;;;;26144:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26144:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26144:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26144:38:0;26065:27:::1;:128::i;:::-;26210:4;-1:-1:-1::0;;;;;26204:20:0::1;;26225:9;26204:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26204:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26204:31:0;;;;26246:45;26277:2;26281:9;26246:30;:45::i;36133:902::-:0;36348:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36388:4:::1;-1:-1:-1::0;;;;;36377:15:0::1;:4;;36382:1;36377:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36377:7:0::1;-1:-1:-1::0;;;;;36377:15:0::1;;36369:61;;;;-1:-1:-1::0;;;36369:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36441:13;36457:9;36441:25;;36483:4;-1:-1:-1::0;;;;;36477:19:0::1;;36504:8;36477:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36477:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36477:38:0;;;;;36553:4;-1:-1:-1::0;;;;;36547:20:0::1;;36586:55;36615:7;36624:4;;36629:1;36624:7;;;;;;36586:55;36660:8;36547:136;;;;;;;;;;;;;-1:-1:-1::0;;;;;36547:136:0::1;-1:-1:-1::0;;;;;36547:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36547:136:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36547:136:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36547:136:0;36526:168:::1;;;;36705:18;36733:4:::0;;-1:-1:-1;;36738:15:0;;36733:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36733:21:0::1;-1:-1:-1::0;;;;;36726:39:0::1;;36766:2;36726:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36726:43:0::1;-1:-1:-1::0;;;;;36726:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36726:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36726:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36726:43:0;36780:44:::1;::::0;;36726:43:::1;36780:44:::0;;::::1;::::0;;;;;;;;;;;36726:43;;-1:-1:-1;36780:44:0::1;::::0;;;36815:4;;;;;;36780:44;::::1;::::0;36815:4;;36780:44;36815:4;36780:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36821:2:0;;-1:-1:-1;36780:34:0::1;::::0;-1:-1:-1;;36780:44:0:i:1;:::-;36940:12:::0;36857:62:::1;36905:13:::0;36864:4;;-1:-1:-1;;36869:15:0;;36864:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36864:21:0::1;-1:-1:-1::0;;;;;36857:39:0::1;;36897:2;36857:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36857:43:0::1;-1:-1:-1::0;;;;;36857:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;21878:1040:0::0;22177:12;22191;22149:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22221:12:::1;22236:53;22265:7;22274:6;22282;22236:28;:53::i;:::-;22300:66;::::0;;;;;22338:10:::1;22300:66;::::0;::::1;::::0;-1:-1:-1;;;;;22300:37:0;::::1;:66:::0;;;;;;;;;;;;;;22221:68;;-1:-1:-1;22300:37:0;;::::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22300:37:0;:66;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22300:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22300:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22434:33:0::1;::::0;;;;;-1:-1:-1;;;;;22434:33:0;;::::1;;::::0;::::1;::::0;;;22404:12:::1;::::0;;;22434:29;;::::1;::::0;::::1;::::0;:33;;;;;;;;;;;22404:12;22434:29;:33;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22434:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22434:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22434:33:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22434:33:0;-1:-1:-1;22479:14:0::1;22499:47;22531:6:::0;22539;22499:31:::1;:47::i;:::-;22478:68;;;22588:6;-1:-1:-1::0;;;;;22578:16:0::1;:6;-1:-1:-1::0;;;;;22578:16:0::1;;:84;;22645:7;22654;22578:84;;;22611:7;22620;22578:84;22557:105:::0;;-1:-1:-1;22557:105:0;-1:-1:-1;22695:21:0;;::::1;;22673:113;;;;-1:-1:-1::0;;;22673:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22830:10;22819:7;:21;;22797:113;;;;-1:-1:-1::0;;;22797:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17584:1;;;;21878:1040:::0;;;;;;;;;;;:::o;17285:41::-;;;:::o;38787:232::-;38911:21;38952:59;38987:7;38996:8;39006:4;38952:34;:59::i;24575:895::-;24891:16;24909:14;24936:12;24951:50;24980:7;24989:5;24996:4;24951:28;:50::i;:::-;24936:65;;25012:10;25025;:33;;25049:9;25025:33;;;-1:-1:-1;;25025:33:0;25069:186;;;-1:-1:-1;;;25069:186:0;;25115:10;25069:186;;;;25148:4;25069:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25012:46;;-1:-1:-1;;;;;;25069:31:0;;;;;:186;;;;;-1:-1:-1;;25069:186:0;;;;;;;;-1:-1:-1;25069:31:0;:186;;;2:2:-1;;;;27:1;24;17:12;2:2;25069:186:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25069:186:0;;;;25293:169;25326:5;25346:9;25370:14;25399:12;25426:2;25443:8;25293:18;:169::i;:::-;25266:196;;;;-1:-1:-1;24575:895:0;-1:-1:-1;;;;;;;;;;;;;24575:895:0:o;19890:885::-;20223:12;20237;20251:14;20195:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20304:174:::1;20332:6;20353;20374:14;20403;20432:10;20457;20304:13;:174::i;:::-;20283:195:::0;;-1:-1:-1;20283:195:0;-1:-1:-1;20489:12:0::1;20504:53;20533:7;20542:6:::0;20550;20504:28:::1;:53::i;:::-;20489:68;;20568:66;20600:6;20608:10;20620:4;20626:7;20568:31;:66::i;:::-;20645;20677:6;20685:10;20697:4;20703:7;20645:31;:66::i;:::-;20753:4;-1:-1:-1::0;;;;;20734:29:0::1;;20764:2;20734:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;20734:33:0::1;-1:-1:-1::0;;;;;20734:33:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20734:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20734:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20734:33:0;19890:885;;;;-1:-1:-1;20734:33:0;;-1:-1:-1;19890:885:0;;-1:-1:-1;;;;;;;;;19890:885:0:o;20781:1054::-;21088:16;21106:14;21122;21060:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21181:176:::1;21209:5;21229:4;21248:18;21281:9;21305:14;21334:12;21181:13;:176::i;:::-;21154:203:::0;;-1:-1:-1;21154:203:0;-1:-1:-1;21368:12:0::1;21383:50;21412:7;21421:5:::0;21428:4:::1;21383:28;:50::i;:::-;21368:65;;21444:69;21476:5;21483:10;21495:4;21501:11;21444:31;:69::i;:::-;21530:4;-1:-1:-1::0;;;;;21524:19:0::1;;21551:9;21524:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21524:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21524:39:0;;;;;21587:4;-1:-1:-1::0;;;;;21581:20:0::1;;21602:4;21608:9;21581:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21581:37:0::1;-1:-1:-1::0;;;;;21581:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21581:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21581:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21581:37:0;21574:45:::1;;;;21661:4;-1:-1:-1::0;;;;;21642:29:0::1;;21672:2;21642:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;21642:33:0::1;-1:-1:-1::0;;;;;21642:33:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21642:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21642:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21642:33:0;;-1:-1:-1;21726:9:0::1;:21:::0;-1:-1:-1;21722:105:0::1;;;21762:65;21793:10;21817:9;21805;:21;21762:30;:65::i;:::-;17584:1;20781:1054:::0;;;;;;;;;;;:::o;32642:992::-;32898:21;32870:8;17525:15;17513:8;:27;;17505:68;;;;;-1:-1:-1;;;17505:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32956:4:::1;-1:-1:-1::0;;;;;32945:15:0::1;:4;;32950:1;32945:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32945:7:0::1;-1:-1:-1::0;;;;;32945:15:0::1;;32937:61;;;;-1:-1:-1::0;;;32937:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33019:59;33053:7;33062:9;33073:4;;33019:59;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33019:33:0::1;::::0;-1:-1:-1;;;33019:59:0:i:1;:::-;33009:69;;33125:9;33111:7;33119:1;33111:10;;;;;;;;;;;;;;:23;;33089:116;;;;-1:-1:-1::0;;;33089:116:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33222:4;-1:-1:-1::0;;;;;33216:19:0::1;;33243:7;33251:1;33243:10;;;;;;;;;;;;;;33216:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33216:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33216:40:0;;;;;33294:4;-1:-1:-1::0;;;;;33288:20:0::1;;33327:55;33356:7;33365:4;;33370:1;33365:7;;;;;;33327:55;33401:7;33409:1;33401:10;;;;;;;;;;;;;;33288:138;;;;;;;;;;;;;-1:-1:-1::0;;;;;33288:138:0::1;-1:-1:-1::0;;;;;33288:138:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33288:138:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33288:138:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33288:138:0;33267:170:::1;;;;33448:24;33454:7;33463:4;;33448:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33469:2:0;;-1:-1:-1;33448:5:0::1;::::0;-1:-1:-1;;33448:24:0:i:1;:::-;33535:7;33543:1;33535:10;;;;;;;;;;;;;;33523:9;:22;33519:107;;;33560:66;33591:10;33615:7;33623:1;33615:10;;;;;;;;;;;;;;33603:9;:22;33560:30;:66::i;543:449::-:0;775:45;;;-1:-1:-1;;;;;775:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;775:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;775:45:0;179:29:-1;160:49;;764:57:0;;;;729:12;;743:17;;764:10;;;;775:45;764:57;;;25:18:-1;764: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;;;764: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;;728:93:0;;;;854:7;:57;;;;-1:-1:-1;866:11:0;;:16;;:44;;;897:4;886:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;886:24:0;866:44;832:152;;;;-1:-1:-1;;;832:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;543:449;;;;;:::o;1506:217::-;1619:12;;;1579;1619;;;;;;;;;-1:-1:-1;;;;;1597:7:0;;;1612:5;;1597: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;;;1597: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;;1578:54:0;;;1651:7;1643:72;;;;-1:-1:-1;;;1643:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1506:217;;;:::o;14426:633::-;14553:14;14613:1;14602:8;:12;14580:109;;;;-1:-1:-1;;;14580:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14734:1;14722:9;:13;:31;;;;;14752:1;14739:10;:14;14722:31;14700:125;;;;-1:-1:-1;;;14700:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14836:20;14859:17;:8;14872:3;14859:17;:12;:17;:::i;:::-;14836:40;-1:-1:-1;14887:14:0;14904:31;14836:40;14924:10;14904:31;:19;:31;:::i;:::-;14887:48;-1:-1:-1;14946:16:0;14965:40;14989:15;14965:19;:9;14979:4;14965:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;14946:59;;15040:11;15028:9;:23;;;;;;;14426:633;-1:-1:-1;;;;;;;14426:633:0:o;15850:615::-;15985:21;16042:1;16027:4;:11;:16;;16019:63;;;;-1:-1:-1;;;16019:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16114:4;:11;16103:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16103:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16103:23:0;;16093:33;;16150:8;16137:7;16145:1;16137:10;;;;;;;;;;;;;:21;;;;;16174:6;16169:289;16200:1;16186:4;:11;:15;16182:1;:19;16169:289;;;16224:14;16240:15;16259:108;16289:7;16315:4;16320:1;16315:7;;;;;;;;;;;;;;16341:4;16346:1;16350;16346:5;16341:11;;;;;;;;;;;;;;16259;:108::i;:::-;16223:144;;;;16399:47;16412:7;16420:1;16412:10;;;;;;;;;;;;;;16424:9;16435:10;16399:12;:47::i;:::-;16382:7;16390:1;16394;16390:5;16382:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;16203:3:0;;16169:289;;;;15850:615;;;;;:::o;12604:648::-;12727:12;12753:14;12769;12787:26;12798:6;12806;12787:10;:26::i;:::-;13029:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;13029:32:0;;;;;13019:43;;;;;;12908:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12908:291:0;;;;;;;12876:342;;;;;;;;;12604:648;-1:-1:-1;;;;;12604:648:0:o;1000:498::-;1271:51;;;-1:-1:-1;;;;;1271:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1271:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1271:51:0;179:29:-1;160:49;;1260:63:0;;;;1225:12;;1239:17;;1260:10;;;;1271:51;1260:63;;;25:18:-1;1260: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;;;1260: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;;1224:99:0;;;;1356:7;:57;;;;-1:-1:-1;1368:11:0;;:16;;:44;;;1399:4;1388:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1388:24:0;1368:44;1334:156;;;;-1:-1:-1;;;1334:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:498;;;;;;:::o;27336:854::-;27477:6;27472:711;27503:1;27489:4;:11;:15;27485:1;:19;27472:711;;;27527:13;27542:14;27561:4;27566:1;27561:7;;;;;;;;;;;;;;27570:4;27575:1;27579;27575:5;27570:11;;;;;;;;;;;;;;27526:56;;;;27598:14;27618:46;27650:5;27657:6;27618:31;:46::i;:::-;27597:67;;;27679:14;27696:7;27704:1;27708;27704:5;27696:14;;;;;;;;;;;;;;27679:31;;27726:15;27743;27771:6;-1:-1:-1;;;;;27762:15:0;:5;-1:-1:-1;;;;;27762:15:0;;:95;;27838:9;27854:1;27762:95;;;27803:1;27807:9;27762:95;27725:132;;;;27872:10;27903:1;27889:4;:11;:15;27885:1;:19;:120;;28002:3;27885:120;;;27924:58;27953:7;27962:6;27970:4;27975:1;27979;27975:5;27970:11;;;;;;;;;;;;;;27924:28;:58::i;:::-;27872:133;;28057:52;28086:7;28095:5;28102:6;28057:28;:52::i;:::-;-1:-1:-1;;;;;28020:109:0;;28130:10;28142;28154:2;28168:1;28158:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28158:12:0;87:42:-1;143:17;;-1:-1;28158:12:0;;28020:151;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28020:151:0;-1:-1:-1;;;;;28020:151: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;28020:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28020:151:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27506:3:0;;;;;-1:-1:-1;27472:711:0;;-1:-1:-1;;;;;;;;27472:711:0;;;27336:854;;;:::o;16546:636::-;16681:21;16738:1;16723:4;:11;:16;;16715:63;;;;-1:-1:-1;;;16715:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16810:4;:11;16799:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16799:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16799:23:0;;16789:33;;16863:9;16833:7;16858:1;16841:7;:14;:18;16833:27;;;;;;;;;;;;;;;;;:39;16897:11;;-1:-1:-1;;16897:15:0;16883:292;16914:5;;16883:292;;16942:14;16958:15;16977:108;17007:7;17033:4;17042:1;17038;:5;17033:11;;;;;;;;;;;;;;17063:4;17068:1;17063:7;;;;;;;16977:108;16941:144;;;;17117:46;17129:7;17137:1;17129:10;;;;;;;;;;;;;;17141:9;17152:10;17117:11;:46::i;:::-;17100:7;17112:1;17108;:5;17100:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;16921:3:0;16883:292;;33781:1562;33919:6;33914:1422;33945:1;33931:4;:11;:15;33927:1;:19;33914:1422;;;33969:13;33984:14;34003:4;34008:1;34003:7;;;;;;;;;;;;;;34012:4;34017:1;34021;34017:5;34012:11;;;;;;;;;;;;;;33968:56;;;;34040:14;34060:46;34092:5;34099:6;34060:31;:46::i;:::-;34039:67;;;34121:23;34184:52;34213:7;34222:5;34229:6;34184:28;:52::i;:::-;34121:130;;34266:16;34297:17;34406:13;34421;34440:4;-1:-1:-1;;;;;34440:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34440:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34440:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34440:18:0;;;;;;;34405:53;;;;;-1:-1:-1;34405:53:0;;-1:-1:-1;34478:17:0;;-1:-1:-1;;;;;34519:15:0;;;;;;;:103;;34603:8;34613;34519:103;;;34559:8;34569;34519:103;34477:145;;;;34655:96;34720:12;34662:5;-1:-1:-1;;;;;34655:23:0;;34687:4;34655:38;;;;;;;;;;;;;-1:-1:-1;;;;;34655:38:0;-1:-1:-1;;;;;34655:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;34655:96:0;34641:110;;34785:157;34841:11;34875:12;34910:13;34785:33;:157::i;:::-;34770:172;;33914:1422;;;;34973:15;34990;35018:6;-1:-1:-1;;;;;35009:15:0;:5;-1:-1:-1;;;;;35009:15:0;;:101;;35088:12;35107:1;35009:101;;;35050:1;35054:12;35009:101;34972:138;;;;35125:10;35156:1;35142:4;:11;:15;35138:1;:19;:120;;35255:3;35138:120;;;35177:58;35206:7;35215:6;35223:4;35228:1;35232;35228:5;35223:11;;;;;;;35177:58;35311:12;;;35321:1;35311:12;;;;;;;;;;35273:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;35273:51:0;;;;;;;;;;;;;;;;;;;;;;35125:133;;-1:-1:-1;35273:9:0;;;;;;35283:10;;35295;;35125:133;;35311:12;;35273:51;;;;;;;;35311:12;;35273:51;;;;35311: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;35273:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35273:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33948:3:0;;;;;-1:-1:-1;33914:1422:0;;-1:-1:-1;;;;;;;;;;33914:1422:0;11649:129;11733:5;;;11728:16;;;;11720:50;;;;;-1:-1:-1;;;11720:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15180:588;15307:13;15367:1;15355:9;:13;15333:111;;;;-1:-1:-1;;;15333:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15489:1;15477:9;:13;:31;;;;;15507:1;15494:10;:14;15477:31;15455:125;;;;-1:-1:-1;;;15455:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15591:14;15608:34;15637:4;15608:24;:9;15622;15608:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;15591:51;-1:-1:-1;15653:16:0;15672:34;15702:3;15672:25;:10;15687:9;15672:25;:14;:25;:::i;:34::-;15653:53;;15728:32;15758:1;15741:11;15729:9;:23;;;;;;;15728:32;:29;:32;:::i;:::-;15717:43;15180:588;-1:-1:-1;;;;;;15180:588:0:o;13904:400::-;14020:12;14063:1;14053:7;:11;14045:65;;;;-1:-1:-1;;;14045:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14154:1;14143:8;:12;:28;;;;;14170:1;14159:8;:12;14143:28;14121:122;;;;-1:-1:-1;;;14121:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14288:8;14264:21;:7;14276:8;14264:21;:11;:21;:::i;:::-;:32;;;;;;;13904:400;-1:-1:-1;;;;13904:400:0:o;12104:408::-;12204:14;12220;12265:6;-1:-1:-1;;;;;12255:16:0;:6;-1:-1:-1;;;;;12255:16:0;;;12247:70;;;;-1:-1:-1;;;12247:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12356:6;-1:-1:-1;;;;;12347:15:0;:6;-1:-1:-1;;;;;12347:15:0;;:79;;12411:6;12419;12347:79;;;12379:6;12387;12347:79;12328:98;;-1:-1:-1;12328:98:0;-1:-1:-1;;;;;;12445:20:0;;12437:67;;;;-1:-1:-1;;;12437:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12104:408;;;;;:::o;18122:1762::-;18449:54;;;;;;-1:-1:-1;;;;;18449:54:0;;;;;;;;;;;;;;;;18340:12;;;;;;18471:7;18449:38;;;;;;:54;;;;;;;;;;;;;;;:38;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;18449:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18449:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18449:54:0;-1:-1:-1;;;;;18449:68:0;;18431:182;;;18544:57;;;;;;-1:-1:-1;;;;;18544:57:0;;;;;;;;;;;;;;;;18566:7;18544:41;;;;;;:57;;;;;;;;;;;;;;;-1:-1:-1;18544:41:0;:57;;;2:2:-1;;;;27:1;24;17:12;2:2;18544:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18544:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;18431:182:0;18624:13;18639;18656:107;18703:7;18725:6;18746;18656:32;:107::i;:::-;18623:140;;;;18778:8;18790:1;18778:13;:30;;;;-1:-1:-1;18795:13:0;;18778:30;18774:1103;;;18847:14;;-1:-1:-1;18863:14:0;;-1:-1:-1;18774:1103:0;;;18911:19;18933:128;18978:14;19011:8;19038;18933:26;:128::i;:::-;18911:150;;19098:14;19080;:32;19076:790;;19181:10;19163:14;:28;;19133:144;;;;-1:-1:-1;;;19133:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19318:14;;-1:-1:-1;19334:14:0;-1:-1:-1;19334:14:0;19076:790;;;19390:19;19412:144;19461:14;19498:8;19529;19412:26;:144::i;:::-;19390:166;;19600:14;19582;:32;;19575:40;;;;19682:10;19664:14;:28;;19634:144;;;;-1:-1:-1;;;19634:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19819:14;-1:-1:-1;19835:14:0;;-1:-1:-1;19076:790:0;18774:1103;;18122:1762;;;;;;;;;;;:::o;11786:142::-;11838:6;11865;;;:30;;-1:-1:-1;;11880:5:0;;;11894:1;11889;11880:5;11889:1;11875:15;;;;;:20;11865:30;11857:63;;;;;-1:-1:-1;;;11857:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11513:128;11597:5;;;11592:16;;;;11584:49;;;;;-1:-1:-1;;;11584:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13310:481;13437:13;13452;13479:14;13499:26;13510:6;13518;13499:10;:26::i;:::-;13478:47;;;13537:13;13552;13604:32;13612:7;13621:6;13629;13604:7;:32::i;:::-;-1:-1:-1;;;;;13571:88:0;;:90;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13571:90:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13571:90:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13571:90:0;;;;;;;13536:125;;;;;-1:-1:-1;13536:125:0;;-1:-1:-1;;;;;;13695:16:0;;;;;;;:88;;13764:8;13774;13695:88;;;13728:8;13738;13695:88;13672:111;;;;-1:-1:-1;13310:481:0;-1:-1:-1;;;;;;;13310:481:0:o
Swarm Source
ipfs://d2e47ebbe94a0e3392d4fcf2195909630855a0b6db3df7ec548c324b9f7bde2a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.