ETH Price: $2,636.69 (-0.16%)
Gas: 7.94 Gwei

Contract

0x7102407afa5d6581AAb694FEB03fEB0e7Cf69ebb
 

Overview

ETH Balance

0.207516126858827878 ETH

Eth Value

$547.16 (@ $2,636.69/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Process Fees200584242024-06-10 2:23:47112 days ago1717986227IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000527784.06480993
Process Fees200584232024-06-10 2:23:35112 days ago1717986215IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000517484.13844865
Process Fees200584222024-06-10 2:23:23112 days ago1717986203IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000548154.22167881
Process Fees200584222024-06-10 2:23:23112 days ago1717986203IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000527894.22167881
Process Fees200584212024-06-10 2:23:11112 days ago1717986191IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000757664.31493355
Set Liquidity Ra...200584142024-06-10 2:21:47112 days ago1717986107IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000147354.30631788
Set Router200584052024-06-10 2:19:59112 days ago1717985999IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000121684.01298947
Set Router200401302024-06-07 13:03:59114 days ago1717765439IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0004460514.71559012
Set Treasury Tar...180160012023-08-28 22:04:59398 days ago1693260299IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0012377839.92211814
Process Fees173916002023-06-02 7:32:59486 days ago1685691179IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0101787127.06643542
Set Balance Thre...173793942023-05-31 14:17:11487 days ago1685542631IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0016696552.22242843
Send Lending Poo...168732812023-03-21 3:14:59559 days ago1679368499IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.001032418
Rescue WETH168732792023-03-21 3:14:35559 days ago1679368475IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000627818
Send Distribute ...168732592023-03-21 3:10:35559 days ago1679368235IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.002555216
Send Lending Poo...164181792023-01-16 8:33:11622 days ago1673857991IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0012412616.67112632
Set Lending Pool...164181782023-01-16 8:32:59622 days ago1673857979IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0008434716.82614539
Set Treasury Tar...159188782022-11-07 14:55:23692 days ago1667832923IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0008758128.24754273
0x20202020156422562022-09-29 23:24:47731 days ago1664493887IN
X7 Finance: X7100 Liquidity Hub
0.006 ETH0.0002894912.31803388
Set Distribution...156307772022-09-28 8:55:23732 days ago1664355323IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0004608513.97160852
Set Balance Thre...156298812022-09-28 5:55:35733 days ago1664344535IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000308689.65854363
Transfer Ownersh...156292772022-09-28 3:53:59733 days ago1664337239IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.000272299.49418552
Set Treasury Tar...156276112022-09-27 22:18:35733 days ago1664317115IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0007655515.91425099
Set Liquidity To...156276102022-09-27 22:18:23733 days ago1664317103IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0006889114.37002967
Set Distribution...156276082022-09-27 22:17:59733 days ago1664317079IN
X7 Finance: X7100 Liquidity Hub
0 ETH0.0007335914.6469922
0x60806040156047762022-09-24 17:40:59736 days ago1664041259IN
 Create: X7100LiquidityHub
0 ETH0.015606276.42890298

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
208280382024-09-25 13:52:354 days ago1727272355
X7 Finance: X7100 Liquidity Hub
0.0045965 ETH
208215412024-09-24 16:06:355 days ago1727193995
X7 Finance: X7100 Liquidity Hub
0.0040415 ETH
205932032024-08-23 18:50:4737 days ago1724439047
X7 Finance: X7100 Liquidity Hub
0.00000842 ETH
200584212024-06-10 2:23:11112 days ago1717986191
X7 Finance: X7100 Liquidity Hub
0.24816575 ETH
200584212024-06-10 2:23:11112 days ago1717986191
X7 Finance: X7100 Liquidity Hub
0.24816575 ETH
199422362024-05-24 20:51:11128 days ago1716583871
X7 Finance: X7100 Liquidity Hub
0.49607377 ETH
196588822024-04-15 5:38:23168 days ago1713159503
X7 Finance: X7100 Liquidity Hub
0.00082521 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.00001016 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.00419801 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.00419801 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.00839603 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.01195792 ETH
196422262024-04-12 21:33:47170 days ago1712957627
X7 Finance: X7100 Liquidity Hub
0.02398232 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.01587743 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.02664357 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.02664357 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.05328715 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.05332019 ETH
196098362024-04-08 8:43:11174 days ago1712565791
X7 Finance: X7100 Liquidity Hub
0.02773598 ETH
195821892024-04-04 11:45:23178 days ago1712231123
X7 Finance: X7100 Liquidity Hub
0.04498665 ETH
195744612024-04-03 9:49:47179 days ago1712137787
X7 Finance: X7100 Liquidity Hub
0.00001274 ETH
195744612024-04-03 9:49:47179 days ago1712137787
X7 Finance: X7100 Liquidity Hub
0.00569778 ETH
195744612024-04-03 9:49:47179 days ago1712137787
X7 Finance: X7100 Liquidity Hub
0.00569778 ETH
195744612024-04-03 9:49:47179 days ago1712137787
X7 Finance: X7100 Liquidity Hub
0.01139557 ETH
195744612024-04-03 9:49:47179 days ago1712137787
X7 Finance: X7100 Liquidity Hub
0.01140216 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
X7100LiquidityHub

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-24
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

/*

 /$$   /$$ /$$$$$$$$       /$$$$$$$$ /$$
| $$  / $$|_____ $$/      | $$_____/|__/
|  $$/ $$/     /$$/       | $$       /$$ /$$$$$$$   /$$$$$$  /$$$$$$$   /$$$$$$$  /$$$$$$
 \  $$$$/     /$$/        | $$$$$   | $$| $$__  $$ |____  $$| $$__  $$ /$$_____/ /$$__  $$
  >$$  $$    /$$/         | $$__/   | $$| $$  \ $$  /$$$$$$$| $$  \ $$| $$      | $$$$$$$$
 /$$/\  $$  /$$/          | $$      | $$| $$  | $$ /$$__  $$| $$  | $$| $$      | $$_____/
| $$  \ $$ /$$/           | $$      | $$| $$  | $$|  $$$$$$$| $$  | $$|  $$$$$$$|  $$$$$$$
|__/  |__/|__/            |__/      |__/|__/  |__/ \_______/|__/  |__/ \_______/ \_______/

Contract: Smart Contract for managing X7100 fee tokens

This liquidity hub is shared by the X7100 series tokens (X7101-X7105).
It uses a simple liquidity balancing algorithm to add liquidity to the least liquified token.
It has been upgraded from the X7000 series to improve the gas for any individual trade.

This contract will NOT be renounced.

The following are the only functions that can be called on the contract that affect the contract:

    function setShares(uint256 distributeShare_, uint256 liquidityShare_, uint256 lendingPoolShare_, uint256 treasuryShare_) external onlyOwner {
        require(distributeShare + liquidityShare + lendingPoolShare + treasuryShare == 1000);

        require(distributeShare_ >= minShare && distributeShare_ <= maxShare);
        require(liquidityShare_ >= minShare && liquidityShare_ <= maxShare);
        require(lendingPoolShare_ >= minShare && lendingPoolShare_ <= maxShare);
        require(treasuryShare_ >= minShare && treasuryShare_ <= maxShare);

        distributeShare = distributeShare_;
        liquidityShare = liquidityShare_;
        lendingPoolShare = lendingPoolShare_;
        treasuryShare = treasuryShare_;

        emit SharesSet(distributeShare_, liquidityShare_, lendingPoolShare_, treasuryShare_);
    }

    function setRouter(address router_) external onlyOwner {
        require(router_ != address(router));
        router = IUniswapV2Router(router_);
        emit RouterSet(router_);
    }

    function setOffRampPair(address tokenAddress, address offRampPairAddress) external onlyOwner {
        require(nativeTokenPairs[tokenAddress] != offRampPairAddress);
        nativeTokenPairs[tokenAddress] = offRampPairAddress;
        emit OffRampPairSet(tokenAddress, offRampPairAddress);
    }

    function setBalanceThreshold(uint256 threshold) external onlyOwner {
        require(!balanceThresholdFrozen);
        balanceThreshold = threshold;
        emit BalanceThresholdSet(threshold);
    }

    function setLiquidityBalanceThreshold(uint256 threshold) external onlyOwner {
        require(!liquidityBalanceThresholdFrozen);
        liquidityBalanceThreshold = threshold;
        emit LiquidityBalanceThresholdSet(threshold);
    }

    function setLiquidityRatioTarget(uint256 liquidityRatioTarget_) external onlyOwner {
        require(liquidityRatioTarget_ != liquidityRatioTarget);
        require(liquidityRatioTarget_ >= minLiquidityRatioTarget && liquidityRatioTarget <= maxLiquidityRatioTarget);
        liquidityRatioTarget = liquidityRatioTarget_;
        emit LiquidityRatioTargetSet(liquidityRatioTarget_);
    }

    function setLiquidityTokenReceiver(address liquidityTokenReceiver_) external onlyOwner {
        require(
            liquidityTokenReceiver_ != address(0)
            && liquidityTokenReceiver_ != address(0x000000000000000000000000000000000000dEaD)
            && liquidityTokenReceiver != liquidityTokenReceiver_
        );

        address oldLiquidityTokenReceiver = liquidityTokenReceiver;
        liquidityTokenReceiver = liquidityTokenReceiver_;
        emit LiquidityTokenReceiverSet(oldLiquidityTokenReceiver, liquidityTokenReceiver_);
    }

    function setDistributionTarget(address target) external onlyOwner {
        require(
            target != address(0)
            && target != address(0x000000000000000000000000000000000000dEaD)
            && distributeTarget != payable(target)
        );
        require(!distributeTargetFrozen);
        address oldTarget = address(distributeTarget);
        distributeTarget = payable(target);
        emit DistributeTargetSet(oldTarget, distributeTarget);
    }

    function setLendingPoolTarget(address target) external onlyOwner {
        require(
            target != address(0) &&
            target != address(0x000000000000000000000000000000000000dEaD)
            && lendingPoolTarget != payable(target)
        );
        require(!lendingPoolTargetFrozen);
        address oldTarget = address(lendingPoolTarget);
        lendingPoolTarget = payable(target);
        emit LendingPoolTargetSet(oldTarget, target);
    }

    function setTreasuryTarget(address target) external onlyOwner {
        require(
            target != address(0)
            && target != address(0x000000000000000000000000000000000000dEaD)
            && treasuryTarget != payable(target)
        );
        require(!treasuryTargetFrozen);
        address oldTarget = address(treasuryTarget);
        treasuryTarget = payable(target);
        emit TreasuryTargetSet(oldTarget, target);
    }

    function freezeTreasuryTarget() external onlyOwner {
        require(!treasuryTargetFrozen);
        treasuryTargetFrozen = true;
        emit TreasuryTargetFrozen();
    }

    function freezeDistributeTarget() external onlyOwner {
        require(!distributeTargetFrozen);
        distributeTargetFrozen = true;
        emit DistributeTargetFrozen();
    }

    function freezeLendingPoolTarget() external onlyOwner {
        require(!lendingPoolTargetFrozen);
        lendingPoolTargetFrozen = true;
        emit LendingPoolTargetFrozen();
    }

    function freezeBalanceThreshold() external onlyOwner {
        require(!balanceThresholdFrozen);
        balanceThresholdFrozen = true;
        emit BalanceThresholdFrozen();
    }

    function freezeLiquidityBalanceThreshold() external onlyOwner {
        require(!liquidityBalanceThresholdFrozen);
        liquidityBalanceThresholdFrozen = true;
        emit LiquidityBalanceThresholdFrozen();
    }

These functions will be passed to DAO governance once the ecosystem stabilizes.

*/

abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address owner_) {
        _transferOwnership(owner_);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function circulatingSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

interface IUniswapV2Router {
    function WETH() external returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 ILiquidityHub {
    function processFees(address) external;
}

interface IX7EcosystemSplitter {
    function takeBalance() external;
}

interface IWETH {
    function withdraw(uint) external;
}

contract X7100LiquidityHub is Ownable, ILiquidityHub {

    IUniswapV2Router public router;

    address public liquidityTokenReceiver;

    // This is "equivalent" to 5-99%.
    // There really is only ~20m tokens circulating per (average number)
    // So a 198/200 is a 99 Percent
    uint256 public minLiquidityRatioTarget = 10;
    uint256 public maxLiquidityRatioTarget = 198;

    // For the constellation, the target liquidity is in the ~75% range to create extremely
    // low price slippage for parking of LP providing capital.
    uint256 public liquidityRatioTarget = 150;

    uint256 public minShare = 150;
    uint256 public maxShare = 400;

    uint256 public distributeShare = 300;
    uint256 public liquidityShare = 300;
    uint256 public lendingPoolShare = 250;
    uint256 public treasuryShare = 150;

    uint256 public balanceThreshold = 1 ether;
    uint256 public liquidityBalanceThreshold = 10**16;

    uint256 public distributeBalance;
    uint256 public lendingPoolBalance;
    uint256 public treasuryBalance;
    uint256 public liquidityBalance;
    mapping(address => uint256) public liquidityTokenBalance;

    address payable public distributeTarget;
    address payable public lendingPoolTarget;
    address payable public treasuryTarget;

    bool public distributeTargetFrozen;
    bool public lendingPoolTargetFrozen;
    bool public treasuryTargetFrozen;
    bool public balanceThresholdFrozen;
    bool public liquidityBalanceThresholdFrozen;
    bool public constellationTokensFrozen;

    address public leastLiquidTokenAddress;
    mapping(address => address) public nativeTokenPairs;
    mapping(address => bool) public isConstellationToken;

    event SharesSet(uint256 distributeShare, uint256 liquidityShare, uint256 lendingPoolShare, uint256 treasuryShare);
    event OffRampPairSet(address indexed token, address indexed offRampPair);
    event DistributeTargetSet(address indexed oldTarget, address indexed newTarget);
    event LendingPoolTargetSet(address indexed oldTarget, address indexed newTarget);
    event TreasuryTargetSet(address indexed oldTarget, address indexed newTarget);
    event LiquidityRatioTargetSet(uint256 liquidityRatioTarget);
    event LiquidityTokenReceiverSet(address indexed oldReciever, address indexed newReceiver);
    event BalanceThresholdSet(uint256 threshold);
    event LiquidityBalanceThresholdSet(uint256 threshold);
    event ConstellationTokenSet(address indexed tokenAddress, bool isQuint);
    event RouterSet(address router);
    event TreasuryTargetFrozen();
    event LendingPoolTargetFrozen();
    event DistributeTargetFrozen();
    event BalanceThresholdFrozen();
    event LiquidityBalanceThresholdFrozen();
    event ConstellationTokensFrozen();

    constructor(address router_) Ownable(address(0x7000a09c425ABf5173FF458dF1370C25d1C58105)) {
        router = IUniswapV2Router(router_);
        emit RouterSet(router_);
    }

    receive() external payable {}

    function setShares(uint256 distributeShare_, uint256 liquidityShare_, uint256 lendingPoolShare_, uint256 treasuryShare_) external onlyOwner {
        require(distributeShare + liquidityShare + lendingPoolShare + treasuryShare == 1000);

        require(distributeShare_ >= minShare && distributeShare_ <= maxShare);
        require(liquidityShare_ >= minShare && liquidityShare_ <= maxShare);
        require(lendingPoolShare_ >= minShare && lendingPoolShare_ <= maxShare);
        require(treasuryShare_ >= minShare && treasuryShare_ <= maxShare);

        distributeShare = distributeShare_;
        liquidityShare = liquidityShare_;
        lendingPoolShare = lendingPoolShare_;
        treasuryShare = treasuryShare_;

        emit SharesSet(distributeShare_, liquidityShare_, lendingPoolShare_, treasuryShare_);
    }

    function setRouter(address router_) external onlyOwner {
        require(router_ != address(router));
        router = IUniswapV2Router(router_);
        emit RouterSet(router_);
    }

    function setOffRampPair(address tokenAddress, address offRampPairAddress) external onlyOwner {
        require(nativeTokenPairs[tokenAddress] != offRampPairAddress);
        nativeTokenPairs[tokenAddress] = offRampPairAddress;
        emit OffRampPairSet(tokenAddress, offRampPairAddress);
    }

    function setBalanceThreshold(uint256 threshold) external onlyOwner {
        require(!balanceThresholdFrozen);
        balanceThreshold = threshold;
        emit BalanceThresholdSet(threshold);
    }

    function setLiquidityBalanceThreshold(uint256 threshold) external onlyOwner {
        require(!liquidityBalanceThresholdFrozen);
        liquidityBalanceThreshold = threshold;
        emit LiquidityBalanceThresholdSet(threshold);
    }

    function setLiquidityRatioTarget(uint256 liquidityRatioTarget_) external onlyOwner {
        require(liquidityRatioTarget_ != liquidityRatioTarget);
        require(liquidityRatioTarget_ >= minLiquidityRatioTarget && liquidityRatioTarget <= maxLiquidityRatioTarget);
        liquidityRatioTarget = liquidityRatioTarget_;
        emit LiquidityRatioTargetSet(liquidityRatioTarget_);
    }

    function setLiquidityTokenReceiver(address liquidityTokenReceiver_) external onlyOwner {
        require(
            liquidityTokenReceiver_ != address(0)
            && liquidityTokenReceiver_ != address(0x000000000000000000000000000000000000dEaD)
            && liquidityTokenReceiver != liquidityTokenReceiver_
        );

        address oldLiquidityTokenReceiver = liquidityTokenReceiver;
        liquidityTokenReceiver = liquidityTokenReceiver_;
        emit LiquidityTokenReceiverSet(oldLiquidityTokenReceiver, liquidityTokenReceiver_);
    }

    function setDistributionTarget(address target) external onlyOwner {
        require(
            target != address(0)
            && target != address(0x000000000000000000000000000000000000dEaD)
            && distributeTarget != payable(target)
        );
        require(!distributeTargetFrozen);
        address oldTarget = address(distributeTarget);
        distributeTarget = payable(target);
        emit DistributeTargetSet(oldTarget, distributeTarget);
    }

    function setLendingPoolTarget(address target) external onlyOwner {
        require(
            target != address(0) &&
            target != address(0x000000000000000000000000000000000000dEaD)
            && lendingPoolTarget != payable(target)
        );
        require(!lendingPoolTargetFrozen);
        address oldTarget = address(lendingPoolTarget);
        lendingPoolTarget = payable(target);
        emit LendingPoolTargetSet(oldTarget, target);
    }

    function setConstellationToken(address tokenAddress, bool isQuint) external onlyOwner {
        require(isConstellationToken[tokenAddress] != isQuint);
        isConstellationToken[tokenAddress] = isQuint;
        emit ConstellationTokenSet(tokenAddress, isQuint);
    }

    function setTreasuryTarget(address target) external onlyOwner {
        require(
            target != address(0)
            && target != address(0x000000000000000000000000000000000000dEaD)
            && treasuryTarget != payable(target)
        );
        require(!treasuryTargetFrozen);
        address oldTarget = address(treasuryTarget);
        treasuryTarget = payable(target);
        emit TreasuryTargetSet(oldTarget, target);
    }

    function freezeTreasuryTarget() external onlyOwner {
        require(!treasuryTargetFrozen);
        treasuryTargetFrozen = true;
        emit TreasuryTargetFrozen();
    }

    function freezeDistributeTarget() external onlyOwner {
        require(!distributeTargetFrozen);
        distributeTargetFrozen = true;
        emit DistributeTargetFrozen();
    }

    function freezeLendingPoolTarget() external onlyOwner {
        require(!lendingPoolTargetFrozen);
        lendingPoolTargetFrozen = true;
        emit LendingPoolTargetFrozen();
    }

    function freezeBalanceThreshold() external onlyOwner {
        require(!balanceThresholdFrozen);
        balanceThresholdFrozen = true;
        emit BalanceThresholdFrozen();
    }

    function freezeLiquidityBalanceThreshold() external onlyOwner {
        require(!liquidityBalanceThresholdFrozen);
        liquidityBalanceThresholdFrozen = true;
        emit LiquidityBalanceThresholdFrozen();
    }

    function freezeConstellationTokens() external onlyOwner {
        require(!constellationTokensFrozen);
        constellationTokensFrozen = true;
        emit ConstellationTokensFrozen();
    }

    function processFees(address tokenAddress) external {
        uint256 startingETHBalance = address(this).balance;

        uint256 tokensToSwap = IERC20(tokenAddress).balanceOf(address(this));

        bool processingConstellationToken = isConstellationToken[tokenAddress];

        if (processingConstellationToken) {
            tokensToSwap -= liquidityTokenBalance[tokenAddress];
        }

        if (tokensToSwap > 0) {
            swapTokensForEth(tokenAddress, tokensToSwap);
        }

        if (leastLiquidTokenAddress == address(0) && processingConstellationToken) {
            leastLiquidTokenAddress = tokenAddress;
        } else if (processingConstellationToken && tokenAddress != leastLiquidTokenAddress) {
            uint256 pairETHBalance = IERC20(router.WETH()).balanceOf(nativeTokenPairs[tokenAddress]);
            uint256 leastLiquidTokenPairETHBalance = IERC20(router.WETH()).balanceOf(nativeTokenPairs[leastLiquidTokenAddress]);

            if (pairETHBalance <= leastLiquidTokenPairETHBalance) {
                leastLiquidTokenAddress = tokenAddress;
            }
        }

        uint256 ETHForDistribution = address(this).balance - startingETHBalance;

        distributeBalance += ETHForDistribution * distributeShare / 1000;
        lendingPoolBalance += ETHForDistribution * lendingPoolShare / 1000;
        treasuryBalance += ETHForDistribution * treasuryShare / 1000;
        liquidityBalance = address(this).balance - distributeBalance - lendingPoolBalance - treasuryBalance;

        if (distributeBalance >= balanceThreshold) {
            sendDistributeBalance();
        }

        if (lendingPoolBalance >= balanceThreshold) {
            sendLendingPoolBalance();
        }

        if (treasuryBalance >= balanceThreshold) {
            sendTreasuryBalance();
        }

        if (liquidityBalance >= liquidityBalanceThreshold) {
            buyBackAndAddLiquidity(leastLiquidTokenAddress);
        }
    }

    function sendDistributeBalance() public {
        if (distributeTarget == address(0)) {
            return;
        }

        IX7EcosystemSplitter(distributeTarget).takeBalance();

        uint256 ethToSend = distributeBalance;
        distributeBalance = 0;

        (bool success,) = distributeTarget.call{value: ethToSend}("");

        if (!success) {
            distributeBalance = ethToSend;
        }
    }

    function sendTreasuryBalance() public {
        if (treasuryTarget == address(0)) {
            return;
        }

        uint256 ethToSend = treasuryBalance;
        treasuryBalance = 0;

        (bool success,) = treasuryTarget.call{value: ethToSend}("");

        if (!success) {
            treasuryBalance = ethToSend;
        }
    }

    function sendLendingPoolBalance() public {
        if (lendingPoolTarget == address(0)) {
            return;
        }

        uint256 ethToSend = lendingPoolBalance;
        lendingPoolBalance = 0;

        (bool success,) = lendingPoolTarget.call{value: ethToSend}("");

        if (!success) {
            lendingPoolBalance = ethToSend;
        }
    }

    function buyBackAndAddLiquidity(address tokenAddress) internal {
        uint256 ethForSwap;
        uint256 startingETHBalance = address(this).balance;

        IERC20 token = IERC20(tokenAddress);
        address offRampPair = nativeTokenPairs[tokenAddress];

        if (token.balanceOf(offRampPair) > token.circulatingSupply() * liquidityRatioTarget / 1000 ) {
            ethForSwap = liquidityBalance;
            liquidityBalance = 0;
            swapEthForTokens(tokenAddress, ethForSwap);
        } else {
            ethForSwap = liquidityBalance;
            liquidityBalance = 0;

            if (token.balanceOf(address(this)) > 0) {
                addLiquidityETH(tokenAddress, token.balanceOf(address(this)), ethForSwap);
                ethForSwap = ethForSwap - (startingETHBalance - address(this).balance);
            }

            if (ethForSwap > 0) {
                uint256 ethLeft = ethForSwap;
                ethForSwap = ethLeft / 2;
                uint256 ethForLiquidity = ethLeft - ethForSwap;
                swapEthForTokens(tokenAddress, ethForSwap);
                addLiquidityETH(tokenAddress, token.balanceOf(address(this)), ethForLiquidity);
            }
        }

        liquidityTokenBalance[tokenAddress] = token.balanceOf(address(this));

    }

    function addLiquidityETH(address tokenAddress, uint256 tokenAmount, uint256 ethAmount) internal {
        IERC20(tokenAddress).approve(address(router), tokenAmount);
        router.addLiquidityETH{value: ethAmount}(
            tokenAddress,
            tokenAmount,
            0,
            0,
            liquidityTokenReceiver,
            block.timestamp
        );
    }

    function swapTokensForEth(address tokenAddress, uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = tokenAddress;
        path[1] = router.WETH();

        IERC20(tokenAddress).approve(address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapEthForTokens(address tokenAddress, uint256 ethAmount) internal {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = tokenAddress;
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function rescueWETH() external {
        address wethAddress = router.WETH();
        IWETH(wethAddress).withdraw(IERC20(wethAddress).balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"BalanceThresholdFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"BalanceThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isQuint","type":"bool"}],"name":"ConstellationTokenSet","type":"event"},{"anonymous":false,"inputs":[],"name":"ConstellationTokensFrozen","type":"event"},{"anonymous":false,"inputs":[],"name":"DistributeTargetFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTarget","type":"address"},{"indexed":true,"internalType":"address","name":"newTarget","type":"address"}],"name":"DistributeTargetSet","type":"event"},{"anonymous":false,"inputs":[],"name":"LendingPoolTargetFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTarget","type":"address"},{"indexed":true,"internalType":"address","name":"newTarget","type":"address"}],"name":"LendingPoolTargetSet","type":"event"},{"anonymous":false,"inputs":[],"name":"LiquidityBalanceThresholdFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"LiquidityBalanceThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityRatioTarget","type":"uint256"}],"name":"LiquidityRatioTargetSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldReciever","type":"address"},{"indexed":true,"internalType":"address","name":"newReceiver","type":"address"}],"name":"LiquidityTokenReceiverSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"offRampPair","type":"address"}],"name":"OffRampPairSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"distributeShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lendingPoolShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryShare","type":"uint256"}],"name":"SharesSet","type":"event"},{"anonymous":false,"inputs":[],"name":"TreasuryTargetFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTarget","type":"address"},{"indexed":true,"internalType":"address","name":"newTarget","type":"address"}],"name":"TreasuryTargetSet","type":"event"},{"inputs":[],"name":"balanceThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceThresholdFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"constellationTokensFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTarget","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTargetFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeConstellationTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeDistributeTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeLendingPoolTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeLiquidityBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeTreasuryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isConstellationToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leastLiquidTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPoolShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPoolTarget","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lendingPoolTargetFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBalanceThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBalanceThresholdFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityRatioTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLiquidityRatioTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLiquidityRatioTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nativeTokenPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"processFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendDistributeBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendLendingPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendTreasuryBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isQuint","type":"bool"}],"name":"setConstellationToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setDistributionTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setLendingPoolTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setLiquidityBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityRatioTarget_","type":"uint256"}],"name":"setLiquidityRatioTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenReceiver_","type":"address"}],"name":"setLiquidityTokenReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"offRampPairAddress","type":"address"}],"name":"setOffRampPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router_","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"distributeShare_","type":"uint256"},{"internalType":"uint256","name":"liquidityShare_","type":"uint256"},{"internalType":"uint256","name":"lendingPoolShare_","type":"uint256"},{"internalType":"uint256","name":"treasuryShare_","type":"uint256"}],"name":"setShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setTreasuryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryTarget","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryTargetFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a60035560c66004556096600555609660065561019060075561012c60085561012c60095560fa600a556096600b55670de0b6b3a7640000600c55662386f26fc10000600d553480156200005857600080fd5b5060405162002720380380620027208339810160408190526200007b9162000144565b737000a09c425abf5173ff458df1370c25d1c581056200009b81620000f4565b50600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d159060200160405180910390a15062000176565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015757600080fd5b81516001600160a01b03811681146200016f57600080fd5b9392505050565b61259a80620001866000396000f3fe6080604052600436106103535760003560e01c806399eefadb116101c6578063dbc609f8116100f7578063e88e64a111610095578063f03b6ffc1161006f578063f03b6ffc14610924578063f2fde38b14610944578063f48167a514610964578063f887ea401461098457600080fd5b8063e88e64a1146108cd578063e97ca4b1146108ee578063f01d3c4e1461090e57600080fd5b8063e0f0edc6116100d1578063e0f0edc61461086b578063e2568ad21461088c578063e4c4ebfc146108a2578063e6f3e39e146108b757600080fd5b8063dbc609f8146107fe578063ddf617f314610814578063de2f78221461083557600080fd5b8063c38ec0b611610164578063cb3f4f171161013e578063cb3f4f1714610791578063ccfe13f3146107b2578063d6c1f49d146107c8578063d938a3e6146107dd57600080fd5b8063c38ec0b614610750578063c3926a2914610765578063c96f4d4d1461077b57600080fd5b8063b871ee7a116101a0578063b871ee7a146106e5578063bb43c32614610705578063c0d786551461071a578063c31737741461073a57600080fd5b806399eefadb1461068f578063b5fb2174146106a5578063b68e204c146106c557600080fd5b8063517cafef116102a057806377e7e2021161023e57806387020d6b1161021857806387020d6b1461061b5780638bb28de21461063b5780638da5cb5b1461065157806390d8dec71461066f57600080fd5b806377e7e202146105c45780637943da69146105e45780637c4a98b7146105fa57600080fd5b80636aea97f01161027a5780636aea97f01461056f578063715018a61461058457806373bdeb49146105995780637796ff37146105ae57600080fd5b8063517cafef146105195780635a75a8091461053957806361582eaa1461054f57600080fd5b8063143892871161030d578063313dab20116102e7578063313dab20146104ac5780633802fa43146104c25780633f83fb2d146104d75780634e440ef11461050457600080fd5b8063143892871461043057806315291cd414610468578063180978711461048c57600080fd5b8062e553121461035f57806301e1c5e61461037657806303766b7c146103965780630463a009146103b657806306253b90146103d6578063099f833e1461041b57600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b506103746109a4565b005b34801561038257600080fd5b50610374610391366004612299565b610a27565b3480156103a257600080fd5b506103746103b13660046122c7565b610a82565b3480156103c257600080fd5b506103746103d1366004612300565b610b0a565b3480156103e257600080fd5b506104066103f1366004612300565b60186020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042757600080fd5b50610374610bc1565b34801561043c57600080fd5b50601454610450906001600160a01b031681565b6040516001600160a01b039091168152602001610412565b34801561047457600080fd5b5061047e60095481565b604051908152602001610412565b34801561049857600080fd5b50601654610450906001600160a01b031681565b3480156104b857600080fd5b5061047e60105481565b3480156104ce57600080fd5b50610374610ca9565b3480156104e357600080fd5b5061047e6104f2366004612300565b60126020526000908152604090205481565b34801561051057600080fd5b50610374610d06565b34801561052557600080fd5b50610374610534366004612300565b610d85565b34801561054557600080fd5b5061047e60075481565b34801561055b57600080fd5b5061037461056a366004612300565b610e3c565b34801561057b57600080fd5b5061037461129b565b34801561059057600080fd5b506103746112f8565b3480156105a557600080fd5b5061037461130c565b3480156105ba57600080fd5b5061047e600b5481565b3480156105d057600080fd5b506103746105df366004612300565b611369565b3480156105f057600080fd5b5061047e600e5481565b34801561060657600080fd5b5060155461040690600160c81b900460ff1681565b34801561062757600080fd5b50610374610636366004612299565b611409565b34801561064757600080fd5b5061047e60065481565b34801561065d57600080fd5b506000546001600160a01b0316610450565b34801561067b57600080fd5b5061037461068a366004612299565b61145d565b34801561069b57600080fd5b5061047e60045481565b3480156106b157600080fd5b50601354610450906001600160a01b031681565b3480156106d157600080fd5b50601554610450906001600160a01b031681565b3480156106f157600080fd5b50610374610700366004612332565b6114c7565b34801561071157600080fd5b5061037461155b565b34801561072657600080fd5b50610374610735366004612300565b6115b8565b34801561074657600080fd5b5061047e600c5481565b34801561075c57600080fd5b50610374611629565b34801561077157600080fd5b5061047e60115481565b34801561078757600080fd5b5061047e60055481565b34801561079d57600080fd5b5060155461040690600160a01b900460ff1681565b3480156107be57600080fd5b5061047e600f5481565b3480156107d457600080fd5b50610374611757565b3480156107e957600080fd5b5060155461040690600160b01b900460ff1681565b34801561080a57600080fd5b5061047e60035481565b34801561082057600080fd5b5060155461040690600160c01b900460ff1681565b34801561084157600080fd5b50610450610850366004612300565b6017602052600090815260409020546001600160a01b031681565b34801561087757600080fd5b5060155461040690600160b81b900460ff1681565b34801561089857600080fd5b5061047e60085481565b3480156108ae57600080fd5b506103746117b4565b3480156108c357600080fd5b5061047e600d5481565b3480156108d957600080fd5b5060155461040690600160a81b900460ff1681565b3480156108fa57600080fd5b50610374610909366004612300565b611811565b34801561091a57600080fd5b5061047e600a5481565b34801561093057600080fd5b5061037461093f366004612360565b6118c8565b34801561095057600080fd5b5061037461095f366004612300565b6119dd565b34801561097057600080fd5b50600254610450906001600160a01b031681565b34801561099057600080fd5b50600154610450906001600160a01b031681565b6015546001600160a01b03166109b657565b601080546000918290556015546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b5050905080610a235760108290555b5050565b610a2f611a5b565b601554600160c01b900460ff1615610a4657600080fd5b600d8190556040518181527ffe250e4d10f1450890886b0654af04a775827e3964546990bbcfb0f507016af5906020015b60405180910390a150565b610a8a611a5b565b6001600160a01b03828116600090815260176020526040902054818316911603610ab357600080fd5b6001600160a01b0382811660008181526017602052604080822080546001600160a01b0319169486169485179055517f688668e8510f3448e27e2aa9c5e77af150a0272c38816fec87b299810e38b8049190a35050565b610b12611a5b565b6001600160a01b03811615801590610b3557506001600160a01b03811661dead14155b8015610b4f57506014546001600160a01b03828116911614155b610b5857600080fd5b601554600160a81b900460ff1615610b6f57600080fd5b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f25332970a4f1b67df8dd91ce4f608773bd00941f1203eda36a545a03640e342390600090a35050565b6013546001600160a01b0316610bd357565b601360009054906101000a90046001600160a01b03166001600160a01b03166329a2192b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2357600080fd5b505af1158015610c37573d6000803e3d6000fd5b5050600e80546000918290556013546040519194509192506001600160a01b039091169083908381818185875af1925050503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b5050905080610a235750600e55565b610cb1611a5b565b601554600160b01b900460ff1615610cc857600080fd5b6015805460ff60b01b1916600160b01b1790556040517fbe12b38d4cf4c293207b3ef208df8a6fcdd921b2f47ef87a780c5cf0dc8b8e8b90600090a1565b6014546001600160a01b0316610d1857565b600f80546000918290556014546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114610d71576040519150601f19603f3d011682016040523d82523d6000602084013e610d76565b606091505b5050905080610a235750600f55565b610d8d611a5b565b6001600160a01b03811615801590610db057506001600160a01b03811661dead14155b8015610dca57506013546001600160a01b03828116911614155b610dd357600080fd5b601554600160a01b900460ff1615610dea57600080fd5b601380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f035f81230cd5b48929f16ee6e30f062311fb20ffbc64091e16b40a97fcccb86090600090a35050565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea99190612392565b6001600160a01b03841660009081526018602052604090205490915060ff168015610ef4576001600160a01b038416600090815260126020526040902054610ef190836123c1565b91505b8115610f0457610f048483611ac4565b6016546001600160a01b0316158015610f1a5750805b15610f3f57601680546001600160a01b0319166001600160a01b038616179055611170565b808015610f5a57506016546001600160a01b03858116911614155b1561117057600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015610faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fce91906123d8565b6001600160a01b03868116600090815260176020526040908190205490516370a0823160e01b815290821660048201529116906370a0823190602401602060405180830381865afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190612392565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123d8565b6016546001600160a01b03908116600090815260176020526040908190205490516370a0823160e01b815290821660048201529116906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190612392565b905080821161116d57601680546001600160a01b0319166001600160a01b0388161790555b50505b600061117c84476123c1565b90506103e86008548261118f91906123f5565b6111999190612414565b600e60008282546111aa9190612436565b9091555050600a546103e8906111c090836123f5565b6111ca9190612414565b600f60008282546111db9190612436565b9091555050600b546103e8906111f190836123f5565b6111fb9190612414565b6010600082825461120c9190612436565b9091555050601054600f54600e5461122490476123c1565b61122e91906123c1565b61123891906123c1565b601155600c54600e541061124e5761124e610bc1565b600c54600f541061126157611261610d06565b600c5460105410611274576112746109a4565b600d546011541061129457601654611294906001600160a01b0316611c81565b5050505050565b6112a3611a5b565b601554600160a01b900460ff16156112ba57600080fd5b6015805460ff60a01b1916600160a01b1790556040517f6e646a980ba56ee7cb3031c878bc514eee5ea01f8d11b005ab630c470a5cfe8990600090a1565b611300611a5b565b61130a6000611fde565b565b611314611a5b565b601554600160b81b900460ff161561132b57600080fd5b6015805460ff60b81b1916600160b81b1790556040517ff0fee47614f22f38389abedf99711a8247311a440e37da802db457410f79b44990600090a1565b611371611a5b565b6001600160a01b0381161580159061139457506001600160a01b03811661dead14155b80156113ae57506002546001600160a01b03828116911614155b6113b757600080fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3431bc932834bba479a2b59e0fc776b87c0e05ea4837cf59330044387228809c90600090a35050565b611411611a5b565b601554600160b81b900460ff161561142857600080fd5b600c8190556040518181527fe8c946fc4a31c5e8b0827f04d65a6871a11eed499a6a4c7a5575984ee57fcaaf90602001610a77565b611465611a5b565b600554810361147357600080fd5b6003548110158015611489575060045460055411155b61149257600080fd5b60058190556040518181527fdd892b1378d52503cedc68cc47f2cc1154ba54000d37699cd219ee8ee226031c90602001610a77565b6114cf611a5b565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036114fc57600080fd5b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffc67711b8a7af24ffddf659070c3decac9ab9875d13111981b4dd7882a042641910160405180910390a25050565b611563611a5b565b601554600160a81b900460ff161561157a57600080fd5b6015805460ff60a81b1916600160a81b1790556040517ff6863ac00d4113edafc25ce4792b1634e4c65e7747324d9f39b631c7d230363d90600090a1565b6115c0611a5b565b6001546001600160a01b03908116908216036115db57600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610a77565b600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015611674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169891906123d8565b6040516370a0823160e01b81523060048201529091506001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612392565b6040518263ffffffff1660e01b815260040161172991815260200190565b600060405180830381600087803b15801561174357600080fd5b505af1158015611294573d6000803e3d6000fd5b61175f611a5b565b601554600160c01b900460ff161561177657600080fd5b6015805460ff60c01b1916600160c01b1790556040517f8c4a18104ac2b27489b3932e0ddada0ca57d2377405bfa76355a10188394fe5f90600090a1565b6117bc611a5b565b601554600160c81b900460ff16156117d357600080fd5b6015805460ff60c81b1916600160c81b1790556040517fe021274e0cabfb6fa9dcbd1ff0fa3a065492bbc01addb9e1a7e1f532bc18780690600090a1565b611819611a5b565b6001600160a01b0381161580159061183c57506001600160a01b03811661dead14155b801561185657506015546001600160a01b03828116911614155b61185f57600080fd5b601554600160b01b900460ff161561187657600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1d440445044acc67b35f82fda02fc5d23c22f882b4bde500e8949931a3d990e190600090a35050565b6118d0611a5b565b600b54600a546009546008546118e69190612436565b6118f09190612436565b6118fa9190612436565b6103e81461190757600080fd5b600654841015801561191b57506007548411155b61192457600080fd5b600654831015801561193857506007548311155b61194157600080fd5b600654821015801561195557506007548211155b61195e57600080fd5b600654811015801561197257506007548111155b61197b57600080fd5b60088490556009839055600a829055600b8190556040805185815260208101859052908101839052606081018290527fdba57146a04ecfe691533212d4dc5dd0f01e5622f6da6351e42fc10876bcfa3e9060800160405180910390a150505050565b6119e5611a5b565b6001600160a01b038116611a4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b611a5881611fde565b50565b33611a6e6000546001600160a01b031690565b6001600160a01b03161461130a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611a46565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110611af957611af961244e565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c464892600480830193919282900301816000875af1158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7891906123d8565b81600181518110611b8b57611b8b61244e565b6001600160a01b03928316602091820292909201015260015460405163095ea7b360e01b81529082166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af1158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190612464565b5060015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c4a9085906000908690309042906004016124c5565b600060405180830381600087803b158015611c6457600080fd5b505af1158015611c78573d6000803e3d6000fd5b50505050505050565b6001600160a01b038082166000818152601760209081526040808320546005548251639358928b60e01b8152925194964796899693909116946103e89492939192639358928b92600480830193928290030181865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c9190612392565b611d1691906123f5565b611d209190612414565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190612392565b1115611daa576011805460009091559350611da5858561202e565b611f53565b601180546000918290556040516370a0823160e01b81523060048201529095506001600160a01b038416906370a0823190602401602060405180830381865afa158015611dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1f9190612392565b1115611eb0576040516370a0823160e01b8152306004820152611e999086906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e939190612392565b86612182565b611ea347846123c1565b611ead90856123c1565b93505b8315611f535783611ec2600282612414565b94506000611ed086836123c1565b9050611edc878761202e565b6040516370a0823160e01b8152306004820152611f509088906001600160a01b038716906370a0823190602401602060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a9190612392565b83612182565b50505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190612392565b6001600160a01b0390951660009081526012602052604090209490945550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af115801561209a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120be91906123d8565b816000815181106120d1576120d161244e565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106121055761210561244e565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590849061214b90600090869030904290600401612501565b6000604051808303818588803b15801561216457600080fd5b505af1158015612178573d6000803e3d6000fd5b5050505050505050565b60015460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af11580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f99190612464565b5060015460025460405163f305d71960e01b81526001600160a01b03868116600483015260248201869052600060448301819052606483015291821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561226c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122919190612536565b505050505050565b6000602082840312156122ab57600080fd5b5035919050565b6001600160a01b0381168114611a5857600080fd5b600080604083850312156122da57600080fd5b82356122e5816122b2565b915060208301356122f5816122b2565b809150509250929050565b60006020828403121561231257600080fd5b813561231d816122b2565b9392505050565b8015158114611a5857600080fd5b6000806040838503121561234557600080fd5b8235612350816122b2565b915060208301356122f581612324565b6000806000806080858703121561237657600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156123a457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123d3576123d36123ab565b500390565b6000602082840312156123ea57600080fd5b815161231d816122b2565b600081600019048311821515161561240f5761240f6123ab565b500290565b60008261243157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612449576124496123ab565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561247657600080fd5b815161231d81612324565b600081518084526020808501945080840160005b838110156124ba5781516001600160a01b031687529582019590820190600101612495565b509495945050505050565b85815284602082015260a0604082015260006124e460a0830186612481565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061251a6080830186612481565b6001600160a01b03949094166040830152506060015292915050565b60008060006060848603121561254b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f28beb6aa2217375884c7c730cdc7bf1a8c91c304f75aef3ba506bb62a46f92164736f6c634300080f00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103535760003560e01c806399eefadb116101c6578063dbc609f8116100f7578063e88e64a111610095578063f03b6ffc1161006f578063f03b6ffc14610924578063f2fde38b14610944578063f48167a514610964578063f887ea401461098457600080fd5b8063e88e64a1146108cd578063e97ca4b1146108ee578063f01d3c4e1461090e57600080fd5b8063e0f0edc6116100d1578063e0f0edc61461086b578063e2568ad21461088c578063e4c4ebfc146108a2578063e6f3e39e146108b757600080fd5b8063dbc609f8146107fe578063ddf617f314610814578063de2f78221461083557600080fd5b8063c38ec0b611610164578063cb3f4f171161013e578063cb3f4f1714610791578063ccfe13f3146107b2578063d6c1f49d146107c8578063d938a3e6146107dd57600080fd5b8063c38ec0b614610750578063c3926a2914610765578063c96f4d4d1461077b57600080fd5b8063b871ee7a116101a0578063b871ee7a146106e5578063bb43c32614610705578063c0d786551461071a578063c31737741461073a57600080fd5b806399eefadb1461068f578063b5fb2174146106a5578063b68e204c146106c557600080fd5b8063517cafef116102a057806377e7e2021161023e57806387020d6b1161021857806387020d6b1461061b5780638bb28de21461063b5780638da5cb5b1461065157806390d8dec71461066f57600080fd5b806377e7e202146105c45780637943da69146105e45780637c4a98b7146105fa57600080fd5b80636aea97f01161027a5780636aea97f01461056f578063715018a61461058457806373bdeb49146105995780637796ff37146105ae57600080fd5b8063517cafef146105195780635a75a8091461053957806361582eaa1461054f57600080fd5b8063143892871161030d578063313dab20116102e7578063313dab20146104ac5780633802fa43146104c25780633f83fb2d146104d75780634e440ef11461050457600080fd5b8063143892871461043057806315291cd414610468578063180978711461048c57600080fd5b8062e553121461035f57806301e1c5e61461037657806303766b7c146103965780630463a009146103b657806306253b90146103d6578063099f833e1461041b57600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b506103746109a4565b005b34801561038257600080fd5b50610374610391366004612299565b610a27565b3480156103a257600080fd5b506103746103b13660046122c7565b610a82565b3480156103c257600080fd5b506103746103d1366004612300565b610b0a565b3480156103e257600080fd5b506104066103f1366004612300565b60186020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042757600080fd5b50610374610bc1565b34801561043c57600080fd5b50601454610450906001600160a01b031681565b6040516001600160a01b039091168152602001610412565b34801561047457600080fd5b5061047e60095481565b604051908152602001610412565b34801561049857600080fd5b50601654610450906001600160a01b031681565b3480156104b857600080fd5b5061047e60105481565b3480156104ce57600080fd5b50610374610ca9565b3480156104e357600080fd5b5061047e6104f2366004612300565b60126020526000908152604090205481565b34801561051057600080fd5b50610374610d06565b34801561052557600080fd5b50610374610534366004612300565b610d85565b34801561054557600080fd5b5061047e60075481565b34801561055b57600080fd5b5061037461056a366004612300565b610e3c565b34801561057b57600080fd5b5061037461129b565b34801561059057600080fd5b506103746112f8565b3480156105a557600080fd5b5061037461130c565b3480156105ba57600080fd5b5061047e600b5481565b3480156105d057600080fd5b506103746105df366004612300565b611369565b3480156105f057600080fd5b5061047e600e5481565b34801561060657600080fd5b5060155461040690600160c81b900460ff1681565b34801561062757600080fd5b50610374610636366004612299565b611409565b34801561064757600080fd5b5061047e60065481565b34801561065d57600080fd5b506000546001600160a01b0316610450565b34801561067b57600080fd5b5061037461068a366004612299565b61145d565b34801561069b57600080fd5b5061047e60045481565b3480156106b157600080fd5b50601354610450906001600160a01b031681565b3480156106d157600080fd5b50601554610450906001600160a01b031681565b3480156106f157600080fd5b50610374610700366004612332565b6114c7565b34801561071157600080fd5b5061037461155b565b34801561072657600080fd5b50610374610735366004612300565b6115b8565b34801561074657600080fd5b5061047e600c5481565b34801561075c57600080fd5b50610374611629565b34801561077157600080fd5b5061047e60115481565b34801561078757600080fd5b5061047e60055481565b34801561079d57600080fd5b5060155461040690600160a01b900460ff1681565b3480156107be57600080fd5b5061047e600f5481565b3480156107d457600080fd5b50610374611757565b3480156107e957600080fd5b5060155461040690600160b01b900460ff1681565b34801561080a57600080fd5b5061047e60035481565b34801561082057600080fd5b5060155461040690600160c01b900460ff1681565b34801561084157600080fd5b50610450610850366004612300565b6017602052600090815260409020546001600160a01b031681565b34801561087757600080fd5b5060155461040690600160b81b900460ff1681565b34801561089857600080fd5b5061047e60085481565b3480156108ae57600080fd5b506103746117b4565b3480156108c357600080fd5b5061047e600d5481565b3480156108d957600080fd5b5060155461040690600160a81b900460ff1681565b3480156108fa57600080fd5b50610374610909366004612300565b611811565b34801561091a57600080fd5b5061047e600a5481565b34801561093057600080fd5b5061037461093f366004612360565b6118c8565b34801561095057600080fd5b5061037461095f366004612300565b6119dd565b34801561097057600080fd5b50600254610450906001600160a01b031681565b34801561099057600080fd5b50600154610450906001600160a01b031681565b6015546001600160a01b03166109b657565b601080546000918290556015546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b5050905080610a235760108290555b5050565b610a2f611a5b565b601554600160c01b900460ff1615610a4657600080fd5b600d8190556040518181527ffe250e4d10f1450890886b0654af04a775827e3964546990bbcfb0f507016af5906020015b60405180910390a150565b610a8a611a5b565b6001600160a01b03828116600090815260176020526040902054818316911603610ab357600080fd5b6001600160a01b0382811660008181526017602052604080822080546001600160a01b0319169486169485179055517f688668e8510f3448e27e2aa9c5e77af150a0272c38816fec87b299810e38b8049190a35050565b610b12611a5b565b6001600160a01b03811615801590610b3557506001600160a01b03811661dead14155b8015610b4f57506014546001600160a01b03828116911614155b610b5857600080fd5b601554600160a81b900460ff1615610b6f57600080fd5b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f25332970a4f1b67df8dd91ce4f608773bd00941f1203eda36a545a03640e342390600090a35050565b6013546001600160a01b0316610bd357565b601360009054906101000a90046001600160a01b03166001600160a01b03166329a2192b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2357600080fd5b505af1158015610c37573d6000803e3d6000fd5b5050600e80546000918290556013546040519194509192506001600160a01b039091169083908381818185875af1925050503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b5050905080610a235750600e55565b610cb1611a5b565b601554600160b01b900460ff1615610cc857600080fd5b6015805460ff60b01b1916600160b01b1790556040517fbe12b38d4cf4c293207b3ef208df8a6fcdd921b2f47ef87a780c5cf0dc8b8e8b90600090a1565b6014546001600160a01b0316610d1857565b600f80546000918290556014546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114610d71576040519150601f19603f3d011682016040523d82523d6000602084013e610d76565b606091505b5050905080610a235750600f55565b610d8d611a5b565b6001600160a01b03811615801590610db057506001600160a01b03811661dead14155b8015610dca57506013546001600160a01b03828116911614155b610dd357600080fd5b601554600160a01b900460ff1615610dea57600080fd5b601380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f035f81230cd5b48929f16ee6e30f062311fb20ffbc64091e16b40a97fcccb86090600090a35050565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea99190612392565b6001600160a01b03841660009081526018602052604090205490915060ff168015610ef4576001600160a01b038416600090815260126020526040902054610ef190836123c1565b91505b8115610f0457610f048483611ac4565b6016546001600160a01b0316158015610f1a5750805b15610f3f57601680546001600160a01b0319166001600160a01b038616179055611170565b808015610f5a57506016546001600160a01b03858116911614155b1561117057600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015610faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fce91906123d8565b6001600160a01b03868116600090815260176020526040908190205490516370a0823160e01b815290821660048201529116906370a0823190602401602060405180830381865afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190612392565b90506000600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123d8565b6016546001600160a01b03908116600090815260176020526040908190205490516370a0823160e01b815290821660048201529116906370a0823190602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190612392565b905080821161116d57601680546001600160a01b0319166001600160a01b0388161790555b50505b600061117c84476123c1565b90506103e86008548261118f91906123f5565b6111999190612414565b600e60008282546111aa9190612436565b9091555050600a546103e8906111c090836123f5565b6111ca9190612414565b600f60008282546111db9190612436565b9091555050600b546103e8906111f190836123f5565b6111fb9190612414565b6010600082825461120c9190612436565b9091555050601054600f54600e5461122490476123c1565b61122e91906123c1565b61123891906123c1565b601155600c54600e541061124e5761124e610bc1565b600c54600f541061126157611261610d06565b600c5460105410611274576112746109a4565b600d546011541061129457601654611294906001600160a01b0316611c81565b5050505050565b6112a3611a5b565b601554600160a01b900460ff16156112ba57600080fd5b6015805460ff60a01b1916600160a01b1790556040517f6e646a980ba56ee7cb3031c878bc514eee5ea01f8d11b005ab630c470a5cfe8990600090a1565b611300611a5b565b61130a6000611fde565b565b611314611a5b565b601554600160b81b900460ff161561132b57600080fd5b6015805460ff60b81b1916600160b81b1790556040517ff0fee47614f22f38389abedf99711a8247311a440e37da802db457410f79b44990600090a1565b611371611a5b565b6001600160a01b0381161580159061139457506001600160a01b03811661dead14155b80156113ae57506002546001600160a01b03828116911614155b6113b757600080fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3431bc932834bba479a2b59e0fc776b87c0e05ea4837cf59330044387228809c90600090a35050565b611411611a5b565b601554600160b81b900460ff161561142857600080fd5b600c8190556040518181527fe8c946fc4a31c5e8b0827f04d65a6871a11eed499a6a4c7a5575984ee57fcaaf90602001610a77565b611465611a5b565b600554810361147357600080fd5b6003548110158015611489575060045460055411155b61149257600080fd5b60058190556040518181527fdd892b1378d52503cedc68cc47f2cc1154ba54000d37699cd219ee8ee226031c90602001610a77565b6114cf611a5b565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036114fc57600080fd5b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffc67711b8a7af24ffddf659070c3decac9ab9875d13111981b4dd7882a042641910160405180910390a25050565b611563611a5b565b601554600160a81b900460ff161561157a57600080fd5b6015805460ff60a81b1916600160a81b1790556040517ff6863ac00d4113edafc25ce4792b1634e4c65e7747324d9f39b631c7d230363d90600090a1565b6115c0611a5b565b6001546001600160a01b03908116908216036115db57600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001610a77565b600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015611674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169891906123d8565b6040516370a0823160e01b81523060048201529091506001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa1580156116e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170b9190612392565b6040518263ffffffff1660e01b815260040161172991815260200190565b600060405180830381600087803b15801561174357600080fd5b505af1158015611294573d6000803e3d6000fd5b61175f611a5b565b601554600160c01b900460ff161561177657600080fd5b6015805460ff60c01b1916600160c01b1790556040517f8c4a18104ac2b27489b3932e0ddada0ca57d2377405bfa76355a10188394fe5f90600090a1565b6117bc611a5b565b601554600160c81b900460ff16156117d357600080fd5b6015805460ff60c81b1916600160c81b1790556040517fe021274e0cabfb6fa9dcbd1ff0fa3a065492bbc01addb9e1a7e1f532bc18780690600090a1565b611819611a5b565b6001600160a01b0381161580159061183c57506001600160a01b03811661dead14155b801561185657506015546001600160a01b03828116911614155b61185f57600080fd5b601554600160b01b900460ff161561187657600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1d440445044acc67b35f82fda02fc5d23c22f882b4bde500e8949931a3d990e190600090a35050565b6118d0611a5b565b600b54600a546009546008546118e69190612436565b6118f09190612436565b6118fa9190612436565b6103e81461190757600080fd5b600654841015801561191b57506007548411155b61192457600080fd5b600654831015801561193857506007548311155b61194157600080fd5b600654821015801561195557506007548211155b61195e57600080fd5b600654811015801561197257506007548111155b61197b57600080fd5b60088490556009839055600a829055600b8190556040805185815260208101859052908101839052606081018290527fdba57146a04ecfe691533212d4dc5dd0f01e5622f6da6351e42fc10876bcfa3e9060800160405180910390a150505050565b6119e5611a5b565b6001600160a01b038116611a4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b611a5881611fde565b50565b33611a6e6000546001600160a01b031690565b6001600160a01b03161461130a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611a46565b6040805160028082526060820183526000926020830190803683370190505090508281600081518110611af957611af961244e565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c464892600480830193919282900301816000875af1158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7891906123d8565b81600181518110611b8b57611b8b61244e565b6001600160a01b03928316602091820292909201015260015460405163095ea7b360e01b81529082166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af1158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190612464565b5060015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c4a9085906000908690309042906004016124c5565b600060405180830381600087803b158015611c6457600080fd5b505af1158015611c78573d6000803e3d6000fd5b50505050505050565b6001600160a01b038082166000818152601760209081526040808320546005548251639358928b60e01b8152925194964796899693909116946103e89492939192639358928b92600480830193928290030181865afa158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0c9190612392565b611d1691906123f5565b611d209190612414565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a9190612392565b1115611daa576011805460009091559350611da5858561202e565b611f53565b601180546000918290556040516370a0823160e01b81523060048201529095506001600160a01b038416906370a0823190602401602060405180830381865afa158015611dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1f9190612392565b1115611eb0576040516370a0823160e01b8152306004820152611e999086906001600160a01b038516906370a0823190602401602060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e939190612392565b86612182565b611ea347846123c1565b611ead90856123c1565b93505b8315611f535783611ec2600282612414565b94506000611ed086836123c1565b9050611edc878761202e565b6040516370a0823160e01b8152306004820152611f509088906001600160a01b038716906370a0823190602401602060405180830381865afa158015611f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4a9190612392565b83612182565b50505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190612392565b6001600160a01b0390951660009081526012602052604090209490945550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af115801561209a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120be91906123d8565b816000815181106120d1576120d161244e565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106121055761210561244e565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590849061214b90600090869030904290600401612501565b6000604051808303818588803b15801561216457600080fd5b505af1158015612178573d6000803e3d6000fd5b5050505050505050565b60015460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af11580156121d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f99190612464565b5060015460025460405163f305d71960e01b81526001600160a01b03868116600483015260248201869052600060448301819052606483015291821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561226c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122919190612536565b505050505050565b6000602082840312156122ab57600080fd5b5035919050565b6001600160a01b0381168114611a5857600080fd5b600080604083850312156122da57600080fd5b82356122e5816122b2565b915060208301356122f5816122b2565b809150509250929050565b60006020828403121561231257600080fd5b813561231d816122b2565b9392505050565b8015158114611a5857600080fd5b6000806040838503121561234557600080fd5b8235612350816122b2565b915060208301356122f581612324565b6000806000806080858703121561237657600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156123a457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156123d3576123d36123ab565b500390565b6000602082840312156123ea57600080fd5b815161231d816122b2565b600081600019048311821515161561240f5761240f6123ab565b500290565b60008261243157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612449576124496123ab565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561247657600080fd5b815161231d81612324565b600081518084526020808501945080840160005b838110156124ba5781516001600160a01b031687529582019590820190600101612495565b509495945050505050565b85815284602082015260a0604082015260006124e460a0830186612481565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600061251a6080830186612481565b6001600160a01b03949094166040830152506060015292915050565b60008060006060848603121561254b57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f28beb6aa2217375884c7c730cdc7bf1a8c91c304f75aef3ba506bb62a46f92164736f6c634300080f0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

