ETH Price: $3,062.98 (-7.14%)
 

Overview

ETH Balance

0.544165093846660601 ETH

Eth Value

$1,666.77 (@ $3,062.98/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Treasury Ba...212030262024-11-16 21:43:5971 days ago1731793439IN
0x6913Bb5E...d3aB14130
0 ETH0.0003685111.09297966
Send Distribute ...212030222024-11-16 21:43:1171 days ago1731793391IN
0x6913Bb5E...d3aB14130
0 ETH0.0009511311.65362845
Set Balance Thre...212027782024-11-16 20:54:2371 days ago1731790463IN
0x6913Bb5E...d3aB14130
0 ETH0.000402912.60655463
Set Liquidity To...212027692024-11-16 20:52:3571 days ago1731790355IN
0x6913Bb5E...d3aB14130
0 ETH0.0003731412.09428589
Set Off Ramp Pai...212027672024-11-16 20:52:1171 days ago1731790331IN
0x6913Bb5E...d3aB14130
0 ETH0.0003749412.34451979
Set Auxiliary Ta...212027182024-11-16 20:42:2371 days ago1731789743IN
0x6913Bb5E...d3aB14130
0 ETH0.0003999412.11308698
Set Balance Thre...211869552024-11-14 15:53:5973 days ago1731599639IN
0x6913Bb5E...d3aB14130
0 ETH0.0010273532.13309474
Process Fees207493912024-09-14 14:17:35134 days ago1726323455IN
0x6913Bb5E...d3aB14130
0 ETH0.000493072.87313943
Set Slippage Man...207493852024-09-14 14:16:23134 days ago1726323383IN
0x6913Bb5E...d3aB14130
0 ETH0.000091733.04611846
Process Fees207446712024-09-13 22:27:11135 days ago1726266431IN
0x6913Bb5E...d3aB14130
0 ETH0.000798844.46922504
Set Treasury Tar...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.000022960.7405265
Set Off Ramp Pai...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.000035130.7405265
Set Liquidity To...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.00003550.7405265
Set Distribution...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.00003710.7405265
Set Balance Thre...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.000023670.7405265
Set Auxiliary Ta...206241042024-08-28 2:28:11152 days ago1724812091IN
0x6913Bb5E...d3aB14130
0 ETH0.00003710.7405265

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
212174752024-11-18 22:04:5969 days ago1731967499
0x6913Bb5E...d3aB14130
0.07193969 ETH
212030262024-11-16 21:43:5971 days ago1731793439
0x6913Bb5E...d3aB14130
0.24583429 ETH
212030222024-11-16 21:43:1171 days ago1731793391
0x6913Bb5E...d3aB14130
0.00124465 ETH
212030222024-11-16 21:43:1171 days ago1731793391
0x6913Bb5E...d3aB14130
0.02937564 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.19767647 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.24666056 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.24666056 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.00223618 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.02937564 ETH
212029042024-11-16 21:19:3571 days ago1731791975
0x6913Bb5E...d3aB14130
0.00330509 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.19823953 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.24736439 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.24736439 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.00308077 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.02937564 ETH
212029022024-11-16 21:19:1171 days ago1731791951
0x6913Bb5E...d3aB14130
0.00612039 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.19823953 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.24736439 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.24736439 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.00308077 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.02937564 ETH
212028222024-11-16 21:03:1171 days ago1731790991
0x6913Bb5E...d3aB14130
0.00612039 ETH
211806602024-11-13 18:48:1174 days ago1731523691
0x6913Bb5E...d3aB14130
0.00414884 ETH
211695882024-11-12 5:42:5976 days ago1731390179
0x6913Bb5E...d3aB14130
0.29375649 ETH
211695882024-11-12 5:42:5976 days ago1731390179
0x6913Bb5E...d3aB14130
0.00034801 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
X7DAOLiquidityHubV2

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 800 runs

Other Settings:
paris EvmVersion
File 1 of 1 : X7DAOLiquidityHubV2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

/*

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

Contract: Smart Contract for managing X7DAO fee tokens V2

Fixes:

    1. Ability to manage the release of tokens built up by the contract to not affect user trading with large slippage

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 auxiliaryShare_, uint256 treasuryShare_) external onlyOwner {
        require(distributeShare + liquidityShare + auxiliaryShare + treasuryShare == 1000);

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

        distributeShare = distributeShare_;
        liquidityShare = liquidityShare_;
        auxiliaryShare = auxiliaryShare_;
        treasuryShare = treasuryShare_;

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

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

    function setOffRampPair(address offRampPairAddress) external onlyOwner {
        require(offRampPair != offRampPairAddress);
        offRampPair = offRampPairAddress;
        emit OffRampPairSet(offRampPairAddress);
    }

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

    function setMaxSlippage(uint256 newMaxSlippageBips) external onlyOwner {
        require(newMaxSlippageBips > 0 && newMaxSlippageBips <= 1000, "Invalid slippage value"); // Max 10% slippage
        uint256 oldSlippage = maxSlippageBips;
        maxSlippageBips = newMaxSlippageBips;
        emit MaxSlippageUpdated(oldSlippage, newMaxSlippageBips);
    }

    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 setAuxiliaryTarget(address target) external onlyOwner {
        require(
            target != address(0) &&
            target != address(0x000000000000000000000000000000000000dEaD)
            && auxiliaryTarget != payable(target)
        );
        require(!auxiliaryTargetFrozen);
        address oldTarget = address(auxiliaryTarget);
        auxiliaryTarget = payable(target);
        emit AuxiliaryTargetSet(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 freezeAuxiliaryTarget() external onlyOwner {
        require(!auxiliaryTargetFrozen);
        auxiliaryTargetFrozen = true;
        emit AuxiliaryTargetFrozen();
    }

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

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 getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    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 IUniswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface ILiquidityHub {
    function processFees(address) external;
}

interface IX7EcosystemSplitter {
    function takeBalance() external;
}

interface IWETH {
    function withdraw(uint) external;
}

contract X7DAOLiquidityHubV2 is Ownable, ILiquidityHub {
    IUniswapV2Router public router;
    address public offRampPair;

    IERC20 public x7dao;
    address public liquidityTokenReceiver;
    uint256 public minLiquidityRatioTarget = 5;
    uint256 public maxLiquidityRatioTarget = 99;
    uint256 public maxSlippageBips = 200; // 2% default slippage

    uint256 public liquidityRatioTarget = 15;

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

    uint256 public distributeShare = 300;
    uint256 public liquidityShare = 200;
    uint256 public auxiliaryShare = 250;
    uint256 public treasuryShare = 250;

    uint256 public balanceThreshold = 1 ether;

    uint256 public distributeBalance;
    uint256 public auxiliaryBalance;
    uint256 public treasuryBalance;
    uint256 public liquidityBalance;
    uint256 public x7daoLiquidityBalance;

    address payable public distributeTarget;
    address payable public auxiliaryTarget;
    address payable public treasuryTarget;

    bool public distributeTargetFrozen;
    bool public auxiliaryTargetFrozen;
    bool public treasuryTargetFrozen;
    bool public balanceThresholdFrozen;
    bool public slippageManagementEnabled = true;

    event SharesSet(uint256 distributeShare, uint256 liquidityShare, uint256 auxiliaryShare, uint256 treasuryShare);
    event OffRampPairSet(address indexed offRampPair);
    event DistributeTargetSet(address indexed oldTarget, address indexed newTarget);
    event AuxiliaryTargetSet(address indexed oldTarget, address indexed newTarget);
    event TreasuryTargetSet(address indexed oldTarget, address indexed newTarget);
    event MaxSlippageSet(uint256 oldSlippage, uint256 newSlippage);
    event SlippageManagementEnabledSet(bool enabled);
    event LiquidityRatioTargetSet(uint256 liquidityRatioTarget);
    event LiquidityTokenReceiverSet(address indexed oldReciever, address indexed newReceiver);
    event BalanceThresholdSet(uint256 threshold);
    event RouterSet(address router);
    event TreasuryTargetFrozen();
    event AuxiliaryTargetFrozen();
    event DistributeTargetFrozen();
    event BalanceThresholdFrozen();

    constructor(address x7dao_, address router_, address _owner) Ownable(_owner) {
        router = IUniswapV2Router(router_);
        x7dao = IERC20(x7dao_);
        emit RouterSet(router_);
    }

    receive() external payable {}

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

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

        distributeShare = distributeShare_;
        liquidityShare = liquidityShare_;
        auxiliaryShare = auxiliaryShare_;
        treasuryShare = treasuryShare_;

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

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

    function setOffRampPair(address offRampPairAddress) external onlyOwner {
        require(offRampPair != offRampPairAddress);
        offRampPair = offRampPairAddress;
        emit OffRampPairSet(offRampPairAddress);
    }

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

    function setMaxSlippage(uint256 newMaxSlippageBips) external onlyOwner {
        require(newMaxSlippageBips > 0 && newMaxSlippageBips <= 1000, "Invalid slippage value"); // Max 10% slippage
        uint256 oldSlippage = maxSlippageBips;
        maxSlippageBips = newMaxSlippageBips;
        emit MaxSlippageSet(oldSlippage, newMaxSlippageBips);
    }

    function setSlippageManagementEnabled(bool enabled) external onlyOwner {
        require(slippageManagementEnabled != enabled);
        slippageManagementEnabled = enabled;
        emit SlippageManagementEnabledSet(enabled);
    }

    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 setAuxiliaryTarget(address target) external onlyOwner {
        require(
            target != address(0) &&
                target != address(0x000000000000000000000000000000000000dEaD) &&
                auxiliaryTarget != payable(target)
        );
        require(!auxiliaryTargetFrozen);
        address oldTarget = address(auxiliaryTarget);
        auxiliaryTarget = payable(target);
        emit AuxiliaryTargetSet(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 freezeAuxiliaryTarget() external onlyOwner {
        require(!auxiliaryTargetFrozen);
        auxiliaryTargetFrozen = true;
        emit AuxiliaryTargetFrozen();
    }

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

    function processFees(address tokenAddress) external {
        require(tokenAddress != address(0), "Invalid token address");
        require(IERC20(tokenAddress).balanceOf(address(this)) > 0, "No tokens to process");

        uint256 startingETHBalance = address(this).balance;

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

        if (tokenAddress == address(x7dao)) {
            tokensToSwap -= x7daoLiquidityBalance;
        }

        if (tokensToSwap > 0) {
            uint256 actualTokensToSwap = tokensToSwap;

            if (slippageManagementEnabled) {
                (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(offRampPair).getReserves();
                uint112 tokenReserve = address(x7dao) < router.WETH() ? reserve0 : reserve1;
                uint256 maxTokensForTargetSlippage = calculateMaxTokensForSlippage(tokenReserve);
                actualTokensToSwap = tokensToSwap < maxTokensForTargetSlippage
                    ? tokensToSwap
                    : maxTokensForTargetSlippage;
            }

            swapTokensForEth(tokenAddress, actualTokensToSwap);
        }

        // Rest of the function remains the same
        uint256 ETHForDistribution = address(this).balance - startingETHBalance;

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

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

        if (auxiliaryBalance >= balanceThreshold) {
            sendAuxiliaryBalance();
        }

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

        if (liquidityBalance >= balanceThreshold) {
            buyBackAndAddLiquidity();
        }
    }

    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 sendAuxiliaryBalance() internal {
        if (auxiliaryTarget == address(0)) {
            return;
        }

        uint256 ethToSend = auxiliaryBalance;
        auxiliaryBalance = 0;

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

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

    function buyBackAndAddLiquidity() internal {
        uint256 currentX7DAOBalance = x7dao.balanceOf(address(this));
        uint256 circulatingSupply = x7dao.circulatingSupply();
        uint256 pairX7DAOBalance = x7dao.balanceOf(offRampPair);
        uint256 targetX7DAOLiquidity = (circulatingSupply * liquidityRatioTarget) / 100;

        if (pairX7DAOBalance >= targetX7DAOLiquidity) {
            swapEthForTokens(liquidityBalance);
        } else {
            uint256 x7daoNeeded = targetX7DAOLiquidity - pairX7DAOBalance;

            if (currentX7DAOBalance >= x7daoNeeded) {
                addLiquidityETH(x7daoNeeded, liquidityBalance);
            } else {
                uint256 x7daoToBuy = x7daoNeeded - currentX7DAOBalance;
                uint256 ethForX7DAO = estimateETHForTokens(x7daoToBuy);

                if (ethForX7DAO > liquidityBalance) {
                    ethForX7DAO = liquidityBalance;
                }

                swapEthForTokens(ethForX7DAO);

                uint256 newX7DAOBalance = x7dao.balanceOf(address(this));
                uint256 ethLeft = liquidityBalance - ethForX7DAO;

                addLiquidityETH(newX7DAOBalance, ethLeft);
            }
        }

        liquidityBalance = 0;
        x7daoLiquidityBalance = x7dao.balanceOf(address(this));
    }

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

    function estimateETHForTokens(uint256 tokenAmount) internal returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(x7dao);
        uint256[] memory amounts = router.getAmountsIn(tokenAmount, path);
        return amounts[0];
    }

    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(uint256 ethAmount) internal {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(x7dao);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethAmount }(
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function calculateMaxTokensForSlippage(uint112 tokenReserve) internal view returns (uint256) {
        uint256 slippagePercentage = (maxSlippageBips * 1e14) / 10000;
        uint256 maxTokens = (uint256(tokenReserve) * slippagePercentage) / (1e18 + slippagePercentage);

        return maxTokens;
    }

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

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"x7dao_","type":"address"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"AuxiliaryTargetFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldTarget","type":"address"},{"indexed":true,"internalType":"address","name":"newTarget","type":"address"}],"name":"AuxiliaryTargetSet","type":"event"},{"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":[],"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":[{"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":false,"internalType":"uint256","name":"oldSlippage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSlippage","type":"uint256"}],"name":"MaxSlippageSet","type":"event"},{"anonymous":false,"inputs":[{"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":"auxiliaryShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryShare","type":"uint256"}],"name":"SharesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SlippageManagementEnabledSet","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":"auxiliaryBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auxiliaryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auxiliaryTarget","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auxiliaryTargetFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"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":"freezeAuxiliaryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeDistributeTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeTreasuryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"maxSlippageBips","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":[],"name":"offRampPair","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":"sendTreasuryBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setAuxiliaryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setBalanceThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setDistributionTarget","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":"uint256","name":"newMaxSlippageBips","type":"uint256"}],"name":"setMaxSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"auxiliaryShare_","type":"uint256"},{"internalType":"uint256","name":"treasuryShare_","type":"uint256"}],"name":"setShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSlippageManagementEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setTreasuryTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippageManagementEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[],"name":"x7dao","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x7daoLiquidityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260058055606360065560c86007819055600f60088190556096600955610190600a5561012c600b55600c9190915560fa600d819055600e55670de0b6b3a764000090556017805460ff60c01b1916600160c01b17905534801561006657600080fd5b506040516128af3803806128af83398101604081905261008591610165565b8061008f816100f9565b50600180546001600160a01b038481166001600160a01b0319928316811790935560038054918716919092161790556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d159060200160405180910390a15050506101a8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461016057600080fd5b919050565b60008060006060848603121561017a57600080fd5b61018384610149565b925061019160208501610149565b915061019f60408501610149565b90509250925092565b6126f8806101b76000396000f3fe60806040526004361061032c5760003560e01c806390d8dec7116101a5578063c96f4d4d116100ec578063e2568ad211610095578063f2fde38b1161006f578063f2fde38b14610840578063f48167a514610860578063f7b9f76214610880578063f887ea40146108a057600080fd5b8063e2568ad2146107ea578063e97ca4b114610800578063f03b6ffc1461082057600080fd5b8063d938a3e6116100c6578063d938a3e614610792578063dbc609f8146107b3578063e0f0edc6146107c957600080fd5b8063c96f4d4d1461073a578063cb3f4f1714610750578063cd92c5ee1461077157600080fd5b8063ba67ed661161014e578063c317377411610128578063c3173774146106f9578063c38ec0b61461070f578063c3926a291461072457600080fd5b8063ba67ed6614610688578063be1c7142146106b9578063c0d78655146106d957600080fd5b8063a1a8d3c81161017f578063a1a8d3c814610628578063b5fb217414610648578063b68e204c1461066857600080fd5b806390d8dec7146105dd578063933401a4146105fd57806399eefadb1461061257600080fd5b8063715018a6116102745780637c513ce61161021d57806387020d6b116101f757806387020d6b146105735780638ad10792146105935780638bb28de2146105a95780638da5cb5b146105bf57600080fd5b80637c513ce6146105275780637ee2dec31461053d578063838bf4011461055d57600080fd5b806377e7e2021161024e57806377e7e202146104b95780637943da69146104d95780637b31bd78146104ef57600080fd5b8063715018a61461047957806373bdeb491461048e5780637796ff37146104a357600080fd5b806343f68a49116102d657806361582eaa116102b057806361582eaa1461042457806366096ebf146104445780636aea97f01461046457600080fd5b806343f68a49146103ce578063517cafef146103ee5780635a75a8091461040e57600080fd5b806315291cd41161030757806315291cd41461038d578063313dab20146103a35780633802fa43146103b957600080fd5b8062e5531214610338578063099f833e1461034f5780630aeb46be1461036457600080fd5b3661033357005b600080fd5b34801561034457600080fd5b5061034d6108c0565b005b34801561035b57600080fd5b5061034d610943565b34801561037057600080fd5b5061037a60075481565b6040519081526020015b60405180910390f35b34801561039957600080fd5b5061037a600c5481565b3480156103af57600080fd5b5061037a60125481565b3480156103c557600080fd5b5061034d610a2b565b3480156103da57600080fd5b5061034d6103e93660046122eb565b610aa3565b3480156103fa57600080fd5b5061034d610409366004612319565b610b53565b34801561041a57600080fd5b5061037a600a5481565b34801561043057600080fd5b5061034d61043f366004612319565b610c0a565b34801561045057600080fd5b5061034d61045f366004612319565b61102d565b34801561047057600080fd5b5061034d6110e4565b34801561048557600080fd5b5061034d61115c565b34801561049a57600080fd5b5061034d611170565b3480156104af57600080fd5b5061037a600e5481565b3480156104c557600080fd5b5061034d6104d4366004612319565b6111e8565b3480156104e557600080fd5b5061037a60105481565b3480156104fb57600080fd5b5060025461050f906001600160a01b031681565b6040516001600160a01b039091168152602001610384565b34801561053357600080fd5b5061037a600d5481565b34801561054957600080fd5b5061034d61055836600461234b565b611288565b34801561056957600080fd5b5061037a60145481565b34801561057f57600080fd5b5061034d61058e3660046122eb565b611322565b34801561059f57600080fd5b5061037a60115481565b3480156105b557600080fd5b5061037a60095481565b3480156105cb57600080fd5b506000546001600160a01b031661050f565b3480156105e957600080fd5b5061034d6105f83660046122eb565b611376565b34801561060957600080fd5b5061034d6113e0565b34801561061e57600080fd5b5061037a60065481565b34801561063457600080fd5b5060035461050f906001600160a01b031681565b34801561065457600080fd5b5060155461050f906001600160a01b031681565b34801561067457600080fd5b5060175461050f906001600160a01b031681565b34801561069457600080fd5b506017546106a990600160c01b900460ff1681565b6040519015158152602001610384565b3480156106c557600080fd5b5061034d6106d4366004612319565b611458565b3480156106e557600080fd5b5061034d6106f4366004612319565b6114c4565b34801561070557600080fd5b5061037a600f5481565b34801561071b57600080fd5b5061034d611535565b34801561073057600080fd5b5061037a60135481565b34801561074657600080fd5b5061037a60085481565b34801561075c57600080fd5b506017546106a990600160a01b900460ff1681565b34801561077d57600080fd5b506017546106a990600160a81b900460ff1681565b34801561079e57600080fd5b506017546106a990600160b01b900460ff1681565b3480156107bf57600080fd5b5061037a60055481565b3480156107d557600080fd5b506017546106a990600160b81b900460ff1681565b3480156107f657600080fd5b5061037a600b5481565b34801561080c57600080fd5b5061034d61081b366004612319565b61166a565b34801561082c57600080fd5b5061034d61083b366004612368565b611721565b34801561084c57600080fd5b5061034d61085b366004612319565b611836565b34801561086c57600080fd5b5060045461050f906001600160a01b031681565b34801561088c57600080fd5b5060165461050f906001600160a01b031681565b3480156108ac57600080fd5b5060015461050f906001600160a01b031681565b6017546001600160a01b03166108d257565b601280546000918290556017546040519192916001600160a01b039091169083908381818185875af1925050503d806000811461092b576040519150601f19603f3d011682016040523d82523d6000602084013e610930565b606091505b505090508061093f5760128290555b5050565b6015546001600160a01b031661095557565b601560009054906101000a90046001600160a01b03166001600160a01b03166329a2192b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109a557600080fd5b505af11580156109b9573d6000803e3d6000fd5b5050601080546000918290556015546040519194509192506001600160a01b039091169083908381818185875af1925050503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b505090508061093f5750601055565b610a336118c6565b601754600160b01b900460ff1615610a4a57600080fd5b601780547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16600160b01b1790556040517fbe12b38d4cf4c293207b3ef208df8a6fcdd921b2f47ef87a780c5cf0dc8b8e8b90600090a1565b610aab6118c6565b600081118015610abd57506103e88111155b610b0e5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736c6970706167652076616c75650000000000000000000060448201526064015b60405180910390fd5b600780549082905560408051828152602081018490527fda973bd94b10c2214cb2481e0686daab27b8379c7b3da0466b067c532a769dd9910160405180910390a15050565b610b5b6118c6565b6001600160a01b03811615801590610b7e57506001600160a01b03811661dead14155b8015610b9857506015546001600160a01b03828116911614155b610ba157600080fd5b601754600160a01b900460ff1615610bb857600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f035f81230cd5b48929f16ee6e30f062311fb20ffbc64091e16b40a97fcccb86090600090a35050565b6001600160a01b038116610c605760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152606401610b05565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb919061239a565b11610d185760405162461bcd60e51b815260206004820152601460248201527f4e6f20746f6b656e7320746f2070726f636573730000000000000000000000006044820152606401610b05565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d85919061239a565b6003549091506001600160a01b0390811690841603610dae57601454610dab90826123c9565b90505b8015610f10576017548190600160c01b900460ff1615610f0457600080600260009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190612405565b50915091506000600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190612455565b6003546001600160a01b03918216911610610edd5781610edf565b825b90506000610eec8261192f565b9050808610610efb5780610efd565b855b9450505050505b610f0e8482611995565b505b6000610f1c83476123c9565b90506103e8600b5482610f2f9190612472565b610f399190612489565b60106000828254610f4a91906124ab565b9091555050600d546103e890610f609083612472565b610f6a9190612489565b60116000828254610f7b91906124ab565b9091555050600e546103e890610f919083612472565b610f9b9190612489565b60126000828254610fac91906124ab565b9091555050601254601154601054610fc490476123c9565b610fce91906123c9565b610fd891906123c9565b601355600f5460105410610fee57610fee610943565b600f546011541061100157611001611b52565b600f5460125410611014576110146108c0565b600f546013541061102757611027611bd1565b50505050565b6110356118c6565b6001600160a01b0381161580159061105857506001600160a01b03811661dead14155b801561107257506016546001600160a01b03828116911614155b61107b57600080fd5b601754600160a81b900460ff161561109257600080fd5b601680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ffdf720622c2647f671ee76a7e1fa6a1deb3dcba5a7922bfb3880fc1dcf3b594f90600090a35050565b6110ec6118c6565b601754600160a01b900460ff161561110357600080fd5b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f6e646a980ba56ee7cb3031c878bc514eee5ea01f8d11b005ab630c470a5cfe8990600090a1565b6111646118c6565b61116e6000611ecb565b565b6111786118c6565b601754600160b81b900460ff161561118f57600080fd5b601780547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b1790556040517ff0fee47614f22f38389abedf99711a8247311a440e37da802db457410f79b44990600090a1565b6111f06118c6565b6001600160a01b0381161580159061121357506001600160a01b03811661dead14155b801561122d57506004546001600160a01b03828116911614155b61123657600080fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3431bc932834bba479a2b59e0fc776b87c0e05ea4837cf59330044387228809c90600090a35050565b6112906118c6565b801515601760189054906101000a900460ff161515036112af57600080fd5b60178054821515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517f546219322cd51f8e94be1a22f0e300a09ff6224572aaed7b2911607de601701e9061131790831515815260200190565b60405180910390a150565b61132a6118c6565b601754600160b81b900460ff161561134157600080fd5b600f8190556040518181527fe8c946fc4a31c5e8b0827f04d65a6871a11eed499a6a4c7a5575984ee57fcaaf90602001611317565b61137e6118c6565b600854810361138c57600080fd5b60055481101580156113a2575060065460085411155b6113ab57600080fd5b60088190556040518181527fdd892b1378d52503cedc68cc47f2cc1154ba54000d37699cd219ee8ee226031c90602001611317565b6113e86118c6565b601754600160a81b900460ff16156113ff57600080fd5b601780547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b1790556040517f6c8aff4615cb4702edc0f0c4a9bc2cddc262e4b884e109d104be54242458794f90600090a1565b6114606118c6565b6002546001600160a01b0380831691160361147a57600080fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f205890426c74334fba9f3d65990e94e55dac01584e054394ab50173c4a01da2d90600090a250565b6114cc6118c6565b6001546001600160a01b03908116908216036114e757600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001611317565b600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015611580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a49190612455565b6040516370a0823160e01b81523060048201529091506001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611617919061239a565b6040518263ffffffff1660e01b815260040161163591815260200190565b600060405180830381600087803b15801561164f57600080fd5b505af1158015611663573d6000803e3d6000fd5b5050505050565b6116726118c6565b6001600160a01b0381161580159061169557506001600160a01b03811661dead14155b80156116af57506017546001600160a01b03828116911614155b6116b857600080fd5b601754600160b01b900460ff16156116cf57600080fd5b601780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1d440445044acc67b35f82fda02fc5d23c22f882b4bde500e8949931a3d990e190600090a35050565b6117296118c6565b600e54600d54600c54600b5461173f91906124ab565b61174991906124ab565b61175391906124ab565b6103e81461176057600080fd5b60095484101580156117745750600a548411155b61177d57600080fd5b60095483101580156117915750600a548311155b61179a57600080fd5b60095482101580156117ae5750600a548211155b6117b757600080fd5b60095481101580156117cb5750600a548111155b6117d457600080fd5b600b849055600c839055600d829055600e8190556040805185815260208101859052908101839052606081018290527fdba57146a04ecfe691533212d4dc5dd0f01e5622f6da6351e42fc10876bcfa3e9060800160405180910390a150505050565b61183e6118c6565b6001600160a01b0381166118ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b05565b6118c381611ecb565b50565b336118d96000546001600160a01b031690565b6001600160a01b03161461116e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b05565b600080612710600754655af3107a40006119499190612472565b6119539190612489565b9050600061196982670de0b6b3a76400006124ab565b611983836dffffffffffffffffffffffffffff8716612472565b61198d9190612489565b949350505050565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106119ca576119ca6124d4565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c464892600480830193919282900301816000875af1158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190612455565b81600181518110611a5c57611a5c6124d4565b6001600160a01b03928316602091820292909201015260015460405163095ea7b360e01b81529082166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af1158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae191906124ea565b5060015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b1b90859060009086903090429060040161254c565b600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b50505050505050565b6016546001600160a01b0316611b6457565b601180546000918290556016546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b505090508061093f5750601155565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e919061239a565b90506000600360009054906101000a90046001600160a01b03166001600160a01b0316639358928b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb9919061239a565b6003546002546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f919061239a565b90506000606460085484611d439190612472565b611d4d9190612489565b9050808210611d6657611d61601354611f1b565b611e51565b6000611d7283836123c9565b9050808510611d8c57611d878160135461204e565b611e4f565b6000611d9886836123c9565b90506000611da582612164565b9050601354811115611db657506013545b611dbf81611f1b565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c919061239a565b9050600082601354611e3e91906123c9565b9050611e4a828261204e565b505050505b505b60006013556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec2919061239a565b60145550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af1158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190612455565b81600081518110611fbe57611fbe6124d4565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611fef57611fef6124d4565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590849061203590600090869030904290600401612588565b6000604051808303818588803b158015611b3557600080fd5b60035460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c791906124ea565b506001546003546004805460405163f305d71960e01b81526001600160a01b0393841692810192909252602482018690526000604483018190526064830152821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561213f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166391906125bd565b604080516002808252606082018352600092839291906020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af11580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f89190612455565b8160008151811061220b5761220b6124d4565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061223c5761223c6124d4565b6001600160a01b0392831660209182029290920101526001546040516307c0329d60e21b81526000929190911690631f00ca749061228090879086906004016125eb565b600060405180830381865afa15801561229d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122c59190810190612604565b9050806000815181106122da576122da6124d4565b602002602001015192505050919050565b6000602082840312156122fd57600080fd5b5035919050565b6001600160a01b03811681146118c357600080fd5b60006020828403121561232b57600080fd5b813561233681612304565b9392505050565b80151581146118c357600080fd5b60006020828403121561235d57600080fd5b81356123368161233d565b6000806000806080858703121561237e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156123ac57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156123dc576123dc6123b3565b92915050565b80516dffffffffffffffffffffffffffff8116811461240057600080fd5b919050565b60008060006060848603121561241a57600080fd5b612423846123e2565b9250612431602085016123e2565b9150604084015163ffffffff8116811461244a57600080fd5b809150509250925092565b60006020828403121561246757600080fd5b815161233681612304565b80820281158282048414176123dc576123dc6123b3565b6000826124a657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156123dc576123dc6123b3565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124fc57600080fd5b81516123368161233d565b60008151808452602080850194506020840160005b838110156125415781516001600160a01b03168752958201959082019060010161251c565b509495945050505050565b85815284602082015260a06040820152600061256b60a0830186612507565b6001600160a01b0394909416606083015250608001529392505050565b8481526080602082015260006125a16080830186612507565b6001600160a01b03949094166040830152506060015292915050565b6000806000606084860312156125d257600080fd5b8351925060208401519150604084015190509250925092565b82815260406020820152600061198d6040830184612507565b6000602080838503121561261757600080fd5b825167ffffffffffffffff8082111561262f57600080fd5b818501915085601f83011261264357600080fd5b815181811115612655576126556124be565b8060051b604051601f19603f8301168101818110858211171561267a5761267a6124be565b60405291825284820192508381018501918883111561269857600080fd5b938501935b828510156126b65784518452938501939285019261269d565b9897505050505050505056fea264697066735822122040e17927c7cece8eb927afa6186ee92593a9f8845d574e7c60fa21b947e5ec3564736f6c634300081900330000000000000000000000007105e64bf67eca3ae9b123f0e5ca2b83b2ef2da00000000000000000000000006b5422d584943bc8cd0e10e239d624c6fe90fbb8000000000000000000000000f7c5c8bdd689767e039c631ad42482128bd54ba3

Deployed Bytecode

0x60806040526004361061032c5760003560e01c806390d8dec7116101a5578063c96f4d4d116100ec578063e2568ad211610095578063f2fde38b1161006f578063f2fde38b14610840578063f48167a514610860578063f7b9f76214610880578063f887ea40146108a057600080fd5b8063e2568ad2146107ea578063e97ca4b114610800578063f03b6ffc1461082057600080fd5b8063d938a3e6116100c6578063d938a3e614610792578063dbc609f8146107b3578063e0f0edc6146107c957600080fd5b8063c96f4d4d1461073a578063cb3f4f1714610750578063cd92c5ee1461077157600080fd5b8063ba67ed661161014e578063c317377411610128578063c3173774146106f9578063c38ec0b61461070f578063c3926a291461072457600080fd5b8063ba67ed6614610688578063be1c7142146106b9578063c0d78655146106d957600080fd5b8063a1a8d3c81161017f578063a1a8d3c814610628578063b5fb217414610648578063b68e204c1461066857600080fd5b806390d8dec7146105dd578063933401a4146105fd57806399eefadb1461061257600080fd5b8063715018a6116102745780637c513ce61161021d57806387020d6b116101f757806387020d6b146105735780638ad10792146105935780638bb28de2146105a95780638da5cb5b146105bf57600080fd5b80637c513ce6146105275780637ee2dec31461053d578063838bf4011461055d57600080fd5b806377e7e2021161024e57806377e7e202146104b95780637943da69146104d95780637b31bd78146104ef57600080fd5b8063715018a61461047957806373bdeb491461048e5780637796ff37146104a357600080fd5b806343f68a49116102d657806361582eaa116102b057806361582eaa1461042457806366096ebf146104445780636aea97f01461046457600080fd5b806343f68a49146103ce578063517cafef146103ee5780635a75a8091461040e57600080fd5b806315291cd41161030757806315291cd41461038d578063313dab20146103a35780633802fa43146103b957600080fd5b8062e5531214610338578063099f833e1461034f5780630aeb46be1461036457600080fd5b3661033357005b600080fd5b34801561034457600080fd5b5061034d6108c0565b005b34801561035b57600080fd5b5061034d610943565b34801561037057600080fd5b5061037a60075481565b6040519081526020015b60405180910390f35b34801561039957600080fd5b5061037a600c5481565b3480156103af57600080fd5b5061037a60125481565b3480156103c557600080fd5b5061034d610a2b565b3480156103da57600080fd5b5061034d6103e93660046122eb565b610aa3565b3480156103fa57600080fd5b5061034d610409366004612319565b610b53565b34801561041a57600080fd5b5061037a600a5481565b34801561043057600080fd5b5061034d61043f366004612319565b610c0a565b34801561045057600080fd5b5061034d61045f366004612319565b61102d565b34801561047057600080fd5b5061034d6110e4565b34801561048557600080fd5b5061034d61115c565b34801561049a57600080fd5b5061034d611170565b3480156104af57600080fd5b5061037a600e5481565b3480156104c557600080fd5b5061034d6104d4366004612319565b6111e8565b3480156104e557600080fd5b5061037a60105481565b3480156104fb57600080fd5b5060025461050f906001600160a01b031681565b6040516001600160a01b039091168152602001610384565b34801561053357600080fd5b5061037a600d5481565b34801561054957600080fd5b5061034d61055836600461234b565b611288565b34801561056957600080fd5b5061037a60145481565b34801561057f57600080fd5b5061034d61058e3660046122eb565b611322565b34801561059f57600080fd5b5061037a60115481565b3480156105b557600080fd5b5061037a60095481565b3480156105cb57600080fd5b506000546001600160a01b031661050f565b3480156105e957600080fd5b5061034d6105f83660046122eb565b611376565b34801561060957600080fd5b5061034d6113e0565b34801561061e57600080fd5b5061037a60065481565b34801561063457600080fd5b5060035461050f906001600160a01b031681565b34801561065457600080fd5b5060155461050f906001600160a01b031681565b34801561067457600080fd5b5060175461050f906001600160a01b031681565b34801561069457600080fd5b506017546106a990600160c01b900460ff1681565b6040519015158152602001610384565b3480156106c557600080fd5b5061034d6106d4366004612319565b611458565b3480156106e557600080fd5b5061034d6106f4366004612319565b6114c4565b34801561070557600080fd5b5061037a600f5481565b34801561071b57600080fd5b5061034d611535565b34801561073057600080fd5b5061037a60135481565b34801561074657600080fd5b5061037a60085481565b34801561075c57600080fd5b506017546106a990600160a01b900460ff1681565b34801561077d57600080fd5b506017546106a990600160a81b900460ff1681565b34801561079e57600080fd5b506017546106a990600160b01b900460ff1681565b3480156107bf57600080fd5b5061037a60055481565b3480156107d557600080fd5b506017546106a990600160b81b900460ff1681565b3480156107f657600080fd5b5061037a600b5481565b34801561080c57600080fd5b5061034d61081b366004612319565b61166a565b34801561082c57600080fd5b5061034d61083b366004612368565b611721565b34801561084c57600080fd5b5061034d61085b366004612319565b611836565b34801561086c57600080fd5b5060045461050f906001600160a01b031681565b34801561088c57600080fd5b5060165461050f906001600160a01b031681565b3480156108ac57600080fd5b5060015461050f906001600160a01b031681565b6017546001600160a01b03166108d257565b601280546000918290556017546040519192916001600160a01b039091169083908381818185875af1925050503d806000811461092b576040519150601f19603f3d011682016040523d82523d6000602084013e610930565b606091505b505090508061093f5760128290555b5050565b6015546001600160a01b031661095557565b601560009054906101000a90046001600160a01b03166001600160a01b03166329a2192b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109a557600080fd5b505af11580156109b9573d6000803e3d6000fd5b5050601080546000918290556015546040519194509192506001600160a01b039091169083908381818185875af1925050503d8060008114610a17576040519150601f19603f3d011682016040523d82523d6000602084013e610a1c565b606091505b505090508061093f5750601055565b610a336118c6565b601754600160b01b900460ff1615610a4a57600080fd5b601780547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16600160b01b1790556040517fbe12b38d4cf4c293207b3ef208df8a6fcdd921b2f47ef87a780c5cf0dc8b8e8b90600090a1565b610aab6118c6565b600081118015610abd57506103e88111155b610b0e5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736c6970706167652076616c75650000000000000000000060448201526064015b60405180910390fd5b600780549082905560408051828152602081018490527fda973bd94b10c2214cb2481e0686daab27b8379c7b3da0466b067c532a769dd9910160405180910390a15050565b610b5b6118c6565b6001600160a01b03811615801590610b7e57506001600160a01b03811661dead14155b8015610b9857506015546001600160a01b03828116911614155b610ba157600080fd5b601754600160a01b900460ff1615610bb857600080fd5b601580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f035f81230cd5b48929f16ee6e30f062311fb20ffbc64091e16b40a97fcccb86090600090a35050565b6001600160a01b038116610c605760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e206164647265737300000000000000000000006044820152606401610b05565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb919061239a565b11610d185760405162461bcd60e51b815260206004820152601460248201527f4e6f20746f6b656e7320746f2070726f636573730000000000000000000000006044820152606401610b05565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d85919061239a565b6003549091506001600160a01b0390811690841603610dae57601454610dab90826123c9565b90505b8015610f10576017548190600160c01b900460ff1615610f0457600080600260009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190612405565b50915091506000600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190612455565b6003546001600160a01b03918216911610610edd5781610edf565b825b90506000610eec8261192f565b9050808610610efb5780610efd565b855b9450505050505b610f0e8482611995565b505b6000610f1c83476123c9565b90506103e8600b5482610f2f9190612472565b610f399190612489565b60106000828254610f4a91906124ab565b9091555050600d546103e890610f609083612472565b610f6a9190612489565b60116000828254610f7b91906124ab565b9091555050600e546103e890610f919083612472565b610f9b9190612489565b60126000828254610fac91906124ab565b9091555050601254601154601054610fc490476123c9565b610fce91906123c9565b610fd891906123c9565b601355600f5460105410610fee57610fee610943565b600f546011541061100157611001611b52565b600f5460125410611014576110146108c0565b600f546013541061102757611027611bd1565b50505050565b6110356118c6565b6001600160a01b0381161580159061105857506001600160a01b03811661dead14155b801561107257506016546001600160a01b03828116911614155b61107b57600080fd5b601754600160a81b900460ff161561109257600080fd5b601680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ffdf720622c2647f671ee76a7e1fa6a1deb3dcba5a7922bfb3880fc1dcf3b594f90600090a35050565b6110ec6118c6565b601754600160a01b900460ff161561110357600080fd5b601780547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f6e646a980ba56ee7cb3031c878bc514eee5ea01f8d11b005ab630c470a5cfe8990600090a1565b6111646118c6565b61116e6000611ecb565b565b6111786118c6565b601754600160b81b900460ff161561118f57600080fd5b601780547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b1790556040517ff0fee47614f22f38389abedf99711a8247311a440e37da802db457410f79b44990600090a1565b6111f06118c6565b6001600160a01b0381161580159061121357506001600160a01b03811661dead14155b801561122d57506004546001600160a01b03828116911614155b61123657600080fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3431bc932834bba479a2b59e0fc776b87c0e05ea4837cf59330044387228809c90600090a35050565b6112906118c6565b801515601760189054906101000a900460ff161515036112af57600080fd5b60178054821515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517f546219322cd51f8e94be1a22f0e300a09ff6224572aaed7b2911607de601701e9061131790831515815260200190565b60405180910390a150565b61132a6118c6565b601754600160b81b900460ff161561134157600080fd5b600f8190556040518181527fe8c946fc4a31c5e8b0827f04d65a6871a11eed499a6a4c7a5575984ee57fcaaf90602001611317565b61137e6118c6565b600854810361138c57600080fd5b60055481101580156113a2575060065460085411155b6113ab57600080fd5b60088190556040518181527fdd892b1378d52503cedc68cc47f2cc1154ba54000d37699cd219ee8ee226031c90602001611317565b6113e86118c6565b601754600160a81b900460ff16156113ff57600080fd5b601780547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b1790556040517f6c8aff4615cb4702edc0f0c4a9bc2cddc262e4b884e109d104be54242458794f90600090a1565b6114606118c6565b6002546001600160a01b0380831691160361147a57600080fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f205890426c74334fba9f3d65990e94e55dac01584e054394ab50173c4a01da2d90600090a250565b6114cc6118c6565b6001546001600160a01b03908116908216036114e757600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1590602001611317565b600154604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018187875af1158015611580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a49190612455565b6040516370a0823160e01b81523060048201529091506001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa1580156115f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611617919061239a565b6040518263ffffffff1660e01b815260040161163591815260200190565b600060405180830381600087803b15801561164f57600080fd5b505af1158015611663573d6000803e3d6000fd5b5050505050565b6116726118c6565b6001600160a01b0381161580159061169557506001600160a01b03811661dead14155b80156116af57506017546001600160a01b03828116911614155b6116b857600080fd5b601754600160b01b900460ff16156116cf57600080fd5b601780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1d440445044acc67b35f82fda02fc5d23c22f882b4bde500e8949931a3d990e190600090a35050565b6117296118c6565b600e54600d54600c54600b5461173f91906124ab565b61174991906124ab565b61175391906124ab565b6103e81461176057600080fd5b60095484101580156117745750600a548411155b61177d57600080fd5b60095483101580156117915750600a548311155b61179a57600080fd5b60095482101580156117ae5750600a548211155b6117b757600080fd5b60095481101580156117cb5750600a548111155b6117d457600080fd5b600b849055600c839055600d829055600e8190556040805185815260208101859052908101839052606081018290527fdba57146a04ecfe691533212d4dc5dd0f01e5622f6da6351e42fc10876bcfa3e9060800160405180910390a150505050565b61183e6118c6565b6001600160a01b0381166118ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b05565b6118c381611ecb565b50565b336118d96000546001600160a01b031690565b6001600160a01b03161461116e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b05565b600080612710600754655af3107a40006119499190612472565b6119539190612489565b9050600061196982670de0b6b3a76400006124ab565b611983836dffffffffffffffffffffffffffff8716612472565b61198d9190612489565b949350505050565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106119ca576119ca6124d4565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c464892600480830193919282900301816000875af1158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190612455565b81600181518110611a5c57611a5c6124d4565b6001600160a01b03928316602091820292909201015260015460405163095ea7b360e01b81529082166004820152602481018490529084169063095ea7b3906044016020604051808303816000875af1158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae191906124ea565b5060015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b1b90859060009086903090429060040161254c565b600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b50505050505050565b6016546001600160a01b0316611b6457565b601180546000918290556016546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114611bbd576040519150601f19603f3d011682016040523d82523d6000602084013e611bc2565b606091505b505090508061093f5750601155565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e919061239a565b90506000600360009054906101000a90046001600160a01b03166001600160a01b0316639358928b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb9919061239a565b6003546002546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f919061239a565b90506000606460085484611d439190612472565b611d4d9190612489565b9050808210611d6657611d61601354611f1b565b611e51565b6000611d7283836123c9565b9050808510611d8c57611d878160135461204e565b611e4f565b6000611d9886836123c9565b90506000611da582612164565b9050601354811115611db657506013545b611dbf81611f1b565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2c919061239a565b9050600082601354611e3e91906123c9565b9050611e4a828261204e565b505050505b505b60006013556003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec2919061239a565b60145550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af1158015611f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fab9190612455565b81600081518110611fbe57611fbe6124d4565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611fef57611fef6124d4565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590849061203590600090869030904290600401612588565b6000604051808303818588803b158015611b3557600080fd5b60035460015460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af11580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c791906124ea565b506001546003546004805460405163f305d71960e01b81526001600160a01b0393841692810192909252602482018690526000604483018190526064830152821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561213f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166391906125bd565b604080516002808252606082018352600092839291906020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c46489250600480830192602092919082900301816000875af11580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f89190612455565b8160008151811061220b5761220b6124d4565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061223c5761223c6124d4565b6001600160a01b0392831660209182029290920101526001546040516307c0329d60e21b81526000929190911690631f00ca749061228090879086906004016125eb565b600060405180830381865afa15801561229d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122c59190810190612604565b9050806000815181106122da576122da6124d4565b602002602001015192505050919050565b6000602082840312156122fd57600080fd5b5035919050565b6001600160a01b03811681146118c357600080fd5b60006020828403121561232b57600080fd5b813561233681612304565b9392505050565b80151581146118c357600080fd5b60006020828403121561235d57600080fd5b81356123368161233d565b6000806000806080858703121561237e57600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156123ac57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156123dc576123dc6123b3565b92915050565b80516dffffffffffffffffffffffffffff8116811461240057600080fd5b919050565b60008060006060848603121561241a57600080fd5b612423846123e2565b9250612431602085016123e2565b9150604084015163ffffffff8116811461244a57600080fd5b809150509250925092565b60006020828403121561246757600080fd5b815161233681612304565b80820281158282048414176123dc576123dc6123b3565b6000826124a657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156123dc576123dc6123b3565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124fc57600080fd5b81516123368161233d565b60008151808452602080850194506020840160005b838110156125415781516001600160a01b03168752958201959082019060010161251c565b509495945050505050565b85815284602082015260a06040820152600061256b60a0830186612507565b6001600160a01b0394909416606083015250608001529392505050565b8481526080602082015260006125a16080830186612507565b6001600160a01b03949094166040830152506060015292915050565b6000806000606084860312156125d257600080fd5b8351925060208401519150604084015190509250925092565b82815260406020820152600061198d6040830184612507565b6000602080838503121561261757600080fd5b825167ffffffffffffffff8082111561262f57600080fd5b818501915085601f83011261264357600080fd5b815181811115612655576126556124be565b8060051b604051601f19603f8301168101818110858211171561267a5761267a6124be565b60405291825284820192508381018501918883111561269857600080fd5b938501935b828510156126b65784518452938501939285019261269d565b9897505050505050505056fea264697066735822122040e17927c7cece8eb927afa6186ee92593a9f8845d574e7c60fa21b947e5ec3564736f6c63430008190033

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

0000000000000000000000007105e64bf67eca3ae9b123f0e5ca2b83b2ef2da00000000000000000000000006b5422d584943bc8cd0e10e239d624c6fe90fbb8000000000000000000000000f7c5c8bdd689767e039c631ad42482128bd54ba3

-----Decoded View---------------
Arg [0] : x7dao_ (address): 0x7105E64bF67ECA3Ae9b123F0e5Ca2b83b2eF2dA0
Arg [1] : router_ (address): 0x6b5422D584943BC8Cd0E10e239d624c6fE90fbB8
Arg [2] : _owner (address): 0xf7c5c8Bdd689767e039c631Ad42482128BD54Ba3

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007105e64bf67eca3ae9b123f0e5ca2b83b2ef2da0
Arg [1] : 0000000000000000000000006b5422d584943bc8cd0e10e239d624c6fe90fbb8
Arg [2] : 000000000000000000000000f7c5c8bdd689767e039c631ad42482128bd54ba3


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.