Contract 0x16327e3fbdaca3bcf7e38f5af2599d2ddc33ae52 9

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0d98fe0bddc29784117e2e41ac321f7ea0fa2bdf72de84bf186ff4deae13b452Swap Exact Token...385944942022-05-19 15:50:1856 secs ago0xb59a5b19b70dc0fd704d0a94c7cb1c4bff1e2010 IN  SpiritSwap: Router0 FTM0.059413569225
0x7123e0ac095012bfd9d533337ab7bdd64a55ff7fe2d7f599fb91c740b1ecf488Swap Exact Token...385944822022-05-19 15:50:061 min ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.070659605317
0xb94f02758702054d359c6848691e1e11f3ed7a5d9910932db8d10ada3e16860fSwap Exact Token...385944762022-05-19 15:49:521 min ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.077966102898
0xeb7db8ed8d5dae6e8fc5b583064ce4d448a90ebac6f3dadbc25e5bba55420150Swap Exact Token...385944562022-05-19 15:49:321 min ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.075985326637
0x218b3d4cae6e4ba81d0f8dd069e5d33ce2e360cb34b3136ec501fc1ab760ba57Swap Exact ETH F...385944512022-05-19 15:49:271 min ago0x4d25ef2dcbd733a2868f8c3cfb409b2a4099a977 IN  SpiritSwap: Router7.737378879555577 FTM0.135783298894
0x387a336adb144be2be39e405ab01d463240b0532cd3ed5939f0e4a11f8d97e4bSwap Exact Token...385944392022-05-19 15:49:151 min ago0xbb34057609ca07d2ae71e96ad62809fd924c3e87 IN  SpiritSwap: Router0 FTM0.047475330204
0x0f30bb16c021ed985878eb46901b892e4b79c4381f83fce42c8f03beed1b7865Swap Exact Token...385944232022-05-19 15:48:532 mins ago0xfc75ff6b13d0a789373c15e323d79960b52eee51 IN  SpiritSwap: Router0 FTM0.113978880046
0x7fb23882024ae06cda4617719dc6d5c0546eebff90a08798b799309f0d2c78eaSwap Exact ETH F...385943852022-05-19 15:48:133 mins ago0x4d25ef2dcbd733a2868f8c3cfb409b2a4099a977 IN  SpiritSwap: Router5.190149170807756 FTM0.127739289211
0xa9b3b285072e630b1957dc7276e6e4c05e7d01fb819da8839554b829ab58ddd4Swap Tokens For ...385943522022-05-19 15:47:333 mins ago0x1e6857fffdd25e65bec6a2889aeb4c037f6e254f IN  SpiritSwap: Router0 FTM0.167456988862
0xf8d66d68548e1303150ff52ea6f56ffd03c7d0550c9af320922c923758bfc3a5Swap Exact Token...385943492022-05-19 15:47:303 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.072060635549
0x8667d943f9d1f2f4425852bfedc46e69a90424ecc2f69f3eefaca0a376f31da9Swap Exact Token...385943232022-05-19 15:47:044 mins ago0x4bc985a2d5b1eefc2c2bedb0bc3d4f29b9388964 IN  SpiritSwap: Router0 FTM0.120196164468
0x8b611cf27de20bbf335a78868f7b670394ee38ce353faa5ee57391fa596dcc16Swap Exact Token...385942932022-05-19 15:46:354 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.071841983388
0x2e12346e65e7dfa07a5f25387286743cc124fa35ff9aca7202204e6ec2774dd9Swap Exact Token...385942862022-05-19 15:46:284 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.071929748231
0xd6f64b0dd468117e0eab91069b65247eab2ee9a5fc36da950c65d70bdce6d593Swap Exact Token...385942742022-05-19 15:46:174 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.07201703494
0xf4b73d4edc631d1b9b24acedcf65bdeec58478ec7c003ae0a08973e105d0f7d9Swap Exact Token...385942622022-05-19 15:46:055 mins ago0xfc75ff6b13d0a789373c15e323d79960b52eee51 IN  SpiritSwap: Router0 FTM0.106232219659
0xf0987c17d0ca78e2479652f300166614586df8eaca7c28bacdd4c2f0c6c7d345Swap Exact Token...385942512022-05-19 15:45:555 mins ago0xc2e587dd6fc3658071afb190c7194223c3834153 IN  SpiritSwap: Router0 FTM0.046103313267
0xb8eddc569ea93a9416d3df7bb77dc964e5e5f74a440a775185bab8f3ff3e533cSwap Exact Token...385942452022-05-19 15:45:505 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.072399308377
0xb518fdbd9c5adcf150d32e7cbeaeb1a0d46586b33d9f57d8eb8f8d63256ee0baSwap Exact Token...385942442022-05-19 15:45:495 mins ago0x3b3f8478b194cae514c7c7a91dc9c25ddb98feb7 IN  SpiritSwap: Router0 FTM0.059521065538
0x6ca8962894a2d04e2a6950cca9a8c2b1c15f1cf1a736cbfb27e084fc23766ce5Swap Exact Token...385942182022-05-19 15:45:175 mins ago0xda28a4c963e020c5c03112ccbead24da90719a0f IN  SpiritSwap: Router0 FTM0.046739310389
0x65d215b6fec912ff1d54b43f424452239160a7ddc6a9afce21abdb43117fb54fSwap Exact Token...385941782022-05-19 15:44:416 mins ago0xcb582b8920dfb9570178ceef88a6e52cfc60923a IN  SpiritSwap: Router0 FTM0.08262178585
0xcf39da9141c58bc21d5a5e1eec42f6fa1b00360f9596394bc9b162056a7497deSwap Exact ETH F...385941632022-05-19 15:44:256 mins ago0xcf7dbd09bb3be557b1520b1836cab415528f28c8 IN  SpiritSwap: Router2.87194649769651 FTM0.143791244549
0x8ccb318f156e4283b3237964f1bf7843af69ffa27a62629134571b1305209f55Swap Exact Token...385941582022-05-19 15:44:216 mins ago0xfc75ff6b13d0a789373c15e323d79960b52eee51 IN  SpiritSwap: Router0 FTM0.106232219645
0x55ec5b3af040c5be0b18ee62683214ad8dfb64199dd0b23def905189fb5e0ddeAdd Liquidity ET...385941352022-05-19 15:43:597 mins ago0x67cdea7dc9ab7942e65738c640f5a4db12f18124 IN  SpiritSwap: Router1,644.677971362146145 FTM0.070245720645
0x7782553ad2c00ac00479a4932ac0c2ea878a58adb7997440306dacbc27ef0c7bSwap Exact Token...385941122022-05-19 15:43:387 mins ago0xf2360ee947b2ed41d31ec6c5fe30aa436438a090 IN  SpiritSwap: Router0 FTM0.0557210793
0x36e8fdd2d7a17257c9727950cc83dc836f17690a74f4e03b099350ace416dd17Swap Exact Token...385941102022-05-19 15:43:367 mins ago0xfc75ff6b13d0a789373c15e323d79960b52eee51 IN  SpiritSwap: Router0 FTM0.106232219638
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x218b3d4cae6e4ba81d0f8dd069e5d33ce2e360cb34b3136ec501fc1ab760ba57385944512022-05-19 15:49:271 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token7.737378879555577552 FTM
0x387a336adb144be2be39e405ab01d463240b0532cd3ed5939f0e4a11f8d97e4b385944392022-05-19 15:49:151 min ago SpiritSwap: Router0xbb34057609ca07d2ae71e96ad62809fd924c3e8747.861943278916354135 FTM
0x387a336adb144be2be39e405ab01d463240b0532cd3ed5939f0e4a11f8d97e4b385944392022-05-19 15:49:151 min ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router47.861943278916354135 FTM
0x7fb23882024ae06cda4617719dc6d5c0546eebff90a08798b799309f0d2c78ea385943852022-05-19 15:48:133 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token5.190149170807756973 FTM
0xa9b3b285072e630b1957dc7276e6e4c05e7d01fb819da8839554b829ab58ddd4385943522022-05-19 15:47:333 mins ago SpiritSwap: Router0x1e6857fffdd25e65bec6a2889aeb4c037f6e254f75.98318 FTM
0xa9b3b285072e630b1957dc7276e6e4c05e7d01fb819da8839554b829ab58ddd4385943522022-05-19 15:47:333 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router75.98318 FTM
0x8667d943f9d1f2f4425852bfedc46e69a90424ecc2f69f3eefaca0a376f31da9385943232022-05-19 15:47:044 mins ago SpiritSwap: Router0x4bc985a2d5b1eefc2c2bedb0bc3d4f29b938896410.013112549671382892 FTM
0x8667d943f9d1f2f4425852bfedc46e69a90424ecc2f69f3eefaca0a376f31da9385943232022-05-19 15:47:044 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router10.013112549671382892 FTM
0xf0987c17d0ca78e2479652f300166614586df8eaca7c28bacdd4c2f0c6c7d345385942512022-05-19 15:45:555 mins ago SpiritSwap: Router0xc2e587dd6fc3658071afb190c7194223c3834153390.411828789764790614 FTM
0xf0987c17d0ca78e2479652f300166614586df8eaca7c28bacdd4c2f0c6c7d345385942512022-05-19 15:45:555 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router390.411828789764790614 FTM
0x6ca8962894a2d04e2a6950cca9a8c2b1c15f1cf1a736cbfb27e084fc23766ce5385942182022-05-19 15:45:175 mins ago SpiritSwap: Router0xda28a4c963e020c5c03112ccbead24da90719a0f97.784808804671166961 FTM
0x6ca8962894a2d04e2a6950cca9a8c2b1c15f1cf1a736cbfb27e084fc23766ce5385942182022-05-19 15:45:175 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router97.784808804671166961 FTM
0xcf39da9141c58bc21d5a5e1eec42f6fa1b00360f9596394bc9b162056a7497de385941632022-05-19 15:44:256 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token2.871946497696510067 FTM
0x55ec5b3af040c5be0b18ee62683214ad8dfb64199dd0b23def905189fb5e0dde385941352022-05-19 15:43:597 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token1,644.677971362146145194 FTM
0x5f3d736eabf2c5fd089bdcf7f06ca6f307d922f38e0b18eaaa1260152ac8e3ec385940912022-05-19 15:43:177 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token99.765552829345629071 FTM
0x9e895c1095cb5b7baa5e8dbca9caabc06fc38c7328713812ec0ccc94e02047d5385940642022-05-19 15:42:528 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token0.007303645031067393 FTM
0x9e895c1095cb5b7baa5e8dbca9caabc06fc38c7328713812ec0ccc94e02047d5385940642022-05-19 15:42:528 mins ago EqualMoney: E4usd Token SpiritSwap: Router0.007303645031067393 FTM
0x9e895c1095cb5b7baa5e8dbca9caabc06fc38c7328713812ec0ccc94e02047d5385940642022-05-19 15:42:528 mins ago SpiritSwap: Router EqualMoney: E4usd Token0.007303645031067393 FTM
0x9e895c1095cb5b7baa5e8dbca9caabc06fc38c7328713812ec0ccc94e02047d5385940642022-05-19 15:42:528 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router0.007303645031067393 FTM
0x85c9e1a2ed887bb64132e2726bf74efec499a701edb7b3f5115f6a06daa3fa61385940642022-05-19 15:42:528 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token0.020519493636150287 FTM
0x85c9e1a2ed887bb64132e2726bf74efec499a701edb7b3f5115f6a06daa3fa61385940642022-05-19 15:42:528 mins ago EqualMoney: E4usd Token SpiritSwap: Router0.020519493636150287 FTM
0x85c9e1a2ed887bb64132e2726bf74efec499a701edb7b3f5115f6a06daa3fa61385940642022-05-19 15:42:528 mins ago SpiritSwap: Router EqualMoney: E4usd Token0.020519493636150287 FTM
0x85c9e1a2ed887bb64132e2726bf74efec499a701edb7b3f5115f6a06daa3fa61385940642022-05-19 15:42:528 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router0.020519493636150287 FTM
0x99c53263fe91490ef778d7004e0bd6ec5cd06831032ed09ecb668b90244fa69b385940642022-05-19 15:42:528 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token0.020519493636150287 FTM
0x99c53263fe91490ef778d7004e0bd6ec5cd06831032ed09ecb668b90244fa69b385940642022-05-19 15:42:528 mins ago EqualMoney: E4usd Token SpiritSwap: Router0.020519493636150287 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpiritRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-04-25
*/