8806:14686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19973:353;;;;;;;;;;;;;:::i;:::-;;13406:239;;;;;;;;;;-1:-1:-1;13406:239:0;;;;;:::i;:::-;;:::i;12888:299::-;;;;;;;;;;-1:-1:-1;12888:299:0;;;;;:::i;:::-;;:::i;15105:470::-;;;;;;;;;;-1:-1:-1;15105:470:0;;;;;:::i;:::-;;:::i;10485:52::-;;;;;;;;;;-1:-1:-1;10485:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1145:14:1;;1138:22;1120:41;;1108:2;1093:18;10485:52:0;;;;;;;;19535:430;;;;;;;;;;;;;:::i;10030:40::-;;;;;;;;;;-1:-1:-1;10030:40:0;;;;-1:-1:-1;;;;;10030:40:0;;;;;;-1:-1:-1;;;;;1352:32:1;;;1334:51;;1322:2;1307:18;10030:40:0;1172:219:1;9530:35:0;;;;;;;;;;;;;;;;;;;1542:25:1;;;1530:2;1515:18;9530:35:0;1396:177:1;10382:38:0;;;;;;;;;;-1:-1:-1;10382:38:0;;;;-1:-1:-1;;;;;10382:38:0;;;9844:30;;;;;;;;;;;;;;;;16325:176;;;;;;;;;;;;;:::i;9919:56::-;;;;;;;;;;-1:-1:-1;9919:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;20334:371;;;;;;;;;;;;;:::i;14621:476::-;;;;;;;;;;-1:-1:-1;14621:476:0;;;;;:::i;:::-;;:::i;9449:29::-;;;;;;;;;;;;;;;;17521:2006;;;;;;;;;;-1:-1:-1;17521:2006:0;;;;;:::i;:::-;;:::i;16509:184::-;;;;;;;;;;;;;:::i;6980:103::-;;;;;;;;;;;;;:::i;16897:184::-;;;;;;;;;;;;;:::i;9616:34::-;;;;;;;;;;;;;;;;14053:560;;;;;;;;;;-1:-1:-1;14053:560:0;;;;;:::i;:::-;;:::i;9765:32::-;;;;;;;;;;;;;;;;10336:37;;;;;;;;;;-1:-1:-1;10336:37:0;;;;-1:-1:-1;;;10336:37:0;;;;;;13195:203;;;;;;;;;;-1:-1:-1;13195:203:0;;;;;:::i;:::-;;:::i;9413:29::-;;;;;;;;;;;;;;;;6747:87;;;;;;;;;;-1:-1:-1;6793:7:0;6820:6;-1:-1:-1;;;;;6820:6:0;6747:87;;13653:392;;;;;;;;;;-1:-1:-1;13653:392:0;;;;;:::i;:::-;;:::i;9153:44::-;;;;;;;;;;;;;;;;9984:39;;;;;;;;;;-1:-1:-1;9984:39:0;;;;-1:-1:-1;;;;;9984:39:0;;;10077:37;;;;;;;;;;-1:-1:-1;10077:37:0;;;;-1:-1:-1;;;;;10077:37:0;;;15583:274;;;;;;;;;;-1:-1:-1;15583:274:0;;;;;:::i;:::-;;:::i;16701:188::-;;;;;;;;;;;;;:::i;12692:::-;;;;;;;;;;-1:-1:-1;12692:188:0;;;;;:::i;:::-;;:::i;9659:41::-;;;;;;;;;;;;;;;;23320:169;;;;;;;;;;;;;:::i;9881:31::-;;;;;;;;;;;;;;;;9363:41;;;;;;;;;;;;;;;;10123:34;;;;;;;;;;-1:-1:-1;10123:34:0;;;;-1:-1:-1;;;10123:34:0;;;;;;9804:33;;;;;;;;;;;;;;;;17089:220;;;;;;;;;;;;;:::i;10206:32::-;;;;;;;;;;-1:-1:-1;10206:32:0;;;;-1:-1:-1;;;10206:32:0;;;;;;9103:43;;;;;;;;;;;;;;;;10286;;;;;;;;;;-1:-1:-1;10286:43:0;;;;-1:-1:-1;;;10286:43:0;;;;;;10427:51;;;;;;;;;;-1:-1:-1;10427:51:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10427:51:0;;;10245:34;;;;;;;;;;-1:-1:-1;10245:34:0;;;;-1:-1:-1;;;10245:34:0;;;;;;9487:36;;;;;;;;;;;;;;;;17317:196;;;;;;;;;;;;;:::i;9707:49::-;;;;;;;;;;;;;;;;10164:35;;;;;;;;;;-1:-1:-1;10164:35:0;;;;-1:-1:-1;;;10164:35:0;;;;;;15865:452;;;;;;;;;;-1:-1:-1;15865:452:0;;;;;:::i;:::-;;:::i;9572:37::-;;;;;;;;;;;;;;;;11848:836;;;;;;;;;;-1:-1:-1;11848:836:0;;;;;:::i;:::-;;:::i;7091:201::-;;;;;;;;;;-1:-1:-1;7091:201:0;;;;;:::i;:::-;;:::i;8907:37::-;;;;;;;;;;-1:-1:-1;8907:37:0;;;;-1:-1:-1;;;;;8907:37:0;;;8868:30;;;;;;;;;;-1:-1:-1;8868:30:0;;;;-1:-1:-1;;;;;8868:30:0;;;19973:353;20026:14;;-1:-1:-1;;;;;20026:14:0;20022:67;;19973:353::o;20022:67::-;20121:15;;;20101:17;20147:19;;;;20197:14;;:41;;20121:15;;20101:17;-1:-1:-1;;;;;20197:14:0;;;;20121:15;;20101:17;20197:41;20101:17;20197:41;20121:15;20197:14;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20179:59;;;20256:7;20251:68;;20280:15;:27;;;20251:68;20011:315;;19973:353::o;13406:239::-;6706:13;:11;:13::i;:::-;13502:31:::1;::::0;-1:-1:-1;;;13502:31:0;::::1;;;13501:32;13493:41;;;::::0;::::1;;13545:25;:37:::0;;;13598:39:::1;::::0;1542:25:1;;;13598:39:0::1;::::0;1530:2:1;1515:18;13598:39:0::1;;;;;;;;13406:239:::0;:::o;12888:299::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;13000:30:0;;::::1;;::::0;;;:16:::1;:30;::::0;;;;;:52;;::::1;:30:::0;::::1;:52:::0;12992:61:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;13064:30:0;;::::1;;::::0;;;:16:::1;:30;::::0;;;;;:51;;-1:-1:-1;;;;;;13064:51:0::1;::::0;;::::1;::::0;;::::1;::::0;;13131:48;::::1;::::0;13064:30;13131:48:::1;12888:299:::0;;:::o;15105:470::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;15203:20:0;::::1;::::0;;::::1;::::0;:98:::1;;-1:-1:-1::0;;;;;;15240:61:0;::::1;15258:42;15240:61;;15203:98;:151;;;;-1:-1:-1::0;15318:17:0::1;::::0;-1:-1:-1;;;;;15318:36:0;;::::1;:17:::0;::::1;:36;;15203:151;15181:184;;;::::0;::::1;;15385:23;::::0;-1:-1:-1;;;15385:23:0;::::1;;;15384:24;15376:33;;;::::0;::::1;;15448:17;::::0;;-1:-1:-1;;;;;15477:35:0;;::::1;-1:-1:-1::0;;;;;;15477:35:0;::::1;::::0;::::1;::::0;;;15528:39:::1;::::0;15448:17;::::1;::::0;15477:35;15448:17;;15528:39:::1;::::0;15420:17:::1;::::0;15528:39:::1;15170:405;15105:470:::0;:::o;19535:430::-;19590:16;;-1:-1:-1;;;;;19590:16:0;19586:69;;19535:430::o;19586:69::-;19688:16;;;;;;;;;-1:-1:-1;;;;;19688:16:0;-1:-1:-1;;;;;19667:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19752:17:0;;;19732;19780:21;;;;19832:16;;:43;;19752:17;;-1:-1:-1;19732:17:0;;-1:-1:-1;;;;;;19832:16:0;;;;19752:17;;19732;19832:43;19732:17;19832:43;19752:17;19832:16;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19814:61;;;19893:7;19888:70;;-1:-1:-1;19917:17:0;:29;19535:430::o;16325:176::-;6706:13;:11;:13::i;:::-;16396:20:::1;::::0;-1:-1:-1;;;16396:20:0;::::1;;;16395:21;16387:30;;;::::0;::::1;;16428:20;:27:::0;;-1:-1:-1;;;;16428:27:0::1;-1:-1:-1::0;;;16428:27:0::1;::::0;;16471:22:::1;::::0;::::1;::::0;16428:27;;16471:22:::1;16325:176::o:0;20334:371::-;20390:17;;-1:-1:-1;;;;;20390:17:0;20386:70;;20334:371::o;20386:70::-;20488:18;;;20468:17;20517:22;;;;20570:17;;:44;;20488:18;;20468:17;-1:-1:-1;;;;;20570:17:0;;;;20488:18;;20468:17;20570:44;20468:17;20570:44;20488:18;20570:17;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20552:62;;;20632:7;20627:71;;-1:-1:-1;20656:18:0;:30;20334:371::o;14621:476::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;14720:20:0;::::1;::::0;;::::1;::::0;:98:::1;;-1:-1:-1::0;;;;;;14757:61:0;::::1;14775:42;14757:61;;14720:98;:150;;;;-1:-1:-1::0;14835:16:0::1;::::0;-1:-1:-1;;;;;14835:35:0;;::::1;:16:::0;::::1;:35;;14720:150;14698:183;;;::::0;::::1;;14901:22;::::0;-1:-1:-1;;;14901:22:0;::::1;;;14900:23;14892:32;;;::::0;::::1;;14963:16;::::0;;-1:-1:-1;;;;;14991:34:0;;::::1;-1:-1:-1::0;;;;;;14991:34:0;::::1;::::0;::::1;::::0;;;15041:48:::1;::::0;14963:16;::::1;::::0;14991:34;14963:16;;15041:48:::1;::::0;14935:17:::1;::::0;15041:48:::1;14687:410;14621:476:::0;:::o;17521:2006::-;17670:45;;-1:-1:-1;;;17670:45:0;;17709:4;17670:45;;;1334:51:1;17613:21:0;;17584:26;;-1:-1:-1;;;;;17670:30:0;;;;;1307:18:1;;17670:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17764:34:0;;17728:33;17764:34;;;:20;:34;;;;;;17647:68;;-1:-1:-1;17764:34:0;;17811:112;;;;-1:-1:-1;;;;;17876:35:0;;;;;;:21;:35;;;;;;17860:51;;;;:::i;:::-;;;17811:112;17939:16;;17935:93;;17972:44;17989:12;18003;17972:16;:44::i;:::-;18044:23;;-1:-1:-1;;;;;18044:23:0;:37;:69;;;;;18085:28;18044:69;18040:611;;;18130:23;:38;;-1:-1:-1;;;;;;18130:38:0;-1:-1:-1;;;;;18130:38:0;;;;;18040:611;;;18190:28;:71;;;;-1:-1:-1;18238:23:0;;-1:-1:-1;;;;;18222:39:0;;;18238:23;;18222:39;;18190:71;18186:465;;;18310:6;;:13;;;-1:-1:-1;;;18310:13:0;;;;18278:22;;-1:-1:-1;;;;;18310:6:0;;:11;;:13;;;;;;;;;;;;;;18278:22;18310:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18335:30:0;;;;;;;:16;:30;;;;;;;;18303:63;;-1:-1:-1;;;18303:63:0;;18335:30;;;18303:63;;;1334:51:1;18303:31:0;;;;;1307:18:1;;18303:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18278:88;;18381:38;18429:6;;;;;;;;;-1:-1:-1;;;;;18429:6:0;-1:-1:-1;;;;;18429:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18471:23;;-1:-1:-1;;;;;18471:23:0;;;18454:41;;;;:16;:41;;;;;;;;18422:74;;-1:-1:-1;;;18422:74:0;;18454:41;;;18422:74;;;1334:51:1;18422:31:0;;;;;1307:18:1;;18422:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18381:115;;18535:30;18517:14;:48;18513:127;;18586:23;:38;;-1:-1:-1;;;;;;18586:38:0;-1:-1:-1;;;;;18586:38:0;;;;;18513:127;18263:388;;18186:465;18663:26;18692:42;18716:18;18692:21;:42;:::i;:::-;18663:71;;18807:4;18789:15;;18768:18;:36;;;;:::i;:::-;:43;;;;:::i;:::-;18747:17;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;18865:16:0;;18884:4;;18844:37;;:18;:37;:::i;:::-;:44;;;;:::i;:::-;18822:18;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;18939:13:0;;18955:4;;18918:34;;:18;:34;:::i;:::-;:41;;;;:::i;:::-;18899:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;19054:15:0;;19033:18;;19013:17;;18989:41;;:21;:41;:::i;:::-;:62;;;;:::i;:::-;:80;;;;:::i;:::-;18970:16;:99;19107:16;;19086:17;;:37;19082:93;;19140:23;:21;:23::i;:::-;19213:16;;19191:18;;:38;19187:95;;19246:24;:22;:24::i;:::-;19317:16;;19298:15;;:35;19294:89;;19350:21;:19;:21::i;:::-;19419:25;;19399:16;;:45;19395:125;;19484:23;;19461:47;;-1:-1:-1;;;;;19484:23:0;19461:22;:47::i;:::-;17573:1954;;;;17521:2006;:::o;16509:184::-;6706:13;:11;:13::i;:::-;16582:22:::1;::::0;-1:-1:-1;;;16582:22:0;::::1;;;16581:23;16573:32;;;::::0;::::1;;16616:22;:29:::0;;-1:-1:-1;;;;16616:29:0::1;-1:-1:-1::0;;;16616:29:0::1;::::0;;16661:24:::1;::::0;::::1;::::0;16616:29;;16661:24:::1;16509:184::o:0;6980:103::-;6706:13;:11;:13::i;:::-;7045:30:::1;7072:1;7045:18;:30::i;:::-;6980:103::o:0;16897:184::-;6706:13;:11;:13::i;:::-;16970:22:::1;::::0;-1:-1:-1;;;16970:22:0;::::1;;;16969:23;16961:32;;;::::0;::::1;;17004:22;:29:::0;;-1:-1:-1;;;;17004:29:0::1;-1:-1:-1::0;;;17004:29:0::1;::::0;;17049:24:::1;::::0;::::1;::::0;17004:29;;17049:24:::1;16897:184::o:0;14053:560::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;14173:37:0;::::1;::::0;;::::1;::::0;:132:::1;;-1:-1:-1::0;;;;;;14227:78:0;::::1;14262:42;14227:78;;14173:132;:198;;;;-1:-1:-1::0;14322:22:0::1;::::0;-1:-1:-1;;;;;14322:49:0;;::::1;:22:::0;::::1;:49;;14173:198;14151:231;;;::::0;::::1;;14431:22;::::0;;-1:-1:-1;;;;;14464:48:0;;::::1;-1:-1:-1::0;;;;;;14464:48:0;::::1;::::0;::::1;::::0;;;14528:77:::1;::::0;14431:22;::::1;::::0;14464:48;14431:22;;14528:77:::1;::::0;14395:33:::1;::::0;14528:77:::1;14140:473;14053:560:::0;:::o;13195:203::-;6706:13;:11;:13::i;:::-;13282:22:::1;::::0;-1:-1:-1;;;13282:22:0;::::1;;;13281:23;13273:32;;;::::0;::::1;;13316:16;:28:::0;;;13360:30:::1;::::0;1542:25:1;;;13360:30:0::1;::::0;1530:2:1;1515:18;13360:30:0::1;1396:177:1::0;13653:392:0;6706:13;:11;:13::i;:::-;13780:20:::1;;13755:21;:45:::0;13747:54:::1;;;::::0;::::1;;13845:23;;13820:21;:48;;:99;;;;;13896:23;;13872:20;;:47;;13820:99;13812:108;;;::::0;::::1;;13931:20;:44:::0;;;13991:46:::1;::::0;1542:25:1;;;13991:46:0::1;::::0;1530:2:1;1515:18;13991:46:0::1;1396:177:1::0;15583:274:0;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;15688:34:0;::::1;;::::0;;;:20:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;15680:54:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;15745:34:0;::::1;;::::0;;;:20:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;15745:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15805;;1120:41:1;;;15805:44:0::1;::::0;1093:18:1;15805:44:0::1;;;;;;;15583:274:::0;;:::o;16701:188::-;6706:13;:11;:13::i;:::-;16775:23:::1;::::0;-1:-1:-1;;;16775:23:0;::::1;;;16774:24;16766:33;;;::::0;::::1;;16810:23;:30:::0;;-1:-1:-1;;;;16810:30:0::1;-1:-1:-1::0;;;16810:30:0::1;::::0;;16856:25:::1;::::0;::::1;::::0;16810:30;;16856:25:::1;16701:188::o:0;12692:::-;6706:13;:11;:13::i;:::-;12785:6:::1;::::0;-1:-1:-1;;;;;12785:6:0;;::::1;12766:26:::0;;::::1;::::0;12758:35:::1;;;::::0;::::1;;12804:6;:34:::0;;-1:-1:-1;;;;;;12804:34:0::1;-1:-1:-1::0;;;;;12804:34:0;::::1;::::0;;::::1;::::0;;;12854:18:::1;::::0;1334:51:1;;;12854:18:0::1;::::0;1322:2:1;1307:18;12854::0::1;1172:219:1::0;23320:169:0;23384:6;;:13;;;-1:-1:-1;;;23384:13:0;;;;23362:19;;-1:-1:-1;;;;;23384:6:0;;:11;;:13;;;;;;;;;;;;;;23362:19;23384:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23436:44;;-1:-1:-1;;;23436:44:0;;23474:4;23436:44;;;1334:51:1;23362:35:0;;-1:-1:-1;;;;;;23408:27:0;;;;;;;23436:29;;1307:18:1;;23436:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23408:73;;;;;;;;;;;;;1542:25:1;;1530:2;1515:18;;1396:177;23408:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17089:220;6706:13;:11;:13::i;:::-;17171:31:::1;::::0;-1:-1:-1;;;17171:31:0;::::1;;;17170:32;17162:41;;;::::0;::::1;;17214:31;:38:::0;;-1:-1:-1;;;;17214:38:0::1;-1:-1:-1::0;;;17214:38:0::1;::::0;;17268:33:::1;::::0;::::1;::::0;17214:38;;17268:33:::1;17089:220::o:0;17317:196::-;6706:13;:11;:13::i;:::-;17393:25:::1;::::0;-1:-1:-1;;;17393:25:0;::::1;;;17392:26;17384:35;;;::::0;::::1;;17430:25;:32:::0;;-1:-1:-1;;;;17430:32:0::1;-1:-1:-1::0;;;17430:32:0::1;::::0;;17478:27:::1;::::0;::::1;::::0;17430:32;;17478:27:::1;17317:196::o:0;15865:452::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;15960:20:0;::::1;::::0;;::::1;::::0;:98:::1;;-1:-1:-1::0;;;;;;15997:61:0;::::1;16015:42;15997:61;;15960:98;:148;;;;-1:-1:-1::0;16075:14:0::1;::::0;-1:-1:-1;;;;;16075:33:0;;::::1;:14:::0;::::1;:33;;15960:148;15938:181;;;::::0;::::1;;16139:20;::::0;-1:-1:-1;;;16139:20:0;::::1;;;16138:21;16130:30;;;::::0;::::1;;16199:14;::::0;;-1:-1:-1;;;;;16225:32:0;;::::1;-1:-1:-1::0;;;;;;16225:32:0;::::1;::::0;::::1;::::0;;;16273:36:::1;::::0;16199:14;::::1;::::0;16225:32;16199:14;;16273:36:::1;::::0;16171:17:::1;::::0;16273:36:::1;15927:390;15865:452:::0;:::o;11848:836::-;6706:13;:11;:13::i;:::-;12061::::1;;12042:16;;12025:14;;12007:15;;:32;;;;:::i;:::-;:51;;;;:::i;:::-;:67;;;;:::i;:::-;12078:4;12007:75;11999:84;;;::::0;::::1;;12124:8;;12104:16;:28;;:60;;;;;12156:8;;12136:16;:28;;12104:60;12096:69;;;::::0;::::1;;12203:8;;12184:15;:27;;:58;;;;;12234:8;;12215:15;:27;;12184:58;12176:67;;;::::0;::::1;;12283:8;;12262:17;:29;;:62;;;;;12316:8;;12295:17;:29;;12262:62;12254:71;;;::::0;::::1;;12362:8;;12344:14;:26;;:56;;;;;12392:8;;12374:14;:26;;12344:56;12336:65;;;::::0;::::1;;12414:15;:34:::0;;;12459:14:::1;:32:::0;;;12502:16:::1;:36:::0;;;12549:13:::1;:30:::0;;;12597:79:::1;::::0;;4594:25:1;;;4650:2;4635:18;;4628:34;;;4678:18;;;4671:34;;;4736:2;4721:18;;4714:34;;;12597:79:0::1;::::0;4581:3:1;4566:19;12597:79:0::1;;;;;;;11848:836:::0;;;;:::o;7091:201::-;6706:13;:11;:13::i;:::-;-1:-1:-1;;;;;7180:22:0;::::1;7172:73;;;::::0;-1:-1:-1;;;7172:73:0;;4961:2:1;7172:73:0::1;::::0;::::1;4943:21:1::0;5000:2;4980:18;;;4973:30;5039:34;5019:18;;;5012:62;-1:-1:-1;;;5090:18:1;;;5083:36;5136:19;;7172:73:0::1;;;;;;;;;7256:28;7275:8;7256:18;:28::i;:::-;7091:201:::0;:::o;6842:130::-;6917:10;6906:7;6793;6820:6;-1:-1:-1;;;;;6820:6:0;;6747:87;6906:7;-1:-1:-1;;;;;6906:21:0;;6898:66;;;;-1:-1:-1;;;6898:66:0;;5368:2:1;6898:66:0;;;5350:21:1;;;5387:18;;;5380:30;5446:34;5426:18;;;5419:62;5498:18;;6898:66:0;5166:356:1;22439:473:0;22552:16;;;22566:1;22552:16;;;;;;;;22528:21;;22552:16;;;;;;;;;;-1:-1:-1;22552:16:0;22528:40;;22589:12;22579:4;22584:1;22579:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22579:22:0;;;:7;;;;;;;;;;:22;;;;22622:6;;:13;;;-1:-1:-1;;;22622:13:0;;;;:6;;;;;:11;;:13;;;;;22579:7;;22622:13;;;;;:6;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22612:4;22617:1;22612:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22612:23:0;;;:7;;;;;;;;;:23;22685:6;;22648:58;;-1:-1:-1;;;22648:58:0;;22685:6;;;22648:58;;;5965:51:1;6032:18;;;6025:34;;;22648:28:0;;;;;;5938:18:1;;22648:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22717:6:0;;:187;;-1:-1:-1;;;22717:187:0;;-1:-1:-1;;;;;22717:6:0;;;;:57;;:187;;22789:11;;22717:6;;22831:4;;22858;;22878:15;;22717:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22517:395;22439:473;;:::o;20713:1323::-;-1:-1:-1;;;;;20947:30:0;;;20787:18;20947:30;;;:16;:30;;;;;;;;;21053:20;;21025:25;;-1:-1:-1;;;21025:25:0;;;;20787:18;;20845:21;;20901:12;;20947:30;;;;;21076:4;;21053:20;;20947:30;;21025:23;;:25;;;;;20947:30;21025:25;;;;;20947:30;21025:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;:55;;;;:::i;:::-;20994:28;;-1:-1:-1;;;20994:28:0;;-1:-1:-1;;;;;1352:32:1;;;20994:28:0;;;1334:51:1;20994:15:0;;;;;1307:18:1;;20994:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:86;20990:956;;;21111:16;;;21161:1;21142:20;;;21111:16;-1:-1:-1;21177:42:0;21194:12;21111:16;21177;:42::i;:::-;20990:956;;;21265:16;;;21315:1;21296:20;;;;21337:30;;-1:-1:-1;;;21337:30:0;;21361:4;21337:30;;;1334:51:1;21265:16:0;;-1:-1:-1;;;;;;21337:15:0;;;;;1307:18:1;;21337:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;21333:237;;;21422:30;;-1:-1:-1;;;21422:30:0;;21446:4;21422:30;;;1334:51:1;21392:73:0;;21408:12;;-1:-1:-1;;;;;21422:15:0;;;;;1307:18:1;;21422:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21454:10;21392:15;:73::i;:::-;21511:42;21532:21;21511:18;:42;:::i;:::-;21497:57;;:10;:57;:::i;:::-;21484:70;;21333:237;21590:14;;21586:349;;21643:10;21685:11;21695:1;21643:10;21685:11;:::i;:::-;21672:24;-1:-1:-1;21715:23:0;21741:20;21672:24;21741:7;:20;:::i;:::-;21715:46;;21780:42;21797:12;21811:10;21780:16;:42::i;:::-;21871:30;;-1:-1:-1;;;21871:30:0;;21895:4;21871:30;;;1334:51:1;21841:78:0;;21857:12;;-1:-1:-1;;;;;21871:15:0;;;;;1307:18:1;;21871:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21903:15;21841;:78::i;:::-;21606:329;;21586:349;21996:30;;-1:-1:-1;;;21996:30:0;;22020:4;21996:30;;;1334:51:1;-1:-1:-1;;;;;21996:15:0;;;;;1307:18:1;;21996:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21958:35:0;;;;;;;:21;:35;;;;;:68;;;;-1:-1:-1;;;;20713:1323:0:o;7300:191::-;7374:16;7393:6;;-1:-1:-1;;;;;7410:17:0;;;-1:-1:-1;;;;;;7410:17:0;;;;;;7443:40;;7393:6;;;;;;;7443:40;;7374:16;7443:40;7363:128;7300:191;:::o;22920:392::-;23031:16;;;23045:1;23031:16;;;;;;;;23007:21;;23031:16;;;;;;;;-1:-1:-1;;23068:6:0;;:13;;;-1:-1:-1;;;23068:13:0;;;;23007:40;;-1:-1:-1;;;;;;23068:6:0;;;;:11;;-1:-1:-1;23068:13:0;;;;;;;;;;;;;;:6;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23058:4;23063:1;23058:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23058:23:0;;;-1:-1:-1;;;;;23058:23:0;;;;;23102:12;23092:4;23097:1;23092:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23092:22:0;;;:7;;;;;;;;;:22;23125:6;;:179;;-1:-1:-1;;;23125:179:0;;:6;;;:57;;23190:9;;23125:179;;:6;;23231:4;;23258;;23278:15;;23125:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22996:316;22920:392;;:::o;22044:387::-;22188:6;;22151:58;;-1:-1:-1;;;22151:58:0;;-1:-1:-1;;;;;22188:6:0;;;22151:58;;;5965:51:1;6032:18;;;6025:34;;;22151:28:0;;;;;;5938:18:1;;22151:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22220:6:0;;22360:22;;22220:203;;-1:-1:-1;;;22220:203:0;;-1:-1:-1;;;;;8247:15:1;;;22220:203:0;;;8229:34:1;8279:18;;;8272:34;;;22220:6:0;8322:18:1;;;8315:34;;;8365:18;;;8358:34;22360:22:0;;;8408:19:1;;;8401:44;22397:15:0;8461:19:1;;;8454:35;22220:6:0;;;:22;;22250:9;;8163:19:1;;22220:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22044:387;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:131::-;-1:-1:-1;;;;;274:31:1;;264:42;;254:70;;320:1;317;310:12;335:388;403:6;411;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;:::-;588:5;-1:-1:-1;645:2:1;630:18;;617:32;658:33;617:32;658:33;:::i;:::-;710:7;700:17;;;335:388;;;;;:::o;728:247::-;787:6;840:2;828:9;819:7;815:23;811:32;808:52;;;856:1;853;846:12;808:52;895:9;882:23;914:31;939:5;914:31;:::i;:::-;964:5;728:247;-1:-1:-1;;;728:247:1:o;1786:118::-;1872:5;1865:13;1858:21;1851:5;1848:32;1838:60;;1894:1;1891;1884:12;1909:382;1974:6;1982;2035:2;2023:9;2014:7;2010:23;2006:32;2003:52;;;2051:1;2048;2041:12;2003:52;2090:9;2077:23;2109:31;2134:5;2109:31;:::i;:::-;2159:5;-1:-1:-1;2216:2:1;2201:18;;2188:32;2229:30;2188:32;2229:30;:::i;2296:385::-;2382:6;2390;2398;2406;2459:3;2447:9;2438:7;2434:23;2430:33;2427:53;;;2476:1;2473;2466:12;2427:53;-1:-1:-1;;2499:23:1;;;2569:2;2554:18;;2541:32;;-1:-1:-1;2620:2:1;2605:18;;2592:32;;2671:2;2656:18;2643:32;;-1:-1:-1;2296:385:1;-1:-1:-1;2296:385:1:o;3128:184::-;3198:6;3251:2;3239:9;3230:7;3226:23;3222:32;3219:52;;;3267:1;3264;3257:12;3219:52;-1:-1:-1;3290:16:1;;3128:184;-1:-1:-1;3128:184:1:o;3317:127::-;3378:10;3373:3;3369:20;3366:1;3359:31;3409:4;3406:1;3399:15;3433:4;3430:1;3423:15;3449:125;3489:4;3517:1;3514;3511:8;3508:34;;;3522:18;;:::i;:::-;-1:-1:-1;3559:9:1;;3449:125::o;3579:251::-;3649:6;3702:2;3690:9;3681:7;3677:23;3673:32;3670:52;;;3718:1;3715;3708:12;3670:52;3750:9;3744:16;3769:31;3794:5;3769:31;:::i;3835:168::-;3875:7;3941:1;3937;3933:6;3929:14;3926:1;3923:21;3918:1;3911:9;3904:17;3900:45;3897:71;;;3948:18;;:::i;:::-;-1:-1:-1;3988:9:1;;3835:168::o;4008:217::-;4048:1;4074;4064:132;;4118:10;4113:3;4109:20;4106:1;4099:31;4153:4;4150:1;4143:15;4181:4;4178:1;4171:15;4064:132;-1:-1:-1;4210:9:1;;4008:217::o;4230:128::-;4270:3;4301:1;4297:6;4294:1;4291:13;4288:39;;;4307:18;;:::i;:::-;-1:-1:-1;4343:9:1;;4230:128::o;5659:127::-;5720:10;5715:3;5711:20;5708:1;5701:31;5751:4;5748:1;5741:15;5775:4;5772:1;5765:15;6070:245;6137:6;6190:2;6178:9;6169:7;6165:23;6161:32;6158:52;;;6206:1;6203;6196:12;6158:52;6238:9;6232:16;6257:28;6279:5;6257:28;:::i;6320:461::-;6373:3;6411:5;6405:12;6438:6;6433:3;6426:19;6464:4;6493:2;6488:3;6484:12;6477:19;;6530:2;6523:5;6519:14;6551:1;6561:195;6575:6;6572:1;6569:13;6561:195;;;6640:13;;-1:-1:-1;;;;;6636:39:1;6624:52;;6696:12;;;;6731:15;;;;6672:1;6590:9;6561:195;;;-1:-1:-1;6772:3:1;;6320:461;-1:-1:-1;;;;;6320:461:1:o;6786:582::-;7085:6;7074:9;7067:25;7128:6;7123:2;7112:9;7108:18;7101:34;7171:3;7166:2;7155:9;7151:18;7144:31;7048:4;7192:57;7244:3;7233:9;7229:19;7221:6;7192:57;:::i;:::-;-1:-1:-1;;;;;7285:32:1;;;;7280:2;7265:18;;7258:60;-1:-1:-1;7349:3:1;7334:19;7327:35;7184:65;6786:582;-1:-1:-1;;;6786:582:1:o;7373:510::-;7644:6;7633:9;7626:25;7687:3;7682:2;7671:9;7667:18;7660:31;7607:4;7708:57;7760:3;7749:9;7745:19;7737:6;7708:57;:::i;:::-;-1:-1:-1;;;;;7801:32:1;;;;7796:2;7781:18;;7774:60;-1:-1:-1;7865:2:1;7850:18;7843:34;7700:65;7373:510;-1:-1:-1;;7373:510:1:o;8500:306::-;8588:6;8596;8604;8657:2;8645:9;8636:7;8632:23;8628:32;8625:52;;;8673:1;8670;8663:12;8625:52;8702:9;8696:16;8686:26;;8752:2;8741:9;8737:18;8731:25;8721:35;;8796:2;8785:9;8781:18;8775:25;8765:35;;8500:306;;;;;:::o

Swarm Source

ipfs://f28beb6aa2217375884c7c730cdc7bf1a8c91c304f75aef3ba506bb62a46f921

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The X7100 Liquidity Hub swaps fee tokens for native tokens and allocates capital between X7100 tokens and other parts of the X7 Ecosystem.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.