Overview
BNB Balance
0 BNB
BNB Value
$0.00Token Holdings
Latest 25 from a total of 13,514,795 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 44903066 | 9 mins ago | IN | 0 BNB | 0.00010945 | ||||
Remove Liquidity... | 44902999 | 13 mins ago | IN | 0 BNB | 0.00053929 | ||||
Swap Exact Token... | 44902865 | 19 mins ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44902664 | 29 mins ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44902463 | 39 mins ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44902396 | 43 mins ago | IN | 0 BNB | 0.00010948 | ||||
Swap Exact Token... | 44902262 | 49 mins ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44902232 | 51 mins ago | IN | 0 BNB | 0.00010948 | ||||
Swap Exact Token... | 44902146 | 55 mins ago | IN | 0 BNB | 0.00010947 | ||||
Swap Exact Token... | 44902061 | 1 hrs ago | IN | 0 BNB | 0.00010945 | ||||
Swap Exact Token... | 44901860 | 1 hr ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44901767 | 1 hr ago | IN | 0 BNB | 0.00011049 | ||||
Swap Exact Token... | 44901659 | 1 hr ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44901458 | 1 hr ago | IN | 0 BNB | 0.00010945 | ||||
Swap Exact Token... | 44901257 | 1 hr ago | IN | 0 BNB | 0.00010945 | ||||
Swap Exact Token... | 44901056 | 1 hr ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44900855 | 2 hrs ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44900654 | 2 hrs ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44900454 | 2 hrs ago | IN | 0 BNB | 0.00010946 | ||||
Remove Liquidity | 44900256 | 2 hrs ago | IN | 0 BNB | 0.0001822 | ||||
Swap Exact Token... | 44900253 | 2 hrs ago | IN | 0 BNB | 0.00010946 | ||||
Swap Exact Token... | 44900052 | 2 hrs ago | IN | 0 BNB | 0.00010946 | ||||
Remove Liquidity... | 44897930 | 4 hrs ago | IN | 0 BNB | 0.0006916 | ||||
Swap Exact Token... | 44897877 | 4 hrs ago | IN | 0 BNB | 0.00011316 | ||||
Swap Exact Token... | 44897510 | 4 hrs ago | IN | 0 BNB | 0.00011316 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
44901962 | 1 hr ago | 0.005982 BNB | ||||
44901962 | 1 hr ago | 0.005982 BNB | ||||
44901756 | 1 hr ago | 0.3870354 BNB | ||||
44901756 | 1 hr ago | 0.3870354 BNB | ||||
44901725 | 1 hr ago | 0.006979 BNB | ||||
44901725 | 1 hr ago | 0.006979 BNB | ||||
44900987 | 1 hr ago | 0.004985 BNB | ||||
44900987 | 1 hr ago | 0.004985 BNB | ||||
44900817 | 2 hrs ago | 0.00370697 BNB | ||||
44900817 | 2 hrs ago | 0.00370697 BNB | ||||
44900432 | 2 hrs ago | 0.0015906 BNB | ||||
44900432 | 2 hrs ago | 0.0015906 BNB | ||||
44899203 | 3 hrs ago | 0.02574304 BNB | ||||
44899203 | 3 hrs ago | 0.02574304 BNB | ||||
44898747 | 3 hrs ago | 0.05321171 BNB | ||||
44898747 | 3 hrs ago | 0.05321171 BNB | ||||
44898703 | 3 hrs ago | 0.05413244 BNB | ||||
44898703 | 3 hrs ago | 0.05413244 BNB | ||||
44897994 | 4 hrs ago | 0.00694955 BNB | ||||
44897994 | 4 hrs ago | 0.00694955 BNB | ||||
44897930 | 4 hrs ago | 0.14263938 BNB | ||||
44897930 | 4 hrs ago | 0.14263938 BNB | ||||
44897742 | 4 hrs ago | 0.00004999 BNB | ||||
44897742 | 4 hrs ago | 0.00004999 BNB | ||||
44897302 | 4 hrs ago | 0.005982 BNB |
Loading...
Loading
Contract Name:
BiswapRouter02
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-05-24 */ pragma solidity =0.6.6; interface IBiswapFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } 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 IBiswapRouter02 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapFeeReward() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); 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 IBiswapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function swapFee() external view returns (uint32); function devFee() external view returns (uint32); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; function setSwapFee(uint32) external; function setDevFee(uint32) 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 BiswapLibrary { 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, 'BiswapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'BiswapLibrary: 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'fea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf' // init code hash )))); } function getSwapFee(address factory, address tokenA, address tokenB) internal view returns (uint swapFee) { swapFee = IBiswapPair(pairFor(factory, tokenA, tokenB)).swapFee(); } // fetches and sorts the reserves for a pair function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) { (address token0,) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1,) = IBiswapPair(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, 'BiswapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'BiswapLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) internal pure returns (uint amountOut) { require(amountIn > 0, 'BiswapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'BiswapLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(uint(1000).sub(swapFee)); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) internal pure returns (uint amountIn) { require(amountOut > 0, 'BiswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'BiswapLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(uint(1000).sub(swapFee)); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'BiswapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, getSwapFee(factory, path[i], path[i + 1])); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'BiswapLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, getSwapFee(factory, path[i - 1], path[i])); } } } 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 Babylonian { // credit for this implementation goes to // https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687 function sqrt(uint256 x) internal pure returns (uint256) { if (x == 0) return 0; // this block is equivalent to r = uint256(1) << (BitMath.mostSignificantBit(x) / 2); // however that code costs significantly more gas uint256 xx = x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; // Seven iterations should be enough uint256 r1 = x / r; return (r < r1 ? r : r1); } } library FullMath { function fullMul(uint256 x, uint256 y) internal pure returns (uint256 l, uint256 h) { uint256 mm = mulmod(x, y, uint256(-1)); l = x * y; h = mm - l; if (mm < l) h -= 1; } function fullDiv( uint256 l, uint256 h, uint256 d ) private pure returns (uint256) { uint256 pow2 = d & -d; d /= pow2; l /= pow2; l += h * ((-pow2) / pow2 + 1); uint256 r = 1; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; r *= 2 - d * r; return l * r; } function mulDiv( uint256 x, uint256 y, uint256 d ) internal pure returns (uint256) { (uint256 l, uint256 h) = fullMul(x, y); uint256 mm = mulmod(x, y, d); if (mm > l) h -= 1; l -= mm; if (h == 0) return l / d; require(h < d, 'FullMath: FULLDIV_OVERFLOW'); return fullDiv(l, h, d); } } contract Ownable { address private _owner; constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address) { return _owner; } function isOwner(address account) public view returns (bool) { return account == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } modifier onlyOwner() { require(isOwner(msg.sender), "Ownable: caller is not the owner"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); } interface ISwapFeeReward { function swap(address account, address input, address output, uint256 amount) external returns (bool); } contract BiswapRouter02 is IBiswapRouter02, Ownable { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public override swapFeeReward; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'BiswapV2Router: EXPIRED'); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function setSwapFeeReward(address _swapFeeReward) public onlyOwner { swapFeeReward = _swapFeeReward; } // **** 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 (IBiswapFactory(factory).getPair(tokenA, tokenB) == address(0)) { IBiswapFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = BiswapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = BiswapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'BiswapV2Router: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = BiswapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'BiswapV2Router: 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 = BiswapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IBiswapPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = BiswapLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IBiswapPair(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 = BiswapLibrary.pairFor(factory, tokenA, tokenB); IBiswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IBiswapPair(pair).burn(to); (address token0,) = BiswapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'BiswapV2Router: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'BiswapV2Router: 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 = BiswapLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IBiswapPair(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 = BiswapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IBiswapPair(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 = BiswapLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IBiswapPair(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,) = BiswapLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); if (swapFeeReward != address(0)) { ISwapFeeReward(swapFeeReward).swap(msg.sender, input, output, amountOut); } address to = i < path.length - 2 ? BiswapLibrary.pairFor(factory, output, path[i + 2]) : _to; IBiswapPair(BiswapLibrary.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 = BiswapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BiswapLibrary.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 = BiswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'BiswapV2Router: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BiswapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'BiswapV2Router: INVALID_PATH'); amounts = BiswapLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(BiswapLibrary.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, 'BiswapV2Router: INVALID_PATH'); amounts = BiswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'BiswapV2Router: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BiswapLibrary.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, 'BiswapV2Router: INVALID_PATH'); amounts = BiswapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BiswapLibrary.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 virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'BiswapV2Router: INVALID_PATH'); amounts = BiswapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'BiswapV2Router: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(BiswapLibrary.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,) = BiswapLibrary.sortTokens(input, output); IBiswapPair pair = IBiswapPair(BiswapLibrary.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 = BiswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput, pair.swapFee()); } if (swapFeeReward != address(0)) { ISwapFeeReward(swapFeeReward).swap(msg.sender, input, output, amountOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? BiswapLibrary.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, BiswapLibrary.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, 'BiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'BiswapV2Router: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(BiswapLibrary.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, 'BiswapV2Router: 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, 'BiswapV2Router: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, BiswapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'BiswapV2Router: 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 BiswapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) public pure virtual override returns (uint amountOut) { return BiswapLibrary.getAmountOut(amountIn, reserveIn, reserveOut, swapFee); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) public pure virtual override returns (uint amountIn) { return BiswapLibrary.getAmountIn(amountOut, reserveIn, reserveOut, swapFee); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return BiswapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return BiswapLibrary.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"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapFeeReward","type":"address"}],"name":"setSwapFeeReward","outputs":[],"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":[],"name":"swapFeeReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162005fd938038062005fd9833981810160405260408110156200003757600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c615e09620001d0600039806101ee5280610fbe5280610ff9528061112152806113e4528061185f5280611a685280612093528061221752806122e752806123ee52806125a15280612636528061291352806129c25280612a975280612b9c5280612c845280612d055280613394528061374a52806137a052806137d452806138555280613a6f5280613c1f5280613cb4525080611213528061131152806114b752806114f052806116bc52806119515280611a465280611c3352806124d4528061267552806128115280612d445280613087528061331952806133425280613372528061354f528061377e5280613b555280613cf352806147fd52806148405280614e30528061516152806155b8528061569952806157195250615e096000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063c45a015511610095578063f2fde38b11610064578063f2fde38b14610ddf578063f305d71914610e1f578063fb3bdb4114610e72578063fbbeedf114610f0557610217565b8063c45a015514610c06578063d06ca61f14610c1b578063ded9382a14610cd2578063e8e3370014610d5257610217565b8063ad615dec116100d1578063ad615dec14610a73578063af2979eb14610aa9578063b6f9de9514610b09578063baa2abde14610b9c57610217565b80638da5cb5b14610a0b578063a3ddb30b14610a49578063ad5c464814610a5e57610217565b806352707d8c1161016f578063715018a61161013e578063715018a614610819578063791ac9471461082e5780637ff36ab5146108d35780638803dbee1461096657610217565b806352707d8c1461066a578063571fd012146106b85780635b0d5984146106f45780635c11d7951461077457610217565b80632195995c116101ab5780632195995c146104415780632f54bf6e146104cc57806338ed1739146105205780634a25d94a146105c557610217565b806302751cec1461021c57806318cbafe5146102955780631f00ca741461038a57610217565b36610217573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461021557fe5b005b600080fd5b34801561022857600080fd5b5061027c600480360360c081101561023f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610f45565b6040805192835260208301919091528051918290030190f35b3480156102a157600080fd5b5061033a600480360360a08110156102b857600080fd5b8135916020810135918101906060810160408201356401000000008111156102df57600080fd5b8201836020820111156102f157600080fd5b8035906020019184602083028401116401000000008311171561031357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611098565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037657818101518382015260200161035e565b505050509050019250505060405180910390f35b34801561039657600080fd5b5061033a600480360360408110156103ad57600080fd5b813591908101906040810160208201356401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184602083028401116401000000008311171561040357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506114b0945050505050565b34801561044d57600080fd5b5061027c600480360361016081101561046557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356114e6565b3480156104d857600080fd5b5061050c600480360360208110156104ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611624565b604080519115158252519081900360200190f35b34801561052c57600080fd5b5061033a600480360360a081101561054357600080fd5b81359160208101359181019060608101604082013564010000000081111561056a57600080fd5b82018360208201111561057c57600080fd5b8035906020019184602083028401116401000000008311171561059e57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611645565b3480156105d157600080fd5b5061033a600480360360a08110156105e857600080fd5b81359160208101359181019060608101604082013564010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184602083028401116401000000008311171561064357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356117d6565b34801561067657600080fd5b506106a66004803603608081101561068d57600080fd5b5080359060208101359060408101359060600135611a19565b60408051918252519081900360200190f35b3480156106c457600080fd5b506106a6600480360360808110156106db57600080fd5b5080359060208101359060408101359060600135611a30565b34801561070057600080fd5b506106a6600480360361014081101561071857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a3e565b34801561078057600080fd5b50610215600480360360a081101561079757600080fd5b8135916020810135918101906060810160408201356401000000008111156107be57600080fd5b8201836020820111156107d057600080fd5b803590602001918460208302840111640100000000831117156107f257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b90565b34801561082557600080fd5b50610215611f29565b34801561083a57600080fd5b50610215600480360360a081101561085157600080fd5b81359160208101359181019060608101604082013564010000000081111561087857600080fd5b82018360208201111561088a57600080fd5b803590602001918460208302840111640100000000831117156108ac57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561200c565b61033a600480360360808110156108e957600080fd5b8135919081019060408101602082013564010000000081111561090b57600080fd5b82018360208201111561091d57600080fd5b8035906020019184602083028401116401000000008311171561093f57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561237a565b34801561097257600080fd5b5061033a600480360360a081101561098957600080fd5b8135916020810135918101906060810160408201356401000000008111156109b057600080fd5b8201836020820111156109c257600080fd5b803590602001918460208302840111640100000000831117156109e457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561279a565b348015610a1757600080fd5b50610a206128d9565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b348015610a5557600080fd5b50610a206128f5565b348015610a6a57600080fd5b50610a20612911565b348015610a7f57600080fd5b506106a660048036036060811015610a9657600080fd5b5080359060208101359060400135612935565b348015610ab557600080fd5b506106a6600480360360c0811015610acc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a0013561294a565b61021560048036036080811015610b1f57600080fd5b81359190810190604081016020820135640100000000811115610b4157600080fd5b820183602082011115610b5357600080fd5b80359060200191846020830284011164010000000083111715610b7557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b2a565b348015610ba857600080fd5b5061027c600480360360e0811015610bbf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561300d565b348015610c1257600080fd5b50610a20613317565b348015610c2757600080fd5b5061033a60048036036040811015610c3e57600080fd5b81359190810190604081016020820135640100000000811115610c6057600080fd5b820183602082011115610c7257600080fd5b80359060200191846020830284011164010000000083111715610c9457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061333b945050505050565b348015610cde57600080fd5b5061027c6004803603610140811015610cf657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613368565b348015610d5e57600080fd5b50610dc16004803603610100811015610d7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356134c0565b60408051938452602084019290925282820152519081900360600190f35b348015610deb57600080fd5b5061021560048036036020811015610e0257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661364f565b610dc1600480360360c0811015610e3557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356136cf565b61033a60048036036080811015610e8857600080fd5b81359190810190604081016020820135640100000000811115610eaa57600080fd5b820183602082011115610ebc57600080fd5b80359060200191846020830284011164010000000083111715610ede57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356139fb565b348015610f1157600080fd5b5061021560048036036020811015610f2857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613e4a565b6000808242811015610fb857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b610fe7897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a61300d565b9093509150610ff7898685613f05565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b5050505061108c85836140cc565b50965096945050505050565b6060814281101561110a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061116f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61126c7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061127f57fe5b602002602001015110156112de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b6113a3868660008181106112ee57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336113897f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061133d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061136757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166143a3565b8560008151811061139657fe5b602002602001015161448e565b6113e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061465e915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8360018551038151811061142e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b505050506114a5848360018551038151811061149857fe5b60200260200101516140cc565b509695505050505050565b60606114dd7f000000000000000000000000000000000000000000000000000000000000000084846149bb565b90505b92915050565b60008060006115167f00000000000000000000000000000000000000000000000000000000000000008f8f6143a3565b9050600087611525578c611547565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b5050505061160a8f8f8f8f8f8f8f61300d565b809450819550505050509b509b9950505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161490565b606081428110156116b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6117157f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061172857fe5b60200260200101511015611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b611797868660008181106112ee57fe5b6114a58287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b6060814281101561184857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106118ad57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6119aa7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b915086826000815181106119ba57fe5b602002602001015111156112de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b6000611a2785858585614b70565b95945050505050565b6000611a2785858585614ca5565b600080611a8c7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006143a3565b9050600086611a9b578b611abd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b50505050611b7f8d8d8d8d8d8d61294a565b9d9c50505050505050505050505050565b8042811015611c0057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611c8f85856000818110611c1057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611c897f000000000000000000000000000000000000000000000000000000000000000089896000818110611c5f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061136757fe5b8a61448e565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611cbf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d5857600080fd5b505afa158015611d6c573d6000803e3d6000fd5b505050506040513d6020811015611d8257600080fd5b50516040805160208881028281018201909352888252929350611dc4929091899189918291850190849080828437600092019190915250889250614dd9915050565b86611ec88288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611df757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b505afa158015611ea4573d6000803e3d6000fd5b505050506040513d6020811015611eba57600080fd5b50519063ffffffff6152bc16565b1015611f1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b5050505050505050565b611f3233611624565b611f9d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b804281101561207c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106120e157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61219085856000818110611c1057fe5b6121ce858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614dd9915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b50519050868110156122e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b50505050611f1f84826140cc565b606081428110156123ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061243057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61252d7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061254057fe5b6020026020010151101561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106125e857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6126a17f000000000000000000000000000000000000000000000000000000000000000089896000818110611c5f57fe5b846000815181106126ae57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506040513d602081101561274957600080fd5b505161275157fe5b6127908287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b5095945050505050565b6060814281101561280c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61286a7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b9150868260008151811061287a57fe5b60200260200101511115611787576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061294284848461532e565b949350505050565b600081428110156129bc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6129eb887f0000000000000000000000000000000000000000000000000000000000000000898989308961300d565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450612a9592508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b158015612a6457600080fd5b505afa158015612a78573d6000803e3d6000fd5b505050506040513d6020811015612a8e57600080fd5b5051613f05565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b505050506114a584836140cc565b8042811015612b9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1685856000818110612bde57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c7d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612d707f000000000000000000000000000000000000000000000000000000000000000089896000818110611c5f57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612dda57600080fd5b505af1158015612dee573d6000803e3d6000fd5b505050506040513d6020811015612e0457600080fd5b5051612e0c57fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612e3c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ed557600080fd5b505afa158015612ee9573d6000803e3d6000fd5b505050506040513d6020811015612eff57600080fd5b50516040805160208981028281018201909352898252929350612f419290918a918a918291850190849080828437600092019190915250899250614dd9915050565b87611ec88289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612f7457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b600080824281101561308057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b60006130ad7f00000000000000000000000000000000000000000000000000000000000000008c8c6143a3565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561312e57600080fd5b505af1158015613142573d6000803e3d6000fd5b505050506040513d602081101561315857600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156131cb57600080fd5b505af11580156131df573d6000803e3d6000fd5b505050506040513d60408110156131f557600080fd5b5080516020909101519092509050600061320f8e8e61540e565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff161461324c57818361324f565b82825b90975095508a8710156132ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615cea6025913960400191505060405180910390fd5b89861015613306576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c146025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606114dd7f00000000000000000000000000000000000000000000000000000000000000008484614209565b60008060006133b87f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006143a3565b90506000876133c7578c6133e9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561348557600080fd5b505af1158015613499573d6000803e3d6000fd5b505050506134ab8e8e8e8e8e8e610f45565b909f909e509c50505050505050505050505050565b6000806000834281101561353557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6135438c8c8c8c8c8c615561565b909450925060006135757f00000000000000000000000000000000000000000000000000000000000000008e8e6143a3565b90506135838d33838861448e565b61358f8c33838761448e565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561360e57600080fd5b505af1158015613622573d6000803e3d6000fd5b505050506040513d602081101561363857600080fd5b5051949d939c50939a509198505050505050505050565b61365833611624565b6136c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6136cc81615862565b50565b6000806000834281101561374457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6137728a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c615561565b909450925060006137c47f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006143a3565b90506137d28b33838861448e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156138fa57600080fd5b505af115801561390e573d6000803e3d6000fd5b505050506040513d602081101561392457600080fd5b505161392c57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156139ab57600080fd5b505af11580156139bf573d6000803e3d6000fd5b505050506040513d60208110156139d557600080fd5b50519250348410156139ed576139ed338534036140cc565b505096509650969350505050565b60608142811015613a6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1686866000818110613ab157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b613bae7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b91503482600081518110613bbe57fe5b60200260200101511115613c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db083600081518110613c6657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c9957600080fd5b505af1158015613cad573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613d1f7f000000000000000000000000000000000000000000000000000000000000000089896000818110611c5f57fe5b84600081518110613d2c57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b505050506040513d6020811015613dc757600080fd5b5051613dcf57fe5b613e0e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b81600081518110613e1b57fe5b6020026020010151341115612790576127903383600081518110613e3b57fe5b602002602001015134036140cc565b613e5333611624565b613ebe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613fdb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613f9e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5091509150818015614070575080511580614070575080806020019051602081101561406d57600080fd5b50515b6140c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615da7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061414357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614106565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146141a5576040519150601f19603f3d011682016040523d82523d6000602084013e6141aa565b606091505b5050905080614204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b505050565b606060028251101561427c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561429457600080fd5b506040519080825280602002602001820160405280156142be578160200160208202803683370190505b50905082816000815181106142cf57fe5b60200260200101818152505060005b600183510381101561439b57600080614321878685815181106142fd57fe5b602002602001015187866001018151811061431457fe5b602002602001015161595b565b9150915061437784848151811061433457fe5b602002602001015183836143728b8a898151811061434e57fe5b60200260200101518b8a6001018151811061436557fe5b6020026020010151615a43565b614b70565b84846001018151811061438657fe5b602090810291909101015250506001016142de565b509392505050565b60008060006143b2858561540e565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527ffea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061456c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161452f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146145ce576040519150601f19603f3d011682016040523d82523d6000602084013e6145d3565b606091505b509150915081801561460157508051158061460157508080602001905160208110156145fe57600080fd5b50515b614656576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615c396031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156149b55760008084838151811061467c57fe5b602002602001015185846001018151811061469357fe5b60200260200101519150915060006146ab838361540e565b50905060008785600101815181106146bf57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146147075782600061470b565b6000835b600154919350915073ffffffffffffffffffffffffffffffffffffffff16156147e557600154604080517fa9678a1800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018790529151919092169163a9678a189160848083019260209291908290030181600087803b1580156147b857600080fd5b505af11580156147cc573d6000803e3d6000fd5b505050506040513d60208110156147e257600080fd5b50505b600060028a510388106147f85788614839565b6148397f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061482c57fe5b60200260200101516143a3565b90506148667f000000000000000000000000000000000000000000000000000000000000000088886143a3565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156148b0576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561493b578181015183820152602001614923565b50505050905090810190601f1680156149685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561498a57600080fd5b505af115801561499e573d6000803e3d6000fd5b505060019099019850614661975050505050505050565b50505050565b6060600282511015614a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614a4657600080fd5b50604051908082528060200260200182016040528015614a70578160200160208202803683370190505b5090508281600183510381518110614a8457fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b801561439b57600080614ae487866001860381518110614ad057fe5b602002602001015187868151811061431457fe5b91509150614b2d848481518110614af757fe5b60200260200101518383614b288b8a60018a0381518110614b1457fe5b60200260200101518b8a8151811061436557fe5b614ca5565b846001850381518110614b3c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614ab4565b6000808511614bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615d7f6028913960400191505060405180910390fd5b600084118015614bda5750600083115b614c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b6000614c53614c466103e88563ffffffff6152bc16565b879063ffffffff615acf16565b90506000614c67828663ffffffff615acf16565b90506000614c8d83614c81896103e863ffffffff615acf16565b9063ffffffff615b5516565b9050808281614c9857fe5b0498975050505050505050565b6000808511614cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615d346029913960400191505060405180910390fd5b600084118015614d0f5750600083115b614d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b6000614d886103e8614d7c878963ffffffff615acf16565b9063ffffffff615acf16565b90506000614db1614da16103e88663ffffffff6152bc16565b614d7c878a63ffffffff6152bc16565b9050614dce6001828481614dc157fe5b049063ffffffff615b5516565b979650505050505050565b60005b600183510381101561420457600080848381518110614df757fe5b6020026020010151858460010181518110614e0e57fe5b6020026020010151915091506000614e26838361540e565b5090506000614e567f000000000000000000000000000000000000000000000000000000000000000085856143a3565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614ea457600080fd5b505afa158015614eb8573d6000803e3d6000fd5b505050506040513d6060811015614ece57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614f18578284614f1b565b83835b91509150614fa0828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b95506150258683838a73ffffffffffffffffffffffffffffffffffffffff166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015614fee57600080fd5b505afa158015615002573d6000803e3d6000fd5b505050506040513d602081101561501857600080fd5b505163ffffffff16614b70565b60015490955073ffffffffffffffffffffffffffffffffffffffff161593506151039250505057600154604080517fa9678a1800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b1580156150d657600080fd5b505af11580156150ea573d6000803e3d6000fd5b505050506040513d602081101561510057600080fd5b50505b6000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461514157826000615145565b6000835b91509150600060028c51038a1061515c578a615190565b6151907f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061482c57fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615240578181015183820152602001615228565b50505050905090810190601f16801561526d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561528f57600080fd5b505af11580156152a3573d6000803e3d6000fd5b50506001909b019a50614ddc9950505050505050505050565b808203828111156114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411615388576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c9e6022913960400191505060405180910390fd5b6000831180156153985750600082115b6153ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b826153fe858463ffffffff615acf16565b8161540557fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615496576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d5d6022913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106154d05782846154d3565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661555a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561560157600080fd5b505afa158015615615573d6000803e3d6000fd5b505050506040513d602081101561562b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561571157604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156156e457600080fd5b505af11580156156f8573d6000803e3d6000fd5b505050506040513d602081101561570e57600080fd5b50505b60008061573f7f00000000000000000000000000000000000000000000000000000000000000008b8b61595b565b91509150816000148015615751575080155b1561576157879350869250615855565b600061576e89848461532e565b90508781116157db57858110156157d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c146025913960400191505060405180910390fd5b889450925082615853565b60006157e889848661532e565b9050898111156157f457fe5b8781101561584d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615cea6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166158ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bee6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080600061596a858561540e565b50905060008061597b8888886143a3565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156159c057600080fd5b505afa1580156159d4573d6000803e3d6000fd5b505050506040513d60608110156159ea57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614615a31578082615a34565b81815b90999098509650505050505050565b6000615a508484846143a3565b73ffffffffffffffffffffffffffffffffffffffff166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015615a9557600080fd5b505afa158015615aa9573d6000803e3d6000fd5b505050506040513d6020811015615abf57600080fd5b505163ffffffff16949350505050565b6000811580615aea57505080820282828281615ae757fe5b04145b6114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe4269737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734269737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644269737761704c6962726172793a20494e53554646494349454e545f414d4f554e544269737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544269737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e544269737761704c6962726172793a20494e53554646494349454e545f4c49515549444954594269737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544269737761704c6962726172793a204944454e544943414c5f4144445245535345534269737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220f423f81b1021c390c07163c4c9533ea8e8210b30f207fd0772f424ce157fa61f64736f6c63430006060033000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode
0x6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063c45a015511610095578063f2fde38b11610064578063f2fde38b14610ddf578063f305d71914610e1f578063fb3bdb4114610e72578063fbbeedf114610f0557610217565b8063c45a015514610c06578063d06ca61f14610c1b578063ded9382a14610cd2578063e8e3370014610d5257610217565b8063ad615dec116100d1578063ad615dec14610a73578063af2979eb14610aa9578063b6f9de9514610b09578063baa2abde14610b9c57610217565b80638da5cb5b14610a0b578063a3ddb30b14610a49578063ad5c464814610a5e57610217565b806352707d8c1161016f578063715018a61161013e578063715018a614610819578063791ac9471461082e5780637ff36ab5146108d35780638803dbee1461096657610217565b806352707d8c1461066a578063571fd012146106b85780635b0d5984146106f45780635c11d7951461077457610217565b80632195995c116101ab5780632195995c146104415780632f54bf6e146104cc57806338ed1739146105205780634a25d94a146105c557610217565b806302751cec1461021c57806318cbafe5146102955780631f00ca741461038a57610217565b36610217573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c161461021557fe5b005b600080fd5b34801561022857600080fd5b5061027c600480360360c081101561023f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610f45565b6040805192835260208301919091528051918290030190f35b3480156102a157600080fd5b5061033a600480360360a08110156102b857600080fd5b8135916020810135918101906060810160408201356401000000008111156102df57600080fd5b8201836020820111156102f157600080fd5b8035906020019184602083028401116401000000008311171561031357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611098565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037657818101518382015260200161035e565b505050509050019250505060405180910390f35b34801561039657600080fd5b5061033a600480360360408110156103ad57600080fd5b813591908101906040810160208201356401000000008111156103cf57600080fd5b8201836020820111156103e157600080fd5b8035906020019184602083028401116401000000008311171561040357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506114b0945050505050565b34801561044d57600080fd5b5061027c600480360361016081101561046557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356114e6565b3480156104d857600080fd5b5061050c600480360360208110156104ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611624565b604080519115158252519081900360200190f35b34801561052c57600080fd5b5061033a600480360360a081101561054357600080fd5b81359160208101359181019060608101604082013564010000000081111561056a57600080fd5b82018360208201111561057c57600080fd5b8035906020019184602083028401116401000000008311171561059e57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611645565b3480156105d157600080fd5b5061033a600480360360a08110156105e857600080fd5b81359160208101359181019060608101604082013564010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184602083028401116401000000008311171561064357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356117d6565b34801561067657600080fd5b506106a66004803603608081101561068d57600080fd5b5080359060208101359060408101359060600135611a19565b60408051918252519081900360200190f35b3480156106c457600080fd5b506106a6600480360360808110156106db57600080fd5b5080359060208101359060408101359060600135611a30565b34801561070057600080fd5b506106a6600480360361014081101561071857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611a3e565b34801561078057600080fd5b50610215600480360360a081101561079757600080fd5b8135916020810135918101906060810160408201356401000000008111156107be57600080fd5b8201836020820111156107d057600080fd5b803590602001918460208302840111640100000000831117156107f257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b90565b34801561082557600080fd5b50610215611f29565b34801561083a57600080fd5b50610215600480360360a081101561085157600080fd5b81359160208101359181019060608101604082013564010000000081111561087857600080fd5b82018360208201111561088a57600080fd5b803590602001918460208302840111640100000000831117156108ac57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561200c565b61033a600480360360808110156108e957600080fd5b8135919081019060408101602082013564010000000081111561090b57600080fd5b82018360208201111561091d57600080fd5b8035906020019184602083028401116401000000008311171561093f57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561237a565b34801561097257600080fd5b5061033a600480360360a081101561098957600080fd5b8135916020810135918101906060810160408201356401000000008111156109b057600080fd5b8201836020820111156109c257600080fd5b803590602001918460208302840111640100000000831117156109e457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561279a565b348015610a1757600080fd5b50610a206128d9565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b348015610a5557600080fd5b50610a206128f5565b348015610a6a57600080fd5b50610a20612911565b348015610a7f57600080fd5b506106a660048036036060811015610a9657600080fd5b5080359060208101359060400135612935565b348015610ab557600080fd5b506106a6600480360360c0811015610acc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a0013561294a565b61021560048036036080811015610b1f57600080fd5b81359190810190604081016020820135640100000000811115610b4157600080fd5b820183602082011115610b5357600080fd5b80359060200191846020830284011164010000000083111715610b7557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612b2a565b348015610ba857600080fd5b5061027c600480360360e0811015610bbf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561300d565b348015610c1257600080fd5b50610a20613317565b348015610c2757600080fd5b5061033a60048036036040811015610c3e57600080fd5b81359190810190604081016020820135640100000000811115610c6057600080fd5b820183602082011115610c7257600080fd5b80359060200191846020830284011164010000000083111715610c9457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061333b945050505050565b348015610cde57600080fd5b5061027c6004803603610140811015610cf657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135613368565b348015610d5e57600080fd5b50610dc16004803603610100811015610d7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356134c0565b60408051938452602084019290925282820152519081900360600190f35b348015610deb57600080fd5b5061021560048036036020811015610e0257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661364f565b610dc1600480360360c0811015610e3557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356136cf565b61033a60048036036080811015610e8857600080fd5b81359190810190604081016020820135640100000000811115610eaa57600080fd5b820183602082011115610ebc57600080fd5b80359060200191846020830284011164010000000083111715610ede57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356139fb565b348015610f1157600080fd5b5061021560048036036020811015610f2857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613e4a565b6000808242811015610fb857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b610fe7897f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8a8a8a308a61300d565b9093509150610ff7898685613f05565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561106a57600080fd5b505af115801561107e573d6000803e3d6000fd5b5050505061108c85836140cc565b50965096945050505050565b6060814281101561110a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061116f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61126c7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061127f57fe5b602002602001015110156112de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b6113a3868660008181106112ee57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336113897f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8a8a600081811061133d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061136757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166143a3565b8560008151811061139657fe5b602002602001015161448e565b6113e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061465e915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8360018551038151811061142e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b505050506114a5848360018551038151811061149857fe5b60200260200101516140cc565b509695505050505050565b60606114dd7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee84846149bb565b90505b92915050565b60008060006115167f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8f8f6143a3565b9050600087611525578c611547565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b5050505061160a8f8f8f8f8f8f8f61300d565b809450819550505050509b509b9950505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161490565b606081428110156116b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6117157f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061172857fe5b60200260200101511015611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b611797868660008181106112ee57fe5b6114a58287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b6060814281101561184857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106118ad57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6119aa7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b915086826000815181106119ba57fe5b602002602001015111156112de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b6000611a2785858585614b70565b95945050505050565b6000611a2785858585614ca5565b600080611a8c7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8d7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6143a3565b9050600086611a9b578b611abd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b50505050611b7f8d8d8d8d8d8d61294a565b9d9c50505050505050505050505050565b8042811015611c0057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611c8f85856000818110611c1057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611c897f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee89896000818110611c5f57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061136757fe5b8a61448e565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611cbf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d5857600080fd5b505afa158015611d6c573d6000803e3d6000fd5b505050506040513d6020811015611d8257600080fd5b50516040805160208881028281018201909352888252929350611dc4929091899189918291850190849080828437600092019190915250889250614dd9915050565b86611ec88288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611df757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b505afa158015611ea4573d6000803e3d6000fd5b505050506040513d6020811015611eba57600080fd5b50519063ffffffff6152bc16565b1015611f1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b5050505050505050565b611f3233611624565b611f9d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b804281101561207c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106120e157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61219085856000818110611c1057fe5b6121ce858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614dd9915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b15801561225e57600080fd5b505afa158015612272573d6000803e3d6000fd5b505050506040513d602081101561228857600080fd5b50519050868110156122e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b50505050611f1f84826140cc565b606081428110156123ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff168686600081811061243057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61252d7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee3488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061420992505050565b9150868260018451038151811061254057fe5b6020026020010151101561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615cc0602a913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106125e857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6126a17f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee89896000818110611c5f57fe5b846000815181106126ae57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b505050506040513d602081101561274957600080fd5b505161275157fe5b6127908287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b5095945050505050565b6060814281101561280c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61286a7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b9150868260008151811061287a57fe5b60200260200101511115611787576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b600061294284848461532e565b949350505050565b600081428110156129bc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6129eb887f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c898989308961300d565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450612a9592508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b158015612a6457600080fd5b505afa158015612a78573d6000803e3d6000fd5b505050506040513d6020811015612a8e57600080fd5b5051613f05565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b505050506114a584836140cc565b8042811015612b9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1685856000818110612bde57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c7d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612d707f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee89896000818110611c5f57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612dda57600080fd5b505af1158015612dee573d6000803e3d6000fd5b505050506040513d6020811015612e0457600080fd5b5051612e0c57fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612e3c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ed557600080fd5b505afa158015612ee9573d6000803e3d6000fd5b505050506040513d6020811015612eff57600080fd5b50516040805160208981028281018201909352898252929350612f419290918a918a918291850190849080828437600092019190915250899250614dd9915050565b87611ec88289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612f7457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b600080824281101561308057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b60006130ad7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8c8c6143a3565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561312e57600080fd5b505af1158015613142573d6000803e3d6000fd5b505050506040513d602081101561315857600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156131cb57600080fd5b505af11580156131df573d6000803e3d6000fd5b505050506040513d60408110156131f557600080fd5b5080516020909101519092509050600061320f8e8e61540e565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff161461324c57818361324f565b82825b90975095508a8710156132ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615cea6025913960400191505060405180910390fd5b89861015613306576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c146025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee81565b60606114dd7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8484614209565b60008060006133b87f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8e7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6143a3565b90506000876133c7578c6133e9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561348557600080fd5b505af1158015613499573d6000803e3d6000fd5b505050506134ab8e8e8e8e8e8e610f45565b909f909e509c50505050505050505050505050565b6000806000834281101561353557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6135438c8c8c8c8c8c615561565b909450925060006135757f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8e8e6143a3565b90506135838d33838861448e565b61358f8c33838761448e565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561360e57600080fd5b505af1158015613622573d6000803e3d6000fd5b505050506040513d602081101561363857600080fd5b5051949d939c50939a509198505050505050505050565b61365833611624565b6136c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6136cc81615862565b50565b6000806000834281101561374457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6137728a7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8b348c8c615561565b909450925060006137c47f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8c7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6143a3565b90506137d28b33838861448e565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156138fa57600080fd5b505af115801561390e573d6000803e3d6000fd5b505050506040513d602081101561392457600080fd5b505161392c57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156139ab57600080fd5b505af11580156139bf573d6000803e3d6000fd5b505050506040513d60208110156139d557600080fd5b50519250348410156139ed576139ed338534036140cc565b505096509650969350505050565b60608142811015613a6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4269737761705632526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1686866000818110613ab157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4269737761705632526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b613bae7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506149bb92505050565b91503482600081518110613bbe57fe5b60200260200101511115613c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bc86026913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663d0e30db083600081518110613c6657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c9957600080fd5b505af1158015613cad573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613d1f7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee89896000818110611c5f57fe5b84600081518110613d2c57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d9d57600080fd5b505af1158015613db1573d6000803e3d6000fd5b505050506040513d6020811015613dc757600080fd5b5051613dcf57fe5b613e0e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061465e915050565b81600081518110613e1b57fe5b6020026020010151341115612790576127903383600081518110613e3b57fe5b602002602001015134036140cc565b613e5333611624565b613ebe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613fdb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613f9e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461403d576040519150601f19603f3d011682016040523d82523d6000602084013e614042565b606091505b5091509150818015614070575080511580614070575080806020019051602081101561406d57600080fd5b50515b6140c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615da7602d913960400191505060405180910390fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061414357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614106565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146141a5576040519150601f19603f3d011682016040523d82523d6000602084013e6141aa565b606091505b5050905080614204576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b505050565b606060028251101561427c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561429457600080fd5b506040519080825280602002602001820160405280156142be578160200160208202803683370190505b50905082816000815181106142cf57fe5b60200260200101818152505060005b600183510381101561439b57600080614321878685815181106142fd57fe5b602002602001015187866001018151811061431457fe5b602002602001015161595b565b9150915061437784848151811061433457fe5b602002602001015183836143728b8a898151811061434e57fe5b60200260200101518b8a6001018151811061436557fe5b6020026020010151615a43565b614b70565b84846001018151811061438657fe5b602090810291909101015250506001016142de565b509392505050565b60008060006143b2858561540e565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527ffea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061456c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161452f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146145ce576040519150601f19603f3d011682016040523d82523d6000602084013e6145d3565b606091505b509150915081801561460157508051158061460157508080602001905160208110156145fe57600080fd5b50515b614656576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615c396031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156149b55760008084838151811061467c57fe5b602002602001015185846001018151811061469357fe5b60200260200101519150915060006146ab838361540e565b50905060008785600101815181106146bf57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146147075782600061470b565b6000835b600154919350915073ffffffffffffffffffffffffffffffffffffffff16156147e557600154604080517fa9678a1800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018790529151919092169163a9678a189160848083019260209291908290030181600087803b1580156147b857600080fd5b505af11580156147cc573d6000803e3d6000fd5b505050506040513d60208110156147e257600080fd5b50505b600060028a510388106147f85788614839565b6148397f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee878c8b6002018151811061482c57fe5b60200260200101516143a3565b90506148667f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee88886143a3565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156148b0576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561493b578181015183820152602001614923565b50505050905090810190601f1680156149685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561498a57600080fd5b505af115801561499e573d6000803e3d6000fd5b505060019099019850614661975050505050505050565b50505050565b6060600282511015614a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015614a4657600080fd5b50604051908082528060200260200182016040528015614a70578160200160208202803683370190505b5090508281600183510381518110614a8457fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b801561439b57600080614ae487866001860381518110614ad057fe5b602002602001015187868151811061431457fe5b91509150614b2d848481518110614af757fe5b60200260200101518383614b288b8a60018a0381518110614b1457fe5b60200260200101518b8a8151811061436557fe5b614ca5565b846001850381518110614b3c57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614ab4565b6000808511614bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615d7f6028913960400191505060405180910390fd5b600084118015614bda5750600083115b614c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b6000614c53614c466103e88563ffffffff6152bc16565b879063ffffffff615acf16565b90506000614c67828663ffffffff615acf16565b90506000614c8d83614c81896103e863ffffffff615acf16565b9063ffffffff615b5516565b9050808281614c9857fe5b0498975050505050505050565b6000808511614cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615d346029913960400191505060405180910390fd5b600084118015614d0f5750600083115b614d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b6000614d886103e8614d7c878963ffffffff615acf16565b9063ffffffff615acf16565b90506000614db1614da16103e88663ffffffff6152bc16565b614d7c878a63ffffffff6152bc16565b9050614dce6001828481614dc157fe5b049063ffffffff615b5516565b979650505050505050565b60005b600183510381101561420457600080848381518110614df757fe5b6020026020010151858460010181518110614e0e57fe5b6020026020010151915091506000614e26838361540e565b5090506000614e567f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee85856143a3565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614ea457600080fd5b505afa158015614eb8573d6000803e3d6000fd5b505050506040513d6060811015614ece57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614f18578284614f1b565b83835b91509150614fa0828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e9057600080fd5b95506150258683838a73ffffffffffffffffffffffffffffffffffffffff166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015614fee57600080fd5b505afa158015615002573d6000803e3d6000fd5b505050506040513d602081101561501857600080fd5b505163ffffffff16614b70565b60015490955073ffffffffffffffffffffffffffffffffffffffff161593506151039250505057600154604080517fa9678a1800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b1580156150d657600080fd5b505af11580156150ea573d6000803e3d6000fd5b505050506040513d602081101561510057600080fd5b50505b6000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461514157826000615145565b6000835b91509150600060028c51038a1061515c578a615190565b6151907f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee898e8d6002018151811061482c57fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015615240578181015183820152602001615228565b50505050905090810190601f16801561526d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561528f57600080fd5b505af11580156152a3573d6000803e3d6000fd5b50506001909b019a50614ddc9950505050505050505050565b808203828111156114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411615388576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615c9e6022913960400191505060405180910390fd5b6000831180156153985750600082115b6153ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615d0f6025913960400191505060405180910390fd5b826153fe858463ffffffff615acf16565b8161540557fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615496576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d5d6022913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106154d05782846154d3565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661555a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4269737761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee9092169163e6a4390591604480820192602092909190829003018186803b15801561560157600080fd5b505afa158015615615573d6000803e3d6000fd5b505050506040513d602081101561562b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561571157604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee9092169163c9c65396916044808201926020929091908290030181600087803b1580156156e457600080fd5b505af11580156156f8573d6000803e3d6000fd5b505050506040513d602081101561570e57600080fd5b50505b60008061573f7f000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee8b8b61595b565b91509150816000148015615751575080155b1561576157879350869250615855565b600061576e89848461532e565b90508781116157db57858110156157d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c146025913960400191505060405180910390fd5b889450925082615853565b60006157e889848661532e565b9050898111156157f457fe5b8781101561584d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615cea6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166158ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615bee6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080600061596a858561540e565b50905060008061597b8888886143a3565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156159c057600080fd5b505afa1580156159d4573d6000803e3d6000fd5b505050506040513d60608110156159ea57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614615a31578082615a34565b81815b90999098509650505050505050565b6000615a508484846143a3565b73ffffffffffffffffffffffffffffffffffffffff166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015615a9557600080fd5b505afa158015615aa9573d6000803e3d6000fd5b505050506040513d6020811015615abf57600080fd5b505163ffffffff16949350505050565b6000811580615aea57505080820282828281615ae757fe5b04145b6114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808201828110156114e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe4269737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734269737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644269737761704c6962726172793a20494e53554646494349454e545f414d4f554e544269737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544269737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e544269737761704c6962726172793a20494e53554646494349454e545f4c49515549444954594269737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544269737761704c6962726172793a204944454e544943414c5f4144445245535345534269737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220f423f81b1021c390c07163c4c9533ea8e8210b30f207fd0772f424ce157fa61f64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Decoded View---------------
Arg [0] : _factory (address): 0x858E3312ed3A876947EA49d572A7C42DE08af7EE
Arg [1] : _WETH (address): 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode Sourcemap
19397:18926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19925:10;:18;19939:4;19925:18;;19918:26;;;;19397:18926;;12:1:-1;9;2:12;24156:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24156:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24156:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31419:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31419:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31419:842:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31419:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31419:842: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;31419:842:0;;-1:-1:-1;31419:842:0;-1:-1:-1;31419:842: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;31419:842:0;;;;;;;;;;;;;;;;;38070:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38070:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38070:250:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38070:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38070:250: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;38070:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38070:250:0;;-1:-1:-1;38070:250:0;;-1:-1:-1;;;;;38070:250:0:i;24835:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24835:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24835:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18425:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18425:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18425:104:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28666:621;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28666:621:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28666:621:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28666:621:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28666:621: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;28666:621:0;;-1:-1:-1;28666:621:0;-1:-1:-1;28666:621:0;;;;;;;;;:::i;30593:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30593:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30593:820:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30593:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30593:820: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;30593:820:0;;-1:-1:-1;30593:820:0;-1:-1:-1;30593:820:0;;;;;;;;;:::i;37233:282::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37233:282:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;37233:282:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37523:281;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37523:281:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;37523:281:0;;;;;;;;;;;;;;;;;:::i;26960:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26960:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26960:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34591:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34591:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34591:710:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34591:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34591:710: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;34591:710:0;;-1:-1:-1;34591:710:0;-1:-1:-1;34591:710:0;;;;;;;;;:::i;18537:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18537:140:0;;;:::i;36158:838::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36158:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36158:838:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36158:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36158:838: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;36158:838:0;;-1:-1:-1;36158:838:0;-1:-1:-1;36158:838:0;;;;;;;;;:::i;29898:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29898:689:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29898:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29898:689: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;29898:689:0;;-1:-1:-1;29898:689:0;-1:-1:-1;29898:689:0;;;;;;;;;:::i;29293:599::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29293:599:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29293:599:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29293:599:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29293:599: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;29293:599:0;;-1:-1:-1;29293:599:0;-1:-1:-1;29293:599:0;;;;;;;;;:::i;18338:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18338:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19581:37;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19581:37:0;;;:::i;19536:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19536:38:0;;;:::i;37040:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37040:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37040:185:0;;;;;;;;;;;;:::i;26254:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26254:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26254:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35307:845::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35307:845:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35307:845:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35307:845: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;35307:845:0;;-1:-1:-1;35307:845:0;-1:-1:-1;35307:845:0;;;;;;;;;:::i;23299:851::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23299:851:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23299:851:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19488:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19488:41:0;;;:::i;37812:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37812:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;37812:250:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37812:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37812:250: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;37812:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37812:250:0;;-1:-1:-1;37812:250:0;;-1:-1:-1;;;;;37812:250:0:i;25512:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25512:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;25512:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21550:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21550:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21550:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18922:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18922:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18922:109:0;;;;:::i;22288:968::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22288:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32267:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32267:802:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32267:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32267:802: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;32267:802:0;;-1:-1:-1;32267:802:0;-1:-1:-1;32267:802:0;;;;;;;;;:::i;20015:116::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20015:116:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20015:116:0;;;;:::i;24156:673::-;24393:16;24411:14;24374:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24465:196:::1;24495:5;24515:4;24534:9;24558:14;24587:12;24622:4;24642:8;24465:15;:196::i;:::-;24438:223:::0;;-1:-1:-1;24438:223:0;-1:-1:-1;24672:51:0::1;24700:5:::0;24707:2;24438:223;24672:27:::1;:51::i;:::-;24740:4;24734:20;;;24755:9;24734:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24734:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24734:31:0;;;;24776:45;24807:2;24811:9;24776:30;:45::i;:::-;24156:673:::0;;;;;;;;;;:::o;31419:842::-;31633:21;31605:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31680:29:::1;31705:4;31680:29;:4:::0;;31685:15;;;31680:21;;::::1;;;;;;;;;;;;;:29;;;31672:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31763:52;31791:7;31800:8;31810:4;;31763:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31763:27:0::1;::::0;-1:-1:-1;;;31763:52:0:i:1;:::-;31753:62;;31865:12;31834:7;31859:1;31842:7;:14;:18;31834:27;;;;;;;;;;;;;;:43;;31826:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31935:138;31981:4;;31986:1;31981:7;;;;;;;;;;;;;;;31990:10;32002:48;32024:7;32033:4;;32038:1;32033:7;;;;;;;;;;;;;;;32042:4;;32047:1;32042:7;;;;;;;;;;;;;;;32002:21;:48::i;:::-;32052:7;32060:1;32052:10;;;;;;;;;;;;;;31935:31;:138::i;:::-;32084:35;32090:7;32099:4;;32084:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32113:4:0::1;::::0;-1:-1:-1;32084:5:0::1;::::0;-1:-1:-1;;32084:35:0:i:1;:::-;32136:4;32130:20;;;32151:7;32176:1;32159:7;:14;:18;32151:27;;;;;;;;;;;;;;32130:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32130:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32130:49:0;;;;32190:63;32221:2;32225:7;32250:1;32233:7;:14;:18;32225:27;;;;;;;;;;;;;;32190:30;:63::i;:::-;31419:842:::0;;;;;;;;;:::o;38070:250::-;38214:21;38260:52;38287:7;38296:9;38307:4;38260:26;:52::i;:::-;38253:59;;38070:250;;;;;:::o;24835:671::-;25141:12;25155;25180;25195:46;25217:7;25226:6;25234;25195:21;:46::i;:::-;25180:61;;25252:10;25265;:33;;25289:9;25265:33;;;25283:2;25265:33;25309:77;;;;;;25334:10;25309:77;;;;25354:4;25309:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25252:46;;-1:-1:-1;25309:24:0;;;;;;:77;;;;;-1:-1:-1;;25309:77:0;;;;;;;;-1:-1:-1;25309:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;25309:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25309:77:0;;;;25418:80;25434:6;25442;25450:9;25461:10;25473;25485:2;25489:8;25418:15;:80::i;:::-;25397:101;;;;;;;;24835:671;;;;;;;;;;;;;;;;:::o;18425:104::-;18480:4;18515:6;;;;;18504:17;;;;18425:104::o;28666:621::-;28890:21;28871:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28934:52:::1;28962:7;28971:8;28981:4;;28934:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28934:27:0::1;::::0;-1:-1:-1;;;28934:52:0:i:1;:::-;28924:62;;29036:12;29005:7;29030:1;29013:7;:14;:18;29005:27;;;;;;;;;;;;;;:43;;28997:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29106:138;29152:4;;29157:1;29152:7;;;;;;29106:138;29255:24;29261:7;29270:4;;29255:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29276:2:0;;-1:-1:-1;29255:5:0::1;::::0;-1:-1:-1;;29255:24:0:i:1;30593:820::-:0;30807:21;30779:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30854:29:::1;30879:4;30854:29;:4:::0;;30859:15;;;30854:21;;::::1;;;;;;;;;;;;;:29;;;30846:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30937:52;30964:7;30973:9;30984:4;;30937:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30937:26:0::1;::::0;-1:-1:-1;;;30937:52:0:i:1;:::-;30927:62;;31022:11;31008:7;31016:1;31008:10;;;;;;;;;;;;;;:25;;31000:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37233:282:::0;37400:14;37439:68;37466:8;37476:9;37487:10;37499:7;37439:26;:68::i;:::-;37432:75;37233:282;-1:-1:-1;;;;;37233:282:0:o;37523:281::-;37690:13;37728:68;37754:9;37765;37776:10;37788:7;37728:25;:68::i;26960:712::-;27278:14;27305:12;27320:43;27342:7;27351:5;27358:4;27320:21;:43::i;:::-;27305:58;;27374:10;27387;:33;;27411:9;27387:33;;;27405:2;27387:33;27431:77;;;;;;27456:10;27431:77;;;;27476:4;27431:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27374:46;;-1:-1:-1;27431:24:0;;;;;;:77;;;;;-1:-1:-1;;27431:77:0;;;;;;;;-1:-1:-1;27431:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;27431:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27431:77:0;;;;27531:133;27593:5;27600:9;27611:14;27627:12;27641:2;27645:8;27531:47;:133::i;:::-;27519:145;26960:712;-1:-1:-1;;;;;;;;;;;;;26960:712:0:o;34591:710::-;34825:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34846:136:::1;34892:4;;34897:1;34892:7;;;;;;;;;;;;;;;34901:10;34913:48;34935:7;34944:4;;34949:1;34944:7;;;;;;;;;;;;;;;34953:4;;34958:1;34953:7;;;;;;34913:48;34963:8;34846:31;:136::i;:::-;34993:18;35021:4:::0;;35026:15;;;35021:21;;::::1;;;;;;;;;;;;;35014:39;;;35054:2;35014:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35014:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35014:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35014:43:0;35068:44:::1;::::0;;35014:43:::1;35068:44:::0;;::::1;::::0;;;;;;;;;;;35014:43;;-1:-1:-1;35068:44:0::1;::::0;;;35103:4;;;;;;35068:44;::::1;::::0;35103:4;;35068:44;35103:4;35068:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35109:2:0;;-1:-1:-1;35068:34:0::1;::::0;-1:-1:-1;;35068:44:0:i:1;:::-;35211:12:::0;35145:62:::1;35193:13:::0;35152:4;;35157:15;;;35152:21;;::::1;;;;;;;;;;;;;35145:39;;;35185:2;35145:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35145:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35145:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35145:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;35123:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19743:1;34591:710:::0;;;;;;;:::o;18537:140::-;19081:19;19089:10;19081:7;:19::i;:::-;19073:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18636:1:::1;18620:6:::0;;18599:40:::1;::::0;::::1;18620:6:::0;;::::1;::::0;18599:40:::1;::::0;18636:1;;18599:40:::1;18667:1;18650:19:::0;;;::::1;::::0;;18537:140::o;36158:838::-;36425:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36459:29:::1;36484:4;36459:29;:4:::0;;36464:15;;;36459:21;;::::1;;;;;;;;;;;;;:29;;;36451:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36532:136;36578:4;;36583:1;36578:7;;;;;;36532:136;36679:55;36714:4;;36679:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36728:4:0::1;::::0;-1:-1:-1;36679:34:0::1;::::0;-1:-1:-1;;36679:55:0:i:1;:::-;36762:37;::::0;;;;;36793:4:::1;36762:37;::::0;::::1;::::0;;;36745:14:::1;::::0;36762:22:::1;36769:4;36762:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;36762:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36762:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36762:37:0;;-1:-1:-1;36818:25:0;;::::1;;36810:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36907:4;36901:20;;;36922:9;36901:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36901:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36901:31:0;;;;36943:45;36974:2;36978:9;36943:30;:45::i;29898:689::-:0;30114:21;30086:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30172:4:::1;30161:15;;:4;;30166:1;30161:7;;;;;;;;;;;;;;;:15;;;30153:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30230:53;30258:7;30267:9;30278:4;;30230:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30230:27:0::1;::::0;-1:-1:-1;;;30230:53:0:i:1;:::-;30220:63;;30333:12;30302:7;30327:1;30310:7;:14;:18;30302:27;;;;;;;;;;;;;;:43;;30294:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30409:4;30403:19;;;30430:7;30438:1;30430:10;;;;;;;;;;;;;;30403:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30403:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30403:40:0;;;;;30467:4;30461:20;;;30482:48;30504:7;30513:4;;30518:1;30513:7;;;;;;30482:48;30532:7;30540:1;30532:10;;;;;;;;;;;;;;30461:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30461:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30461:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30461:82:0;30454:90:::1;;;;30555:24;30561:7;30570:4;;30555:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30576:2:0;;-1:-1:-1;30555:5:0::1;::::0;-1:-1:-1;;30555:24:0:i:1;:::-;29898:689:::0;;;;;;;;:::o;29293:599::-;29517:21;29498:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29561:52:::1;29588:7;29597:9;29608:4;;29561:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29561:26:0::1;::::0;-1:-1:-1;;;29561:52:0:i:1;:::-;29551:62;;29646:11;29632:7;29640:1;29632:10;;;;;;;;;;;;;;:25;;29624:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18338:79:::0;18376:7;18403:6;;;18338:79;:::o;19581:37::-;;;;;;:::o;19536:38::-;;;:::o;37040:185::-;37137:12;37169:48;37189:7;37198:8;37208;37169:19;:48::i;:::-;37162:55;37040:185;-1:-1:-1;;;;37040:185:0:o;26254:700::-;26520:14;26501:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26563:196:::1;26593:5;26613:4;26632:9;26656:14;26685:12;26720:4;26740:8;26563:15;:196::i;:::-;26809:38;::::0;;;;;26841:4:::1;26809:38;::::0;::::1;::::0;;;26547:212;;-1:-1:-1;26770:78:0::1;::::0;-1:-1:-1;26798:5:0;;26805:2;;26809:23:::1;::::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;26809:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26809:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26809:38:0;26770:27:::1;:78::i;:::-;26865:4;26859:20;;;26880:9;26859:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26859:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26859:31:0;;;;26901:45;26932:2;26936:9;26901:30;:45::i;35307:845::-:0;35567:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35612:4:::1;35601:15;;:4;;35606:1;35601:7;;;;;;;;;;;;;;;:15;;;35593:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;35660:13;35676:9;35660:25;;35702:4;35696:19;;;35723:8;35696:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35696:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35696:38:0;;;;;35758:4;35752:20;;;35773:48;35795:7;35804:4;;35809:1;35804:7;;;;;;35773:48;35823:8;35752:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35752:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35752:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35752:80:0;35745:88:::1;;;;35844:18;35872:4:::0;;35877:15;;;35872:21;;::::1;;;;;;;;;;;;;35865:39;;;35905:2;35865:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35865:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35865:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35865:43:0;35919:44:::1;::::0;;35865:43:::1;35919:44:::0;;::::1;::::0;;;;;;;;;;;35865:43;;-1:-1:-1;35919:44:0::1;::::0;;;35954:4;;;;;;35919:44;::::1;::::0;35954:4;;35919:44;35954:4;35919:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35960:2:0;;-1:-1:-1;35919:34:0::1;::::0;-1:-1:-1;;35919:44:0:i:1;:::-;36062:12:::0;35996:62:::1;36044:13:::0;36003:4;;36008:15;;;36003:21;;::::1;;;;;;;;;;;;;35996:39;;;36036:2;35996:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;23299:851:0::0;23553:12;23567;23534:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23592:12:::1;23607:46;23629:7;23638:6;23646;23607:21;:46::i;:::-;23664:59;::::0;;;;;23695:10:::1;23664:59;::::0;::::1;::::0;:30:::1;::::0;::::1;:59:::0;;;;;;;;;;;;;;23592:61;;-1:-1:-1;23664:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23664:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23664:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23664:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23791:26:0::1;::::0;;;;;:22:::1;:26:::0;;::::1;;::::0;::::1;::::0;;;23761:12:::1;::::0;;;23791:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;23761:12;23791:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23791:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23791:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23791:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23791:26:0;-1:-1:-1;23829:14:0::1;23848:40;23873:6:::0;23881;23848:24:::1;:40::i;:::-;23828:60;;;23930:6;23920:16;;:6;:16;;;:58;;23961:7;23970;23920:58;;;23940:7;23949;23920:58;23899:79:::0;;-1:-1:-1;23899:79:0;-1:-1:-1;23997:21:0;;::::1;;23989:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24090:10;24079:7;:21;;24071:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19743:1;;;;23299:851:::0;;;;;;;;;;;:::o;19488:41::-;;;:::o;37812:250::-;37956:21;38002:52;38030:7;38039:8;38049:4;38002:27;:52::i;25512:663::-;25801:16;25819:14;25846:12;25861:43;25883:7;25892:5;25899:4;25861:21;:43::i;:::-;25846:58;;25915:10;25928;:33;;25952:9;25928:33;;;25946:2;25928:33;25972:77;;;;;;25997:10;25972:77;;;;26017:4;25972:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25915:46;;-1:-1:-1;25972:24:0;;;;;;:77;;;;;-1:-1:-1;;25972:77:0;;;;;;;;-1:-1:-1;25972:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;25972:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25972:77:0;;;;26087:80;26106:5;26113:9;26124:14;26140:12;26154:2;26158:8;26087:18;:80::i;:::-;26060:107;;;;-1:-1:-1;25512:663:0;-1:-1:-1;;;;;;;;;;;;;25512:663:0:o;21550:732::-;21838:12;21852;21866:14;21819:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21914:85:::1;21928:6;21936;21944:14;21960;21976:10;21988;21914:13;:85::i;:::-;21893:106:::0;;-1:-1:-1;21893:106:0;-1:-1:-1;22010:12:0::1;22025:46;22047:7;22056:6:::0;22064;22025:21:::1;:46::i;:::-;22010:61;;22082:66;22114:6;22122:10;22134:4;22140:7;22082:31;:66::i;:::-;22159;22191:6;22199:10;22211:4;22217:7;22159:31;:66::i;:::-;22260:4;22248:22;;;22271:2;22248:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22248:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22248:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22248:26:0;21550:732;;;;-1:-1:-1;22248:26:0;;-1:-1:-1;21550:732:0;;-1:-1:-1;;;;;;;;;21550:732:0:o;18922:109::-;19081:19;19089:10;19081:7;:19::i;:::-;19073:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18995:28:::1;19014:8;18995:18;:28::i;:::-;18922:109:::0;:::o;22288:968::-;22541:16;22559:14;22575;22522:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22629:176:::1;22657:5;22677:4;22696:18;22729:9;22753:14;22782:12;22629:13;:176::i;:::-;22602:203:::0;;-1:-1:-1;22602:203:0;-1:-1:-1;22816:12:0::1;22831:43;22853:7;22862:5:::0;22869:4:::1;22831:21;:43::i;:::-;22816:58;;22885:69;22917:5;22924:10;22936:4;22942:11;22885:31;:69::i;:::-;22971:4;22965:19;;;22992:9;22965:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22965:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22965:39:0;;;;;23028:4;23022:20;;;23043:4;23049:9;23022:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23022:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23022:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23022:37:0;23015:45:::1;;;;23095:4;23083:22;;;23106:2;23083:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23083:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23083:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23083:26:0;;-1:-1:-1;23160:9:0::1;:21:::0;-1:-1:-1;23156:92:0::1;;;23183:65;23214:10;23238:9;23226;:21;23183:30;:65::i;:::-;19743:1;22288:968:::0;;;;;;;;;;;:::o;32267:802::-;32480:21;32452:8;19689:15;19677:8;:27;;19669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32538:4:::1;32527:15;;:4;;32532:1;32527:7;;;;;;;;;;;;;;;:15;;;32519:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32596:52;32623:7;32632:9;32643:4;;32596:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32596:26:0::1;::::0;-1:-1:-1;;;32596:52:0:i:1;:::-;32586:62;;32681:9;32667:7;32675:1;32667:10;;;;;;;;;;;;;;:23;;32659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32750:4;32744:19;;;32771:7;32779:1;32771:10;;;;;;;;;;;;;;32744:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32744:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32744:40:0;;;;;32808:4;32802:20;;;32823:48;32845:7;32854:4;;32859:1;32854:7;;;;;;32823:48;32873:7;32881:1;32873:10;;;;;;;;;;;;;;32802:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32802:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32802:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32802:82:0;32795:90:::1;;;;32896:24;32902:7;32911:4;;32896:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32917:2:0;;-1:-1:-1;32896:5:0::1;::::0;-1:-1:-1;;32896:24:0:i:1;:::-;32983:7;32991:1;32983:10;;;;;;;;;;;;;;32971:9;:22;32967:94;;;32995:66;33026:10;33050:7;33058:1;33050:10;;;;;;;;;;;;;;33038:9;:22;32995:30;:66::i;20015:116::-:0;19081:19;19089:10;19081:7;:19::i;:::-;19073:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20093:13:::1;:30:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20015:116::o;723:449::-;955:45;;;944:10;955:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;955:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;955:45:0;179:29:-1;160:49;;944:57:0;;;;909:12;;923:17;;944:10;;;;955:45;944:57;;;25:18:-1;944:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;944: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;;908:93:0;;;;1034:7;:57;;;;-1:-1:-1;1046:11:0;;:16;;:44;;;1077:4;1066:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1066:24:0;1046:44;1012:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;723:449;;;;;:::o;1686:217::-;1799:12;;;1759;1799;;;;;;;;;1777:7;;;;1792:5;;1777:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1777: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;;1758:54:0;;;1831:7;1823:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1686:217;;;:::o;13406:551::-;13507:21;13564:1;13549:4;:11;:16;;13541:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13629:4;:11;13618:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13618:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13618:23:0;;13608:33;;13665:8;13652:7;13660:1;13652:10;;;;;;;;;;;;;:21;;;;;13689:6;13684:266;13715:1;13701:4;:11;:15;13697:1;:19;13684:266;;;13739:14;13755:15;13774:42;13786:7;13795:4;13800:1;13795:7;;;;;;;;;;;;;;13804:4;13809:1;13813;13809:5;13804:11;;;;;;;;;;;;;;13774;:42::i;:::-;13738:78;;;;13848:90;13861:7;13869:1;13861:10;;;;;;;;;;;;;;13873:9;13884:10;13896:41;13907:7;13916:4;13921:1;13916:7;;;;;;;;;;;;;;13925:4;13930:1;13934;13930:5;13925:11;;;;;;;;;;;;;;13896:10;:41::i;:::-;13848:12;:90::i;:::-;13831:7;13839:1;13843;13839:5;13831:14;;;;;;;;;;;;;;;;;:107;-1:-1:-1;;13718:3:0;;13684:266;;;;13406:551;;;;;:::o;10486:478::-;10575:12;10601:14;10617;10635:26;10646:6;10654;10635:10;:26::i;:::-;10799:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10799:32:0;;;;;10789:43;;;;;;10702:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10702:251:0;;;;;;;10692:262;;;;;;;;;10486:478;-1:-1:-1;;;;;10486:478:0:o;1180:498::-;1451:51;;;1440:10;1451:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1451:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1451:51:0;179:29:-1;160:49;;1440:63:0;;;;1405:12;;1419:17;;1440:10;;;;1451:51;1440:63;;;25:18:-1;1440:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1440: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;;1404:99:0;;;;1536:7;:57;;;;-1:-1:-1;1548:11:0;;:16;;:44;;;1579:4;1568:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1568:24:0;1548:44;1514:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1180:498;;;;;;:::o;27783:877::-;27890:6;27885:768;27916:1;27902:4;:11;:15;27898:1;:19;27885:768;;;27940:13;27955:14;27974:4;27979:1;27974:7;;;;;;;;;;;;;;27983:4;27988:1;27992;27988:5;27983:11;;;;;;;;;;;;;;27939:56;;;;28011:14;28030:39;28055:5;28062:6;28030:24;:39::i;:::-;28010:59;;;28084:14;28101:7;28109:1;28113;28109:5;28101:14;;;;;;;;;;;;;;28084:31;;28131:15;28148;28176:6;28167:15;;:5;:15;;;:61;;28209:9;28225:1;28167:61;;;28191:1;28195:9;28167:61;28247:13;;28130:98;;-1:-1:-1;28130:98:0;-1:-1:-1;28247:27:0;:13;:27;28243:140;;28310:13;;28295:72;;;;;;28330:10;28295:72;;;;28310:13;28295:72;;;;;;;;;;;;;;;;;;;;;;28310:13;;;;;28295:34;;:72;;;;;;;;;;;;;;28310:13;;28295:72;;;2:2:-1;;;;27:1;24;17:12;2:2;28295:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28295:72:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;28243:140:0;28397:10;28428:1;28414:4;:11;:15;28410:1;:19;:79;;28486:3;28410:79;;;28432:51;28454:7;28463:6;28471:4;28476:1;28480;28476:5;28471:11;;;;;;;;;;;;;;28432:21;:51::i;:::-;28397:92;;28516:45;28538:7;28547:5;28554:6;28516:21;:45::i;:::-;28504:63;;;28586:10;28598;28610:2;28624:1;28614:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28614:12:0;87:42:-1;143:17;;-1:-1;28614:12:0;;28504:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;28504:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28504:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27919:3:0;;;;;-1:-1:-1;27885:768:0;;-1:-1:-1;;;;;;;;27885:768:0;;;27783:877;;;:::o;14038:572::-;14139:21;14196:1;14181:4;:11;:16;;14173:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14261:4;:11;14250:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14250:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14250:23:0;;14240:33;;14314:9;14284:7;14309:1;14292:7;:14;:18;14284:27;;;;;;;;;;;;;;;;;:39;14348:11;;:15;;14334:269;14365:5;;14334:269;;14393:14;14409:15;14428:42;14440:7;14449:4;14458:1;14454;:5;14449:11;;;;;;;;;;;;;;14462:4;14467:1;14462:7;;;;;;;14428:42;14392:78;;;;14502:89;14514:7;14522:1;14514:10;;;;;;;;;;;;;;14526:9;14537:10;14549:41;14560:7;14569:4;14578:1;14574;:5;14569:11;;;;;;;;;;;;;;14582:4;14587:1;14582:7;;;;;;;14549:41;14502:11;:89::i;:::-;14485:7;14497:1;14493;:5;14485:14;;;;;;;;;;;;;;;;;:106;-1:-1:-1;;14372:3:0;;14334:269;;12158:545;12265:14;12311:1;12300:8;:12;12292:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12388:1;12376:9;:13;:31;;;;;12406:1;12393:10;:14;12376:31;12368:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12460:20;12483:37;12496:23;12501:4;12511:7;12496:23;:14;:23;:::i;:::-;12483:8;;:37;:12;:37;:::i;:::-;12460:60;-1:-1:-1;12531:14:0;12548:31;12460:60;12568:10;12548:31;:19;:31;:::i;:::-;12531:48;-1:-1:-1;12590:16:0;12609:40;12633:15;12609:19;:9;12623:4;12609:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12590:59;;12684:11;12672:9;:23;;;;;;;12158:545;-1:-1:-1;;;;;;;;12158:545:0:o;12824:500::-;12931:13;12977:1;12965:9;:13;12957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13055:1;13043:9;:13;:31;;;;;13073:1;13060:10;:14;13043:31;13035:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13127:14;13144:34;13173:4;13144:24;:9;13158;13144:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13127:51;-1:-1:-1;13189:16:0;13208:54;13238:23;13243:4;13253:7;13238:23;:14;:23;:::i;:::-;13208:25;:10;13223:9;13208:25;:14;:25;:::i;:54::-;13189:73;;13284:32;13314:1;13297:11;13285:9;:23;;;;;;;13284:32;:29;:32;:::i;:::-;13273:43;12824:500;-1:-1:-1;;;;;;;12824:500:0:o;33216:1369::-;33329:6;33324:1254;33355:1;33341:4;:11;:15;33337:1;:19;33324:1254;;;33379:13;33394:14;33413:4;33418:1;33413:7;;;;;;;;;;;;;;33422:4;33427:1;33431;33427:5;33422:11;;;;;;;;;;;;;;33378:56;;;;33450:14;33469:39;33494:5;33501:6;33469:24;:39::i;:::-;33449:59;;;33523:16;33554:45;33576:7;33585:5;33592:6;33554:21;:45::i;:::-;33523:77;;33615:16;33646:17;33734:13;33749;33767:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33767:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33767:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33767:18:0;;;;;;;33733:52;;;;;-1:-1:-1;33733:52:0;;-1:-1:-1;33801:17:0;;33842:15;;;;;;;;:61;;33884:8;33894;33842:61;;;33861:8;33871;33842:61;33800:103;;;;33932:56;33975:12;33939:5;33932:23;;;33964:4;33932:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;33932:56:0;33918:70;;34018:84;34045:11;34058:12;34072:13;34087:4;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34087:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34087:14:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34087:14:0;34018:84;;:26;:84::i;:::-;34136:13;;34003:99;;-1:-1:-1;34136:27:0;:13;:27;;-1:-1:-1;34132:143:0;;-1:-1:-1;;;34132:143:0;34199:13;;34184:75;;;;;;34219:10;34184:75;;;;34199:13;34184:75;;;;;;;;;;;;;;;;;;;;;;34199:13;;;;;34184:34;;:75;;;;;;;;;;;;;;34199:13;;34184:75;;;2:2:-1;;;;27:1;24;17:12;2:2;34184:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34184:75:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;34132:143:0;34290:15;34307;34335:6;34326:15;;:5;:15;;;:67;;34371:12;34390:1;34326:67;;;34350:1;34354:12;34326:67;34289:104;;;;34408:10;34439:1;34425:4;:11;:15;34421:1;:19;:79;;34497:3;34421:79;;;34443:51;34465:7;34474:6;34482:4;34487:1;34491;34487:5;34482:11;;;;;;;34443:51;34553:12;;;34563:1;34553:12;;;;;;;;;;34515:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;34408:92;;-1:-1:-1;34515:9:0;;;;;;34525:10;;34537;;34408:92;;34553:12;;34515:51;;;;;;;;34553:12;;34515:51;;;;34553: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;34515:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34515:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33358:3:0;;;;;-1:-1:-1;33324:1254:0;;-1:-1:-1;;;;;;;;;;33324:1254:0;9603:129;9687:5;;;9682:16;;;;9674:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11721:315;11803:12;11846:1;11836:7;:11;11828:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11916:1;11905:8;:12;:28;;;;;11932:1;11921:8;:12;11905:28;11897:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12020:8;11996:21;:7;12008:8;11996:21;:11;:21;:::i;:::-;:32;;;;;;;11721:315;-1:-1:-1;;;;11721:315:0:o;10051:343::-;10126:14;10142;10187:6;10177:16;;:6;:16;;;;10169:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10271:6;10262:15;;:6;:15;;;:53;;10300:6;10308;10262:53;;;10281:6;10289;10262:53;10243:72;;-1:-1:-1;10243:72:0;-1:-1:-1;10334:20:0;;;10326:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10051:343;;;;;:::o;20171:1373::-;20484:47;;;;;;:61;:47;;;;;;;;;;;;;;;;20389:12;;;;;;20499:7;20484:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;20484:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20484:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20484:47:0;:61;;;20480:144;;;20562:50;;;;;;:34;:50;;;;;;;;;;;;;;;;20577:7;20562:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;20562:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;20562:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20562:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;20480:144:0;20635:13;20650;20667:50;20693:7;20702:6;20710;20667:25;:50::i;:::-;20634:83;;;;20732:8;20744:1;20732:13;:30;;;;-1:-1:-1;20749:13:0;;20732:30;20728:809;;;20801:14;;-1:-1:-1;20817:14:0;;-1:-1:-1;20728:809:0;;;20865:19;20887:55;20907:14;20923:8;20933;20887:19;:55::i;:::-;20865:77;;20979:14;20961;:32;20957:569;;21040:10;21022:14;:28;;21014:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21133:14;;-1:-1:-1;21149:14:0;-1:-1:-1;21149:14:0;20957:569;;;21205:19;21227:55;21247:14;21263:8;21273;21227:19;:55::i;:::-;21205:77;;21326:14;21308;:32;;21301:40;;;;21386:10;21368:14;:28;;21360:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21479:14;-1:-1:-1;21495:14:0;;-1:-1:-1;20957:569:0;20728:809;;20171:1373;;;;;;;;;;;:::o;18685:229::-;18759:22;;;18751:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18861:6;;;18840:38;;;;;;;18861:6;;;18840:38;;;18889:6;:17;;;;;;;;;;;;;;;18685:229::o;11220:388::-;11313:13;11328;11355:14;11374:26;11385:6;11393;11374:10;:26::i;:::-;11354:46;;;11412:13;11427;11457:32;11465:7;11474:6;11482;11457:7;:32::i;:::-;11445:57;;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11445:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11445:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11445:59:0;;;;;;;11411:93;;;;;-1:-1:-1;11411:93:0;;-1:-1:-1;11538:16:0;;;;;;;;:62;;11581:8;11591;11538:62;;;11558:8;11568;11538:62;11515:85;;;;-1:-1:-1;11220:388:0;-1:-1:-1;;;;;;;11220:388:0:o;10972:190::-;11064:12;11111:32;11119:7;11128:6;11136;11111:7;:32::i;:::-;11099:53;;;:55;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11099:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11099:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11099:55:0;11089:65;;;10972:190;-1:-1:-1;;;;10972:190:0:o;9740:142::-;9792:6;9819;;;:30;;-1:-1:-1;;9834:5:0;;;9848:1;9843;9834:5;9843:1;9829:15;;;;;:20;9819:30;9811:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9467:128;9551:5;;;9546:16;;;;9538:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://f423f81b1021c390c07163c4c9533ea8e8210b30f207fd0772f424ce157fa61f
Loading...
Loading
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.