/**
 *Submitted for verification at FtmScan.com on 2020-09-19
*/

pragma solidity =0.6.6;


interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;

    function locked() external view returns (bool);
    function setLocked(bool) external;
}

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

interface IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

library PancakeLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e242e798f6cee26a9cb0bbf24653bf066e5356ffeac160907fe2cc108e238617' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IPancakePair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'PancakeLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'PancakeLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'PancakeLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract SpiritRouter is IPancakeRouter02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'SpiritRouter: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IPancakeFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'SpiritRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'SpiritRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IPancakePair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IPancakePair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        IPancakePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IPancakePair(pair).burn(to);
        (address token0,) = PancakeLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'SpiritRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'SpiritRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = PancakeLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = PancakeLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IPancakePair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = PancakeLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IPancakePair(PancakeLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'SpiritRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[0] == WETH, 'SpiritRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[path.length - 1] == WETH, 'SpiritRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'SpiritRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[path.length - 1] == WETH, 'SpiritRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[0] == WETH, 'SpiritRouter: INVALID_PATH');
        amounts = PancakeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'SpiritRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = PancakeLibrary.sortTokens(input, output);
            IPancakePair pair = IPancakePair(PancakeLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = PancakeLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? PancakeLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[0] == WETH, 'SpiritRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(!IPancakeFactory(factory).locked(), 'SpiritRouter: Permission Denied');
        require(path[path.length - 1] == WETH, 'SpiritRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'SpiritRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return PancakeLibrary.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return PancakeLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return PancakeLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return PancakeLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return PancakeLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405162004e9838038062004e988339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614ce6620001b26000398061015f5280610ce45280610d1f5280610edb52806110f9528061160d52806117735280611cc45280611dbe5280611e745280612007528061214d52806121d552806124df528061255a5280612609528061279a528061282f52806128a35280612da15280613014528061306a528061309e5280613112528061337752806134ba5280613542525080610e0e5280610f69528061104052806111bf52806111f8528061133052806113f85280611540528061169b5280611751528061189d52806119865280611bf75280611f42528061209a52806122075280612367528061242f52806126d552806128d55280612b2e5280612d265280612d4f5280612d7f5280612eec528061304852806132b2528061340a52806135745280613e1b5280613e5e528061414152806142c052806146f0528061479e528061481e5250614ce66000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111b8945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111ee565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b0381351690602001356112e8565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b0381351690602001356114f8565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611749565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611857565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611bb1565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611efa565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135612312565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b03813516906020013561231f565b34801561088157600080fd5b5061088a6124dd565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135612501565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561250e565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561268f565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ae0565b348015610a1c57600080fd5b5061088a612d24565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612d48945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612d75565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612e89565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612fc5565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b03813516906020013561326a565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612ae0565b9093509150610d1d8986856136b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361381b565b50965096945050505050565b6000610dbe848484613913565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b505115610ed1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610f0b57fe5b905060200201356001600160a01b03166001600160a01b031614610f64576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b610fc27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b91508682600184510381518110610fd557fe5b6020026020010151101561101a5760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b6110b88686600081811061102a57fe5b905060200201356001600160a01b03163361109e7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061106c57fe5b905060200201356001600160a01b03168b8b600181811061108957fe5b905060200201356001600160a01b0316613b4f565b856000815181106110ab57fe5b6020026020010151613c0f565b6110f782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613d6c915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061113657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050506111ad84836001855103815181106111a057fe5b602002602001015161381b565b509695505050505050565b60606111e57f00000000000000000000000000000000000000000000000000000000000000008484613fb2565b90505b92915050565b600080600061121e7f00000000000000000000000000000000000000000000000000000000000000008f8f613b4f565b905060008761122d578c611231565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506112ce8f8f8f8f8f8f8f612ae0565b809450819550505050509b509b9950505050505050505050565b6060814281101561132e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561138757600080fd5b505afa15801561139b573d6000803e3d6000fd5b505050506040513d60208110156113b157600080fd5b5051156113f3576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6114517f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b9150868260018451038151811061146457fe5b602002602001015110156114a95760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b6114b98686600081811061102a57fe5b6111ad82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b6060814281101561153e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d60208110156115c157600080fd5b505115611603576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061163d57fe5b905060200201356001600160a01b03166001600160a01b031614611696576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6116f47f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150868260008151811061170457fe5b6020026020010151111561101a5760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b6000806117977f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b90506000866117a6578b6117aa565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b505050506118468d8d8d8d8d8d61250e565b9d9c50505050505050505050505050565b804281101561189b576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b505115611960576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6119d58585600081811061197057fe5b905060200201356001600160a01b0316336119cf7f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b905060200201356001600160a01b03168a8a600181811061108957fe5b8a613c0f565b6000858560001981018181106119e757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d6020811015611a7657600080fd5b50516040805160208881028281018201909352888252929350611ab89290918991899182918501908490808284376000920191909152508892506140ea915050565b86611b6a8288886000198101818110611acd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b505afa158015611b46573d6000803e3d6000fd5b505050506040513d6020811015611b5c57600080fd5b50519063ffffffff6143f516565b1015611ba75760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b5050505050505050565b8042811015611bf5576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4e57600080fd5b505afa158015611c62573d6000803e3d6000fd5b505050506040513d6020811015611c7857600080fd5b505115611cba576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611cf457fe5b905060200201356001600160a01b03166001600160a01b031614611d4d576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b611d5d8585600081811061197057fe5b611d9b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506140ea915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611e0557600080fd5b505afa158015611e19573d6000803e3d6000fd5b505050506040513d6020811015611e2f57600080fd5b5051905086811015611e725760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ed857600080fd5b505af1158015611eec573d6000803e3d6000fd5b50505050611ba7848261381b565b60608142811015611f40576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b505115612005576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061203c57fe5b905060200201356001600160a01b03166001600160a01b031614612095576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6120f37f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b9150868260018451038151811061210657fe5b6020026020010151101561214b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061218757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122337f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b8460008151811061224057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561229757600080fd5b505af11580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50516122c957fe5b61230882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b5095945050505050565b6000610dbe848484614445565b60608142811015612365576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b1580156123be57600080fd5b505afa1580156123d2573d6000803e3d6000fd5b505050506040513d60208110156123e857600080fd5b50511561242a576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6124887f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150868260008151811061249857fe5b602002602001015111156114a95760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484614535565b60008142811015612554576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b612583887f00000000000000000000000000000000000000000000000000000000000000008989893089612ae0565b604080516370a0823160e01b8152306004820152905191945061260792508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156125d657600080fd5b505afa1580156125ea573d6000803e3d6000fd5b505050506040513d602081101561260057600080fd5b50516136b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561266d57600080fd5b505af1158015612681573d6000803e3d6000fd5b505050506111ad848361381b565b80428110156126d3576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561272c57600080fd5b505afa158015612740573d6000803e3d6000fd5b505050506040513d602081101561275657600080fd5b505115612798576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106127cf57fe5b905060200201356001600160a01b03166001600160a01b031614612828576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561288857600080fd5b505af115801561289c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129017f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561295157600080fd5b505af1158015612965573d6000803e3d6000fd5b505050506040513d602081101561297b57600080fd5b505161298357fe5b60008686600019810181811061299557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156129fa57600080fd5b505afa158015612a0e573d6000803e3d6000fd5b505050506040513d6020811015612a2457600080fd5b50516040805160208981028281018201909352898252929350612a669290918a918a9182918501908490808284376000920191909152508992506140ea915050565b87611b6a8289896000198101818110612a7b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b6000808242811015612b27576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b6000612b547f00000000000000000000000000000000000000000000000000000000000000008c8c613b4f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b505050506040513d6020811015612bd957600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b505050506040513d6040811015612c5057600080fd5b50805160209091015190925090506000612c6a8e8e6145e1565b509050806001600160a01b03168e6001600160a01b031614612c8d578183612c90565b82825b90975095508a871015612cd45760405162461bcd60e51b8152600401808060200182810382526023815260200180614bde6023913960400191505060405180910390fd5b89861015612d135760405162461bcd60e51b8152600401808060200182810382526023815260200180614b4c6023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111e57f00000000000000000000000000000000000000000000000000000000000000008484613a03565b6000806000612dc57f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b9050600087612dd4578c612dd8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b50505050612e748e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612ed2576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b612ee08c8c8c8c8c8c6146bf565b90945092506000612f127f00000000000000000000000000000000000000000000000000000000000000008e8e613b4f565b9050612f208d338388613c0f565b612f2c8c338387613c0f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612f8457600080fd5b505af1158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561300e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b61303c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6146bf565b9094509250600061308e7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b905061309c8b338388613c0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130f757600080fd5b505af115801561310b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b505050506040513d60208110156131ba57600080fd5b50516131c257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561321a57600080fd5b505af115801561322e573d6000803e3d6000fd5b505050506040513d602081101561324457600080fd5b505192503484101561325c5761325c3385340361381b565b505096509650969350505050565b606081428110156132b0576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506040513d602081101561333357600080fd5b505115613375576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106133ac57fe5b905060200201356001600160a01b03166001600160a01b031614613405576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6134637f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150348260008151811061347357fe5b602002602001015111156134b85760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106134f457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561352757600080fd5b505af115801561353b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6135a07f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b846000815181106135ad57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561360457600080fd5b505af1158015613618573d6000803e3d6000fd5b505050506040513d602081101561362e57600080fd5b505161363657fe5b61367582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b8160008151811061368257fe5b60200260200101513411156123085761230833836000815181106136a257fe5b6020026020010151340361381b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061372e5780518252601f19909201916020918201910161370f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613790576040519150601f19603f3d011682016040523d82523d6000602084013e613795565b606091505b50915091508180156137c35750805115806137c357508080602001905160208110156137c057600080fd5b50515b613814576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106138675780518252601f199092019160209182019101613848565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146138c9576040519150601f19603f3d011682016040523d82523d6000602084013e6138ce565b606091505b505090508061390e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614c446023913960400191505060405180910390fd5b505050565b60008084116139535760405162461bcd60e51b8152600401808060200182810382526029815260200180614ab96029913960400191505060405180910390fd5b6000831180156139635750600082115b61399e5760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b60006139b2856103e563ffffffff61493316565b905060006139c6828563ffffffff61493316565b905060006139ec836139e0886103e863ffffffff61493316565b9063ffffffff61499616565b90508082816139f757fe5b04979650505050505050565b6060600282511015613a5c576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613a7457600080fd5b50604051908082528060200260200182016040528015613a9e578160200160208202803683370190505b5090508281600081518110613aaf57fe5b60200260200101818152505060005b6001835103811015613b4757600080613b0187868581518110613add57fe5b6020026020010151878660010181518110613af457fe5b60200260200101516149e5565b91509150613b23848481518110613b1457fe5b60200260200101518383613913565b848460010181518110613b3257fe5b60209081029190910101525050600101613abe565b509392505050565b6000806000613b5e85856145e1565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe242e798f6cee26a9cb0bbf24653bf066e5356ffeac160907fe2cc108e238617609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613c945780518252601f199092019160209182019101613c75565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cf6576040519150601f19603f3d011682016040523d82523d6000602084013e613cfb565b606091505b5091509150818015613d29575080511580613d295750808060200190516020811015613d2657600080fd5b50515b613d645760405162461bcd60e51b8152600401808060200182810382526024815260200180614c8d6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613fac57600080848381518110613d8a57fe5b6020026020010151858460010181518110613da157fe5b6020026020010151915091506000613db983836145e1565b5090506000878560010181518110613dcd57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613dfb57826000613dff565b6000835b91509150600060028a51038810613e165788613e57565b613e577f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613e4a57fe5b6020026020010151613b4f565b9050613e847f00000000000000000000000000000000000000000000000000000000000000008888613b4f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ec1576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613f32578181015183820152602001613f1a565b50505050905090810190601f168015613f5f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f8157600080fd5b505af1158015613f95573d6000803e3d6000fd5b505060019099019850613d6f975050505050505050565b50505050565b606060028251101561400b576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561402357600080fd5b5060405190808252806020026020018201604052801561404d578160200160208202803683370190505b509050828160018351038151811061406157fe5b60209081029190910101528151600019015b8015613b47576000806140a38786600186038151811061408f57fe5b6020026020010151878681518110613af457fe5b915091506140c58484815181106140b657fe5b60200260200101518383614445565b8460018503815181106140d457fe5b6020908102919091010152505060001901614073565b60005b600183510381101561390e5760008084838151811061410857fe5b602002602001015185846001018151811061411f57fe5b602002602001015191509150600061413783836145e1565b50905060006141677f00000000000000000000000000000000000000000000000000000000000000008585613b4f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156141a857600080fd5b505afa1580156141bc573d6000803e3d6000fd5b505050506040513d60608110156141d257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a81169089161461420857828461420b565b83835b91509150614269828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b9550614276868383613913565b945050505050600080856001600160a01b0316886001600160a01b0316146142a0578260006142a4565b6000835b91509150600060028c51038a106142bb578a6142ef565b6142ef7f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613e4a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614379578181015183820152602001614361565b50505050905090810190601f1680156143a65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143c857600080fd5b505af11580156143dc573d6000803e3d6000fd5b50506001909b019a506140ed9950505050505050505050565b808203828111156111e8576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116144855760405162461bcd60e51b815260040180806020018281038252602a815260200180614ae2602a913960400191505060405180910390fd5b6000831180156144955750600082115b6144d05760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b60006144f46103e86144e8868863ffffffff61493316565b9063ffffffff61493316565b9050600061450e6103e56144e8868963ffffffff6143f516565b905061452b600182848161451e57fe5b049063ffffffff61499616565b9695505050505050565b60008084116145755760405162461bcd60e51b8152600401808060200182810382526023815260200180614c216023913960400191505060405180910390fd5b6000831180156145855750600082115b6145c05760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b826145d1858463ffffffff61493316565b816145d857fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156146355760405162461bcd60e51b8152600401808060200182810382526023815260200180614b6f6023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614655578284614658565b83835b90925090506001600160a01b0382166146b8576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561473957600080fd5b505afa15801561474d573d6000803e3d6000fd5b505050506040513d602081101561476357600080fd5b50516001600160a01b0316141561481657604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156147e957600080fd5b505af11580156147fd573d6000803e3d6000fd5b505050506040513d602081101561481357600080fd5b50505b6000806148447f00000000000000000000000000000000000000000000000000000000000000008b8b6149e5565b91509150816000148015614856575080155b1561486657879350869250614926565b6000614873898484614535565b90508781116148c657858110156148bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180614b4c6023913960400191505060405180910390fd5b889450925082614924565b60006148d3898486614535565b9050898111156148df57fe5b8781101561491e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614bde6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061494e5750508082028282828161494b57fe5b04145b6111e8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156111e8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006149f485856145e1565b509050614a02868686613b4f565b50600080614a11888888613b4f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614a4957600080fd5b505afa158015614a5d573d6000803e3d6000fd5b505050506040513d6060811015614a7357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614aa6578082614aa9565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54537069726974526f757465723a20455850495245440000000000000000000000537069726974526f757465723a20494e56414c49445f50415448000000000000537069726974526f757465723a20494e53554646494349454e545f425f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f414444524553534553537069726974526f757465723a204558434553534956455f494e5055545f414d4f554e54537069726974526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537069726974526f757465723a20494e53554646494349454e545f415f414d4f554e54537069726974526f757465723a205065726d697373696f6e2044656e6965640050616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212208d64c255186fe1daa3037b737254d8578dcec7cf7bd0dcfeea1249bfb7c5c30c64736f6c63430006060033000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Decoded View---------------
Arg [0] : _factory (address): 0xef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : _WETH (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83


Deployed ByteCode Sourcemap

15610:19185:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16082:10;-1:-1:-1;;;;;16096:4:0;16082:18;;16075:26;;;;15610:19185;;12:1:-1;9;2:12;20194:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20194:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20194:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33747:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33747:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33747:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27665:929;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27665:929:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27665:929:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27665:929:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27665:929:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27665:929:0;;-1:-1:-1;27665:929:0;-1:-1:-1;;;;;;27665:929:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27665:929:0;;;;;;;;;;;;;;;;;34541:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34541:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34541:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34541:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34541:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34541:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34541:251:0;;-1:-1:-1;34541:251:0;;-1:-1:-1;;;;;34541:251:0:i;20873:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20873:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20873:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24560:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24560:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24560:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24560:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24560:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24560:710:0;;-1:-1:-1;24560:710:0;-1:-1:-1;;;;;;24560:710:0;;;;;;;;:::i;26752:907::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26752:907:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26752:907:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26752:907:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26752:907:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26752:907:0;;-1:-1:-1;26752:907:0;-1:-1:-1;;;;;;26752:907:0;;;;;;;;:::i;23002:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23002:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23002:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30844:798::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30844:798:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30844:798:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30844:798:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30844:798:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30844:798:0;;-1:-1:-1;30844:798:0;-1:-1:-1;;;;;;30844:798:0;;;;;;;;:::i;32585:924::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32585:924:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32585:924:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32585:924:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32585:924:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32585:924:0;;-1:-1:-1;32585:924:0;-1:-1:-1;;;;;;32585:924:0;;;;;;;;:::i;25970:776::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25970:776:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25970:776:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25970:776:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25970:776:0;;-1:-1:-1;25970:776:0;-1:-1:-1;;;;;;25970:776:0;;;;;;;;:::i;34015:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34015:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34015:259:0;;;;;;;;;;;;:::i;25276:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25276:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25276:688:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25276:688:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25276:688:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25276:688:0;;-1:-1:-1;25276:688:0;-1:-1:-1;;;;;;25276:688:0;;;;;;;;:::i;15739:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15739:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15739:38:0;;;;;;;;;;;;;;33553:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33553:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33553:186:0;;;;;;;;;;;;:::i;22296:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22296:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22296:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31648:931::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31648:931:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31648:931:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31648:931:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31648:931:0;;-1:-1:-1;31648:931:0;-1:-1:-1;;;;;;31648:931:0;;;;;;;;:::i;19337:851::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19337:851:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19337:851:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15691:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15691:41:0;;;:::i;34282:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34282:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34282:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34282:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34282:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34282:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34282:251:0;;-1:-1:-1;34282:251:0;;-1:-1:-1;;;;;34282:251:0:i;21552:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21552:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21552:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17584:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17584:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17584:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18324:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28600:889::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28600:889:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28600:889:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28600:889:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28600:889:0;;-1:-1:-1;28600:889:0;-1:-1:-1;;;;;;28600:889:0;;;;;;;;:::i;20194:673::-;20431:16;20449:14;20412:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;20503:196:::1;20533:5;20553:4;20572:9;20596:14;20625:12;20660:4;20680:8;20503:15;:196::i;:::-;20476:223:::0;;-1:-1:-1;20476:223:0;-1:-1:-1;20710:51:0::1;20738:5:::0;20745:2;20476:223;20710:27:::1;:51::i;:::-;20778:4;-1:-1:-1::0;;;;;20772:20:0::1;;20793:9;20772:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20772:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20772:31:0;;;;20814:45;20845:2;20849:9;20814:30;:45::i;:::-;20194:673:::0;;;;;;;;;;:::o;33747:260::-;33900:14;33939:60;33967:8;33977:9;33988:10;33939:27;:60::i;:::-;33932:67;33747:260;-1:-1:-1;;;;33747:260:0:o;27665:929::-;27879:21;27851:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;27943:7:::1;-1:-1:-1::0;;;;;27927:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27927:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27927:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27927:33:0;27926:34:::1;27918:78;;;::::0;;-1:-1:-1;;;27918:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27918:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;28040:4:0::1;28015:29;:4:::0;;-1:-1:-1;;28020:15:0;;28015:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28015:21:0::1;-1:-1:-1::0;;;;;28015:29:0::1;;28007:68;;;::::0;;-1:-1:-1;;;28007:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28007:68:0;;;;;;;;;;;;;::::1;;28096:53;28125:7;28134:8;28144:4;;28096:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28096:28:0::1;::::0;-1:-1:-1;;;28096:53:0:i:1;:::-;28086:63;;28199:12;28168:7;28193:1;28176:7;:14;:18;28168:27;;;;;;;;;;;;;;:43;;28160:96;;;;-1:-1:-1::0;;;28160:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28267:139;28313:4;;28318:1;28313:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28313:7:0::1;28322:10;28334:49;28357:7;28366:4;;28371:1;28366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28366:7:0::1;28375:4;;28380:1;28375:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28375:7:0::1;28334:22;:49::i;:::-;28385:7;28393:1;28385:10;;;;;;;;;;;;;;28267:31;:139::i;:::-;28417:35;28423:7;28432:4;;28417:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28446:4:0::1;::::0;-1:-1:-1;28417:5:0::1;::::0;-1:-1:-1;;28417:35:0:i:1;:::-;28469:4;-1:-1:-1::0;;;;;28463:20:0::1;;28484:7;28509:1;28492:7;:14;:18;28484:27;;;;;;;;;;;;;;28463:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28463:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28463:49:0;;;;28523:63;28554:2;28558:7;28583:1;28566:7;:14;:18;28558:27;;;;;;;;;;;;;;28523:30;:63::i;:::-;27665:929:::0;;;;;;;;;:::o;34541:251::-;34685:21;34731:53;34759:7;34768:9;34779:4;34731:27;:53::i;:::-;34724:60;;34541:251;;;;;:::o;20873:673::-;21179:12;21193;21218;21233:47;21256:7;21265:6;21273;21233:22;:47::i;:::-;21218:62;;21291:10;21304;:33;;21328:9;21304:33;;;-1:-1:-1;;21304:33:0;21348:78;;;-1:-1:-1;;;21348:78:0;;21374:10;21348:78;;;;21394:4;21348:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21291:46;;-1:-1:-1;;;;;;21348:25:0;;;;;:78;;;;;-1:-1:-1;;21348:78:0;;;;;;;;-1:-1:-1;21348:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21348:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21348:78:0;;;;21458:80;21474:6;21482;21490:9;21501:10;21513;21525:2;21529:8;21458:15;:80::i;:::-;21437:101;;;;;;;;20873:673;;;;;;;;;;;;;;;;:::o;24560:710::-;24784:21;24765:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;24843:7:::1;-1:-1:-1::0;;;;;24827:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24827:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24827:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24827:33:0;24826:34:::1;24818:78;;;::::0;;-1:-1:-1;;;24818:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24818:78:0;;;;;;;;;;;;;::::1;;24917:53;24946:7;24955:8;24965:4;;24917:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24917:28:0::1;::::0;-1:-1:-1;;;24917:53:0:i:1;:::-;24907:63;;25020:12;24989:7;25014:1;24997:7;:14;:18;24989:27;;;;;;;;;;;;;;:43;;24981:96;;;;-1:-1:-1::0;;;24981:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25088:139;25134:4;;25139:1;25134:7;;;;;;25088:139;25238:24;25244:7;25253:4;;25238:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25259:2:0;;-1:-1:-1;25238:5:0::1;::::0;-1:-1:-1;;25238:24:0:i:1;26752:907::-:0;26966:21;26938:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;27030:7:::1;-1:-1:-1::0;;;;;27014:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27014:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27014:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27014:33:0;27013:34:::1;27005:78;;;::::0;;-1:-1:-1;;;27005:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27005:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27127:4:0::1;27102:29;:4:::0;;-1:-1:-1;;27107:15:0;;27102:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27102:21:0::1;-1:-1:-1::0;;;;;27102:29:0::1;;27094:68;;;::::0;;-1:-1:-1;;;27094:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27094:68:0;;;;;;;;;;;;;::::1;;27183:53;27211:7;27220:9;27231:4;;27183:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27183:27:0::1;::::0;-1:-1:-1;;;27183:53:0:i:1;:::-;27173:63;;27269:11;27255:7;27263:1;27255:10;;;;;;;;;;;;;;:25;;27247:74;;;;-1:-1:-1::0;;;27247:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23002:714:::0;23320:14;23347:12;23362:44;23385:7;23394:5;23401:4;23362:22;:44::i;:::-;23347:59;;23417:10;23430;:33;;23454:9;23430:33;;;-1:-1:-1;;23430:33:0;23474:78;;;-1:-1:-1;;;23474:78:0;;23500:10;23474:78;;;;23520:4;23474:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23417:46;;-1:-1:-1;;;;;;23474:25:0;;;;;:78;;;;;-1:-1:-1;;23474:78:0;;;;;;;;-1:-1:-1;23474:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23474:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23474:78:0;;;;23575:133;23637:5;23644:9;23655:14;23671:12;23685:2;23689:8;23575:47;:133::i;:::-;23563:145;23002:714;-1:-1:-1;;;;;;;;;;;;;23002:714:0:o;30844:798::-;31078:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;31124:7:::1;-1:-1:-1::0;;;;;31108:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31108:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31108:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31108:33:0;31107:34:::1;31099:78;;;::::0;;-1:-1:-1;;;31099:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31099:78:0;;;;;;;;;;;;;::::1;;31188:137;31234:4;;31239:1;31234:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31234:7:0::1;31243:10;31255:49;31278:7;31287:4;;31292:1;31287:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31287:7:0::1;31296:4;;31301:1;31296:7;;;;;;31255:49;31306:8;31188:31;:137::i;:::-;31336:18;31364:4:::0;;-1:-1:-1;;31369:15:0;;31364:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31364:21:0::1;-1:-1:-1::0;;;;;31357:39:0::1;;31397:2;31357:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31357:43:0::1;-1:-1:-1::0;;;;;31357:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31357:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31357:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31357:43:0;31411:44:::1;::::0;;31357:43:::1;31411:44:::0;;::::1;::::0;;;;;;;;;;;31357:43;;-1:-1:-1;31411:44:0::1;::::0;;;31446:4;;;;;;31411:44;::::1;::::0;31446:4;;31411:44;31446:4;31411:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31452:2:0;;-1:-1:-1;31411:34:0::1;::::0;-1:-1:-1;;31411:44:0:i:1;:::-;31554:12:::0;31488:62:::1;31536:13:::0;31495:4;;-1:-1:-1;;31500:15:0;;31495:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31495:21:0::1;-1:-1:-1::0;;;;;31488:39:0::1;;31528:2;31488:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31488:43:0::1;-1:-1:-1::0;;;;;31488:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31488:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31488:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31488:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31466:168;;;;-1:-1:-1::0;;;31466:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:1;30844:798:::0;;;;;;;:::o;32585:924::-;32852:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;32903:7:::1;-1:-1:-1::0;;;;;32887:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32887:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32887:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32887:33:0;32886:34:::1;32878:78;;;::::0;;-1:-1:-1;;;32878:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32878:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33000:4:0::1;32975:29;:4:::0;;-1:-1:-1;;32980:15:0;;32975:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32975:21:0::1;-1:-1:-1::0;;;;;32975:29:0::1;;32967:68;;;::::0;;-1:-1:-1;;;32967:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32967:68:0;;;;;;;;;;;;;::::1;;33046:137;33092:4;;33097:1;33092:7;;;;;;33046:137;33194:55;33229:4;;33194:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33243:4:0::1;::::0;-1:-1:-1;33194:34:0::1;::::0;-1:-1:-1;;33194:55:0:i:1;:::-;33277:37;::::0;;-1:-1:-1;;;33277:37:0;;33308:4:::1;33277:37;::::0;::::1;::::0;;;33260:14:::1;::::0;-1:-1:-1;;;;;33284:4:0::1;33277:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33277:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33277:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33277:37:0;;-1:-1:-1;33333:25:0;;::::1;;33325:78;;;;-1:-1:-1::0;;;33325:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33420:4;-1:-1:-1::0;;;;;33414:20:0::1;;33435:9;33414:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33414:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33414:31:0;;;;33456:45;33487:2;33491:9;33456:30;:45::i;25970:776::-:0;26186:21;26158:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;26250:7:::1;-1:-1:-1::0;;;;;26234:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26234:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26234:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26234:33:0;26233:34:::1;26225:78;;;::::0;;-1:-1:-1;;;26225:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26225:78:0;;;;;;;;;;;;;::::1;;26333:4;-1:-1:-1::0;;;;;26322:15:0::1;:4;;26327:1;26322:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26322:7:0::1;-1:-1:-1::0;;;;;26322:15:0::1;;26314:54;;;::::0;;-1:-1:-1;;;26314:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26314:54:0;;;;;;;;;;;;;::::1;;26389;26418:7;26427:9;26438:4;;26389:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26389:28:0::1;::::0;-1:-1:-1;;;26389:54:0:i:1;:::-;26379:64;;26493:12;26462:7;26487:1;26470:7;:14;:18;26462:27;;;;;;;;;;;;;;:43;;26454:96;;;;-1:-1:-1::0;;;26454:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26567:4;-1:-1:-1::0;;;;;26561:19:0::1;;26588:7;26596:1;26588:10;;;;;;;;;;;;;;26561:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26561:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26561:40:0;;;;;26625:4;-1:-1:-1::0;;;;;26619:20:0::1;;26640:49;26663:7;26672:4;;26677:1;26672:7;;;;;;26640:49;26691:7;26699:1;26691:10;;;;;;;;;;;;;;26619:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26619:83:0::1;-1:-1:-1::0;;;;;26619:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26619:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26619:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26619:83:0;26612:91:::1;;;;26714:24;26720:7;26729:4;;26714:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26735:2:0;;-1:-1:-1;26714:5:0::1;::::0;-1:-1:-1;;26714:24:0:i:1;:::-;25970:776:::0;;;;;;;;:::o;34015:259::-;34168:13;34206:60;34233:9;34244;34255:10;34206:26;:60::i;25276:688::-;25500:21;25481:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;25559:7:::1;-1:-1:-1::0;;;;;25543:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25543:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25543:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25543:33:0;25542:34:::1;25534:78;;;::::0;;-1:-1:-1;;;25534:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25534:78:0;;;;;;;;;;;;;::::1;;25633:53;25661:7;25670:9;25681:4;;25633:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25633:27:0::1;::::0;-1:-1:-1;;;25633:53:0:i:1;:::-;25623:63;;25719:11;25705:7;25713:1;25705:10;;;;;;;;;;;;;;:25;;25697:74;;;;-1:-1:-1::0;;;25697:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15739:38:::0;;;:::o;33553:186::-;33650:12;33682:49;33703:7;33712:8;33722;33682:20;:49::i;22296:700::-;22562:14;22543:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;22605:196:::1;22635:5;22655:4;22674:9;22698:14;22727:12;22762:4;22782:8;22605:15;:196::i;:::-;22851:38;::::0;;-1:-1:-1;;;22851:38:0;;22883:4:::1;22851:38;::::0;::::1;::::0;;;22589:212;;-1:-1:-1;22812:78:0::1;::::0;-1:-1:-1;22840:5:0;;22847:2;;-1:-1:-1;;;;;22851:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22851:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22851:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22851:38:0;22812:27:::1;:78::i;:::-;22907:4;-1:-1:-1::0;;;;;22901:20:0::1;;22922:9;22901:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22901:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22901:31:0;;;;22943:45;22974:2;22978:9;22943:30;:45::i;31648:931::-:0;31908:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;31959:7:::1;-1:-1:-1::0;;;;;31943:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31943:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31943:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31943:33:0;31942:34:::1;31934:78;;;::::0;;-1:-1:-1;;;31934:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31934:78:0;;;;;;;;;;;;;::::1;;32042:4;-1:-1:-1::0;;;;;32031:15:0::1;:4;;32036:1;32031:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32031:7:0::1;-1:-1:-1::0;;;;;32031:15:0::1;;32023:54;;;::::0;;-1:-1:-1;;;32023:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32023:54:0;;;;;;;;;;;;;::::1;;32088:13;32104:9;32088:25;;32130:4;-1:-1:-1::0;;;;;32124:19:0::1;;32151:8;32124:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32124:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32124:38:0;;;;;32186:4;-1:-1:-1::0;;;;;32180:20:0::1;;32201:49;32224:7;32233:4;;32238:1;32233:7;;;;;;32201:49;32252:8;32180:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32180:81:0::1;-1:-1:-1::0;;;;;32180:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32180:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32180:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32180:81:0;32173:89:::1;;;;32273:18;32301:4:::0;;-1:-1:-1;;32306:15:0;;32301:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32301:21:0::1;-1:-1:-1::0;;;;;32294:39:0::1;;32334:2;32294:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32294:43:0::1;-1:-1:-1::0;;;;;32294:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32294:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32294:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32294:43:0;32348:44:::1;::::0;;32294:43:::1;32348:44:::0;;::::1;::::0;;;;;;;;;;;32294:43;;-1:-1:-1;32348:44:0::1;::::0;;;32383:4;;;;;;32348:44;::::1;::::0;32383:4;;32348:44;32383:4;32348:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32389:2:0;;-1:-1:-1;32348:34:0::1;::::0;-1:-1:-1;;32348:44:0:i:1;:::-;32491:12:::0;32425:62:::1;32473:13:::0;32432:4;;-1:-1:-1;;32437:15:0;;32432:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32432:21:0::1;-1:-1:-1::0;;;;;32425:39:0::1;;32465:2;32425:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32425:43:0::1;-1:-1:-1::0;;;;;32425:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19337:851:0::0;19591:12;19605;19572:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;19630:12:::1;19645:47;19668:7;19677:6;19685;19645:22;:47::i;:::-;19703:60;::::0;;-1:-1:-1;;;19703:60:0;;19735:10:::1;19703:60;::::0;::::1;::::0;-1:-1:-1;;;;;19703:31:0;::::1;:60:::0;;;;;;;;;;;;;;19630:62;;-1:-1:-1;19703:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19703:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19703:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19703:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19831:27:0::1;::::0;;-1:-1:-1;;;19831:27:0;;-1:-1:-1;;;;;19831:27:0;;::::1;;::::0;::::1;::::0;;;19801:12:::1;::::0;;;19831:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19801:12;19831:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19831:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19831:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19831:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19831:27:0;-1:-1:-1;19870:14:0::1;19889:41;19915:6:::0;19923;19889:25:::1;:41::i;:::-;19869:61;;;19972:6;-1:-1:-1::0;;;;;19962:16:0::1;:6;-1:-1:-1::0;;;;;19962:16:0::1;;:58;;20003:7;20012;19962:58;;;19982:7;19991;19962:58;19941:79:::0;;-1:-1:-1;19941:79:0;-1:-1:-1;20039:21:0;;::::1;;20031:69;;;;-1:-1:-1::0;;;20031:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20130:10;20119:7;:21;;20111:69;;;;-1:-1:-1::0;;;20111:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:1;;;;19337:851:::0;;;;;;;;;;;:::o;15691:41::-;;;:::o;34282:251::-;34426:21;34472:53;34501:7;34510:8;34520:4;34472:28;:53::i;21552:665::-;21841:16;21859:14;21886:12;21901:44;21924:7;21933:5;21940:4;21901:22;:44::i;:::-;21886:59;;21956:10;21969;:33;;21993:9;21969:33;;;-1:-1:-1;;21969:33:0;22013:78;;;-1:-1:-1;;;22013:78:0;;22039:10;22013:78;;;;22059:4;22013:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21956:46;;-1:-1:-1;;;;;;22013:25:0;;;;;:78;;;;;-1:-1:-1;;22013:78:0;;;;;;;;-1:-1:-1;22013:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22013:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22013:78:0;;;;22129:80;22148:5;22155:9;22166:14;22182:12;22196:2;22200:8;22129:18;:80::i;:::-;22102:107;;;;-1:-1:-1;21552:665:0;-1:-1:-1;;;;;;;;;;;;;21552:665:0:o;17584:734::-;17872:12;17886;17900:14;17853:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;17948:85:::1;17962:6;17970;17978:14;17994;18010:10;18022;17948:13;:85::i;:::-;17927:106:::0;;-1:-1:-1;17927:106:0;-1:-1:-1;18044:12:0::1;18059:47;18082:7;18091:6:::0;18099;18059:22:::1;:47::i;:::-;18044:62;;18117:66;18149:6;18157:10;18169:4;18175:7;18117:31;:66::i;:::-;18194;18226:6;18234:10;18246:4;18252:7;18194:31;:66::i;:::-;18296:4;-1:-1:-1::0;;;;;18283:23:0::1;;18307:2;18283:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18283:27:0::1;-1:-1:-1::0;;;;;18283:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18283:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18283:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18283:27:0;17584:734;;;;-1:-1:-1;18283:27:0;;-1:-1:-1;17584:734:0;;-1:-1:-1;;;;;;;;;17584:734:0:o;18324:970::-;18577:16;18595:14;18611;18558:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;18665:176:::1;18693:5;18713:4;18732:18;18765:9;18789:14;18818:12;18665:13;:176::i;:::-;18638:203:::0;;-1:-1:-1;18638:203:0;-1:-1:-1;18852:12:0::1;18867:44;18890:7;18899:5:::0;18906:4:::1;18867:22;:44::i;:::-;18852:59;;18922:69;18954:5;18961:10;18973:4;18979:11;18922:31;:69::i;:::-;19008:4;-1:-1:-1::0;;;;;19002:19:0::1;;19029:9;19002:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19002:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19002:39:0;;;;;19065:4;-1:-1:-1::0;;;;;19059:20:0::1;;19080:4;19086:9;19059:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19059:37:0::1;-1:-1:-1::0;;;;;19059:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19059:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19059:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19059:37:0;19052:45:::1;;;;19133:4;-1:-1:-1::0;;;;;19120:23:0::1;;19144:2;19120:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19120:27:0::1;-1:-1:-1::0;;;;;19120:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19120:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19120:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19120:27:0;;-1:-1:-1;19198:9:0::1;:21:::0;-1:-1:-1;19194:92:0::1;;;19221:65;19252:10;19276:9;19264;:21;19221:30;:65::i;:::-;15900:1;18324:970:::0;;;;;;;;;;;:::o;28600:889::-;28813:21;28785:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;28877:7:::1;-1:-1:-1::0;;;;;28861:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28861:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28861:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28861:33:0;28860:34:::1;28852:78;;;::::0;;-1:-1:-1;;;28852:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28852:78:0;;;;;;;;;;;;;::::1;;28960:4;-1:-1:-1::0;;;;;28949:15:0::1;:4;;28954:1;28949:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28949:7:0::1;-1:-1:-1::0;;;;;28949:15:0::1;;28941:54;;;::::0;;-1:-1:-1;;;28941:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28941:54:0;;;;;;;;;;;;;::::1;;29016:53;29044:7;29053:9;29064:4;;29016:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29016:27:0::1;::::0;-1:-1:-1;;;29016:53:0:i:1;:::-;29006:63;;29102:9;29088:7;29096:1;29088:10;;;;;;;;;;;;;;:23;;29080:72;;;;-1:-1:-1::0;;;29080:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29169:4;-1:-1:-1::0;;;;;29163:19:0::1;;29190:7;29198:1;29190:10;;;;;;;;;;;;;;29163:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29163:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29163:40:0;;;;;29227:4;-1:-1:-1::0;;;;;29221:20:0::1;;29242:49;29265:7;29274:4;;29279:1;29274:7;;;;;;29242:49;29293:7;29301:1;29293:10;;;;;;;;;;;;;;29221:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29221:83:0::1;-1:-1:-1::0;;;;;29221:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29221:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29221:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29221:83:0;29214:91:::1;;;;29316:24;29322:7;29331:4;;29316:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29337:2:0;;-1:-1:-1;29316:5:0::1;::::0;-1:-1:-1;;29316:24:0:i:1;:::-;29403:7;29411:1;29403:10;;;;;;;;;;;;;;29391:9;:22;29387:94;;;29415:66;29446:10;29470:7;29478:1;29470:10;;;;;;;;;;;;;;29458:9;:22;29415:30;:66::i;1352:361::-:0;1547:45;;;-1:-1:-1;;;;;1547:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1547:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1536:57:0;;;;1501:12;;1515:17;;1536:10;;;;1547:45;1536:57;;;25:18:-1;1536:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1536:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1500:93:0;;;;1612:7;:57;;;;-1:-1:-1;1624:11:0;;:16;;:44;;;1655:4;1644:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1644:24:0;1624:44;1604:101;;;;;-1:-1:-1;;;1604:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:361;;;;;:::o;2131:195::-;2239:12;;;2201;2239;;;;;;;;;-1:-1:-1;;;;;2218:7:0;;;2232:5;;2218:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2218:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2200:52:0;;;2271:7;2263:55;;;;-1:-1:-1;;;2263:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:195;;;:::o;12308:513::-;12401:14;12447:1;12436:8;:12;12428:66;;;;-1:-1:-1;;;12428:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12525:1;12513:9;:13;:31;;;;;12543:1;12530:10;:14;12513:31;12505:82;;;;-1:-1:-1;;;12505:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12598:20;12621:17;:8;12634:3;12621:17;:12;:17;:::i;:::-;12598:40;-1:-1:-1;12649:14:0;12666:31;12598:40;12686:10;12666:31;:19;:31;:::i;:::-;12649:48;-1:-1:-1;12708:16:0;12727:40;12751:15;12727:19;:9;12741:4;12727:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12708:59;;12802:11;12790:9;:23;;;;;;;12308:513;-1:-1:-1;;;;;;;12308:513:0:o;13492:509::-;13593:21;13650:1;13635:4;:11;:16;;13627:57;;;;;-1:-1:-1;;;13627:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13716:4;:11;13705:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13705:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13705:23:0;;13695:33;;13752:8;13739:7;13747:1;13739:10;;;;;;;;;;;;;:21;;;;;13776:6;13771:223;13802:1;13788:4;:11;:15;13784:1;:19;13771:223;;;13826:14;13842:15;13861:42;13873:7;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13891:4;13896:1;13900;13896:5;13891:11;;;;;;;;;;;;;;13861;:42::i;:::-;13825:78;;;;13935:47;13948:7;13956:1;13948:10;;;;;;;;;;;;;;13960:9;13971:10;13935:12;:47::i;:::-;13918:7;13926:1;13930;13926:5;13918:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13805:3:0;;13771:223;;;;13492:509;;;;;:::o;10788:478::-;10877:12;10903:14;10919;10937:26;10948:6;10956;10937:10;:26::i;:::-;11101:32;;;-1:-1:-1;;11101:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11101:32:0;;;;;11091:43;;;;;;-1:-1:-1;;;;;;11004:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11004:251:0;;;;;;;10994:262;;;;;;;;;10788:478;-1:-1:-1;;;;;10788:478:0:o;1721:402::-;1946:51;;;-1:-1:-1;;;;;1946:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1946:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1935:63:0;;;;1900:12;;1914:17;;1935:10;;;;1946:51;1935:63;;;25:18:-1;1935:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1935:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1899:99:0;;;;2017:7;:57;;;;-1:-1:-1;2029:11:0;;:16;;:44;;;2060:4;2049:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2049:24:0;2029:44;2009:106;;;;-1:-1:-1;;;2009:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1721:402;;;;;;:::o;23827:727::-;23934:6;23929:618;23960:1;23946:4;:11;:15;23942:1;:19;23929:618;;;23984:13;23999:14;24018:4;24023:1;24018:7;;;;;;;;;;;;;;24027:4;24032:1;24036;24032:5;24027:11;;;;;;;;;;;;;;23983:56;;;;24055:14;24074:40;24100:5;24107:6;24074:25;:40::i;:::-;24054:60;;;24129:14;24146:7;24154:1;24158;24154:5;24146:14;;;;;;;;;;;;;;24129:31;;24176:15;24193;24221:6;-1:-1:-1;;;;;24212:15:0;:5;-1:-1:-1;;;;;24212:15:0;;:61;;24254:9;24270:1;24212:61;;;24236:1;24240:9;24212:61;24175:98;;;;24288:10;24319:1;24305:4;:11;:15;24301:1;:19;:80;;24378:3;24301:80;;;24323:52;24346:7;24355:6;24363:4;24368:1;24372;24368:5;24363:11;;;;;;;;;;;;;;24323:22;:52::i;:::-;24288:93;;24409:46;24432:7;24441:5;24448:6;24409:22;:46::i;:::-;-1:-1:-1;;;;;24396:65:0;;24480:10;24492;24504:2;24518:1;24508:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24508:12:0;87:42:-1;143:17;;-1:-1;24508:12:0;;24396:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24396:139:0;-1:-1:-1;;;;;24396:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24396:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24396:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23963:3:0;;;;;-1:-1:-1;23929:618:0;;-1:-1:-1;;;;;;;;23929:618:0;;;23827:727;;;:::o;14082:530::-;14183:21;14240:1;14225:4;:11;:16;;14217:57;;;;;-1:-1:-1;;;14217:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14306:4;:11;14295:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14295:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14295:23:0;;14285:33;;14359:9;14329:7;14354:1;14337:7;:14;:18;14329:27;;;;;;;;;;;;;;;;;:39;14393:11;;-1:-1:-1;;14393:15:0;14379:226;14410:5;;14379:226;;14438:14;14454:15;14473:42;14485:7;14494:4;14503:1;14499;:5;14494:11;;;;;;;;;;;;;;14507:4;14512:1;14507:7;;;;;;;14473:42;14437:78;;;;14547:46;14559:7;14567:1;14559:10;;;;;;;;;;;;;;14571:9;14582:10;14547:11;:46::i;:::-;14530:7;14542:1;14538;:5;14530:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14417:3:0;14379:226;;29636:1202;29749:6;29744:1087;29775:1;29761:4;:11;:15;29757:1;:19;29744:1087;;;29799:13;29814:14;29833:4;29838:1;29833:7;;;;;;;;;;;;;;29842:4;29847:1;29851;29847:5;29842:11;;;;;;;;;;;;;;29798:56;;;;29870:14;29889:40;29915:5;29922:6;29889:25;:40::i;:::-;29869:60;;;29944:17;29977:46;30000:7;30009:5;30016:6;29977:22;:46::i;:::-;29944:80;;30039:16;30070:17;30158:13;30173;30191:4;-1:-1:-1;;;;;30191:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30191:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30191:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30191:18:0;;;;;;;-1:-1:-1;;;;;30157:52:0;;;;-1:-1:-1;30157:52:0;;-1:-1:-1;30225:17:0;;-1:-1:-1;;;;;30266:15:0;;;;;;;:61;;30308:8;30318;30266:61;;;30285:8;30295;30266:61;30224:103;;;;30356:56;30399:12;30363:5;-1:-1:-1;;;;;30356:23:0;;30388:4;30356:38;;;;;;;;;;;;;-1:-1:-1;;;;;30356:38:0;-1:-1:-1;;;;;30356:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30356:56:0;30342:70;;30442:69;30470:11;30483:12;30497:13;30442:27;:69::i;:::-;30427:84;;29744:1087;;;;30542:15;30559;30587:6;-1:-1:-1;;;;;30578:15:0;:5;-1:-1:-1;;;;;30578:15:0;;:67;;30623:12;30642:1;30578:67;;;30602:1;30606:12;30578:67;30541:104;;;;30660:10;30691:1;30677:4;:11;:15;30673:1;:19;:80;;30750:3;30673:80;;;30695:52;30718:7;30727:6;30735:4;30740:1;30744;30740:5;30735:11;;;;;;;30695:52;30806:12;;;30816:1;30806:12;;;;;;;;;;-1:-1:-1;;;30768:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30768:51:0;;;;;;;;;;;;;;;;;;;;;;30660:93;;-1:-1:-1;30768:9:0;;;;;;30778:10;;30790;;30660:93;;30806:12;;30768:51;;;;;;;;30806:12;;30768:51;;;;30806:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30768:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30768:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29778:3:0;;;;;-1:-1:-1;29744:1087:0;;-1:-1:-1;;;;;;;;;;29744:1087:0;9902:129;9986:5;;;9981:16;;;;9973:50;;;;;-1:-1:-1;;;9973:50:0;;;;;;;;;;;;-1:-1:-1;;;9973:50:0;;;;;;;;;;;;;;12942:468;13035:13;13081:1;13069:9;:13;13061:68;;;;-1:-1:-1;;;13061:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:1;13148:9;:13;:31;;;;;13178:1;13165:10;:14;13148:31;13140:82;;;;-1:-1:-1;;;13140:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13233:14;13250:34;13279:4;13250:24;:9;13264;13250:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13233:51;-1:-1:-1;13295:16:0;13314:34;13344:3;13314:25;:10;13329:9;13314:25;:14;:25;:::i;:34::-;13295:53;;13370:32;13400:1;13383:11;13371:9;:23;;;;;;;13370:32;:29;:32;:::i;:::-;13359:43;12942:468;-1:-1:-1;;;;;;12942:468:0:o;11869:317::-;11951:12;11994:1;11984:7;:11;11976:59;;;;-1:-1:-1;;;11976:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12065:1;12054:8;:12;:28;;;;;12081:1;12070:8;:12;12054:28;12046:79;;;;-1:-1:-1;;;12046:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12170:8;12146:21;:7;12158:8;12146:21;:11;:21;:::i;:::-;:32;;;;;;;11869:317;-1:-1:-1;;;;11869:317:0:o;10351:345::-;10426:14;10442;10487:6;-1:-1:-1;;;;;10477:16:0;:6;-1:-1:-1;;;;;10477:16:0;;;10469:64;;;;-1:-1:-1;;;10469:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10572:6;-1:-1:-1;;;;;10563:15:0;:6;-1:-1:-1;;;;;10563:15:0;;:53;;10601:6;10609;10563:53;;;10582:6;10590;10563:53;10544:72;;-1:-1:-1;10544:72:0;-1:-1:-1;;;;;;10635:20:0;;10627:61;;;;;-1:-1:-1;;;10627:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10351:345;;;;;:::o;16204:1374::-;16517:48;;;-1:-1:-1;;;16517:48:0;;-1:-1:-1;;;;;16517:48:0;;;;;;;;;;;;;;;;16422:12;;;;;;16533:7;16517:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16517:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16517:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16517:48:0;-1:-1:-1;;;;;16517:62:0;;16513:146;;;16596:51;;;-1:-1:-1;;;16596:51:0;;-1:-1:-1;;;;;16596:51:0;;;;;;;;;;;;;;;;16612:7;16596:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16596:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16596:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16596:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16513:146:0;16670:13;16685;16702:51;16729:7;16738:6;16746;16702:26;:51::i;:::-;16669:84;;;;16768:8;16780:1;16768:13;:30;;;;-1:-1:-1;16785:13:0;;16768:30;16764:807;;;16837:14;;-1:-1:-1;16853:14:0;;-1:-1:-1;16764:807:0;;;16901:19;16923:56;16944:14;16960:8;16970;16923:20;:56::i;:::-;16901:78;;17016:14;16998;:32;16994:566;;17077:10;17059:14;:28;;17051:76;;;;-1:-1:-1;;;17051:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17168:14;;-1:-1:-1;17184:14:0;-1:-1:-1;17184:14:0;16994:566;;;17240:19;17262:56;17283:14;17299:8;17309;17262:20;:56::i;:::-;17240:78;;17362:14;17344;:32;;17337:40;;;;17422:10;17404:14;:28;;17396:76;;;;-1:-1:-1;;;17396:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17513:14;-1:-1:-1;17529:14:0;;-1:-1:-1;16994:566:0;16764:807;;16204:1374;;;;;;;;;;;:::o;10039:142::-;10091:6;10118;;;:30;;-1:-1:-1;;10133:5:0;;;10147:1;10142;10133:5;10142:1;10128:15;;;;;:20;10118:30;10110:63;;;;;-1:-1:-1;;;10110:63:0;;;;;;;;;;;;-1:-1:-1;;;10110:63:0;;;;;;;;;;;;;;9766:128;9850:5;;;9845:16;;;;9837:49;;;;;-1:-1:-1;;;9837:49:0;;;;;;;;;;;;-1:-1:-1;;;9837:49:0;;;;;;;;;;;;;;11324:432;11417:13;11432;11459:14;11478:26;11489:6;11497;11478:10;:26::i;:::-;11458:46;;;11515:32;11523:7;11532:6;11540;11515:7;:32::i;:::-;;11559:13;11574;11605:32;11613:7;11622:6;11630;11605:7;:32::i;:::-;-1:-1:-1;;;;;11592:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11592:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11592:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11592:60:0;;;;;;;-1:-1:-1;;;;;11558:94:0;;;;-1:-1:-1;11558:94:0;;-1:-1:-1;;;;;;11686:16:0;;;;;;;:62;;11729:8;11739;11686:62;;;11706:8;11716;11686:62;11663:85;;;;-1:-1:-1;11324:432:0;-1:-1:-1;;;;;;;11324:432:0:o

Swarm Source

ipfs://8d64c255186fe1daa3037b737254d8578dcec7cf7bd0dcfeea1249bfb7c5c30c
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.