Overview
MOVR Balance
MOVR Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,843,006 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity... | 6165091 | 430 days ago | IN | 0 MOVR | 0.00030395 | ||||
Remove Liquidity... | 6165086 | 430 days ago | IN | 0 MOVR | 0.00030395 | ||||
Remove Liquidity | 6165015 | 430 days ago | IN | 0 MOVR | 0.00029549 | ||||
Remove Liquidity | 6137308 | 435 days ago | IN | 0 MOVR | 0.00076676 | ||||
Remove Liquidity | 6137304 | 435 days ago | IN | 0 MOVR | 0.00076827 | ||||
Remove Liquidity... | 5836237 | 481 days ago | IN | 0 MOVR | 0.00078525 | ||||
Remove Liquidity... | 5836229 | 481 days ago | IN | 0 MOVR | 0.00078596 | ||||
Remove Liquidity... | 5699469 | 501 days ago | IN | 0 MOVR | 0.00069393 | ||||
Swap Tokens For ... | 4535789 | 667 days ago | IN | 0 MOVR | 0.00236614 | ||||
Swap Tokens For ... | 4413462 | 685 days ago | IN | 0 MOVR | 0.00198005 | ||||
Swap Tokens For ... | 4102044 | 730 days ago | IN | 0 MOVR | 0.00236602 | ||||
Swap Tokens For ... | 4102024 | 730 days ago | IN | 0 MOVR | 0.00266579 | ||||
Swap Tokens For ... | 4102013 | 730 days ago | IN | 0 MOVR | 0.00236602 | ||||
Swap Tokens For ... | 4011637 | 743 days ago | IN | 0 MOVR | 0.00266506 | ||||
Remove Liquidity | 3970085 | 749 days ago | IN | 0 MOVR | 0.00064938 | ||||
Remove Liquidity | 3970077 | 749 days ago | IN | 0 MOVR | 0.00064938 | ||||
Swap Tokens For ... | 3833797 | 768 days ago | IN | 0 MOVR | 0.00017129 | ||||
Remove Liquidity... | 3823889 | 770 days ago | IN | 0 MOVR | 0.00063643 | ||||
Remove Liquidity... | 3823875 | 770 days ago | IN | 0 MOVR | 0.00063643 | ||||
Swap Tokens For ... | 3631921 | 797 days ago | IN | 0 MOVR | 0.00017129 | ||||
Swap Tokens For ... | 3559862 | 807 days ago | IN | 0 MOVR | 0.00235532 | ||||
Swap Exact Token... | 3559862 | 807 days ago | IN | 0 MOVR | 0.00758467 | ||||
Swap Exact Token... | 3558429 | 808 days ago | IN | 0 MOVR | 0.00282605 | ||||
Swap Exact Nativ... | 3558288 | 808 days ago | IN | 13.75 MOVR | 0.00691482 | ||||
Remove Liquidity | 3550364 | 809 days ago | IN | 0 MOVR | 0.00053861 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5699469 | 501 days ago | 16.28582601 MOVR | ||||
5699469 | 501 days ago | 16.28582601 MOVR | ||||
5438429 | 539 days ago | 5.26202444 MOVR | ||||
5438429 | 539 days ago | 5.26202444 MOVR | ||||
5438417 | 539 days ago | 6.25436171 MOVR | ||||
5438417 | 539 days ago | 6.25436171 MOVR | ||||
4062873 | 735 days ago | 3.33333333 MOVR | ||||
4062873 | 735 days ago | 3.33333333 MOVR | ||||
4059757 | 736 days ago | 19.99999999 MOVR | ||||
4059757 | 736 days ago | 19.99999999 MOVR | ||||
4059707 | 736 days ago | 14.99999999 MOVR | ||||
4059707 | 736 days ago | 14.99999999 MOVR | ||||
4059684 | 736 days ago | 1.66666666 MOVR | ||||
4059684 | 736 days ago | 1.66666666 MOVR | ||||
4059681 | 736 days ago | 22.17177 MOVR | ||||
4059681 | 736 days ago | 22.17177 MOVR | ||||
4011659 | 743 days ago | 14.99999999 MOVR | ||||
4011659 | 743 days ago | 14.99999999 MOVR | ||||
4011654 | 743 days ago | 8.33333333 MOVR | ||||
4011654 | 743 days ago | 8.33333333 MOVR | ||||
4011630 | 743 days ago | 4.99999999 MOVR | ||||
4011630 | 743 days ago | 4.99999999 MOVR | ||||
4003650 | 744 days ago | 6.94072566 MOVR | ||||
4003642 | 744 days ago | 40.31589877 MOVR | ||||
3971458 | 749 days ago | 3.33333333 MOVR |
Loading...
Loading
Contract Name:
Router
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-01-07 */ // File: contracts/core/interfaces/IFactory.sol pragma solidity >=0.8.0; interface IFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); event PairCreateLocked( address indexed caller ); event PairCreateUnlocked( address indexed caller ); event BootstrapSetted( address indexed tokenA, address indexed tokenB, address indexed bootstrap ); event FeetoUpdated( address indexed feeto ); event FeeBasePointUpdated( uint8 basePoint ); function feeto() external view returns (address); function feeBasePoint() external view returns (uint8); function lockForPairCreate() external view returns (bool); function getPair(address tokenA, address tokenB) external view returns (address pair); function getBootstrap(address tokenA, address tokenB) external view returns (address bootstrap); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); } // File: contracts/core/interfaces/IPair.sol pragma solidity >=0.8.0; interface IPair { event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to ) external; function initialize(address, address) external; } // File: contracts/libraries/Math.sol pragma solidity >=0.8.0; // a library for performing various math operations library Math { function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File: contracts/libraries/Helper.sol pragma solidity >=0.8.0; library Helper { using Math for uint256; function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "Helper: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "Helper: ZERO_ADDRESS"); } function pairFor( address factory, address tokenA, address tokenB ) internal view returns (address pair) { return IFactory(factory).getPair(tokenA, tokenB); } function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1) = IPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } 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 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 safeTransferNativeCurrency(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferNativeCurrency: NativeCurrency transfer failed" ); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "Helper: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 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( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "Helper: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts/periphery/interfaces/IWNativeCurrency.sol pragma solidity >=0.8.0; interface IWNativeCurrency { function deposit() external payable; function withdraw(uint256) external; } // File: contracts/periphery/interfaces/IRouter.sol pragma solidity >=0.8.0; interface IRouter { function factory() external view returns (address); function WNativeCurrency() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquiditySingleToken( address[] calldata path, uint256 amountIn, uint256 amountSwapIn, uint256 amountSwapOutMin, uint256 amountInReserveMin, address to, uint256 deadline ) external returns ( uint256 liquidity ); function addLiquidityNativeCurrency( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ); function addLiquiditySingleNativeCurrency( address[] calldata path, uint256 amountSwapOut, uint256 nativeCurrencySwapInMax, uint256 nativeCurrencyReserveMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityNativeCurrency( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountNativeCurrency); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactNativeCurrencyForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactNativeCurrency( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForNativeCurrency( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapNativeCurrencyForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/periphery/Router.sol pragma solidity >=0.8.0; contract Router is IRouter { using Math for uint256; address public override factory; address public override WNativeCurrency; constructor(address _factory, address _WNativeCurrency) { factory = _factory; WNativeCurrency = _WNativeCurrency; } modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "Router: EXPIRED"); _; } receive() external payable { require(msg.sender == WNativeCurrency); // only accept Native Currency via fallback from the WNativeCurrency contract } function addLiquidity( address token0, address token1, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline ) public override ensure(deadline) returns ( uint256 amount0, uint256 amount1, uint256 liquidity ) { (amount0, amount1) = _addLiquidity( token0, token1, amount0Desired, amount1Desired, amount0Min, amount1Min ); address pair = Helper.pairFor(factory, token0, token1); Helper.safeTransferFrom(token0, msg.sender, pair, amount0); Helper.safeTransferFrom(token1, msg.sender, pair, amount1); liquidity = IPair(pair).mint(to); } function addLiquiditySingleToken( address[] calldata path, uint256 amountIn, uint256 amountSwapOut, uint256 amountSwapInMax, uint256 amountInReserveMin, address to, uint256 deadline ) external override ensure(deadline) returns (uint256 liquidity) { address token0 = path[0]; address token1 = path[path.length - 1]; uint256[] memory amounts = swapTokensForExactTokens( amountSwapOut, amountSwapInMax, path, to, deadline ); uint256 amountInReserve = amountIn - amounts[0]; (, , liquidity) = addLiquidity( token1, token0, amounts[amounts.length - 1], amountInReserve, amounts[amounts.length - 1], amountInReserveMin, to, deadline ); } function addLiquidityNativeCurrency( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external payable override ensure(deadline) returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ) { (amountToken, amountNativeCurrency) = _addLiquidity( token, WNativeCurrency, amountTokenDesired, msg.value, amountTokenMin, amountNativeCurrencyMin ); address pair = Helper.pairFor(factory, token, WNativeCurrency); Helper.safeTransferFrom(token, msg.sender, pair, amountToken); IWNativeCurrency(WNativeCurrency).deposit{ value: amountNativeCurrency }(); require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency)); liquidity = IPair(pair).mint(to); if (msg.value > amountNativeCurrency) Helper.safeTransferNativeCurrency( msg.sender, msg.value - amountNativeCurrency ); // refund dust native currency, if any } function addLiquiditySingleNativeCurrency( address[] memory path, uint256 amountSwapOut, uint256 nativeCurrencySwapInMax, uint256 nativeCurrencyReserveMin, address to, uint256 deadline ) external payable override ensure(deadline) returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ) { // Swap require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); uint256[] memory amounts = Helper.getAmountsIn( factory, amountSwapOut, path ); require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT"); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); require( amounts[0] <= nativeCurrencySwapInMax, "not allow bigger than nativeCurrencySwapInMax" ); // Addliquidity address token = path[path.length - 1]; uint256 nativeCurrencyReserve = msg.value - amounts[0]; (amountToken, amountNativeCurrency) = _addLiquidity( token, WNativeCurrency, amounts[amounts.length - 1], nativeCurrencyReserve, amounts[amounts.length - 1], nativeCurrencyReserveMin ); address pair = Helper.pairFor(factory, token, WNativeCurrency); Helper.safeTransferFrom(token, msg.sender, pair, amountToken); IWNativeCurrency(WNativeCurrency).deposit{ value: amountNativeCurrency }(); require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency)); liquidity = IPair(pair).mint(to); if (msg.value > (amountNativeCurrency + amounts[0])) Helper.safeTransferNativeCurrency( msg.sender, msg.value - (amountNativeCurrency + amounts[0]) ); // refund dust native currency, if any } function _addLiquidity( address token0, address token1, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min ) private returns (uint256 amount0, uint256 amount1) { if (IFactory(factory).getPair(token0, token1) == address(0)) { IFactory(factory).createPair(token0, token1); } (uint256 reserve0, uint256 reserve1) = Helper.getReserves( factory, token0, token1 ); if (reserve0 == 0 && reserve1 == 0) { (amount0, amount1) = (amount0Desired, amount1Desired); } else { uint256 amount1Optimal = Helper.quote( amount0Desired, reserve0, reserve1 ); if (amount1Optimal <= amount1Desired) { require( amount1Optimal >= amount1Min, "Router: INSUFFICIENT_1_AMOUNT" ); (amount0, amount1) = (amount0Desired, amount1Optimal); } else { uint256 amount0Optimal = Helper.quote( amount1Desired, reserve1, reserve0 ); require(amount0Optimal <= amount0Desired); require( amount0Optimal >= amount0Min, "Router: INSUFFICIENT_0_AMOUNT" ); (amount0, amount1) = (amount0Optimal, amount1Desired); } } } function removeLiquidity( address token0, address token1, uint256 liquidity, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline ) public override ensure(deadline) returns (uint256 amount0, uint256 amount1) { address pair = Helper.pairFor(factory, token0, token1); IERC20(pair).transferFrom(msg.sender, pair, liquidity); (uint256 amountA, uint256 amountB) = IPair(pair).burn(to); (address tokenA, ) = Helper.sortTokens(token0, token1); (amount0, amount1) = tokenA == token0 ? (amountA, amountB) : (amountB, amountA); require(amount0 >= amount0Min, "Router: INSUFFICIENT_0_AMOUNT"); require(amount1 >= amount1Min, "Router: INSUFFICIENT_1_AMOUNT"); } function removeLiquidityNativeCurrency( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) public override ensure(deadline) returns (uint256 amountToken, uint256 amountNativeCurrency) { (amountToken, amountNativeCurrency) = removeLiquidity( token, WNativeCurrency, liquidity, amountTokenMin, amountNativeCurrencyMin, address(this), deadline ); Helper.safeTransfer(token, to, amountToken); IWNativeCurrency(WNativeCurrency).withdraw(amountNativeCurrency); Helper.safeTransferNativeCurrency(to, amountNativeCurrency); } function _swap( uint256[] memory amounts, address[] memory path, address _to ) private { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = Helper.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? Helper.pairFor(factory, output, path[i + 2]) : _to; IPair(Helper.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) public override ensure(deadline) returns (uint256[] memory amounts) { amounts = Helper.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) public override ensure(deadline) returns (uint256[] memory amounts) { amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT"); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactNativeCurrencyForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); amounts = Helper.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactNativeCurrency( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external override ensure(deadline) returns (uint256[] memory amounts) { require( path[path.length - 1] == WNativeCurrency, "Router: INVALID_PATH" ); amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT"); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]); Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]); } function swapExactTokensForNativeCurrency( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external override ensure(deadline) returns (uint256[] memory amounts) { require( path[path.length - 1] == WNativeCurrency, "Router: INVALID_PATH" ); amounts = Helper.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]); Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]); } function swapNativeCurrencyForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT"); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); if (msg.value > amounts[0]) Helper.safeTransferNativeCurrency( msg.sender, msg.value - amounts[0] ); // refund dust eth, if any } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure override returns (uint256 amountOut) { return Helper.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure override returns (uint256 amountIn) { return Helper.getAmountOut(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public view override returns (uint256[] memory amounts) { return Helper.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view override returns (uint256[] memory amounts) { return Helper.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WNativeCurrency","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WNativeCurrency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","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":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencySwapInMax","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencyReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"amountSwapInMax","type":"uint256"},{"internalType":"uint256","name":"amountInReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleToken","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","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":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"}],"stateMutability":"nonpayable","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":"swapExactNativeCurrencyForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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":"swapExactTokensForNativeCurrency","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":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapNativeCurrencyForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactNativeCurrency","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200353138038062003531833981016040819052620000349162000083565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055620000bb565b80516001600160a01b03811681146200007e57600080fd5b919050565b600080604083850312156200009757600080fd5b620000a28362000066565b9150620000b26020840162000066565b90509250929050565b61346680620000cb6000396000f3fe60806040526004361061010d5760003560e01c80639be7614d11610095578063cd1bd0d911610064578063cd1bd0d9146102f1578063d06ca61f14610304578063dcff1b9414610324578063e8e3370014610344578063f85b7c8b1461036457600080fd5b80639be7614d1461027e578063b1ea829214610291578063baa2abde146102b1578063c45a0155146102d157600080fd5b8063419591ed116100dc578063419591ed146101e5578063686589671461021d57806385f8c259146101305780638803dbee1461024b578063937ca0da1461026b57600080fd5b8063054d50d4146101305780631f00ca741461016357806338ed173914610190578063403bf1f2146101b057600080fd5b3661012b576001546001600160a01b0316331461012957600080fd5b005b600080fd5b34801561013c57600080fd5b5061015061014b3660046131b9565b610384565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061018361017e3660046130db565b610399565b60405161015a9190613220565b34801561019c57600080fd5b506101836101ab366004613146565b6103bc565b3480156101bc57600080fd5b506101d06101cb366004612ebf565b610576565b6040805192835260208301919091520161015a565b3480156101f157600080fd5b50600154610205906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b61023061022b366004612fa4565b61063a565b6040805193845260208401929092529082015260600161015a565b34801561025757600080fd5b50610183610266366004613146565b610c05565b610230610279366004612ebf565b610cae565b61018361028c366004613074565b610ebd565b34801561029d57600080fd5b506101506102ac366004612f1d565b6111c8565b3480156102bd57600080fd5b506101d06102cc366004612dd1565b6112fe565b3480156102dd57600080fd5b50600054610205906001600160a01b031681565b6101836102ff366004613074565b61152f565b34801561031057600080fd5b5061018361031f3660046130db565b6117c8565b34801561033057600080fd5b5061018361033f366004613146565b6117e2565b34801561035057600080fd5b5061023061035f366004612e43565b611a0d565b34801561037057600080fd5b5061018361037f366004613146565b611b07565b6000610391848484611c16565b949350505050565b6000546060906103b3906001600160a01b03168484611d1a565b90505b92915050565b606081428110156103e85760405162461bcd60e51b81526004016103df906132c9565b60405180910390fd5b6000546040805160208089028281018201909352888252610432936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451610444919061338d565b81518110610454576104546133ec565b6020026020010151101561047a5760405162461bcd60e51b81526004016103df906132f2565b61052c86866000818110610490576104906133ec565b90506020020160208101906104a59190612d90565b60008054339161050c916001600160a01b0316908b908b90816104ca576104ca6133ec565b90506020020160208101906104df9190612d90565b8b8b60018181106104f2576104f26133ec565b90506020020160208101906105079190612d90565b612014565b8560008151811061051f5761051f6133ec565b6020026020010151612099565b61056b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b509695505050505050565b600080824281101561059a5760405162461bcd60e51b81526004016103df906132c9565b6001546105b6908a906001600160a01b03168a8a8a308a6112fe565b90935091506105c6898685612387565b600154604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b5050505061062e85836124b8565b50965096945050505050565b600080600083428110156106605760405162461bcd60e51b81526004016103df906132c9565b6001548a516001600160a01b03909116908b90600090610682576106826133ec565b60200260200101516001600160a01b0316146106b05760405162461bcd60e51b81526004016103df90613264565b600080546106c8906001600160a01b03168b8d611d1a565b905034816000815181106106de576106de6133ec565b602002602001015111156107045760405162461bcd60e51b81526004016103df90613292565b60015481516001600160a01b039091169063d0e30db090839060009061072c5761072c6133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b5050505050600160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb6107ee60008054906101000a90046001600160a01b03168e6000815181106107c6576107c66133ec565b60200260200101518f6001815181106107e1576107e16133ec565b6020026020010151612014565b83600081518110610801576108016133ec565b60200260200101516040518363ffffffff1660e01b815260040161083a9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190613006565b61089557600080fd5b6108a0818c896121d7565b88816000815181106108b4576108b46133ec565b602002602001015111156109205760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f7720626967676572207468616e206e61746976654375727260448201526c0cadcc6f2a6eec2e092dc9ac2f609b1b60648201526084016103df565b60008b60018d51610931919061338d565b81518110610941576109416133ec565b60200260200101519050600082600081518110610960576109606133ec565b602002602001015134610973919061338d565b90506109e482600160009054906101000a90046001600160a01b0316856001875161099e919061338d565b815181106109ae576109ae6133ec565b60200260200101518487600189516109c6919061338d565b815181106109d6576109d66133ec565b60200260200101518f6125b3565b60008054600154939a5091985091610a0a916001600160a01b0390811691869116612014565b9050610a188333838b612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018d9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190613006565b610b1157600080fd5b6040516335313c2160e11b81526001600160a01b038b81166004830152821690636a62784290602401602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c919061305b565b955083600081518110610ba157610ba16133ec565b602002602001015187610bb49190613334565b341115610bf457610bf43385600081518110610bd257610bd26133ec565b602002602001015189610be59190613334565b610bef903461338d565b6124b8565b505050505096509650969350505050565b60608142811015610c285760405162461bcd60e51b81526004016103df906132c9565b6000546040805160208089028281018201909352888252610c72936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110610c8857610c886133ec565b6020026020010151111561047a5760405162461bcd60e51b81526004016103df90613292565b60008060008342811015610cd45760405162461bcd60e51b81526004016103df906132c9565b600154610cef908b906001600160a01b03168b348c8c6125b3565b6000805460015493975091955091610d15916001600160a01b03908116918e9116612014565b9050610d238b338388612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018a9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e139190613006565b610e1c57600080fd5b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061305b565b925083341115610eaf57610eaf33610bef863461338d565b505096509650969350505050565b60608142811015610ee05760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b03168686600081610efd57610efd6133ec565b9050602002016020810190610f129190612d90565b6001600160a01b031614610f385760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252610f82936001600160a01b0316928b92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91503482600081518110610f9857610f986133ec565b60200260200101511115610fbe5760405162461bcd60e51b81526004016103df90613292565b60015482516001600160a01b039091169063d0e30db0908490600090610fe657610fe66133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561101957600080fd5b505af115801561102d573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb945061108c9350909116908a908a9081611064576110646133ec565b90506020020160208101906110799190612d90565b8a8a60018181106104f2576104f26133ec565b8460008151811061109f5761109f6133ec565b60200260200101516040518363ffffffff1660e01b81526004016110d89291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a9190613006565b61113357600080fd5b611172828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b81600081518110611185576111856133ec565b60200260200101513411156111be576111be33836000815181106111ab576111ab6133ec565b602002602001015134610bef919061338d565b5095945050505050565b600081428110156111eb5760405162461bcd60e51b81526004016103df906132c9565b60008a8a6000818110611200576112006133ec565b90506020020160208101906112159190612d90565b905060008b8b61122660018261338d565b818110611235576112356133ec565b905060200201602081019061124a9190612d90565b9050600061125c8a8a8f8f8b8b610c05565b9050600081600081518110611273576112736133ec565b60200260200101518c611286919061338d565b90506112e48385846001865161129c919061338d565b815181106112ac576112ac6133ec565b60200260200101518486600188516112c4919061338d565b815181106112d4576112d46133ec565b60200260200101518e8e8e611a0d565b909150905080965050505050505098975050505050505050565b60008082428110156113225760405162461bcd60e51b81526004016103df906132c9565b6000805461133a906001600160a01b03168c8c612014565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613006565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613122565b9150915060006114538e8e612802565b5090508d6001600160a01b0316816001600160a01b031614611476578183611479565b82825b90975095508a8710156114ce5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b8986101561151e5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b505050505097509795505050505050565b606081428110156115525760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b0316868660008161156f5761156f6133ec565b90506020020160208101906115849190612d90565b6001600160a01b0316146115aa5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526115f4936001600160a01b0316923492918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451611606919061338d565b81518110611616576116166133ec565b6020026020010151101561163c5760405162461bcd60e51b81526004016103df906132f2565b60015482516001600160a01b039091169063d0e30db0908490600090611664576116646133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561169757600080fd5b505af11580156116ab573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb94506116e29350909116908a908a9081611064576110646133ec565b846000815181106116f5576116f56133ec565b60200260200101516040518363ffffffff1660e01b815260040161172e9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190613006565b61178957600080fd5b6111be828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b6000546060906103b3906001600160a01b03168484611ea7565b606081428110156118055760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611821908261338d565b818110611830576118306133ec565b90506020020160208101906118459190612d90565b6001600160a01b03161461186b5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526118b5936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516118c7919061338d565b815181106118d7576118d76133ec565b602002602001015110156118fd5760405162461bcd60e51b81526004016103df906132f2565b61191386866000818110610490576104906133ec565b611952828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506121d7915050565b6001805483516001600160a01b0390911691632e1a7d4d9185916119759161338d565b81518110611985576119856133ec565b60200260200101516040518263ffffffff1660e01b81526004016119ab91815260200190565b600060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b5050505061056b8483600185516119f0919061338d565b81518110611a0057611a006133ec565b60200260200101516124b8565b60008060008342811015611a335760405162461bcd60e51b81526004016103df906132c9565b611a418c8c8c8c8c8c6125b3565b6000805492965090945090611a60906001600160a01b03168e8e612014565b9050611a6e8d338388612099565b611a7a8c338387612099565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611abd57600080fd5b505af1158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061305b565b92505050985098509895505050505050565b60608142811015611b2a5760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611b46908261338d565b818110611b5557611b556133ec565b9050602002016020810190611b6a9190612d90565b6001600160a01b031614611b905760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252611bda936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110611bf057611bf06133ec565b602002602001015111156118fd5760405162461bcd60e51b81526004016103df90613292565b6000808411611c715760405162461bcd60e51b815260206004820152602160248201527f48656c7065723a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b60648201526084016103df565b600083118015611c815750600082115b611ccd5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000611cdb856103e56128e3565b90506000611ce982856128e3565b90506000611d0383611cfd886103e86128e3565b9061294a565b9050611d0f818361334c565b979650505050505050565b6060600282511015611d655760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611d7f57611d7f613402565b604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050828160018351611dbb919061338d565b81518110611dcb57611dcb6133ec565b602002602001018181525050600060018351611de7919061338d565b90505b8015611e9f57600080611e3a8786611e0360018761338d565b81518110611e1357611e136133ec565b6020026020010151878681518110611e2d57611e2d6133ec565b602002602001015161299f565b91509150611e62848481518110611e5357611e536133ec565b60200260200101518383612a76565b84611e6e60018661338d565b81518110611e7e57611e7e6133ec565b60200260200101818152505050508080611e97906133a4565b915050611dea565b509392505050565b6060600282511015611ef25760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611f0c57611f0c613402565b604051908082528060200260200182016040528015611f35578160200160208202803683370190505b5090508281600081518110611f4c57611f4c6133ec565b60200260200101818152505060005b60018351611f69919061338d565b811015611e9f57600080611faf87868581518110611f8957611f896133ec565b602002602001015187866001611f9f9190613334565b81518110611e2d57611e2d6133ec565b91509150611fd7848481518110611fc857611fc86133ec565b60200260200101518383611c16565b84611fe3856001613334565b81518110611ff357611ff36133ec565b6020026020010181815250505050808061200c906133bb565b915050611f5b565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a439059060440160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190612db4565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916120fd91906131e5565b6000604051808303816000865af19150503d806000811461213a576040519150601f19603f3d011682016040523d82523d6000602084013e61213f565b606091505b50915091508180156121695750805115806121695750808060200190518101906121699190613006565b6121cf5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103df565b505050505050565b60005b600183516121e8919061338d565b81101561238157600080848381518110612204576122046133ec565b60200260200101518584600161221a9190613334565b8151811061222a5761222a6133ec565b60200260200101519150915060006122428383612802565b509050600087612253866001613334565b81518110612263576122636133ec565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461229157826000612295565b6000835b91509150600060028a516122a9919061338d565b88106122b557886122e2565b6000546122e2906001600160a01b0316878c6122d28c6002613334565b815181106107e1576107e16133ec565b6000549091506122fc906001600160a01b03168888612014565b6040516336cd320560e11b815260048101859052602481018490526001600160a01b0383811660448301529190911690636d9a640a90606401600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50505050505050505050508080612379906133bb565b9150506121da565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916123e391906131e5565b6000604051808303816000865af19150503d8060008114612420576040519150601f19603f3d011682016040523d82523d6000602084013e612425565b606091505b509150915081801561244f57508051158061244f57508080602001905181019061244f9190613006565b6124b15760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103df565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516124e291906131e5565b60006040518083038185875af1925050503d806000811461251f576040519150601f19603f3d011682016040523d82523d6000602084013e612524565b606091505b50509050806125ae5760405162461bcd60e51b815260206004820152604a60248201527f5472616e7366657248656c7065723a3a736166655472616e736665724e61746960448201527f766543757272656e63793a204e617469766543757272656e6379207472616e7360648201526919995c8819985a5b195960b21b608482015260a4016103df565b505050565b6000805460405163e6a4390560e01b81526001600160a01b03898116600483015288811660248301528392839291169063e6a439059060440160206040518083038186803b15801561260457600080fd5b505afa158015612618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263c9190612db4565b6001600160a01b031614156126d4576000546040516364e329cb60e11b81526001600160a01b038a8116600483015289811660248301529091169063c9c6539690604401602060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d29190612db4565b505b6000805481906126ee906001600160a01b03168b8b61299f565b91509150816000148015612700575080155b15612710578793508692506127f5565b600061271d898484612b75565b905087811161278157858110156127765760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b8894509250826127f3565b600061278e898486612b75565b90508981111561279d57600080fd5b878110156127ed5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b94508793505b505b5050965096945050505050565b600080826001600160a01b0316846001600160a01b031614156128675760405162461bcd60e51b815260206004820152601b60248201527f48656c7065723a204944454e544943414c5f414444524553534553000000000060448201526064016103df565b826001600160a01b0316846001600160a01b03161061288757828461288a565b83835b90925090506001600160a01b0382166128dc5760405162461bcd60e51b815260206004820152601460248201527348656c7065723a205a45524f5f4144445245535360601b60448201526064016103df565b9250929050565b6000811580612907575082826128f9818361336e565b9250612905908361334c565b145b6103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103df565b6000826129578382613334565b91508110156103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103df565b60008060006129ae8585612802565b5090506000806129bf888888612014565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156129f657600080fd5b505afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613028565b6001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612a64578082612a67565b81815b90999098509650505050505050565b6000808411612ad25760405162461bcd60e51b815260206004820152602260248201527f48656c7065723a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b60648201526084016103df565b600083118015612ae25750600082115b612b2e5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000612b466103e8612b4086886128e3565b906128e3565b90506000612b5a6103e5612b408689612c26565b9050612b6b6001611cfd838561334c565b9695505050505050565b6000808411612bbc5760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b60448201526064016103df565b600083118015612bcc5750600082115b612c115760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b60448201526064016103df565b82612c1c85846128e3565b610391919061334c565b600082612c33838261338d565b91508111156103b65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103df565b8035612c8781613418565b919050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b85010111156128dc57600080fd5b600082601f830112612ce257600080fd5b8135602067ffffffffffffffff80831115612cff57612cff613402565b8260051b604051601f19603f83011681018181108482111715612d2457612d24613402565b60405284815283810192508684018288018501891015612d4357600080fd5b600092505b85831015612d6d57612d5981612c7c565b845292840192600192909201918401612d48565b50979650505050505050565b80516001600160701b0381168114612c8757600080fd5b600060208284031215612da257600080fd5b8135612dad81613418565b9392505050565b600060208284031215612dc657600080fd5b8151612dad81613418565b600080600080600080600060e0888a031215612dec57600080fd5b8735612df781613418565b96506020880135612e0781613418565b955060408801359450606088013593506080880135925060a0880135612e2c81613418565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612e6057600080fd5b8835612e6b81613418565b97506020890135612e7b81613418565b965060408901359550606089013594506080890135935060a0890135925060c0890135612ea781613418565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215612ed857600080fd5b8635612ee381613418565b95506020870135945060408701359350606087013592506080870135612f0881613418565b8092505060a087013590509295509295509295565b60008060008060008060008060e0898b031215612f3957600080fd5b883567ffffffffffffffff811115612f5057600080fd5b612f5c8b828c01612c8c565b9099509750506020890135955060408901359450606089013593506080890135925060a0890135612f8c81613418565b8092505060c089013590509295985092959890939650565b60008060008060008060c08789031215612fbd57600080fd5b863567ffffffffffffffff811115612fd457600080fd5b612fe089828a01612cd1565b9650506020870135945060408701359350606087013592506080870135612f0881613418565b60006020828403121561301857600080fd5b81518015158114612dad57600080fd5b6000806040838503121561303b57600080fd5b61304483612d79565b915061305260208401612d79565b90509250929050565b60006020828403121561306d57600080fd5b5051919050565b60008060008060006080868803121561308c57600080fd5b85359450602086013567ffffffffffffffff8111156130aa57600080fd5b6130b688828901612c8c565b90955093505060408601356130ca81613418565b949793965091946060013592915050565b600080604083850312156130ee57600080fd5b82359150602083013567ffffffffffffffff81111561310c57600080fd5b61311885828601612cd1565b9150509250929050565b6000806040838503121561313557600080fd5b505080516020909101519092909150565b60008060008060008060a0878903121561315f57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561318457600080fd5b61319089828a01612c8c565b90955093505060608701356131a481613418565b80925050608087013590509295509295509295565b6000806000606084860312156131ce57600080fd5b505081359360208301359350604090920135919050565b6000825160005b8181101561320657602081860181015185830152016131ec565b81811115613215576000828501525b509190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156132585783518352928401929184019160010161323c565b50909695505050505050565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b6020808252601e908201527f526f757465723a204558434553534956455f494e5055545f414d4f554e540000604082015260600190565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b60008219821115613347576133476133d6565b500190565b60008261336957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613388576133886133d6565b500290565b60008282101561339f5761339f6133d6565b500390565b6000816133b3576133b36133d6565b506000190190565b60006000198214156133cf576133cf6133d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461342d57600080fd5b5056fea26469706673582212208d0347b698ede02582681341f3d0731e07e8b75877604cdd90701fe46fb5519f64736f6c63430008070033000000000000000000000000f36ae63d89983e3aea8aaad1086c3280eb01438d00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Deployed Bytecode
0x60806040526004361061010d5760003560e01c80639be7614d11610095578063cd1bd0d911610064578063cd1bd0d9146102f1578063d06ca61f14610304578063dcff1b9414610324578063e8e3370014610344578063f85b7c8b1461036457600080fd5b80639be7614d1461027e578063b1ea829214610291578063baa2abde146102b1578063c45a0155146102d157600080fd5b8063419591ed116100dc578063419591ed146101e5578063686589671461021d57806385f8c259146101305780638803dbee1461024b578063937ca0da1461026b57600080fd5b8063054d50d4146101305780631f00ca741461016357806338ed173914610190578063403bf1f2146101b057600080fd5b3661012b576001546001600160a01b0316331461012957600080fd5b005b600080fd5b34801561013c57600080fd5b5061015061014b3660046131b9565b610384565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061018361017e3660046130db565b610399565b60405161015a9190613220565b34801561019c57600080fd5b506101836101ab366004613146565b6103bc565b3480156101bc57600080fd5b506101d06101cb366004612ebf565b610576565b6040805192835260208301919091520161015a565b3480156101f157600080fd5b50600154610205906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b61023061022b366004612fa4565b61063a565b6040805193845260208401929092529082015260600161015a565b34801561025757600080fd5b50610183610266366004613146565b610c05565b610230610279366004612ebf565b610cae565b61018361028c366004613074565b610ebd565b34801561029d57600080fd5b506101506102ac366004612f1d565b6111c8565b3480156102bd57600080fd5b506101d06102cc366004612dd1565b6112fe565b3480156102dd57600080fd5b50600054610205906001600160a01b031681565b6101836102ff366004613074565b61152f565b34801561031057600080fd5b5061018361031f3660046130db565b6117c8565b34801561033057600080fd5b5061018361033f366004613146565b6117e2565b34801561035057600080fd5b5061023061035f366004612e43565b611a0d565b34801561037057600080fd5b5061018361037f366004613146565b611b07565b6000610391848484611c16565b949350505050565b6000546060906103b3906001600160a01b03168484611d1a565b90505b92915050565b606081428110156103e85760405162461bcd60e51b81526004016103df906132c9565b60405180910390fd5b6000546040805160208089028281018201909352888252610432936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451610444919061338d565b81518110610454576104546133ec565b6020026020010151101561047a5760405162461bcd60e51b81526004016103df906132f2565b61052c86866000818110610490576104906133ec565b90506020020160208101906104a59190612d90565b60008054339161050c916001600160a01b0316908b908b90816104ca576104ca6133ec565b90506020020160208101906104df9190612d90565b8b8b60018181106104f2576104f26133ec565b90506020020160208101906105079190612d90565b612014565b8560008151811061051f5761051f6133ec565b6020026020010151612099565b61056b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b509695505050505050565b600080824281101561059a5760405162461bcd60e51b81526004016103df906132c9565b6001546105b6908a906001600160a01b03168a8a8a308a6112fe565b90935091506105c6898685612387565b600154604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b5050505061062e85836124b8565b50965096945050505050565b600080600083428110156106605760405162461bcd60e51b81526004016103df906132c9565b6001548a516001600160a01b03909116908b90600090610682576106826133ec565b60200260200101516001600160a01b0316146106b05760405162461bcd60e51b81526004016103df90613264565b600080546106c8906001600160a01b03168b8d611d1a565b905034816000815181106106de576106de6133ec565b602002602001015111156107045760405162461bcd60e51b81526004016103df90613292565b60015481516001600160a01b039091169063d0e30db090839060009061072c5761072c6133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b5050505050600160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb6107ee60008054906101000a90046001600160a01b03168e6000815181106107c6576107c66133ec565b60200260200101518f6001815181106107e1576107e16133ec565b6020026020010151612014565b83600081518110610801576108016133ec565b60200260200101516040518363ffffffff1660e01b815260040161083a9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190613006565b61089557600080fd5b6108a0818c896121d7565b88816000815181106108b4576108b46133ec565b602002602001015111156109205760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f7720626967676572207468616e206e61746976654375727260448201526c0cadcc6f2a6eec2e092dc9ac2f609b1b60648201526084016103df565b60008b60018d51610931919061338d565b81518110610941576109416133ec565b60200260200101519050600082600081518110610960576109606133ec565b602002602001015134610973919061338d565b90506109e482600160009054906101000a90046001600160a01b0316856001875161099e919061338d565b815181106109ae576109ae6133ec565b60200260200101518487600189516109c6919061338d565b815181106109d6576109d66133ec565b60200260200101518f6125b3565b60008054600154939a5091985091610a0a916001600160a01b0390811691869116612014565b9050610a188333838b612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018d9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190613006565b610b1157600080fd5b6040516335313c2160e11b81526001600160a01b038b81166004830152821690636a62784290602401602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c919061305b565b955083600081518110610ba157610ba16133ec565b602002602001015187610bb49190613334565b341115610bf457610bf43385600081518110610bd257610bd26133ec565b602002602001015189610be59190613334565b610bef903461338d565b6124b8565b505050505096509650969350505050565b60608142811015610c285760405162461bcd60e51b81526004016103df906132c9565b6000546040805160208089028281018201909352888252610c72936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110610c8857610c886133ec565b6020026020010151111561047a5760405162461bcd60e51b81526004016103df90613292565b60008060008342811015610cd45760405162461bcd60e51b81526004016103df906132c9565b600154610cef908b906001600160a01b03168b348c8c6125b3565b6000805460015493975091955091610d15916001600160a01b03908116918e9116612014565b9050610d238b338388612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018a9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e139190613006565b610e1c57600080fd5b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061305b565b925083341115610eaf57610eaf33610bef863461338d565b505096509650969350505050565b60608142811015610ee05760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b03168686600081610efd57610efd6133ec565b9050602002016020810190610f129190612d90565b6001600160a01b031614610f385760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252610f82936001600160a01b0316928b92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91503482600081518110610f9857610f986133ec565b60200260200101511115610fbe5760405162461bcd60e51b81526004016103df90613292565b60015482516001600160a01b039091169063d0e30db0908490600090610fe657610fe66133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561101957600080fd5b505af115801561102d573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb945061108c9350909116908a908a9081611064576110646133ec565b90506020020160208101906110799190612d90565b8a8a60018181106104f2576104f26133ec565b8460008151811061109f5761109f6133ec565b60200260200101516040518363ffffffff1660e01b81526004016110d89291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a9190613006565b61113357600080fd5b611172828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b81600081518110611185576111856133ec565b60200260200101513411156111be576111be33836000815181106111ab576111ab6133ec565b602002602001015134610bef919061338d565b5095945050505050565b600081428110156111eb5760405162461bcd60e51b81526004016103df906132c9565b60008a8a6000818110611200576112006133ec565b90506020020160208101906112159190612d90565b905060008b8b61122660018261338d565b818110611235576112356133ec565b905060200201602081019061124a9190612d90565b9050600061125c8a8a8f8f8b8b610c05565b9050600081600081518110611273576112736133ec565b60200260200101518c611286919061338d565b90506112e48385846001865161129c919061338d565b815181106112ac576112ac6133ec565b60200260200101518486600188516112c4919061338d565b815181106112d4576112d46133ec565b60200260200101518e8e8e611a0d565b909150905080965050505050505098975050505050505050565b60008082428110156113225760405162461bcd60e51b81526004016103df906132c9565b6000805461133a906001600160a01b03168c8c612014565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613006565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613122565b9150915060006114538e8e612802565b5090508d6001600160a01b0316816001600160a01b031614611476578183611479565b82825b90975095508a8710156114ce5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b8986101561151e5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b505050505097509795505050505050565b606081428110156115525760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b0316868660008161156f5761156f6133ec565b90506020020160208101906115849190612d90565b6001600160a01b0316146115aa5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526115f4936001600160a01b0316923492918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451611606919061338d565b81518110611616576116166133ec565b6020026020010151101561163c5760405162461bcd60e51b81526004016103df906132f2565b60015482516001600160a01b039091169063d0e30db0908490600090611664576116646133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561169757600080fd5b505af11580156116ab573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb94506116e29350909116908a908a9081611064576110646133ec565b846000815181106116f5576116f56133ec565b60200260200101516040518363ffffffff1660e01b815260040161172e9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190613006565b61178957600080fd5b6111be828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b6000546060906103b3906001600160a01b03168484611ea7565b606081428110156118055760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611821908261338d565b818110611830576118306133ec565b90506020020160208101906118459190612d90565b6001600160a01b03161461186b5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526118b5936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516118c7919061338d565b815181106118d7576118d76133ec565b602002602001015110156118fd5760405162461bcd60e51b81526004016103df906132f2565b61191386866000818110610490576104906133ec565b611952828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506121d7915050565b6001805483516001600160a01b0390911691632e1a7d4d9185916119759161338d565b81518110611985576119856133ec565b60200260200101516040518263ffffffff1660e01b81526004016119ab91815260200190565b600060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b5050505061056b8483600185516119f0919061338d565b81518110611a0057611a006133ec565b60200260200101516124b8565b60008060008342811015611a335760405162461bcd60e51b81526004016103df906132c9565b611a418c8c8c8c8c8c6125b3565b6000805492965090945090611a60906001600160a01b03168e8e612014565b9050611a6e8d338388612099565b611a7a8c338387612099565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611abd57600080fd5b505af1158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061305b565b92505050985098509895505050505050565b60608142811015611b2a5760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611b46908261338d565b818110611b5557611b556133ec565b9050602002016020810190611b6a9190612d90565b6001600160a01b031614611b905760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252611bda936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110611bf057611bf06133ec565b602002602001015111156118fd5760405162461bcd60e51b81526004016103df90613292565b6000808411611c715760405162461bcd60e51b815260206004820152602160248201527f48656c7065723a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b60648201526084016103df565b600083118015611c815750600082115b611ccd5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000611cdb856103e56128e3565b90506000611ce982856128e3565b90506000611d0383611cfd886103e86128e3565b9061294a565b9050611d0f818361334c565b979650505050505050565b6060600282511015611d655760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611d7f57611d7f613402565b604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050828160018351611dbb919061338d565b81518110611dcb57611dcb6133ec565b602002602001018181525050600060018351611de7919061338d565b90505b8015611e9f57600080611e3a8786611e0360018761338d565b81518110611e1357611e136133ec565b6020026020010151878681518110611e2d57611e2d6133ec565b602002602001015161299f565b91509150611e62848481518110611e5357611e536133ec565b60200260200101518383612a76565b84611e6e60018661338d565b81518110611e7e57611e7e6133ec565b60200260200101818152505050508080611e97906133a4565b915050611dea565b509392505050565b6060600282511015611ef25760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611f0c57611f0c613402565b604051908082528060200260200182016040528015611f35578160200160208202803683370190505b5090508281600081518110611f4c57611f4c6133ec565b60200260200101818152505060005b60018351611f69919061338d565b811015611e9f57600080611faf87868581518110611f8957611f896133ec565b602002602001015187866001611f9f9190613334565b81518110611e2d57611e2d6133ec565b91509150611fd7848481518110611fc857611fc86133ec565b60200260200101518383611c16565b84611fe3856001613334565b81518110611ff357611ff36133ec565b6020026020010181815250505050808061200c906133bb565b915050611f5b565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a439059060440160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190612db4565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916120fd91906131e5565b6000604051808303816000865af19150503d806000811461213a576040519150601f19603f3d011682016040523d82523d6000602084013e61213f565b606091505b50915091508180156121695750805115806121695750808060200190518101906121699190613006565b6121cf5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103df565b505050505050565b60005b600183516121e8919061338d565b81101561238157600080848381518110612204576122046133ec565b60200260200101518584600161221a9190613334565b8151811061222a5761222a6133ec565b60200260200101519150915060006122428383612802565b509050600087612253866001613334565b81518110612263576122636133ec565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461229157826000612295565b6000835b91509150600060028a516122a9919061338d565b88106122b557886122e2565b6000546122e2906001600160a01b0316878c6122d28c6002613334565b815181106107e1576107e16133ec565b6000549091506122fc906001600160a01b03168888612014565b6040516336cd320560e11b815260048101859052602481018490526001600160a01b0383811660448301529190911690636d9a640a90606401600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50505050505050505050508080612379906133bb565b9150506121da565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916123e391906131e5565b6000604051808303816000865af19150503d8060008114612420576040519150601f19603f3d011682016040523d82523d6000602084013e612425565b606091505b509150915081801561244f57508051158061244f57508080602001905181019061244f9190613006565b6124b15760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103df565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516124e291906131e5565b60006040518083038185875af1925050503d806000811461251f576040519150601f19603f3d011682016040523d82523d6000602084013e612524565b606091505b50509050806125ae5760405162461bcd60e51b815260206004820152604a60248201527f5472616e7366657248656c7065723a3a736166655472616e736665724e61746960448201527f766543757272656e63793a204e617469766543757272656e6379207472616e7360648201526919995c8819985a5b195960b21b608482015260a4016103df565b505050565b6000805460405163e6a4390560e01b81526001600160a01b03898116600483015288811660248301528392839291169063e6a439059060440160206040518083038186803b15801561260457600080fd5b505afa158015612618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263c9190612db4565b6001600160a01b031614156126d4576000546040516364e329cb60e11b81526001600160a01b038a8116600483015289811660248301529091169063c9c6539690604401602060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d29190612db4565b505b6000805481906126ee906001600160a01b03168b8b61299f565b91509150816000148015612700575080155b15612710578793508692506127f5565b600061271d898484612b75565b905087811161278157858110156127765760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b8894509250826127f3565b600061278e898486612b75565b90508981111561279d57600080fd5b878110156127ed5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b94508793505b505b5050965096945050505050565b600080826001600160a01b0316846001600160a01b031614156128675760405162461bcd60e51b815260206004820152601b60248201527f48656c7065723a204944454e544943414c5f414444524553534553000000000060448201526064016103df565b826001600160a01b0316846001600160a01b03161061288757828461288a565b83835b90925090506001600160a01b0382166128dc5760405162461bcd60e51b815260206004820152601460248201527348656c7065723a205a45524f5f4144445245535360601b60448201526064016103df565b9250929050565b6000811580612907575082826128f9818361336e565b9250612905908361334c565b145b6103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103df565b6000826129578382613334565b91508110156103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103df565b60008060006129ae8585612802565b5090506000806129bf888888612014565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156129f657600080fd5b505afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613028565b6001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612a64578082612a67565b81815b90999098509650505050505050565b6000808411612ad25760405162461bcd60e51b815260206004820152602260248201527f48656c7065723a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b60648201526084016103df565b600083118015612ae25750600082115b612b2e5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000612b466103e8612b4086886128e3565b906128e3565b90506000612b5a6103e5612b408689612c26565b9050612b6b6001611cfd838561334c565b9695505050505050565b6000808411612bbc5760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b60448201526064016103df565b600083118015612bcc5750600082115b612c115760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b60448201526064016103df565b82612c1c85846128e3565b610391919061334c565b600082612c33838261338d565b91508111156103b65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103df565b8035612c8781613418565b919050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b85010111156128dc57600080fd5b600082601f830112612ce257600080fd5b8135602067ffffffffffffffff80831115612cff57612cff613402565b8260051b604051601f19603f83011681018181108482111715612d2457612d24613402565b60405284815283810192508684018288018501891015612d4357600080fd5b600092505b85831015612d6d57612d5981612c7c565b845292840192600192909201918401612d48565b50979650505050505050565b80516001600160701b0381168114612c8757600080fd5b600060208284031215612da257600080fd5b8135612dad81613418565b9392505050565b600060208284031215612dc657600080fd5b8151612dad81613418565b600080600080600080600060e0888a031215612dec57600080fd5b8735612df781613418565b96506020880135612e0781613418565b955060408801359450606088013593506080880135925060a0880135612e2c81613418565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612e6057600080fd5b8835612e6b81613418565b97506020890135612e7b81613418565b965060408901359550606089013594506080890135935060a0890135925060c0890135612ea781613418565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215612ed857600080fd5b8635612ee381613418565b95506020870135945060408701359350606087013592506080870135612f0881613418565b8092505060a087013590509295509295509295565b60008060008060008060008060e0898b031215612f3957600080fd5b883567ffffffffffffffff811115612f5057600080fd5b612f5c8b828c01612c8c565b9099509750506020890135955060408901359450606089013593506080890135925060a0890135612f8c81613418565b8092505060c089013590509295985092959890939650565b60008060008060008060c08789031215612fbd57600080fd5b863567ffffffffffffffff811115612fd457600080fd5b612fe089828a01612cd1565b9650506020870135945060408701359350606087013592506080870135612f0881613418565b60006020828403121561301857600080fd5b81518015158114612dad57600080fd5b6000806040838503121561303b57600080fd5b61304483612d79565b915061305260208401612d79565b90509250929050565b60006020828403121561306d57600080fd5b5051919050565b60008060008060006080868803121561308c57600080fd5b85359450602086013567ffffffffffffffff8111156130aa57600080fd5b6130b688828901612c8c565b90955093505060408601356130ca81613418565b949793965091946060013592915050565b600080604083850312156130ee57600080fd5b82359150602083013567ffffffffffffffff81111561310c57600080fd5b61311885828601612cd1565b9150509250929050565b6000806040838503121561313557600080fd5b505080516020909101519092909150565b60008060008060008060a0878903121561315f57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561318457600080fd5b61319089828a01612c8c565b90955093505060608701356131a481613418565b80925050608087013590509295509295509295565b6000806000606084860312156131ce57600080fd5b505081359360208301359350604090920135919050565b6000825160005b8181101561320657602081860181015185830152016131ec565b81811115613215576000828501525b509190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156132585783518352928401929184019160010161323c565b50909695505050505050565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b6020808252601e908201527f526f757465723a204558434553534956455f494e5055545f414d4f554e540000604082015260600190565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b60008219821115613347576133476133d6565b500190565b60008261336957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613388576133886133d6565b500290565b60008282101561339f5761339f6133d6565b500390565b6000816133b3576133b36133d6565b506000190190565b60006000198214156133cf576133cf6133d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461342d57600080fd5b5056fea26469706673582212208d0347b698ede02582681341f3d0731e07e8b75877604cdd90701fe46fb5519f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f36ae63d89983e3aea8aaad1086c3280eb01438d00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
-----Decoded View---------------
Arg [0] : _factory (address): 0xf36AE63d89983E3aeA8AaaD1086C3280eb01438D
Arg [1] : _WNativeCurrency (address): 0x98878B06940aE243284CA214f92Bb71a2b032B8A
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f36ae63d89983e3aea8aaad1086c3280eb01438d
Arg [1] : 00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Deployed Bytecode Sourcemap
16839:16263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17324:15;;-1:-1:-1;;;;;17324:15:0;17310:10;:29;17302:38;;;;;;16839:16263;;;;;32131:240;;;;;;;;;;-1:-1:-1;32131:240:0;;;;;:::i;:::-;;:::i;:::-;;;19704:25:1;;;19692:2;19677:18;32131:240:0;;;;;;;;32867:232;;;;;;;;;;-1:-1:-1;32867:232:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27069:669::-;;;;;;;;;;-1:-1:-1;27069:669:0;;;;;:::i;:::-;;:::i;25393:829::-;;;;;;;;;;-1:-1:-1;25393:829:0;;;;;:::i;:::-;;:::i;:::-;;;;19914:25:1;;;19970:2;19955:18;;19948:34;;;;19887:18;25393:829:0;19740:248:1;16942:39:0;;;;;;;;;;-1:-1:-1;16942:39:0;;;;-1:-1:-1;;;;;16942:39:0;;;;;;-1:-1:-1;;;;;10044:32:1;;;10026:51;;10014:2;9999:18;16942:39:0;9880:203:1;20603:2284:0;;;;;;:::i;:::-;;:::i;:::-;;;;20545:25:1;;;20601:2;20586:18;;20579:34;;;;20629:18;;;20622:34;20533:2;20518:18;20603:2284:0;20343:319:1;27746:610:0;;;;;;;;;;-1:-1:-1;27746:610:0;;;;;:::i;:::-;;:::i;19287:1308::-;;;;;;:::i;:::-;;:::i;31130:993::-;;;;;;:::i;:::-;;:::i;18339:940::-;;;;;;;;;;-1:-1:-1;18339:940:0;;;;;:::i;:::-;;:::i;24517:868::-;;;;;;;;;;-1:-1:-1;24517:868:0;;;;;:::i;:::-;;:::i;16904:31::-;;;;;;;;;;-1:-1:-1;16904:31:0;;;;-1:-1:-1;;;;;16904:31:0;;;28364:861;;;;;;:::i;:::-;;:::i;32627:232::-;;;;;;;;;;-1:-1:-1;32627:232:0;;;;;:::i;:::-;;:::i;30152:970::-;;;;;;;;;;-1:-1:-1;30152:970:0;;;;;:::i;:::-;;:::i;17434:897::-;;;;;;;;;;-1:-1:-1;17434:897:0;;;;;:::i;:::-;;:::i;29233:911::-;;;;;;;;;;-1:-1:-1;29233:911:0;;;;;:::i;:::-;;:::i;32131:240::-;32274:17;32311:52;32331:8;32341:9;32352:10;32311:19;:52::i;:::-;32304:59;32131:240;-1:-1:-1;;;;32131:240:0:o;32867:232::-;33066:7;;32997:24;;33046:45;;-1:-1:-1;;;;;33066:7:0;33075:9;33086:4;33046:19;:45::i;:::-;33039:52;;32867:232;;;;;:::o;27069:669::-;27292:24;27273:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;;;;;;;;;27360:7:::1;::::0;27339:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27360:7:0::1;::::0;27369:8;;27339:45;27379:4;;;;;;27339:45;;::::1;::::0;27379:4;;27339:45;27379:4;27339:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;27339:20:0::1;::::0;-1:-1:-1;;;27339:45:0:i:1;:::-;27329:55;;27448:12;27417:7;27442:1;27425:7;:14;:18;;;;:::i;:::-;27417:27;;;;;;;;:::i;:::-;;;;;;;:43;;27395:127;;;;-1:-1:-1::0;;;27395:127:0::1;;;;;;;:::i;:::-;27533:162;27571:4;;27576:1;27571:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27633;::::0;;27593:10:::1;::::0;27618:41:::1;::::0;-1:-1:-1;;;;;27633:7:0::1;::::0;27642:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27651:4;;27656:1;27651:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27618:14;:41::i;:::-;27674:7;27682:1;27674:10;;;;;;;;:::i;:::-;;;;;;;27533:23;:162::i;:::-;27706:24;27712:7;27721:4;;27706:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27727:2:0;;-1:-1:-1;27706:5:0::1;::::0;-1:-1:-1;;27706:24:0:i:1;:::-;27069:669:::0;;;;;;;;;:::o;25393:829::-;25692:19;25713:28;25664:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;25847:15:::1;::::0;25797:218:::1;::::0;25827:5;;-1:-1:-1;;;;;25847:15:0::1;25877:9:::0;25901:14;25930:23;25976:4:::1;25996:8:::0;25797:15:::1;:218::i;:::-;25759:256:::0;;-1:-1:-1;25759:256:0;-1:-1:-1;26026:43:0::1;26046:5:::0;26053:2;25759:256;26026:19:::1;:43::i;:::-;26097:15;::::0;26080:64:::1;::::0;-1:-1:-1;;;26080:64:0;;::::1;::::0;::::1;19704:25:1::0;;;-1:-1:-1;;;;;26097:15:0;;::::1;::::0;26080:42:::1;::::0;19677:18:1;;26080:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26155:59;26189:2;26193:20;26155:33;:59::i;:::-;25393:829:::0;;;;;;;;;;:::o;20603:2284::-;20960:19;20994:28;21037:17;20918:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;21118:15:::1;::::0;21107:7;;-1:-1:-1;;;;;21118:15:0;;::::1;::::0;21107:4;;21118:15:::1;::::0;21107:7:::1;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21107:26:0::1;;21099:59;;;;-1:-1:-1::0;;;21099:59:0::1;;;;;;;:::i;:::-;21169:24;21230:7:::0;;21196:99:::1;::::0;-1:-1:-1;;;;;21230:7:0::1;21252:13:::0;21280:4;21196:19:::1;:99::i;:::-;21169:126;;21330:9;21316:7;21324:1;21316:10;;;;;;;;:::i;:::-;;;;;;;:23;;21308:66;;;;-1:-1:-1::0;;;21308:66:0::1;;;;;;;:::i;:::-;21402:15;::::0;21434:10;;-1:-1:-1;;;;;21402:15:0;;::::1;::::0;21385:41:::1;::::0;21434:7;;21402:15:::1;::::0;21434:10:::1;;;;:::i;:::-;;;;;;;21385:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;21489:15;;;;;;;;;-1:-1:-1::0;;;;;21489:15:0::1;-1:-1:-1::0;;;;;21482:32:0::1;;21533:41;21548:7;::::0;::::1;;;;;;-1:-1:-1::0;;;;;21548:7:0::1;21557:4;21562:1;21557:7;;;;;;;;:::i;:::-;;;;;;;21566:4;21571:1;21566:7;;;;;;;;:::i;:::-;;;;;;;21533:14;:41::i;:::-;21593:7;21601:1;21593:10;;;;;;;;:::i;:::-;;;;;;;21482:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;21482:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21460:169;;;::::0;::::1;;21642:24;21648:7;21657:4;21663:2;21642:5;:24::i;:::-;21715:23;21701:7;21709:1;21701:10;;;;;;;;:::i;:::-;;;;;;;:37;;21679:132;;;::::0;-1:-1:-1;;;21679:132:0;;16362:2:1;21679:132:0::1;::::0;::::1;16344:21:1::0;16401:2;16381:18;;;16374:30;16440:34;16420:18;;;16413:62;-1:-1:-1;;;16491:18:1;;;16484:43;16544:19;;21679:132:0::1;16160:409:1::0;21679:132:0::1;21849:13;21865:4;21884:1;21870:4;:11;:15;;;;:::i;:::-;21865:21;;;;;;;;:::i;:::-;;;;;;;21849:37;;21897:29;21941:7;21949:1;21941:10;;;;;;;;:::i;:::-;;;;;;;21929:9;:22;;;;:::i;:::-;21897:54;;22000:233;22028:5;22048:15;;;;;;;;;-1:-1:-1::0;;;;;22048:15:0::1;22078:7;22103:1;22086:7;:14;:18;;;;:::i;:::-;22078:27;;;;;;;;:::i;:::-;;;;;;;22120:21;22156:7;22181:1;22164:7;:14;:18;;;;:::i;:::-;22156:27;;;;;;;;:::i;:::-;;;;;;;22198:24;22000:13;:233::i;:::-;22246:12;22276:7:::0;;;22292:15;21962:271;;-1:-1:-1;21962:271:0;;-1:-1:-1;22246:12:0;22261:47:::1;::::0;-1:-1:-1;;;;;22276:7:0;;::::1;::::0;22285:5;;22292:15:::1;22261:14;:47::i;:::-;22246:62;;22321:61;22345:5;22352:10;22364:4;22370:11;22321:23;:61::i;:::-;22412:15;;;;;;;;;-1:-1:-1::0;;;;;22412:15:0::1;-1:-1:-1::0;;;;;22395:41:0::1;;22458:20;22395:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22519:15:0::1;::::0;22512:60:::1;::::0;-1:-1:-1;;;22512:60:0;;-1:-1:-1;;;;;10969:32:1;;;22512:60:0::1;::::0;::::1;10951:51:1::0;11018:18;;;11011:34;;;22519:15:0;;::::1;::::0;-1:-1:-1;22512:32:0::1;::::0;-1:-1:-1;10924:18:1;;;-1:-1:-1;22512:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22504:69;;;::::0;::::1;;22598:20;::::0;-1:-1:-1;;;22598:20:0;;-1:-1:-1;;;;;10044:32:1;;;22598:20:0::1;::::0;::::1;10026:51:1::0;22598:16:0;::::1;::::0;::::1;::::0;9999:18:1;;22598:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22586:32;;22671:7;22679:1;22671:10;;;;;;;;:::i;:::-;;;;;;;22648:20;:33;;;;:::i;:::-;22635:9;:47;22631:209;;;22697:143;22749:10;22814:7;22822:1;22814:10;;;;;;;;:::i;:::-;;;;;;;22791:20;:33;;;;:::i;:::-;22778:47;::::0;:9:::1;:47;:::i;:::-;22697:33;:143::i;:::-;21071:1816;;;;20603:2284:::0;;;;;;;;;;;:::o;27746:610::-;27969:24;27950:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;28036:7:::1;::::0;28016:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;28036:7:0::1;::::0;28045:9;;28016:45;28056:4;;;;;;28016:45;;::::1;::::0;28056:4;;28016:45;28056:4;28016:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;28016:19:0::1;::::0;-1:-1:-1;;;28016:45:0:i:1;:::-;28006:55;;28094:11;28080:7;28088:1;28080:10;;;;;;;;:::i;:::-;;;;;;;:25;;28072:68;;;;-1:-1:-1::0;;;28072:68:0::1;;;;;;;:::i;19287:1308::-:0;19625:19;19659:28;19702:17;19583:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;19833:15:::1;::::0;19785:198:::1;::::0;19813:5;;-1:-1:-1;;;;;19833:15:0::1;19863:18:::0;19896:9:::1;19920:14:::0;19949:23;19785:13:::1;:198::i;:::-;19994:12;20024:7:::0;;;20040:15;19747:236;;-1:-1:-1;19747:236:0;;-1:-1:-1;19994:12:0;20009:47:::1;::::0;-1:-1:-1;;;;;20024:7:0;;::::1;::::0;20033:5;;20040:15:::1;20009:14;:47::i;:::-;19994:62;;20067:61;20091:5;20098:10;20110:4;20116:11;20067:23;:61::i;:::-;20156:15;;;;;;;;;-1:-1:-1::0;;;;;20156:15:0::1;-1:-1:-1::0;;;;;20139:41:0::1;;20202:20;20139:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20261:15:0::1;::::0;20254:60:::1;::::0;-1:-1:-1;;;20254:60:0;;-1:-1:-1;;;;;10969:32:1;;;20254:60:0::1;::::0;::::1;10951:51:1::0;11018:18;;;11011:34;;;20261:15:0;;::::1;::::0;-1:-1:-1;20254:32:0::1;::::0;-1:-1:-1;10924:18:1;;;-1:-1:-1;20254:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20246:69;;;::::0;::::1;;20338:20;::::0;-1:-1:-1;;;20338:20:0;;-1:-1:-1;;;;;10044:32:1;;;20338:20:0::1;::::0;::::1;10026:51:1::0;20338:16:0;::::1;::::0;::::1;::::0;9999:18:1;;20338:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20326:32;;20385:20;20373:9;:32;20369:179;;;20420:128;20472:10;20501:32;20513:20:::0;20501:9:::1;:32;:::i;20420:128::-;19736:859;19287:1308:::0;;;;;;;;;;;:::o;31130:993::-;31386:24;31358:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;31447:15:::1;::::0;-1:-1:-1;;;;;31447:15:0::1;31436:4:::0;;31447:15:::1;31436:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31436:26:0::1;;31428:59;;;;-1:-1:-1::0;;;31428:59:0::1;;;;;;;:::i;:::-;31528:7;::::0;31508:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;31528:7:0::1;::::0;31537:9;;31508:45;31548:4;;;;;;31508:45;;::::1;::::0;31548:4;;31508:45;31548:4;31508:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31508:19:0::1;::::0;-1:-1:-1;;;31508:45:0:i:1;:::-;31498:55;;31586:9;31572:7;31580:1;31572:10;;;;;;;;:::i;:::-;;;;;;;:23;;31564:66;;;;-1:-1:-1::0;;;31564:66:0::1;;;;;;;:::i;:::-;31658:15;::::0;31690:10;;-1:-1:-1;;;;;31658:15:0;;::::1;::::0;31641:41:::1;::::0;31690:7;;31658:15:::1;::::0;31690:10:::1;;;;:::i;:::-;;;;;;;31641:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31743:15:0::1;::::0;::::1;31802:7:::0;;-1:-1:-1;;;;;31743:15:0;;::::1;::::0;-1:-1:-1;31736:32:0::1;::::0;-1:-1:-1;31787:41:0::1;::::0;-1:-1:-1;31802:7:0;;::::1;::::0;31811:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31820:4;;31825:1;31820:7;;;;;;;:::i;31787:41::-;31847:7;31855:1;31847:10;;;;;;;;:::i;:::-;;;;;;;31736:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;31736:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31714:169;;;::::0;::::1;;31894:24;31900:7;31909:4;;31894:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31915:2:0;;-1:-1:-1;31894:5:0::1;::::0;-1:-1:-1;;31894:24:0:i:1;:::-;31945:7;31953:1;31945:10;;;;;;;;:::i;:::-;;;;;;;31933:9;:22;31929:159;;;31970:118;32022:10;32063:7;32071:1;32063:10;;;;;;;;:::i;:::-;;;;;;;32051:9;:22;;;;:::i;31970:118::-;31130:993:::0;;;;;;;;:::o;18339:940::-;18635:17;18616:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;18665:14:::1;18682:4;;18687:1;18682:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18665:24:::0;-1:-1:-1;18700:14:0::1;18717:4:::0;;18722:15:::1;18736:1;18717:4:::0;18722:15:::1;:::i;:::-;18717:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18700:38;;18751:24;18778:152;18817:13;18845:15;18875:4;;18894:2;18911:8;18778:24;:152::i;:::-;18751:179;;18943:23;18980:7;18988:1;18980:10;;;;;;;;:::i;:::-;;;;;;;18969:8;:21;;;;:::i;:::-;18943:47;;19019:252;19046:6;19067;19088:7;19113:1;19096:7;:14;:18;;;;:::i;:::-;19088:27;;;;;;;;:::i;:::-;;;;;;;19130:15;19160:7;19185:1;19168:7;:14;:18;;;;:::i;:::-;19160:27;;;;;;;;:::i;:::-;;;;;;;19202:18;19235:2;19252:8;19019:12;:252::i;:::-;19001:270;;;;;;;;;18654:625;;;;18339:940:::0;;;;;;;;;;;:::o;24517:868::-;24811:15;24828;24783:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;24861:12:::1;24891:7:::0;;24876:39:::1;::::0;-1:-1:-1;;;;;24891:7:0::1;24900:6:::0;24908;24876:14:::1;:39::i;:::-;24926:54;::::0;-1:-1:-1;;;24926:54:0;;24952:10:::1;24926:54;::::0;::::1;10637:34:1::0;-1:-1:-1;;;;;24926:25:0;::::1;10687:18:1::0;;;10680:43;;;10739:18;;;10732:34;;;24861:54:0;;-1:-1:-1;24926:25:0::1;::::0;10572:18:1;;24926:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25028:20:0::1;::::0;-1:-1:-1;;;25028:20:0;;-1:-1:-1;;;;;10044:32:1;;;25028:20:0::1;::::0;::::1;10026:51:1::0;24992:15:0::1;::::0;;;25028:16;::::1;::::0;::::1;::::0;9999:18:1;;25028:20:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24991:57;;;;25060:14;25080:33;25098:6;25106;25080:17;:33::i;:::-;25059:54;;;25155:6;-1:-1:-1::0;;;;;25145:16:0::1;:6;-1:-1:-1::0;;;;;25145:16:0::1;;:84;;25212:7;25221;25145:84;;;25178:7;25187;25145:84;25124:105:::0;;-1:-1:-1;25124:105:0;-1:-1:-1;25248:21:0;;::::1;;25240:63;;;::::0;-1:-1:-1;;;25240:63:0;;16776:2:1;25240:63:0::1;::::0;::::1;16758:21:1::0;16815:2;16795:18;;;16788:30;16854:31;16834:18;;;16827:59;16903:18;;25240:63:0::1;16574:353:1::0;25240:63:0::1;25333:10;25322:7;:21;;25314:63;;;::::0;-1:-1:-1;;;25314:63:0;;14069:2:1;25314:63:0::1;::::0;::::1;14051:21:1::0;14108:2;14088:18;;;14081:30;14147:31;14127:18;;;14120:59;14196:18;;25314:63:0::1;13867:353:1::0;25314:63:0::1;24850:535;;;;24517:868:::0;;;;;;;;;;;:::o;28364:861::-;28623:24;28595:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;28684:15:::1;::::0;-1:-1:-1;;;;;28684:15:0::1;28673:4:::0;;28684:15:::1;28673:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28673:26:0::1;;28665:59;;;;-1:-1:-1::0;;;28665:59:0::1;;;;;;;:::i;:::-;28766:7;::::0;28745:46:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;28766:7:0::1;::::0;28775:9:::1;::::0;28745:46;28786:4;;;;;;28745:46;;::::1;::::0;28786:4;;28745:46;28786:4;28745:46;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;28745:20:0::1;::::0;-1:-1:-1;;;28745:46:0:i:1;:::-;28735:56;;28855:12;28824:7;28849:1;28832:7;:14;:18;;;;:::i;:::-;28824:27;;;;;;;;:::i;:::-;;;;;;;:43;;28802:127;;;;-1:-1:-1::0;;;28802:127:0::1;;;;;;;:::i;:::-;28957:15;::::0;28989:10;;-1:-1:-1;;;;;28957:15:0;;::::1;::::0;28940:41:::1;::::0;28989:7;;28957:15:::1;::::0;28989:10:::1;;;;:::i;:::-;;;;;;;28940:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29042:15:0::1;::::0;::::1;29101:7:::0;;-1:-1:-1;;;;;29042:15:0;;::::1;::::0;-1:-1:-1;29035:32:0::1;::::0;-1:-1:-1;29086:41:0::1;::::0;-1:-1:-1;29101:7:0;;::::1;::::0;29110:4;;;;:7;::::1;;;;:::i;29086:41::-;29146:7;29154:1;29146:10;;;;;;;;:::i;:::-;;;;;;;29035:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;29035:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29013:169;;;::::0;::::1;;29193:24;29199:7;29208:4;;29193:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29214:2:0;;-1:-1:-1;29193:5:0::1;::::0;-1:-1:-1;;29193:24:0:i:1;32627:232::-:0;32827:7;;32757:24;;32806:45;;-1:-1:-1;;;;;32827:7:0;32836:8;32846:4;32806:20;:45::i;30152:970::-;30385:24;30366:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;30469:15:::1;::::0;;-1:-1:-1;;;;;30469:15:0::1;::::0;30444:4;;;;30449:15:::1;::::0;30444:4;30449:15:::1;:::i;:::-;30444:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30444:40:0::1;;30422:110;;;;-1:-1:-1::0;;;30422:110:0::1;;;;;;;:::i;:::-;30574:7;::::0;30553:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30574:7:0::1;::::0;30583:8;;30553:45;30593:4;;;;;;30553:45;;::::1;::::0;30593:4;;30553:45;30593:4;30553:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;30553:20:0::1;::::0;-1:-1:-1;;;30553:45:0:i:1;:::-;30543:55;;30662:12;30631:7;30656:1;30639:7;:14;:18;;;;:::i;:::-;30631:27;;;;;;;;:::i;:::-;;;;;;;:43;;30609:127;;;;-1:-1:-1::0;;;30609:127:0::1;;;;;;;:::i;:::-;30747:162;30785:4;;30790:1;30785:7;;;;;;;:::i;30747:162::-;30920:35;30926:7;30935:4;;30920:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30949:4:0::1;::::0;-1:-1:-1;30920:5:0::1;::::0;-1:-1:-1;;30920:35:0:i:1;:::-;30983:15;::::0;;31017:14;;-1:-1:-1;;;;;30983:15:0;;::::1;::::0;30966:42:::1;::::0;31009:7;;31017:18:::1;::::0;::::1;:::i;:::-;31009:27;;;;;;;;:::i;:::-;;;;;;;30966:71;;;;;;;;;;;;;19704:25:1::0;;19692:2;19677:18;;19558:177;30966:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31048:66;31082:2;31086:7;31111:1;31094:7;:14;:18;;;;:::i;:::-;31086:27;;;;;;;;:::i;:::-;;;;;;;31048:33;:66::i;17434:897::-:0;17777:15;17807;17837:17;17735:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;17903:174:::1;17931:6;17952;17973:14;18002;18031:10;18056;17903:13;:174::i;:::-;18088:12;18118:7:::0;;17882:195;;-1:-1:-1;17882:195:0;;-1:-1:-1;18088:12:0;18103:39:::1;::::0;-1:-1:-1;;;;;18118:7:0::1;18127:6:::0;18135;18103:14:::1;:39::i;:::-;18088:54;;18153:58;18177:6;18185:10;18197:4;18203:7;18153:23;:58::i;:::-;18222;18246:6;18254:10;18266:4;18272:7;18222:23;:58::i;:::-;18303:20;::::0;-1:-1:-1;;;18303:20:0;;-1:-1:-1;;;;;10044:32:1;;;18303:20:0::1;::::0;::::1;10026:51:1::0;18303:16:0;::::1;::::0;::::1;::::0;9999:18:1;;18303:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18291:32;;17871:460;17434:897:::0;;;;;;;;;;;;;:::o;29233:911::-;29466:24;29447:8;17201:15;17189:8;:27;;17181:55;;;;-1:-1:-1;;;17181:55:0;;;;;;;:::i;:::-;29550:15:::1;::::0;;-1:-1:-1;;;;;29550:15:0::1;::::0;29525:4;;;;29530:15:::1;::::0;29525:4;29530:15:::1;:::i;:::-;29525:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29525:40:0::1;;29503:110;;;;-1:-1:-1::0;;;29503:110:0::1;;;;;;;:::i;:::-;29654:7;::::0;29634:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;29654:7:0::1;::::0;29663:9;;29634:45;29674:4;;;;;;29634:45;;::::1;::::0;29674:4;;29634:45;29674:4;29634:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;29634:19:0::1;::::0;-1:-1:-1;;;29634:45:0:i:1;:::-;29624:55;;29712:11;29698:7;29706:1;29698:10;;;;;;;;:::i;:::-;;;;;;;:25;;29690:68;;;;-1:-1:-1::0;;;29690:68:0::1;;;;;;;:::i;6694:589::-:0;6830:17;6879:1;6868:8;:12;6860:58;;;;-1:-1:-1;;;6860:58:0;;19358:2:1;6860:58:0;;;19340:21:1;19397:2;19377:18;;;19370:30;19436:34;19416:18;;;19409:62;-1:-1:-1;;;19487:18:1;;;19480:31;19528:19;;6860:58:0;19156:397:1;6860:58:0;6963:1;6951:9;:13;:31;;;;;6981:1;6968:10;:14;6951:31;6929:111;;;;-1:-1:-1;;;6929:111:0;;17951:2:1;6929:111:0;;;17933:21:1;17990:2;17970:18;;;17963:30;18029:32;18009:18;;;18002:60;18079:18;;6929:111:0;17749:354:1;6929:111:0;7051:23;7077:17;:8;7090:3;7077:12;:17::i;:::-;7051:43;-1:-1:-1;7105:17:0;7125:31;7051:43;7145:10;7125:19;:31::i;:::-;7105:51;-1:-1:-1;7167:19:0;7189:40;7213:15;7189:19;:9;7203:4;7189:13;:19::i;:::-;:23;;:40::i;:::-;7167:62;-1:-1:-1;7252:23:0;7167:62;7252:9;:23;:::i;:::-;7240:35;6694:589;-1:-1:-1;;;;;;;6694:589:0:o;8654:640::-;8792:24;8852:1;8837:4;:11;:16;;8829:49;;;;-1:-1:-1;;;8829:49:0;;18310:2:1;8829:49:0;;;18292:21:1;18349:2;18329:18;;;18322:30;-1:-1:-1;;;18368:18:1;;;18361:50;18428:18;;8829:49:0;18108:344:1;8829:49:0;8913:4;:11;8899:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8899:26:0;;8889:36;;8966:9;8936:7;8961:1;8944:7;:14;:18;;;;:::i;:::-;8936:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;8991:9;9017:1;9003:4;:11;:15;;;;:::i;:::-;8991:27;;8986:301;9020:5;;8986:301;;9048:17;;9089:108;9119:7;9145:4;9150:5;9154:1;9150;:5;:::i;:::-;9145:11;;;;;;;;:::i;:::-;;;;;;;9175:4;9180:1;9175:7;;;;;;;;:::i;:::-;;;;;;;9089:11;:108::i;:::-;9047:150;;;;9229:46;9241:7;9249:1;9241:10;;;;;;;;:::i;:::-;;;;;;;9253:9;9264:10;9229:11;:46::i;:::-;9212:7;9220:5;9224:1;9220;:5;:::i;:::-;9212:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;9032:255;;9027:3;;;;;:::i;:::-;;;;8986:301;;;;8654:640;;;;;:::o;8027:619::-;8165:24;8225:1;8210:4;:11;:16;;8202:49;;;;-1:-1:-1;;;8202:49:0;;18310:2:1;8202:49:0;;;18292:21:1;18349:2;18329:18;;;18322:30;-1:-1:-1;;;18368:18:1;;;18361:50;18428:18;;8202:49:0;18108:344:1;8202:49:0;8286:4;:11;8272:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8272:26:0;;8262:36;;8322:8;8309:7;8317:1;8309:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;8346:9;8341:298;8375:1;8361:4;:11;:15;;;;:::i;:::-;8357:1;:19;8341:298;;;8399:17;8418:18;8440:108;8470:7;8496:4;8501:1;8496:7;;;;;;;;:::i;:::-;;;;;;;8522:4;8527:1;8531;8527:5;;;;:::i;:::-;8522:11;;;;;;;;:::i;8440:108::-;8398:150;;;;8580:47;8593:7;8601:1;8593:10;;;;;;;;:::i;:::-;;;;;;;8605:9;8616:10;8580:12;:47::i;:::-;8563:7;8571:5;:1;8575;8571:5;:::i;:::-;8563:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;8383:256;;8378:3;;;;;:::i;:::-;;;;8341:298;;4237:204;4392:41;;-1:-1:-1;;;4392:41:0;;-1:-1:-1;;;;;10318:15:1;;;4392:41:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;4360:12:0;;4392:25;;;;;;10235:18:1;;4392:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5274:522::-;5559:51;;;-1:-1:-1;;;;;10655:15:1;;;5559:51:0;;;10637:34:1;10707:15;;;10687:18;;;10680:43;10739:18;;;;10732:34;;;5559:51:0;;;;;;;;;;10572:18:1;;;;5559:51:0;;;;;;;-1:-1:-1;;;;;5559:51:0;-1:-1:-1;;;5559:51:0;;;5534:87;;-1:-1:-1;;;;5534:10:0;;;;:87;;5559:51;5534:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5498:123;;;;5654:7;:57;;;;-1:-1:-1;5666:11:0;;:16;;:44;;;5697:4;5686:24;;;;;;;;;;;;:::i;:::-;5632:156;;;;-1:-1:-1;;;5632:156:0;;13651:2:1;5632:156:0;;;13633:21:1;13690:2;13670:18;;;13663:30;13729:34;13709:18;;;13702:62;-1:-1:-1;;;13780:18:1;;;13773:47;13837:19;;5632:156:0;13449:413:1;5632:156:0;5408:388;;5274:522;;;;:::o;26230:831::-;26365:9;26360:694;26394:1;26380:4;:11;:15;;;;:::i;:::-;26376:1;:19;26360:694;;;26418:13;26433:14;26452:4;26457:1;26452:7;;;;;;;;:::i;:::-;;;;;;;26461:4;26466:1;26470;26466:5;;;;:::i;:::-;26461:11;;;;;;;;:::i;:::-;;;;;;;26417:56;;;;26489:14;26509:32;26527:5;26534:6;26509:17;:32::i;:::-;-1:-1:-1;26488:53:0;-1:-1:-1;26556:17:0;26576:7;26584:5;:1;26588;26584:5;:::i;:::-;26576:14;;;;;;;;:::i;:::-;;;;;;;26556:34;;26606:18;26626;26657:6;-1:-1:-1;;;;;26648:15:0;:5;-1:-1:-1;;;;;26648:15:0;;:101;;26727:9;26746:1;26648:101;;;26692:1;26696:9;26648:101;26605:144;;;;26764:10;26795:1;26781:4;:11;:15;;;;:::i;:::-;26777:1;:19;:106;;26880:3;26777:106;;;26831:7;;26816:44;;-1:-1:-1;;;;;26831:7:0;26840:6;26848:4;26853:5;:1;26857;26853:5;:::i;:::-;26848:11;;;;;;;;:::i;26816:44::-;26919:7;;26764:119;;-1:-1:-1;26904:38:0;;-1:-1:-1;;;;;26919:7:0;26928:5;26935:6;26904:14;:38::i;:::-;26898:144;;-1:-1:-1;;;26898:144:0;;;;;20195:25:1;;;20236:18;;;20229:34;;;-1:-1:-1;;;;;20299:32:1;;;20279:18;;;20272:60;26898:50:0;;;;;;;20168:18:1;;26898:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26402:652;;;;;;;26397:3;;;;;:::i;:::-;;;;26360:694;;;;26230:831;;;:::o;5804:473::-;6050:45;;;-1:-1:-1;;;;;10969:32:1;;;6050:45:0;;;10951:51:1;11018:18;;;;11011:34;;;6050:45:0;;;;;;;;;;10924:18:1;;;;6050:45:0;;;;;;;-1:-1:-1;;;;;6050:45:0;-1:-1:-1;;;6050:45:0;;;6025:81;;-1:-1:-1;;;;6025:10:0;;;;:81;;6050:45;6025:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5989:117;;;;6139:7;:57;;;;-1:-1:-1;6151:11:0;;:16;;:44;;;6182:4;6171:24;;;;;;;;;;;;:::i;:::-;6117:152;;;;-1:-1:-1;;;6117:152:0;;17537:2:1;6117:152:0;;;17519:21:1;17576:2;17556:18;;;17549:30;17615:34;17595:18;;;17588:62;-1:-1:-1;;;17666:18:1;;;17659:43;17719:19;;6117:152:0;17335:409:1;6117:152:0;5911:366;;5804:473;;;:::o;6285:287::-;6409:12;;;6369;6409;;;;;;;;;-1:-1:-1;;;;;6387:7:0;;;6402:5;;6387:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6368:54;;;6455:7;6433:131;;;;-1:-1:-1;;;6433:131:0;;14427:2:1;6433:131:0;;;14409:21:1;14466:2;14446:18;;;14439:30;14505:34;14485:18;;;14478:62;14576:34;14556:18;;;14549:62;-1:-1:-1;;;14627:19:1;;;14620:41;14678:19;;6433:131:0;14225:478:1;6433:131:0;6357:215;6285:287;;:::o;22895:1614::-;23116:15;23174:7;;23165:41;;-1:-1:-1;;;23165:41:0;;-1:-1:-1;;;;;10318:15:1;;;23165:41:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;23116:15:0;;;;23174:7;;;23165:25;;10235:18:1;;23165:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23165:55:0;;23161:132;;;23246:7;;23237:44;;-1:-1:-1;;;23237:44:0;;-1:-1:-1;;;;;10318:15:1;;;23237:44:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;23246:7:0;;;;23237:28;;10235:18:1;;23237:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23161:132;23304:16;23375:7;;23304:16;;23342:93;;-1:-1:-1;;;;;23375:7:0;23397:6;23418;23342:18;:93::i;:::-;23303:132;;;;23450:8;23462:1;23450:13;:30;;;;-1:-1:-1;23467:13:0;;23450:30;23446:1056;;;23519:14;;-1:-1:-1;23535:14:0;;-1:-1:-1;23446:1056:0;;;23583:22;23608:114;23639:14;23672:8;23699;23608:12;:114::i;:::-;23583:139;;23759:14;23741;:32;23737:754;;23842:10;23824:14;:28;;23794:131;;;;-1:-1:-1;;;23794:131:0;;14069:2:1;23794:131:0;;;14051:21:1;14108:2;14088:18;;;14081:30;14147:31;14127:18;;;14120:59;14196:18;;23794:131:0;13867:353:1;23794:131:0;23966:14;;-1:-1:-1;23982:14:0;-1:-1:-1;23982:14:0;23737:754;;;24038:22;24063:130;24098:14;24135:8;24166;24063:12;:130::i;:::-;24038:155;;24238:14;24220;:32;;24212:41;;;;;;24320:10;24302:14;:28;;24272:131;;;;-1:-1:-1;;;24272:131:0;;16776:2:1;24272:131:0;;;16758:21:1;16815:2;16795:18;;;16788:30;16854:31;16834:18;;;16827:59;16903:18;;24272:131:0;16574:353:1;24272:131:0;24444:14;-1:-1:-1;24460:14:0;;-1:-1:-1;23737:754:0;23568:934;23446:1056;23150:1359;;22895:1614;;;;;;;;;:::o;3842:387::-;3944:14;3960;4010:6;-1:-1:-1;;;;;4000:16:0;:6;-1:-1:-1;;;;;4000:16:0;;;3992:56;;;;-1:-1:-1;;;3992:56:0;;16006:2:1;3992:56:0;;;15988:21:1;16045:2;16025:18;;;16018:30;16084:29;16064:18;;;16057:57;16131:18;;3992:56:0;15804:351:1;3992:56:0;4087:6;-1:-1:-1;;;;;4078:15:0;:6;-1:-1:-1;;;;;4078:15:0;;:79;;4142:6;4150;4078:79;;;4110:6;4118;4078:79;4059:98;;-1:-1:-1;4059:98:0;-1:-1:-1;;;;;;4176:20:0;;4168:53;;;;-1:-1:-1;;;4168:53:0;;14910:2:1;4168:53:0;;;14892:21:1;14949:2;14929:18;;;14922:30;-1:-1:-1;;;14968:18:1;;;14961:50;15028:18;;4168:53:0;14708:344:1;4168:53:0;3842:387;;;;;:::o;3550:151::-;3608:9;3638:6;;;:30;;-1:-1:-1;3667:1:0;3662;3653:5;3662:1;3667;3653:5;:::i;:::-;3649:9;-1:-1:-1;3648:15:0;;3649:9;3648:15;:::i;:::-;:20;3638:30;3630:63;;;;-1:-1:-1;;;3630:63:0;;12594:2:1;3630:63:0;;;12576:21:1;12633:2;12613:18;;;12606:30;-1:-1:-1;;;12652:18:1;;;12645:50;12712:18;;3630:63:0;12392:344:1;3259:137:0;3317:9;3362:1;3352:5;3356:1;3362;3352:5;:::i;:::-;3348:9;;;3347:16;;3339:49;;;;-1:-1:-1;;;3339:49:0;;13302:2:1;3339:49:0;;;13284:21:1;13341:2;13321:18;;;13314:30;-1:-1:-1;;;13360:18:1;;;13353:50;13420:18;;3339:49:0;13100:344:1;4788:478:0;4915:16;4933;4963:14;4983:26;4994:6;5002;4983:10;:26::i;:::-;4962:47;;;5021:16;5039;5079:32;5087:7;5096:6;5104;5079:7;:32::i;:::-;-1:-1:-1;;;;;5059:75:0;;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5020:116:0;;;-1:-1:-1;;;;;5020:116:0;;;5180:6;-1:-1:-1;;;;;5170:16:0;:6;-1:-1:-1;;;;;5170:16:0;;:88;;5239:8;5249;5170:88;;;5203:8;5213;5170:88;5147:111;;;;-1:-1:-1;4788:478:0;-1:-1:-1;;;;;;;4788:478:0:o;7404:541::-;7540:16;7589:1;7577:9;:13;7569:60;;;;-1:-1:-1;;;7569:60:0;;15603:2:1;7569:60:0;;;15585:21:1;15642:2;15622:18;;;15615:30;15681:34;15661:18;;;15654:62;-1:-1:-1;;;15732:18:1;;;15725:32;15774:19;;7569:60:0;15401:398:1;7569:60:0;7674:1;7662:9;:13;:31;;;;;7692:1;7679:10;:14;7662:31;7640:111;;;;-1:-1:-1;;;7640:111:0;;17951:2:1;7640:111:0;;;17933:21:1;17990:2;17970:18;;;17963:30;18029:32;18009:18;;;18002:60;18079:18;;7640:111:0;17749:354:1;7640:111:0;7762:17;7782:34;7811:4;7782:24;:9;7796;7782:13;:24::i;:::-;:28;;:34::i;:::-;7762:54;-1:-1:-1;7827:19:0;7849:34;7879:3;7849:25;:10;7864:9;7849:14;:25::i;:34::-;7827:56;-1:-1:-1;7905:32:0;7935:1;7906:23;7827:56;7906:9;:23;:::i;7905:32::-;7894:43;7404:541;-1:-1:-1;;;;;;7404:541:0:o;4449:331::-;4574:15;4620:1;4610:7;:11;4602:43;;;;-1:-1:-1;;;4602:43:0;;18659:2:1;4602:43:0;;;18641:21:1;18698:2;18678:18;;;18671:30;-1:-1:-1;;;18717:18:1;;;18710:49;18776:18;;4602:43:0;18457:343:1;4602:43:0;4675:1;4664:8;:12;:28;;;;;4691:1;4680:8;:12;4664:28;4656:63;;;;-1:-1:-1;;;4656:63:0;;19007:2:1;4656:63:0;;;18989:21:1;19046:2;19026:18;;;19019:30;-1:-1:-1;;;19065:18:1;;;19058:52;19127:18;;4656:63:0;18805:346:1;4656:63:0;4764:8;4740:21;:7;4752:8;4740:11;:21::i;:::-;:32;;;;:::i;3404:138::-;3462:9;3507:1;3497:5;3501:1;3507;3497:5;:::i;:::-;3493:9;;;3492:16;;3484:50;;;;-1:-1:-1;;;3484:50:0;;11895:2:1;3484:50:0;;;11877:21:1;11934:2;11914:18;;;11907:30;-1:-1:-1;;;11953:18:1;;;11946:51;12014:18;;3484:50:0;11693:345:1;14:134;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:55;;298:1;295;288:12;247:55;-1:-1:-1;321:20:1;;364:18;353:30;;350:50;;;396:1;393;386:12;350:50;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:67;;;510:1;507;500:12;525:919;579:5;632:3;625:4;617:6;613:17;609:27;599:55;;650:1;647;640:12;599:55;686:6;673:20;712:4;735:18;772:2;768;765:10;762:36;;;778:18;;:::i;:::-;824:2;821:1;817:10;856:2;850:9;919:2;915:7;910:2;906;902:11;898:25;890:6;886:38;974:6;962:10;959:22;954:2;942:10;939:18;936:46;933:72;;;985:18;;:::i;:::-;1021:2;1014:22;1071:18;;;1105:15;;;;-1:-1:-1;1140:15:1;;;1174;;;1170:24;;1167:33;-1:-1:-1;1164:53:1;;;1213:1;1210;1203:12;1164:53;1235:1;1226:10;;1245:169;1259:2;1256:1;1253:9;1245:169;;;1316:23;1335:3;1316:23;:::i;:::-;1304:36;;1360:12;;;;1277:1;1270:9;;;;;1392:12;;1245:169;;;-1:-1:-1;1432:6:1;525:919;-1:-1:-1;;;;;;;525:919:1:o;1449:188::-;1528:13;;-1:-1:-1;;;;;1570:42:1;;1560:53;;1550:81;;1627:1;1624;1617:12;1642:247;1701:6;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;1642:247;-1:-1:-1;;;1642:247:1:o;1894:251::-;1964:6;2017:2;2005:9;1996:7;1992:23;1988:32;1985:52;;;2033:1;2030;2023:12;1985:52;2065:9;2059:16;2084:31;2109:5;2084:31;:::i;2150:805::-;2263:6;2271;2279;2287;2295;2303;2311;2364:3;2352:9;2343:7;2339:23;2335:33;2332:53;;;2381:1;2378;2371:12;2332:53;2420:9;2407:23;2439:31;2464:5;2439:31;:::i;:::-;2489:5;-1:-1:-1;2546:2:1;2531:18;;2518:32;2559:33;2518:32;2559:33;:::i;:::-;2611:7;-1:-1:-1;2665:2:1;2650:18;;2637:32;;-1:-1:-1;2716:2:1;2701:18;;2688:32;;-1:-1:-1;2767:3:1;2752:19;;2739:33;;-1:-1:-1;2824:3:1;2809:19;;2796:33;2838;2796;2838;:::i;:::-;2890:7;2880:17;;;2944:3;2933:9;2929:19;2916:33;2906:43;;2150:805;;;;;;;;;;:::o;2960:874::-;3082:6;3090;3098;3106;3114;3122;3130;3138;3191:3;3179:9;3170:7;3166:23;3162:33;3159:53;;;3208:1;3205;3198:12;3159:53;3247:9;3234:23;3266:31;3291:5;3266:31;:::i;:::-;3316:5;-1:-1:-1;3373:2:1;3358:18;;3345:32;3386:33;3345:32;3386:33;:::i;:::-;3438:7;-1:-1:-1;3492:2:1;3477:18;;3464:32;;-1:-1:-1;3543:2:1;3528:18;;3515:32;;-1:-1:-1;3594:3:1;3579:19;;3566:33;;-1:-1:-1;3646:3:1;3631:19;;3618:33;;-1:-1:-1;3703:3:1;3688:19;;3675:33;3717;3675;3717;:::i;:::-;3769:7;3759:17;;;3823:3;3812:9;3808:19;3795:33;3785:43;;2960:874;;;;;;;;;;;:::o;3839:663::-;3943:6;3951;3959;3967;3975;3983;4036:3;4024:9;4015:7;4011:23;4007:33;4004:53;;;4053:1;4050;4043:12;4004:53;4092:9;4079:23;4111:31;4136:5;4111:31;:::i;:::-;4161:5;-1:-1:-1;4213:2:1;4198:18;;4185:32;;-1:-1:-1;4264:2:1;4249:18;;4236:32;;-1:-1:-1;4315:2:1;4300:18;;4287:32;;-1:-1:-1;4371:3:1;4356:19;;4343:33;4385;4343;4385;:::i;:::-;4437:7;4427:17;;;4491:3;4480:9;4476:19;4463:33;4453:43;;3839:663;;;;;;;;:::o;4507:916::-;4647:6;4655;4663;4671;4679;4687;4695;4703;4756:3;4744:9;4735:7;4731:23;4727:33;4724:53;;;4773:1;4770;4763:12;4724:53;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4917:70;4979:7;4970:6;4959:9;4955:22;4917:70;:::i;:::-;5006:8;;-1:-1:-1;4891:96:1;-1:-1:-1;;5088:2:1;5073:18;;5060:32;;-1:-1:-1;5139:2:1;5124:18;;5111:32;;-1:-1:-1;5190:2:1;5175:18;;5162:32;;-1:-1:-1;5241:3:1;5226:19;;5213:33;;-1:-1:-1;5296:3:1;5281:19;;5268:33;5310:31;5268:33;5310:31;:::i;:::-;5360:5;5350:15;;;5412:3;5401:9;5397:19;5384:33;5374:43;;4507:916;;;;;;;;;;;:::o;5428:758::-;5557:6;5565;5573;5581;5589;5597;5650:3;5638:9;5629:7;5625:23;5621:33;5618:53;;;5667:1;5664;5657:12;5618:53;5707:9;5694:23;5740:18;5732:6;5729:30;5726:50;;;5772:1;5769;5762:12;5726:50;5795:61;5848:7;5839:6;5828:9;5824:22;5795:61;:::i;:::-;5785:71;;;5903:2;5892:9;5888:18;5875:32;5865:42;;5954:2;5943:9;5939:18;5926:32;5916:42;;6005:2;5994:9;5990:18;5977:32;5967:42;;6059:3;6048:9;6044:19;6031:33;6073:31;6098:5;6073:31;:::i;6191:277::-;6258:6;6311:2;6299:9;6290:7;6286:23;6282:32;6279:52;;;6327:1;6324;6317:12;6279:52;6359:9;6353:16;6412:5;6405:13;6398:21;6391:5;6388:32;6378:60;;6434:1;6431;6424:12;6473:293;6552:6;6560;6613:2;6601:9;6592:7;6588:23;6584:32;6581:52;;;6629:1;6626;6619:12;6581:52;6652:40;6682:9;6652:40;:::i;:::-;6642:50;;6711:49;6756:2;6745:9;6741:18;6711:49;:::i;:::-;6701:59;;6473:293;;;;;:::o;6771:184::-;6841:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;-1:-1:-1;6933:16:1;;6771:184;-1:-1:-1;6771:184:1:o;6960:709::-;7073:6;7081;7089;7097;7105;7158:3;7146:9;7137:7;7133:23;7129:33;7126:53;;;7175:1;7172;7165:12;7126:53;7211:9;7198:23;7188:33;;7272:2;7261:9;7257:18;7244:32;7299:18;7291:6;7288:30;7285:50;;;7331:1;7328;7321:12;7285:50;7370:70;7432:7;7423:6;7412:9;7408:22;7370:70;:::i;:::-;7459:8;;-1:-1:-1;7344:96:1;-1:-1:-1;;7544:2:1;7529:18;;7516:32;7557:31;7516:32;7557:31;:::i;:::-;6960:709;;;;-1:-1:-1;6960:709:1;;7659:2;7644:18;7631:32;;6960:709;-1:-1:-1;;6960:709:1:o;7674:416::-;7767:6;7775;7828:2;7816:9;7807:7;7803:23;7799:32;7796:52;;;7844:1;7841;7834:12;7796:52;7880:9;7867:23;7857:33;;7941:2;7930:9;7926:18;7913:32;7968:18;7960:6;7957:30;7954:50;;;8000:1;7997;7990:12;7954:50;8023:61;8076:7;8067:6;8056:9;8052:22;8023:61;:::i;:::-;8013:71;;;7674:416;;;;;:::o;8095:245::-;8174:6;8182;8235:2;8223:9;8214:7;8210:23;8206:32;8203:52;;;8251:1;8248;8241:12;8203:52;-1:-1:-1;;8274:16:1;;8330:2;8315:18;;;8309:25;8274:16;;8309:25;;-1:-1:-1;8095:245:1:o;8345:778::-;8467:6;8475;8483;8491;8499;8507;8560:3;8548:9;8539:7;8535:23;8531:33;8528:53;;;8577:1;8574;8567:12;8528:53;8613:9;8600:23;8590:33;;8670:2;8659:9;8655:18;8642:32;8632:42;;8725:2;8714:9;8710:18;8697:32;8752:18;8744:6;8741:30;8738:50;;;8784:1;8781;8774:12;8738:50;8823:70;8885:7;8876:6;8865:9;8861:22;8823:70;:::i;:::-;8912:8;;-1:-1:-1;8797:96:1;-1:-1:-1;;8997:2:1;8982:18;;8969:32;9010:31;8969:32;9010:31;:::i;:::-;9060:5;9050:15;;;9112:3;9101:9;9097:19;9084:33;9074:43;;8345:778;;;;;;;;:::o;9128:316::-;9205:6;9213;9221;9274:2;9262:9;9253:7;9249:23;9245:32;9242:52;;;9290:1;9287;9280:12;9242:52;-1:-1:-1;;9313:23:1;;;9383:2;9368:18;;9355:32;;-1:-1:-1;9434:2:1;9419:18;;;9406:32;;9128:316;-1:-1:-1;9128:316:1:o;9449:426::-;9578:3;9616:6;9610:13;9641:1;9651:129;9665:6;9662:1;9659:13;9651:129;;;9763:4;9747:14;;;9743:25;;9737:32;9724:11;;;9717:53;9680:12;9651:129;;;9798:6;9795:1;9792:13;9789:48;;;9833:1;9824:6;9819:3;9815:16;9808:27;9789:48;-1:-1:-1;9853:16:1;;;;;9449:426;-1:-1:-1;;9449:426:1:o;11056:632::-;11227:2;11279:21;;;11349:13;;11252:18;;;11371:22;;;11198:4;;11227:2;11450:15;;;;11424:2;11409:18;;;11198:4;11493:169;11507:6;11504:1;11501:13;11493:169;;;11568:13;;11556:26;;11637:15;;;;11602:12;;;;11529:1;11522:9;11493:169;;;-1:-1:-1;11679:3:1;;11056:632;-1:-1:-1;;;;;;11056:632:1:o;12043:344::-;12245:2;12227:21;;;12284:2;12264:18;;;12257:30;-1:-1:-1;;;12318:2:1;12303:18;;12296:50;12378:2;12363:18;;12043:344::o;12741:354::-;12943:2;12925:21;;;12982:2;12962:18;;;12955:30;13021:32;13016:2;13001:18;;12994:60;13086:2;13071:18;;12741:354::o;15057:339::-;15259:2;15241:21;;;15298:2;15278:18;;;15271:30;-1:-1:-1;;;15332:2:1;15317:18;;15310:45;15387:2;15372:18;;15057:339::o;16932:398::-;17134:2;17116:21;;;17173:2;17153:18;;;17146:30;17212:34;17207:2;17192:18;;17185:62;-1:-1:-1;;;17278:2:1;17263:18;;17256:32;17320:3;17305:19;;16932:398::o;20667:128::-;20707:3;20738:1;20734:6;20731:1;20728:13;20725:39;;;20744:18;;:::i;:::-;-1:-1:-1;20780:9:1;;20667:128::o;20800:217::-;20840:1;20866;20856:132;;20910:10;20905:3;20901:20;20898:1;20891:31;20945:4;20942:1;20935:15;20973:4;20970:1;20963:15;20856:132;-1:-1:-1;21002:9:1;;20800:217::o;21022:168::-;21062:7;21128:1;21124;21120:6;21116:14;21113:1;21110:21;21105:1;21098:9;21091:17;21087:45;21084:71;;;21135:18;;:::i;:::-;-1:-1:-1;21175:9:1;;21022:168::o;21195:125::-;21235:4;21263:1;21260;21257:8;21254:34;;;21268:18;;:::i;:::-;-1:-1:-1;21305:9:1;;21195:125::o;21325:136::-;21364:3;21392:5;21382:39;;21401:18;;:::i;:::-;-1:-1:-1;;;21437:18:1;;21325:136::o;21466:135::-;21505:3;-1:-1:-1;;21526:17:1;;21523:43;;;21546:18;;:::i;:::-;-1:-1:-1;21593:1:1;21582:13;;21466:135::o;21606:127::-;21667:10;21662:3;21658:20;21655:1;21648:31;21698:4;21695:1;21688:15;21722:4;21719:1;21712:15;21738:127;21799:10;21794:3;21790:20;21787:1;21780:31;21830:4;21827:1;21820:15;21854:4;21851:1;21844:15;21870:127;21931:10;21926:3;21922:20;21919:1;21912:31;21962:4;21959:1;21952:15;21986:4;21983:1;21976:15;22002:131;-1:-1:-1;;;;;22077:31:1;;22067:42;;22057:70;;22123:1;22120;22113:12;22057:70;22002:131;:::o
Swarm Source
ipfs://8d0347b698ede02582681341f3d0731e07e8b75877604cdd90701fe46fb5519f
Loading...
Loading
Loading...
Loading
OVERVIEW
AMM Router contract of Zenlink.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.