S Price: $0.502887 (-0.86%)

Contract

0x20368bABA32EdCE1751019A761eab6dc56294139
Transaction Hash
Method
Block
From
To
Buy Tokens119028352025-03-05 20:37:312 days ago1741207051IN
0x20368bAB...c56294139
1 S0.0095432155
Sell Tokens119027062025-03-05 20:36:412 days ago1741207001IN
0x20368bAB...c56294139
0 S0.0086197155
Buy Tokens119026352025-03-05 20:36:142 days ago1741206974IN
0x20368bAB...c56294139
12 S0.0104843755
Buy Tokens103345792025-02-26 16:28:439 days ago1740587323IN
0x20368bAB...c56294139
0.5 S0.0086027155
Sell Tokens103344692025-02-26 16:28:069 days ago1740587286IN
0x20368bAB...c56294139
0 S0.0091477155
Buy Tokens103329252025-02-26 16:19:129 days ago1740586752IN
0x20368bAB...c56294139
0.5 S0.0104837155
Sell Tokens95766442025-02-23 13:46:2912 days ago1740318389IN
0x20368bAB...c56294139
0 S0.0090925455.01
Buy Tokens95747962025-02-23 13:34:4612 days ago1740317686IN
0x20368bAB...c56294139
0.5 S0.0110230155.01
Sell Tokens20175192024-12-30 17:44:1167 days ago1735580651IN
0x20368bAB...c56294139
0 S0.000182951.1
Sell Tokens14887232024-12-24 18:26:1873 days ago1735064778IN
0x20368bAB...c56294139
0 S0.000182941.1
Buy Tokens13711472024-12-23 18:01:1374 days ago1734976873IN
0x20368bAB...c56294139
4.956 S0.000190861.1
Sell Tokens13710792024-12-23 18:00:3474 days ago1734976834IN
0x20368bAB...c56294139
0 S0.000182941.1
Buy Tokens13688862024-12-23 17:39:2774 days ago1734975567IN
0x20368bAB...c56294139
3 S0.000172051.1
Buy Tokens13688292024-12-23 17:38:5674 days ago1734975536IN
0x20368bAB...c56294139
52 S0.000172061.1
Buy Tokens13687572024-12-23 17:38:2274 days ago1734975502IN
0x20368bAB...c56294139
59 S0.000172061.1
Buy Tokens13685852024-12-23 17:36:4874 days ago1734975408IN
0x20368bAB...c56294139
75 S0.000172051.1
Buy Tokens13685462024-12-23 17:36:2674 days ago1734975386IN
0x20368bAB...c56294139
200 S0.000172051.1
Buy Tokens13681972024-12-23 17:33:2674 days ago1734975206IN
0x20368bAB...c56294139
102 S0.000190861.1
Sell Tokens13680932024-12-23 17:32:4274 days ago1734975162IN
0x20368bAB...c56294139
0 S0.000172421.1
Buy Tokens13679892024-12-23 17:31:5474 days ago1734975114IN
0x20368bAB...c56294139
75 S0.000172051.1
Sell Tokens13679362024-12-23 17:31:3074 days ago1734975090IN
0x20368bAB...c56294139
0 S0.000182961.1
Sell Tokens13678842024-12-23 17:31:0974 days ago1734975069IN
0x20368bAB...c56294139
0 S0.000182921.1
Buy Tokens13678172024-12-23 17:30:4174 days ago1734975041IN
0x20368bAB...c56294139
420.69 S0.000190861.1
Sell Tokens13677492024-12-23 17:30:1574 days ago1734975015IN
0x20368bAB...c56294139
0 S0.000172421.1
Sell Tokens13677122024-12-23 17:29:5874 days ago1734974998IN
0x20368bAB...c56294139
0 S0.000182951.1
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
119028352025-03-05 20:37:312 days ago1741207051
0x20368bAB...c56294139
0.000001 S
119028352025-03-05 20:37:312 days ago1741207051
0x20368bAB...c56294139
0.0005 S
119028352025-03-05 20:37:312 days ago1741207051
0x20368bAB...c56294139
0.009499 S
119027062025-03-05 20:36:412 days ago1741207001
0x20368bAB...c56294139
11.7612 S
119027062025-03-05 20:36:412 days ago1741207001
0x20368bAB...c56294139
0.00001187 S
119027062025-03-05 20:36:412 days ago1741207001
0x20368bAB...c56294139
0.00593999 S
119027062025-03-05 20:36:412 days ago1741207001
0x20368bAB...c56294139
0.11284812 S
119026352025-03-05 20:36:142 days ago1741206974
0x20368bAB...c56294139
0.000012 S
119026352025-03-05 20:36:142 days ago1741206974
0x20368bAB...c56294139
0.006 S
119026352025-03-05 20:36:142 days ago1741206974
0x20368bAB...c56294139
0.113988 S
119025832025-03-05 20:35:532 days ago1741206953
0x20368bAB...c56294139
 Contract Creation0 S
119025832025-03-05 20:35:532 days ago1741206953
0x20368bAB...c56294139
0.0001 S
103345792025-02-26 16:28:439 days ago1740587323
0x20368bAB...c56294139
0.0000005 S
103345792025-02-26 16:28:439 days ago1740587323
0x20368bAB...c56294139
0.00025 S
103345792025-02-26 16:28:439 days ago1740587323
0x20368bAB...c56294139
0.0047495 S
103344692025-02-26 16:28:069 days ago1740587286
0x20368bAB...c56294139
0.12253069 S
103344692025-02-26 16:28:069 days ago1740587286
0x20368bAB...c56294139
0.00000012 S
103344692025-02-26 16:28:069 days ago1740587286
0x20368bAB...c56294139
0.00006188 S
103344692025-02-26 16:28:069 days ago1740587286
0x20368bAB...c56294139
0.00117567 S
103329252025-02-26 16:19:129 days ago1740586752
0x20368bAB...c56294139
0.0000005 S
103329252025-02-26 16:19:129 days ago1740586752
0x20368bAB...c56294139
0.00025 S
103329252025-02-26 16:19:129 days ago1740586752
0x20368bAB...c56294139
0.0047495 S
103328712025-02-26 16:18:549 days ago1740586734
0x20368bAB...c56294139
 Contract Creation0 S
103328712025-02-26 16:18:549 days ago1740586734
0x20368bAB...c56294139
0.0001 S
95766442025-02-23 13:46:2912 days ago1740318389
0x20368bAB...c56294139
0.49005 S
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FunPool

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 3 : FunPool.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

//dx.fun//base.fun powered by dextools and dxsale.

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
 * consider using {ReentrancyGuardTransient} instead.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function allowance(
        address owner,
        address spender
    ) external returns (uint256);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    function decimals() external returns (uint8);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;
    address public voter;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyVoter() {
        require(msg.sender == voter);
        _;
    }
    /**
     * @dev Allows the current owner to relinquish control of the contract.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        _transferOwnership(_newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address _newOwner) internal {
        require(_newOwner != address(0));
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}
interface UniswapRouter02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);
    // function WBNB() external pure returns(address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}
interface UniswapFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

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

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}
interface LPToken {
    function sync() external;
}
interface ILpLockDeployerInterface {
    function createLPLocker(
        address _lockingToken,
        uint256 _lockerEndTimeStamp,
        string memory _logo,
        uint256 _lockingAmount,
        address _funOwner
    ) external payable returns (address);
}
interface IFunDeployerInterface {
    function getAffiliatePer(
        address _affiliateAddrs
    ) external view returns (uint256);
    function getOwnerPer() external view returns (uint256);
    function emitRoyal(
        address funContract,
        address tokenAddress,
        address router,
        address baseAddress,
        uint256 liquidityAmount,
        uint256 tokenAmount,
        uint256 _time,
        uint256 totalVolume
    ) external;
}
interface IFunEventTracker {
    function buyEvent(
        address _caller,
        address _funContract,
        uint256 _buyAmount,
        uint256 _tokenRecieved
    ) external;
    function sellEvent(
        address _caller,
        address _funContract,
        uint256 _sellAmount,
        uint256 _nativeRecieved
    ) external;
    function createFunEvent(
        address creator,
        address funContract,
        address tokenAddress,
        string memory name,
        string memory symbol,
        string memory data,
        uint256 totalSupply,
        uint256 initialReserve,
        uint256 timestamp
    ) external;
    function listEvent(
        address user,
        address tokenAddress,
        address router,
        uint256 liquidityAmount,
        uint256 tokenAmount,
        uint256 _time,
        uint256 totalVolume
    ) external;
    function callerValidate(address _newFunContract) external;
}
interface IFunToken {
    function initialize(
        uint256 initialSupply,
        string memory _name,
        string memory _symbol,
        address _midDeployer,
        address _deployer
    ) external;
    function initiateDex() external;
}

import "./lib/Clones.sol";

contract FunPool is Ownable, ReentrancyGuard {
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public constant HUNDRED = 100;
    uint256 public constant BASIS_POINTS = 10000;

    struct FunTokenPoolData {
        uint256 reserveTokens;
        uint256 reserveETH;
        uint256 volume;
        uint256 listThreshold;
        uint256 initialReserveEth;
        uint8 nativePer;
        bool tradeActive;
        bool lpBurn;
        bool royalemitted;
    }
    struct FunTokenPool {
        address creator;
        address token;
        address baseToken;
        address router;
        address lockerAddress;
        address storedLPAddress;
        address deployer;
        FunTokenPoolData pool;
    }

    // deployer allowed to create fun tokens
    mapping(address => bool) public allowedDeployers;
    // user => array of fun tokens
    mapping(address => address[]) public userFunTokens;
    // fun token => fun token details
    mapping(address => FunTokenPool) public tokenPools;

    address public implementation;
    address public feeContract;
    address public stableAddress;
    address public lpLockDeployer;
    address public eventTracker;
    uint16 public feePer;

    event LiquidityAdded(
        address indexed provider,
        uint tokenAmount,
        uint ethAmount
    );
    event sold(
        address indexed user,
        uint256 amountIn,
        uint256 amountOut,
        uint256 _time,
        uint256 reserveEth,
        uint256 reserveTokens,
        uint256 totalVolume
    );
    event bought(
        address indexed user,
        uint256 amountIn,
        uint256 amountOut,
        uint256 _time,
        uint256 reserveEth,
        uint256 reserveTokens,
        uint256 totalVolume
    );
    event funTradeCall(
        address indexed user,
        uint256 amountIn,
        uint256 amountOut,
        uint256 _time,
        uint256 reserveEth,
        uint256 reserveTokens,
        string tradeType,
        uint256 totalVolume
    );
    event listed(
        address indexed user,
        address indexed tokenAddress,
        address indexed router,
        uint256 liquidityAmount,
        uint256 tokenAmount,
        uint256 _time,
        uint256 totalVolume
    );

    constructor(
        address _implementation,
        address _feeContract,
        address _lpLockDeployer,
        address _stableAddress,
        address _eventTracker,
        uint16 _feePer
    ) payable {
        implementation = _implementation;
        feeContract = _feeContract;
        lpLockDeployer = _lpLockDeployer;
        stableAddress = _stableAddress;
        eventTracker = _eventTracker;
        feePer = _feePer;
    }

    function createFun(
        string[2] memory _name_symbol,
        uint256 _totalSupply,
        address _creator,
        address _baseToken,
        address _router,
        uint256[2] memory listThreshold_initReserveEth,
        bool lpBurn
    ) public payable returns (address) {
        require(allowedDeployers[msg.sender], "not deployer");

        address funToken = Clones.clone(implementation);
        IFunToken(funToken).initialize(
            _totalSupply,
            _name_symbol[0],
            _name_symbol[1],
            address(this),
            msg.sender
        );

        // add tokens to the tokens user list
        userFunTokens[_creator].push(funToken);

        // create the pool data
        FunTokenPool memory pool;

        pool.creator = _creator;
        pool.token = funToken;
        pool.baseToken = _baseToken;
        pool.router = _router;
        pool.deployer = msg.sender;
        pool.pool.nativePer = 100;
        pool.pool.tradeActive = true;
        pool.pool.lpBurn = lpBurn;
        pool.pool.reserveTokens += _totalSupply;
        pool.pool.reserveETH += (listThreshold_initReserveEth[1] + msg.value);
        pool.pool.listThreshold = listThreshold_initReserveEth[0];
        pool.pool.initialReserveEth = listThreshold_initReserveEth[1];

        // add the fun data for the fun token
        tokenPools[funToken] = pool;
        // tokenPoolData[funToken] = funPoolData;

        emit LiquidityAdded(address(this), _totalSupply, msg.value);

        return address(funToken); // return fun token address
    }

    // Calculate amount of output tokens or ETH to give out
    function getAmountOutTokens(
        address funToken,
        uint amountIn
    ) public view returns (uint amountOut) {
        require(amountIn > 0, "Invalid input amount");
        FunTokenPool storage token = tokenPools[funToken];
        require(
            token.pool.reserveTokens > 0 && token.pool.reserveETH > 0,
            "Invalid reserves"
        );
        uint numerator = amountIn * token.pool.reserveTokens;
        uint denominator = (token.pool.reserveETH) + amountIn;
        amountOut = numerator / denominator;
    }

    function getAmountOutETH(
        address funToken,
        uint amountIn
    ) public view returns (uint amountOut) {
        require(amountIn > 0, "Invalid input amount");
        FunTokenPool storage token = tokenPools[funToken];
        require(
            token.pool.reserveTokens > 0 && token.pool.reserveETH > 0,
            "Invalid reserves"
        );
        uint numerator = amountIn * token.pool.reserveETH;
        uint denominator = (token.pool.reserveTokens) + amountIn;
        amountOut = numerator / denominator;
    }

    function getBaseToken(address funToken) public view returns (address) {
        FunTokenPool storage token = tokenPools[funToken];
        return address(token.baseToken);
    }

    function getWrapAddr(address funToken) public view returns (address) {
        return UniswapRouter02(tokenPools[funToken].router).WETH();
    }

    function getAmountsMinToken(
        address funToken,
        address _tokenAddress,
        uint256 _ethIN
    ) public view returns (uint256) {
        // generate the pair path of token -> weth
        uint256[] memory amountMinArr;
        address[] memory path = new address[](2);
        path[0] = getWrapAddr(funToken);
        path[1] = address(_tokenAddress);
        amountMinArr = UniswapRouter02(tokenPools[funToken].router)
            .getAmountsOut(_ethIN, path);
        return uint256(amountMinArr[1]);
    }

    function getCurrentCap(address funToken) public view returns (uint256) {
        FunTokenPool storage token = tokenPools[funToken];
        return token.pool.reserveETH - token.pool.initialReserveEth;

    }

    function getFuntokenPool(address funToken) public view returns(FunTokenPool memory) {
      return tokenPools[funToken];
    }

    function getFuntokenPools(address[] memory funTokens) public view returns(FunTokenPool[] memory) {
      uint length = funTokens.length;
      FunTokenPool[] memory pools = new FunTokenPool[](length);
      for( uint i=0 ;i < length;  ) {
        pools[i] = tokenPools[funTokens[i]];
        unchecked {
          i++;
        }
      }
      return pools;
    }

     function getUserFuntokens(address user) public view returns(address[] memory) {
      return userFunTokens[user];
    }

    function sellTokens(
        address funToken,
        uint256 tokenAmount,
        uint256 minEth,
        address _affiliate
    ) public nonReentrant returns (bool, bool) {
        FunTokenPool storage token = tokenPools[funToken];
        require(token.pool.tradeActive, "Trading not active");

        uint256 tokenToSell = tokenAmount;
        uint256 ethAmount = getAmountOutETH(funToken, tokenToSell);
        uint256 ethAmountFee = (ethAmount * feePer) / BASIS_POINTS;
        uint256 ethAmountOwnerFee = (ethAmountFee *
            (IFunDeployerInterface(token.deployer).getOwnerPer())) /
            BASIS_POINTS;
        uint256 affiliateFee = (ethAmountFee *
            (
                IFunDeployerInterface(token.deployer).getAffiliatePer(
                    _affiliate
                )
            )) / BASIS_POINTS;
        require(ethAmount > 0 && ethAmount >= minEth, "Slippage too high");

        token.pool.reserveTokens += tokenAmount;
        token.pool.reserveETH -= ethAmount;
        token.pool.volume += ethAmount;

        IERC20(funToken).transferFrom(msg.sender, address(this), tokenToSell);
        (bool success, ) = feeContract.call{
            value: ethAmountFee - ethAmountOwnerFee - affiliateFee
        }(""); // paying plat fee
        require(success, "fee ETH transfer failed");

        (success, ) = _affiliate.call{value: affiliateFee}(""); // paying affiliate fee which is same amount as plat fee %
        require(success, "aff ETH transfer failed");

        (success, ) = owner.call{value: ethAmountOwnerFee}(""); // paying owner fee per tx
        require(success, "ownr ETH transfer failed");

        (success, ) = msg.sender.call{value: ethAmount - ethAmountFee}("");
        require(success, "seller ETH transfer failed");

        emit sold(
            msg.sender,
            tokenAmount,
            ethAmount,
            block.timestamp,
            token.pool.reserveETH,
            token.pool.reserveTokens,
            token.pool.volume
        );
        emit funTradeCall(
            msg.sender,
            tokenAmount,
            ethAmount,
            block.timestamp,
            token.pool.reserveETH,
            token.pool.reserveTokens,
            "sell",
            token.pool.volume
        );
        IFunEventTracker(eventTracker).sellEvent(
            msg.sender,
            funToken,
            tokenToSell,
            ethAmount
        );

        return (true, true);
    }

    function buyTokens(
        address funToken,
        uint256 minTokens,
        address _affiliate
    ) public payable nonReentrant {
        require(msg.value > 0, "Invalid buy value");
        FunTokenPool storage token = tokenPools[funToken];
        require(token.pool.tradeActive, "Trading not active");

        {
            uint256 ethAmount = msg.value;
            uint256 ethAmountFee = (ethAmount * feePer) / BASIS_POINTS;
            uint256 ethAmountOwnerFee = (ethAmountFee *
                (IFunDeployerInterface(token.deployer).getOwnerPer())) /
                BASIS_POINTS;
            uint256 affiliateFee = (ethAmountFee *
                (
                    IFunDeployerInterface(token.deployer).getAffiliatePer(
                        _affiliate
                    )
                )) / BASIS_POINTS;

            uint256 tokenAmount = getAmountOutTokens(
                funToken,
                ethAmount - ethAmountFee
            );
            require(tokenAmount >= minTokens, "Slippage too high");

            token.pool.reserveETH += (ethAmount - ethAmountFee);
            token.pool.reserveTokens -= tokenAmount;
            token.pool.volume += ethAmount;

            (bool success, ) = feeContract.call{
                value: ethAmountFee - ethAmountOwnerFee - affiliateFee
            }(""); // paying plat fee
            require(success, "fee ETH transfer failed");

            (success, ) = _affiliate.call{value: affiliateFee}(""); // paying affiliate fee which is same amount as plat fee %
            require(success, "fee ETH transfer failed");

            (success, ) = owner.call{value: ethAmountOwnerFee}(""); // paying owner fee per tx
            require(success, "fee ETH transfer failed");

            IERC20(funToken).transfer(msg.sender, tokenAmount);
            emit bought(
                msg.sender,
                msg.value,
                tokenAmount,
                block.timestamp,
                token.pool.reserveETH,
                token.pool.reserveTokens,
                token.pool.volume
            );
            emit funTradeCall(
                msg.sender,
                msg.value,
                tokenAmount,
                block.timestamp,
                token.pool.reserveETH,
                token.pool.reserveTokens,
                "buy",
                token.pool.volume
            );
            IFunEventTracker(eventTracker).buyEvent(
                msg.sender,
                funToken,
                msg.value,
                tokenAmount
            );
        }

        uint currentMarketCap = getCurrentCap(funToken);
        uint listThresholdCap = token.pool.listThreshold;

        // using liquidity value inside contract to check when to add liquidity to DEX
        if (
            currentMarketCap >= (listThresholdCap / 2) &&
            !token.pool.royalemitted
        ) {
            IFunDeployerInterface(token.deployer).emitRoyal(
                funToken,
                funToken,
                token.router,
                token.baseToken,
                token.pool.reserveETH,
                token.pool.reserveTokens,
                block.timestamp,
                token.pool.volume
            );
            token.pool.royalemitted = true;
        }
        // using marketcap value of token to check when to add liquidity to DEX
        if (currentMarketCap >= listThresholdCap) {
            token.pool.tradeActive = false;
            IFunToken(funToken).initiateDex();
            token.pool.reserveETH -= token.pool.initialReserveEth;
            if (token.pool.nativePer > 0) {
                _addLiquidityETH(
                    funToken,
                    (IERC20(funToken).balanceOf(address(this)) *
                        token.pool.nativePer) / HUNDRED,
                    (token.pool.reserveETH * token.pool.nativePer) / HUNDRED,
                    token.pool.lpBurn
                );
                token.pool.reserveETH = 0;
            }

        }
    }

    function _addLiquidityETH(
        address funToken,
        uint256 amountTokenDesired,
        uint256 nativeForDex,
        bool lpBurn
    ) internal {
        uint256 amountETH = nativeForDex;
        uint256 amountETHMin = (amountETH * 90) / HUNDRED;
        uint256 amountTokenToAddLiq = amountTokenDesired;
        uint256 amountTokenMin = (amountTokenToAddLiq * 90) / HUNDRED;
        uint256 LP_WBNB_exp_balance;
        uint256 LP_token_balance;
        uint256 tokenToSend = 0;

        FunTokenPool storage token = tokenPools[funToken];

        address wrapperAddress = getWrapAddr(funToken);
        token.storedLPAddress = _getpair(funToken, funToken, wrapperAddress);
        address storedLPAddress = token.storedLPAddress;
        LP_WBNB_exp_balance = IERC20(wrapperAddress).balanceOf(storedLPAddress);
        LP_token_balance = IERC20(funToken).balanceOf(storedLPAddress);

        if (
            storedLPAddress != address(0x0) &&
            (LP_WBNB_exp_balance > 0 && LP_token_balance <= 0)
        ) {
            tokenToSend =
                (amountTokenToAddLiq * LP_WBNB_exp_balance) /
                amountETH;

            IERC20(funToken).transfer(storedLPAddress, tokenToSend);

            LPToken(storedLPAddress).sync();
            // sync after adding token
        }
        _approve(funToken, false);

        if (lpBurn) {
            UniswapRouter02(token.router).addLiquidityETH{
                value: amountETH - LP_WBNB_exp_balance
            }(
                funToken,
                amountTokenToAddLiq - tokenToSend,
                amountTokenMin,
                amountETHMin,
                DEAD,
                block.timestamp + (300)
            );
        } else {
            UniswapRouter02(token.router).addLiquidityETH{
                value: amountETH - LP_WBNB_exp_balance
            }(
                funToken,
                amountTokenToAddLiq - tokenToSend,
                amountTokenMin,
                amountETHMin,
                address(this),
                block.timestamp + (300)
            );
            _approveLock(storedLPAddress, lpLockDeployer);
            token.lockerAddress = ILpLockDeployerInterface(lpLockDeployer)
                .createLPLocker(
                    storedLPAddress,
                    32503698000,
                    "logo",
                    IERC20(storedLPAddress).balanceOf(address(this)),
                    token.creator
                );
        }
        IFunEventTracker(eventTracker).listEvent(
            msg.sender,
            funToken,
            token.router,
            amountETH - LP_WBNB_exp_balance,
            amountTokenToAddLiq - tokenToSend,
            block.timestamp,
            token.pool.volume
        );
        emit listed(
            msg.sender,
            funToken,
            token.router,
            amountETH - LP_WBNB_exp_balance,
            amountTokenToAddLiq - tokenToSend,
            block.timestamp,
            token.pool.volume
        );
    }



    function _approve(
        address funToken,
        bool isBaseToken
    ) internal returns (bool) {
        FunTokenPool storage token = tokenPools[funToken];
        IERC20 token_ = IERC20(funToken);
        if (isBaseToken) {
            token_ = IERC20(token.baseToken);
        }

        if (token_.allowance(address(this), token.router) == 0) {
            token_.approve(token.router, type(uint256).max);
        }
        return true;
    }

    function _approveLock(
        address _lp,
        address _lockDeployer
    ) internal returns (bool) {
        IERC20 lp_ = IERC20(_lp);
        if (lp_.allowance(address(this), _lockDeployer) == 0) {
            lp_.approve(_lockDeployer, type(uint256).max);
        }
        return true;
    }

    function _getpair(
        address funToken,
        address _token1,
        address _token2
    ) internal returns (address) {
        address router = tokenPools[funToken].router;
        address factory = UniswapRouter02(router).factory();
        address pair = UniswapFactory(factory).getPair(_token1, _token2);
        if (pair != address(0)) {
            return pair;
        } else {
            return UniswapFactory(factory).createPair(_token1, _token2);
        }
    }

    function _isUserFunToken(address funToken) internal view returns (bool) {
        for (uint i = 0; i < userFunTokens[msg.sender].length; ) {
            if (funToken == userFunTokens[msg.sender][i]) {
                return true;
            }
            unchecked {
                i++;
            }
        }
        return false;
    }

    function addDeployer(address _deployer) public onlyOwner {
        allowedDeployers[_deployer] = true;
    }

    function removeDeployer(address _deployer) public onlyOwner {
        allowedDeployers[_deployer] = false;
    }

    function updateImplementation(address _implementation) public onlyOwner {
        require(_implementation != address(0));
        implementation = _implementation;
    }

    function updateFeeContract(address _newFeeContract) public onlyOwner {
        feeContract = _newFeeContract;
    }

    function updateLpLockDeployer(address _newLpLockDeployer) public onlyOwner {
        lpLockDeployer = _newLpLockDeployer;
    }

    function updateEventTracker(address _newEventTracker) public onlyOwner {
        eventTracker = _newEventTracker;
    }

    function updateteamFeeper(uint16 _newFeePer) public onlyOwner {
        feePer = _newFeePer;
    }
}

File 2 of 3 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol)

pragma solidity ^0.8.20;

import {Errors} from "./Errors.sol";

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[ERC-1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        return clone(implementation, 0);
    }

    /**
     * @dev Same as {xref-Clones-clone-address-}[clone], but with a `value` parameter to send native currency
     * to the new contract.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function clone(
        address implementation,
        uint256 value
    ) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(
                0x00,
                or(
                    shr(0xe8, shl(0x60, implementation)),
                    0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000
                )
            )
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(
                0x20,
                or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)
            )
            instance := create(value, 0x09, 0x37)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(
        address implementation,
        bytes32 salt
    ) internal returns (address instance) {
        return cloneDeterministic(implementation, salt, 0);
    }

    /**
     * @dev Same as {xref-Clones-cloneDeterministic-address-bytes32-}[cloneDeterministic], but with
     * a `value` parameter to send native currency to the new contract.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function cloneDeterministic(
        address implementation,
        bytes32 salt,
        uint256 value
    ) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(
                0x00,
                or(
                    shr(0xe8, shl(0x60, implementation)),
                    0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000
                )
            )
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(
                0x20,
                or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)
            )
            instance := create2(value, 0x09, 0x37, salt)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := and(
                keccak256(add(ptr, 0x43), 0x55),
                0xffffffffffffffffffffffffffffffffffffffff
            )
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 3 of 3 : Errors.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ]
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"address","name":"_feeContract","type":"address"},{"internalType":"address","name":"_lpLockDeployer","type":"address"},{"internalType":"address","name":"_stableAddress","type":"address"},{"internalType":"address","name":"_eventTracker","type":"address"},{"internalType":"uint16","name":"_feePer","type":"uint16"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"string","name":"tradeType","type":"string"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"funTradeCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"listed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"sold","type":"event"},{"inputs":[],"name":"BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"addDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedDeployers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"minTokens","type":"uint256"},{"internalType":"address","name":"_affiliate","type":"address"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string[2]","name":"_name_symbol","type":"string[2]"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_baseToken","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256[2]","name":"listThreshold_initReserveEth","type":"uint256[2]"},{"internalType":"bool","name":"lpBurn","type":"bool"}],"name":"createFun","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"eventTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePer","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountOutETH","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountOutTokens","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_ethIN","type":"uint256"}],"name":"getAmountsMinToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getBaseToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getCurrentCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getFuntokenPool","outputs":[{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct FunPool.FunTokenPoolData","name":"pool","type":"tuple"}],"internalType":"struct FunPool.FunTokenPool","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"funTokens","type":"address[]"}],"name":"getFuntokenPools","outputs":[{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct FunPool.FunTokenPoolData","name":"pool","type":"tuple"}],"internalType":"struct FunPool.FunTokenPool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserFuntokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getWrapAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLockDeployer","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":"_deployer","type":"address"}],"name":"removeDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minEth","type":"uint256"},{"internalType":"address","name":"_affiliate","type":"address"}],"name":"sellTokens","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stableAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPools","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct FunPool.FunTokenPoolData","name":"pool","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newEventTracker","type":"address"}],"name":"updateEventTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeContract","type":"address"}],"name":"updateFeeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"updateImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLpLockDeployer","type":"address"}],"name":"updateLpLockDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newFeePer","type":"uint16"}],"name":"updateteamFeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userFunTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080601f62002f8e38819003918201601f19168301916001600160401b03831184841017620001145780849260c0946040528339810103126200011057620000478162000128565b620000556020830162000128565b90620000646040840162000128565b90620000736060850162000128565b9260a0620000846080870162000128565b9501519361ffff85168503620001105760018060a01b03199233845f5416175f55600160025560018060a01b039485809481809416876006541617600655168560075416176007551683600954161760095516906008541617600855600a549161ffff60a01b9060a01b1692169060018060b01b0319161717600a55604051612e5090816200013e8239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620001105756fe610120806040526004361015610013575f80fd5b5f60e0525f3560e01c908163025b22bc1461254d57816303fd2a45146125335750806306e29712146125085780630c10fd0f146124c85780631513556c1461249d57806315388d9a146124555780632c6128321461243257806346c96aac146124075780634d6dcae1146123e05780635c60da1b146123b55780636832e5de146123865780636d090218146123455780636f3eebae1461231057806370f3bf1214612169578063715018a61461210f57806372521cc314611c775780637fec435314611c1b578063819512cd14610d7f57806388007f2a14610d37578063880f403914610ce95780638da5cb5b14610cc05780639c8c364814610c24578063a1e1fbc214610a41578063aa556e0b14610533578063b536b78e1461047e578063c2e4d08f14610457578063c34223fb146103f7578063c3abb766146103cc578063c3d2c3c114610325578063c4c6c237146102fa578063e1f1c4a7146102db578063f2fde38b14610260578063f315df8614610215578063f85fc0ab146101f45763fc006a8a146101a2575f80fd5b346101ee5760203660031901126101ee576101bb612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600754161760075580f35b8280fd5b60e05180fd5b346101ee5760e0518060031936011261021257602060405160648152f35b80fd5b346101ee5760203660031901126101ee5761022e612598565b60e051805490916001600160a01b0391821633036101ea57169052600360205260e05160408120805460ff1916905580f35b346101ee5760203660031901126101ee57610279612598565b60e051805490916001600160a01b038083169291338490036102d757169182156102d35782907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a36001600160a01b03191617815580f35b8380fd5b8480fd5b346101ee5760e051806003193601126102125760206040516127108152f35b346101ee5760e05180600319360112610212576008546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee576102006001600160a01b038061034a612598565b1660e0515260056020526103ca604060e0512091808354169281600182015416918060028301541681600384015416826004850154169161039b6007856005880154169560068801541696016127da565b95604051988952602089015260408801526060870152608086015260a085015260c084015260e08301906126ea565bf35b346101ee5760e05180600319360112610212576009546040516001600160a01b039091168152602090f35b346101ee5760403660031901126101ee57610410612598565b60e080516001600160a01b0392831690526004602052516040812080546024359392908410156102125750602092610447916127b1565b9190546040519260031b1c168152f35b346101ee5760e0518060031936011261021257602061ffff600a5460a01c16604051908152f35b346101ee5760203660031901126101ee5761020061049a612598565b6104a2612889565b5060018060a01b0380911660e0515260056020526105216007604060e05120604051936104ce85612602565b8082541685528060018301541660208601528060028301541660408601528060038301541660608601528060048301541660808601528060058301541660a086015260068201541660c0850152016127da565b60e08201526103ca6040518092612749565b346101ee5760803660031901126101ee5761054c612598565b6105546125c4565b9061055d612c90565b60e080516001600160a01b038316905260056020525160409020600c81015461058b9060081c60ff16612b7c565b61059760243583612a3f565b926127106105ae61ffff600a5460a01c16866129a8565b049160018060a01b0360068201541692604051630b1bafc760e41b8152602081600481885afa9081156108bf5760e05191610a0e575b5060206127106105f6602493856129a8565b604051635395502960e11b81526001600160a01b0388166004820152919004969092839182905afa9081156108bf5760e051916109d6575b5061063c61271091836129a8565b0493861515806109ca575b61065090612bbd565b60078301946106626024358754612905565b8655600960088501946106768a8754612b45565b86550194610685898754612905565b86556040516323b872dd60e01b8152336004820152306024820152602435604482015260208160648160e0518d60018060a01b03165af180156108bf5761099b575b5060075460e051610705918190819081906001600160a01b03166106f4886106ef8b8d612b45565b612b45565b905af16106ff612c15565b50612c44565b60e05180809381935af1610717612c15565b50156109565760e0518080809360018060a01b038254165af1610738612c15565b5015610911576107509060e05180809381938a612b45565b335af161075b612c15565b50156108cc575491549054906040517fb5c4deeb00ec61f7509ac91d1423c0125ef5de64d15d79c41b3cb6ef7e7daca83391806107c2868689428d602435879260a094919796959260c0850198855260208501526040840152606083015260808201520152565b0390a26040519260243584528560208501524260408501526060840152608083015260e060a0830152600460e0830152631cd95b1b60e21b61010083015260c08201527fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e116101203392a2600a546001600160a01b031691823b156101ee57604051631b1e4e2560e31b815260e0513360048301526001600160a01b039093166024808301919091523560448201526064810191909152918290818060848101039160e051905af180156108bf576108aa575b6001600255604080516001815260016020820152f35b6108b3906125da565b60e05180156108945780fd5b6040513d60e051823e3d90fd5b60405162461bcd60e51b815260206004820152601a60248201527f73656c6c657220455448207472616e73666572206661696c65640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f6f776e7220455448207472616e73666572206661696c656400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f61666620455448207472616e73666572206661696c65640000000000000000006044820152606490fd5b6109bc9060203d6020116109c3575b6109b48183612658565b810190612bfd565b50896106c7565b503d6109aa565b50604435871015610647565b90506020813d602011610a06575b816109f160209383612658565b81010312610a02575161063c61062e565b5f80fd5b3d91506109e4565b90506020813d602011610a39575b81610a2960209383612658565b81010312610a02575160206105e4565b3d9150610a1c565b346101ee576020806003193601126101ee576004359067ffffffffffffffff82116101ee57366023830112156101ee578160040135610a7f816126d2565b92610a8d6040519485612658565b8184528284016024600593841b830101913683116101ee57602401905b828210610c0557505050825190610ac0826126d2565b93610ace6040519586612658565b828552601f19610add846126d2565b018460e0515b828110610bef5750505060e0515b838110610b46578486604051908282018383528151809152836040840192019360e0515b828110610b225784840385f35b9091928261020082610b376001948a51612749565b01960191019492919094610b15565b6001600160a01b039081610b5a8285612b31565b511660e05152838652604060e05120610bce600760405192610b7b84612602565b8581541684526001958087830154168b86015280600283015416604086015280600383015416606086015280600483015416608086015280898301541660a086015260068201541660c0850152016127da565b60e0820152610bdd8289612b31565b52610be88188612b31565b5001610af1565b610bf7612889565b82828a010152018590610ae3565b81356001600160a01b0381168103610a02578152908401908401610aaa565b346101ee576020806003193601126101ee576001600160a01b039081610c48612598565b1660e0515260048152604060e05120916040518093849184825491828152019160e0515260e0519385852094905b86838310610ca4578590610c8c82870383612658565b610ca0604051928284938452830190612696565b0390f35b8654821685526001968701968996509401939190910190610c76565b346101ee5760e0518060031936011261021257546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee57610d02612598565b60e051805490916001600160a01b0391821633036101ea57169052600360205260e05160408120805460ff1916600117905580f35b346101ee5760203660031901126101ee57610d50612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600954161760095580f35b60603660031901126101ee57610d93612598565b610d9b6125ae565b610da3612c90565b3415611be25760018060a01b03821660e051526005602052610dd860ff600c604060e051208061010052015460081c16612b7c565b612710610dee61ffff600a5460a01c16346129a8565b049060018060a01b03600661010051015416604051630b1bafc760e41b8152602081600481855afa9081156108bf5760e05191611baf575b50602491612710610e39602093876129a8565b0460c052604051635395502960e11b81526001600160a01b038516600482015292839182905afa9081156108bf5760e05191611b7b575b5082612710610e85610f2993610f3e966129a8565b0460a052610ead610e9f610e998334612b45565b876129d9565b806080526024351115612bbd565b610ef9610ee4610ecd610ec08434612b45565b6008610100510154612905565b610100519060088201556007608051910154612b45565b61010051906007820155600934910154612905565b60096101005101556106f460018060a01b03600754169160e0518093819382936106ef60a0519160c05190612b45565b60e0518080809360a051905af16106ff612c15565b610f5e60e05180808060c05160018060a01b038254165af16106ff612c15565b60405163a9059cbb60e01b8152608051336004830152602482015260e051602090829060449082906001600160a01b0387165af180156108bf57611b5c575b506101005160088101549060096007820154910154906040517f2ab932704044a97dfcb4c1cbd1ddfd869c7d10bc1e42daac2e1056cbb05449b333918061100e8686894260805134879260a094919796959260c0850198855260208501526040840152606083015260808201520152565b0390a26040519234845260805160208501524260408501526060840152608083015260e060a0830152600360e08301526262757960e81b61010083015260c08201527fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e116101203392a2600a546001600160a01b0316803b156101ee576040516302c9982760e11b815260e080516080513360048501526001600160a01b03861660248501523460448501526064840152905191929091839160849183915af180156108bf57611b47575b506110e281612b52565b6101005190600a820154918260011c82101580611b35575b611a66575b501015611112575b600160025560e05180f35b61010051600c01805461ff00191690556001600160a01b0381163b156101ee576040516335459a6560e21b815260e05181600481836001600160a01b0387165af180156108bf57611a51575b50611175610100516008600b820154910154612b45565b600c6101005182600882015501549160ff8316611194575b5050611107565b6040516370a0823160e01b81523060048201526020816024816001600160a01b0386165afa9081156108bf5760e05191611a1d575b506111ea60646111de819360ff8816906129a8565b049360ff8616906129a8565b049283605a810204605a148415171561153d5782605a810204605a148315171561153d5760e080516001600160a01b038416815260056020529051604090209160249061123685612abc565b906020611244838880612ccc565b6005870180546001600160a01b0319166001600160a01b038084169182179092556040516370a0823160e01b815260048101919091529591948692918391165afa9283156108bf5760e051936119e9575b506040516370a0823160e01b81526001600160a01b038381166004830152602090829060249082908b165afa9081156108bf5760e051916119b7575b506001600160a01b0383161515908161199c575b506118c9575b60e080516001600160a01b038881169182905260056020908152835160409081902060030180549151636eb1769f60e11b815230600482015291909316602482015293519193929091839160449183915af19081156108bf5760e05191611897575b5015611829575b5060101c60ff1615611555575060038301546001600160a01b03166113798288612b45565b906113848488612b45565b61012c4201421161153d5760c48789946060946064605a8e82826040519b8c9a8b9963f305d71960e01b8b5260018060a01b031660048b015260248a0152020460448701520204606484015261dead608484015261012c420160a48401525af180156108bf5761150e575b505b600a5460038401805490916001600160a01b039182169116611413848a612b45565b600961141f878b612b45565b970196875491833b156101ee576040519463ea49c05f60e01b865233600487015260018060a01b038b1660248701526044860152606485015260848401524260a484015260c48301528160e48160e05180945af180156108bf576114f9575b50546001600160a01b03169561149e929161149891612b45565b94612b45565b9054906040519384526020840152426040840152606083015260018060a01b0316907f630616749c0aa3ac2b8943843261fd2d07d0045dde6fe2a8b25381b8e6dc0f2760803392a460e051600861010051015580808061118d565b611502906125da565b60e051801561147e5780fd5b61152f9060603d606011611536575b6115278183612658565b810190612cb1565b50506113ef565b503d61151d565b634e487b7160e01b60e051526011600452602460e051fd5b60038401546001600160a01b031661156d8389612b45565b906115788589612b45565b61012c4201421161153d5760c4888a946060946064605a8f82826040519b8c9a8b9963f305d71960e01b8b5260018060a01b031660048b015260248a0152020460448701520204606484015230608484015261012c420160a48401525af180156108bf5761180a575b50600954604051636eb1769f60e11b81523060048201526001600160a01b039182166024820181905260e05190926020918391604491839188165af19081156108bf5760e051916117d8575b5015611779575b506009546040516370a0823160e01b81523060048201526001600160a01b039182169290916020908390602490829085165afa9182156108bf5760e05192611744575b5085546040516344f53e6560e11b81526001600160a01b039283166004808301919091526407915f1250602483015260a0604483015260a4820152636c6f676f60e01b60c4820152606481019390935216608482015260e0519091602091839160e49183915af19081156108bf5760e05191611715575b506004840180546001600160a01b0319166001600160a01b039092169190911790556113f1565b611737915060203d60201161173d575b61172f8183612658565b810190612a9d565b876116ee565b503d611725565b91506020823d602011611771575b8161175f60209383612658565b81010312610a025790519060e4611677565b3d9150611752565b60405163095ea7b360e01b815260048101919091525f19602482015260e051602090829060449082906001600160a01b0387165af180156108bf5715611634576117d19060203d6020116109c3576109b48183612658565b5087611634565b90506020813d602011611802575b816117f360209383612658565b81010312610a0257518961162d565b3d91506117e6565b6118229060603d606011611536576115278183612658565b50506115e1565b5460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015260e051909291602091849160449183918c165af19182156108bf5760ff92611878575b5090611354565b6118909060203d6020116109c3576109b48183612658565b5089611871565b90506020813d6020116118c1575b816118b260209383612658565b81010312610a0257518a61134d565b3d91506118a5565b92506118de876118d984896129a8565b6129bb565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905260e05192959260209183916044918391908c165af180156108bf5761197d575b506001600160a01b0382163b156101ee5760405160016209351760e01b0319815260e05181600481836001600160a01b0388165af180156108bf57611968575b506112eb565b611971906125da565b60e05180156119625780fd5b6119959060203d6020116109c3576109b48183612658565b5088611922565b8415159150816119ae575b50896112e5565b905015896119a7565b90506020813d6020116119e1575b816119d260209383612658565b81010312610a025751896112d1565b3d91506119c5565b9092506020813d602011611a15575b81611a0560209383612658565b81010312610a0257519188611295565b3d91506119f8565b90506020813d602011611a49575b81611a3860209383612658565b81010312610a0257516111ea6111c9565b3d9150611a2b565b611a5a906125da565b60e051801561115e5780fd5b600681015460038201546002830154600884015460078501546009909501546001600160a01b0393841695948416949093909216843b156101ee57604051634437af4760e11b81526001600160a01b038a1660048201819052602482015260448101969096526064860152608485015260a48401524260c484015260e483015260e05190829061010490829084905af180156108bf57611b20575b5061010051600c01805463ff00000019166301000000179055836110ff565b611b29906125da565b60e0518015611b015780fd5b5060ff600c82015460181c16156110fa565b611b50906125da565b60e05180156110d85780fd5b611b749060203d6020116109c3576109b48183612658565b5081610f9d565b90506020813d602011611ba7575b81611b9660209383612658565b81010312610a025751610f3e610e70565b3d9150611b89565b90506020813d602011611bda575b81611bca60209383612658565b81010312610a0257516024610e26565b3d9150611bbd565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206275792076616c756560781b6044820152606490fd5b346101ee5760203660031901126101ee5760043561ffff811681036101ee5760e05180549091906001600160a01b03163303611c7357600a805461ffff60a01b191660a09290921b61ffff60a01b1691909117905580f35b5080fd5b6101003660031901126101ee5760043567ffffffffffffffff8082116101ee576023913683820112156101ee5760405192611cb18461263c565b839260448301923684116101ee5780600401945b8486106120ae5786611cd56125ae565b90611cde6125c4565b6001600160a01b03929060843584811681036101ee573660c312156101ee57604051611d098161263c565b60e4813682116101ee5760a4905b82821061209e575050359182151583036101ee573360e051526020956003875260ff604060e0512054161561206a576e5af43d82803e903d91602b57fd5bf3600654763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c161760e051526effffffffffffffffffffffffffffff199060781b16178752876037600960e051f01695861561205857878251920151873b156101ee57611df690611de4604051946366faaae360e01b8652602435600487015260a0602487015260a486019061284b565b8481036003190160448601529061284b565b306064840152336084840152828060e051920381838b5af19182156108bf578992612049575b5016968760e051526004875260e0519760408920805499680100000000000000008b1015612032575089611e5a916001600c999a9b9c0181556127b1565b81549060031b90848b831b921b1916179055611e74612889565b9081528881019288845282604083019816885282606083019116815260c082019433865260e0830196606460a089510152600160c089510152151560e0885101528651611ec46024358251612905565b90528a810190611ed682513490612905565b611ee58d8a5101918251612905565b905251606088510152516080875101528860e0515260058a52604060e051209783835116946001600160601b0360a01b95868b5416178a558460018b01915116868254161790558360028a01915116858254161790558260038901915116848254161790556004870182608083015116848254161790558160a06005890192015116838254161790556006860192511690825416179055519182516007820155848301516008820155604083015160098201556060830151600a8201556080830151600b820155019060ff60a0820151169082549161ff0060c0830151151560081b169063ff00000061010062ff000060e0860151151560101b16940151151560181b169363ffffffff1916171717179055604051602435815234838201527fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee4560403092a2604051908152f35b634e487b7160e01b9052604160045260e051602490fd5b612052906125da565b89611e1c565b60405163b06ebf3d60e01b8152600490fd5b60405162461bcd60e51b815260048101889052600c60248201526b3737ba103232b83637bcb2b960a11b6044820152606490fd5b8135815260209182019101611d17565b85358381116101ee5782013685820112156101ee576004810135916120d28361267a565b6120df6040519182612658565b838152602493368582860101116101ee5780602095869501858401378360e0519183010152815201950194611cc5565b346101ee5760e051806003193601126102125780546001600160a01b038116338190036101ea577ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c648208380a26001600160a01b031916815580f35b346101ee5760603660031901126101ee57612182612598565b6001600160a01b03602435818116908190036101ee576040519167ffffffffffffffff9160608401838111858210176122f857604052600284526020948585019160403684376121d182612abc565b928651156122e0578480941690526121e886612b21565b521660e05152600584526003604060e0512001541691604051809363d06ca61f60e01b8252604435600483015260406024830152818061222f60e051956044830190612696565b03915afa9081156108bf5760e05191612256575b8361224d83612b21565b51604051908152f35b903d8091843e6122668184612658565b82019183818403126101ee5780519182116101ee570181601f820112156101ee57805190612293826126d2565b916122a16040519384612658565b808352848084019160051b8301019384116101ee5784809201905b8482106122d15750505061224d915083612243565b815181529082019082016122bc565b634e487b7160e01b60e051526032600452602460e051fd5b634e487b7160e01b60e051526041600452602460e051fd5b346101ee5760203660031901126101ee57602061233361232e612598565b612abc565b6040516001600160a01b039091168152f35b346101ee5760203660031901126101ee576001600160a01b03612366612598565b1660e051526003602052602060ff604060e0512054166040519015158152f35b346101ee5760403660031901126101ee5760206123ad6123a4612598565b60243590612a3f565b604051908152f35b346101ee5760e05180600319360112610212576006546040516001600160a01b039091168152602090f35b346101ee5760403660031901126101ee5760206123ad6123fe612598565b602435906129d9565b346101ee5760e05180600319360112610212576001546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee5760206123ad612450612598565b612b52565b346101ee5760203660031901126101ee5761246e612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600a541617600a5580f35b346101ee5760e0518060031936011261021257600a546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee5760206001600160a01b03806124ec612598565b1660e05152600582526002604060e05120015416604051908152f35b346101ee5760e05180600319360112610212576007546040516001600160a01b039091168152602090f35b34610a02575f366003190112610a02578061dead60209252f35b34610a02576020366003190112610a0257612566612598565b5f546001600160a01b03919082163303610a0257168015610a02576001600160601b0360a01b60065416176006555f80f35b600435906001600160a01b0382168203610a0257565b604435906001600160a01b0382168203610a0257565b606435906001600160a01b0382168203610a0257565b67ffffffffffffffff81116125ee57604052565b634e487b7160e01b5f52604160045260245ffd5b610100810190811067ffffffffffffffff8211176125ee57604052565b610120810190811067ffffffffffffffff8211176125ee57604052565b6040810190811067ffffffffffffffff8211176125ee57604052565b90601f8019910116810190811067ffffffffffffffff8211176125ee57604052565b67ffffffffffffffff81116125ee57601f01601f191660200190565b9081518082526020808093019301915f5b8281106126b5575050505090565b83516001600160a01b0316855293810193928101926001016126a7565b67ffffffffffffffff81116125ee5760051b60200190565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260ff60a08201511660a083015260c0810151151560c083015260e0810151151560e0830152610100809101511515910152565b9060e0806127af9360018060a01b038082511685528060208301511660208601528060408301511660408601528060608301511660608601528060808301511660808601528060a08301511660a086015260c08201511660c085015201519101906126ea565b565b80548210156127c6575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b906040516127e78161261f565b61010060ff600583958054855260018101546020860152600281015460408601526003810154606086015260048101546080860152015481811660a0850152818160081c16151560c0850152818160101c16151560e085015260181c161515910152565b91908251928382525f5b848110612875575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201612855565b6040519061289682612602565b8160e05f918281528260208201528260408201528260608201528260808201528260a08201528260c0820152604051926128cf8461261f565b8084528060208501528060408501528060608501528060808501528060a08501528060c085015280838501526101008401520152565b9190820180921161291257565b634e487b7160e01b5f52601160045260245ffd5b1561292d57565b60405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606490fd5b1561297057565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420726573657276657360801b6044820152606490fd5b8181029291811591840414171561291257565b81156129c5570490565b634e487b7160e01b5f52601260045260245ffd5b90612a30916129e9821515612926565b60018060a01b03165f526005602052612a2a60405f20916008612a22600785015480151580612a33575b612a1c90612969565b836129a8565b930154612905565b906129bb565b90565b50858301541515612a13565b90612a3091612a4f821515612926565b60018060a01b03165f526005602052612a2a60405f2091612a8b600860078501549485151580612a91575b612a8390612969565b0154826129a8565b92612905565b50808201541515612a7a565b90816020910312610a0257516001600160a01b0381168103610a025790565b602060049160018060a01b038091165f5260058252600360405f20015416604051928380926315ab88c960e31b82525afa908115612b16575f91612afe575090565b612a30915060203d811161173d5761172f8183612658565b6040513d5f823e3d90fd5b8051600110156127c65760400190565b80518210156127c65760209160051b010190565b9190820391821161291257565b6001600160a01b03165f9081526005602052604090206008810154600b90910154612a3091612b45565b15612b8357565b60405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606490fd5b15612bc457565b60405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606490fd5b90816020910312610a0257518015158103610a025790565b3d15612c3f573d90612c268261267a565b91612c346040519384612658565b82523d5f602084013e565b606090565b15612c4b57565b60405162461bcd60e51b815260206004820152601760248201527f66656520455448207472616e73666572206661696c65640000000000000000006044820152606490fd5b6002805414612c9f5760028055565b604051633ee5aeb560e01b8152600490fd5b90816060910312610a02578051916040602083015192015190565b9160018060a01b0392835f911681526020916005835260409360048487600388872001541687519283809263c45a015560e01b82525afa908115612e10579087918591612df3575b50865163e6a4390560e01b81526001600160a01b0384811660048301528516602482015297911691908588604481865afa978815612de9578598612dca575b50871615612d645750505050505090565b85516364e329cb60e11b81526001600160a01b039182166004820152921660248301529394509282908490604490829085905af1938415612dc0575092612daa57505090565b612a309250803d1061173d5761172f8183612658565b51903d90823e3d90fd5b612de2919850863d881161173d5761172f8183612658565b965f612d53565b87513d87823e3d90fd5b612e0a9150863d881161173d5761172f8183612658565b5f612d14565b86513d86823e3d90fdfea26469706673582212201b73b939b051c2fa15249f484ede21922b5f019830d3b7092efcd46787bdd9be64736f6c634300081400330000000000000000000000006be438c78e96b4a9bde2eb28acca822ed3f9eebd000000000000000000000000934b825af7cdbb626ddddc849458e2471b302d4b000000000000000000000000ba25eddc60b6e9d681780f5110cb2c78c7f0b48d00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894000000000000000000000000089a1cbd52ac5f8ba0a164e23093736798c8cb6600000000000000000000000000000000000000000000000000000000000003e8

Deployed Bytecode

0x610120806040526004361015610013575f80fd5b5f60e0525f3560e01c908163025b22bc1461254d57816303fd2a45146125335750806306e29712146125085780630c10fd0f146124c85780631513556c1461249d57806315388d9a146124555780632c6128321461243257806346c96aac146124075780634d6dcae1146123e05780635c60da1b146123b55780636832e5de146123865780636d090218146123455780636f3eebae1461231057806370f3bf1214612169578063715018a61461210f57806372521cc314611c775780637fec435314611c1b578063819512cd14610d7f57806388007f2a14610d37578063880f403914610ce95780638da5cb5b14610cc05780639c8c364814610c24578063a1e1fbc214610a41578063aa556e0b14610533578063b536b78e1461047e578063c2e4d08f14610457578063c34223fb146103f7578063c3abb766146103cc578063c3d2c3c114610325578063c4c6c237146102fa578063e1f1c4a7146102db578063f2fde38b14610260578063f315df8614610215578063f85fc0ab146101f45763fc006a8a146101a2575f80fd5b346101ee5760203660031901126101ee576101bb612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600754161760075580f35b8280fd5b60e05180fd5b346101ee5760e0518060031936011261021257602060405160648152f35b80fd5b346101ee5760203660031901126101ee5761022e612598565b60e051805490916001600160a01b0391821633036101ea57169052600360205260e05160408120805460ff1916905580f35b346101ee5760203660031901126101ee57610279612598565b60e051805490916001600160a01b038083169291338490036102d757169182156102d35782907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a36001600160a01b03191617815580f35b8380fd5b8480fd5b346101ee5760e051806003193601126102125760206040516127108152f35b346101ee5760e05180600319360112610212576008546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee576102006001600160a01b038061034a612598565b1660e0515260056020526103ca604060e0512091808354169281600182015416918060028301541681600384015416826004850154169161039b6007856005880154169560068801541696016127da565b95604051988952602089015260408801526060870152608086015260a085015260c084015260e08301906126ea565bf35b346101ee5760e05180600319360112610212576009546040516001600160a01b039091168152602090f35b346101ee5760403660031901126101ee57610410612598565b60e080516001600160a01b0392831690526004602052516040812080546024359392908410156102125750602092610447916127b1565b9190546040519260031b1c168152f35b346101ee5760e0518060031936011261021257602061ffff600a5460a01c16604051908152f35b346101ee5760203660031901126101ee5761020061049a612598565b6104a2612889565b5060018060a01b0380911660e0515260056020526105216007604060e05120604051936104ce85612602565b8082541685528060018301541660208601528060028301541660408601528060038301541660608601528060048301541660808601528060058301541660a086015260068201541660c0850152016127da565b60e08201526103ca6040518092612749565b346101ee5760803660031901126101ee5761054c612598565b6105546125c4565b9061055d612c90565b60e080516001600160a01b038316905260056020525160409020600c81015461058b9060081c60ff16612b7c565b61059760243583612a3f565b926127106105ae61ffff600a5460a01c16866129a8565b049160018060a01b0360068201541692604051630b1bafc760e41b8152602081600481885afa9081156108bf5760e05191610a0e575b5060206127106105f6602493856129a8565b604051635395502960e11b81526001600160a01b0388166004820152919004969092839182905afa9081156108bf5760e051916109d6575b5061063c61271091836129a8565b0493861515806109ca575b61065090612bbd565b60078301946106626024358754612905565b8655600960088501946106768a8754612b45565b86550194610685898754612905565b86556040516323b872dd60e01b8152336004820152306024820152602435604482015260208160648160e0518d60018060a01b03165af180156108bf5761099b575b5060075460e051610705918190819081906001600160a01b03166106f4886106ef8b8d612b45565b612b45565b905af16106ff612c15565b50612c44565b60e05180809381935af1610717612c15565b50156109565760e0518080809360018060a01b038254165af1610738612c15565b5015610911576107509060e05180809381938a612b45565b335af161075b612c15565b50156108cc575491549054906040517fb5c4deeb00ec61f7509ac91d1423c0125ef5de64d15d79c41b3cb6ef7e7daca83391806107c2868689428d602435879260a094919796959260c0850198855260208501526040840152606083015260808201520152565b0390a26040519260243584528560208501524260408501526060840152608083015260e060a0830152600460e0830152631cd95b1b60e21b61010083015260c08201527fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e116101203392a2600a546001600160a01b031691823b156101ee57604051631b1e4e2560e31b815260e0513360048301526001600160a01b039093166024808301919091523560448201526064810191909152918290818060848101039160e051905af180156108bf576108aa575b6001600255604080516001815260016020820152f35b6108b3906125da565b60e05180156108945780fd5b6040513d60e051823e3d90fd5b60405162461bcd60e51b815260206004820152601a60248201527f73656c6c657220455448207472616e73666572206661696c65640000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f6f776e7220455448207472616e73666572206661696c656400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f61666620455448207472616e73666572206661696c65640000000000000000006044820152606490fd5b6109bc9060203d6020116109c3575b6109b48183612658565b810190612bfd565b50896106c7565b503d6109aa565b50604435871015610647565b90506020813d602011610a06575b816109f160209383612658565b81010312610a02575161063c61062e565b5f80fd5b3d91506109e4565b90506020813d602011610a39575b81610a2960209383612658565b81010312610a02575160206105e4565b3d9150610a1c565b346101ee576020806003193601126101ee576004359067ffffffffffffffff82116101ee57366023830112156101ee578160040135610a7f816126d2565b92610a8d6040519485612658565b8184528284016024600593841b830101913683116101ee57602401905b828210610c0557505050825190610ac0826126d2565b93610ace6040519586612658565b828552601f19610add846126d2565b018460e0515b828110610bef5750505060e0515b838110610b46578486604051908282018383528151809152836040840192019360e0515b828110610b225784840385f35b9091928261020082610b376001948a51612749565b01960191019492919094610b15565b6001600160a01b039081610b5a8285612b31565b511660e05152838652604060e05120610bce600760405192610b7b84612602565b8581541684526001958087830154168b86015280600283015416604086015280600383015416606086015280600483015416608086015280898301541660a086015260068201541660c0850152016127da565b60e0820152610bdd8289612b31565b52610be88188612b31565b5001610af1565b610bf7612889565b82828a010152018590610ae3565b81356001600160a01b0381168103610a02578152908401908401610aaa565b346101ee576020806003193601126101ee576001600160a01b039081610c48612598565b1660e0515260048152604060e05120916040518093849184825491828152019160e0515260e0519385852094905b86838310610ca4578590610c8c82870383612658565b610ca0604051928284938452830190612696565b0390f35b8654821685526001968701968996509401939190910190610c76565b346101ee5760e0518060031936011261021257546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee57610d02612598565b60e051805490916001600160a01b0391821633036101ea57169052600360205260e05160408120805460ff1916600117905580f35b346101ee5760203660031901126101ee57610d50612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600954161760095580f35b60603660031901126101ee57610d93612598565b610d9b6125ae565b610da3612c90565b3415611be25760018060a01b03821660e051526005602052610dd860ff600c604060e051208061010052015460081c16612b7c565b612710610dee61ffff600a5460a01c16346129a8565b049060018060a01b03600661010051015416604051630b1bafc760e41b8152602081600481855afa9081156108bf5760e05191611baf575b50602491612710610e39602093876129a8565b0460c052604051635395502960e11b81526001600160a01b038516600482015292839182905afa9081156108bf5760e05191611b7b575b5082612710610e85610f2993610f3e966129a8565b0460a052610ead610e9f610e998334612b45565b876129d9565b806080526024351115612bbd565b610ef9610ee4610ecd610ec08434612b45565b6008610100510154612905565b610100519060088201556007608051910154612b45565b61010051906007820155600934910154612905565b60096101005101556106f460018060a01b03600754169160e0518093819382936106ef60a0519160c05190612b45565b60e0518080809360a051905af16106ff612c15565b610f5e60e05180808060c05160018060a01b038254165af16106ff612c15565b60405163a9059cbb60e01b8152608051336004830152602482015260e051602090829060449082906001600160a01b0387165af180156108bf57611b5c575b506101005160088101549060096007820154910154906040517f2ab932704044a97dfcb4c1cbd1ddfd869c7d10bc1e42daac2e1056cbb05449b333918061100e8686894260805134879260a094919796959260c0850198855260208501526040840152606083015260808201520152565b0390a26040519234845260805160208501524260408501526060840152608083015260e060a0830152600360e08301526262757960e81b61010083015260c08201527fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e116101203392a2600a546001600160a01b0316803b156101ee576040516302c9982760e11b815260e080516080513360048501526001600160a01b03861660248501523460448501526064840152905191929091839160849183915af180156108bf57611b47575b506110e281612b52565b6101005190600a820154918260011c82101580611b35575b611a66575b501015611112575b600160025560e05180f35b61010051600c01805461ff00191690556001600160a01b0381163b156101ee576040516335459a6560e21b815260e05181600481836001600160a01b0387165af180156108bf57611a51575b50611175610100516008600b820154910154612b45565b600c6101005182600882015501549160ff8316611194575b5050611107565b6040516370a0823160e01b81523060048201526020816024816001600160a01b0386165afa9081156108bf5760e05191611a1d575b506111ea60646111de819360ff8816906129a8565b049360ff8616906129a8565b049283605a810204605a148415171561153d5782605a810204605a148315171561153d5760e080516001600160a01b038416815260056020529051604090209160249061123685612abc565b906020611244838880612ccc565b6005870180546001600160a01b0319166001600160a01b038084169182179092556040516370a0823160e01b815260048101919091529591948692918391165afa9283156108bf5760e051936119e9575b506040516370a0823160e01b81526001600160a01b038381166004830152602090829060249082908b165afa9081156108bf5760e051916119b7575b506001600160a01b0383161515908161199c575b506118c9575b60e080516001600160a01b038881169182905260056020908152835160409081902060030180549151636eb1769f60e11b815230600482015291909316602482015293519193929091839160449183915af19081156108bf5760e05191611897575b5015611829575b5060101c60ff1615611555575060038301546001600160a01b03166113798288612b45565b906113848488612b45565b61012c4201421161153d5760c48789946060946064605a8e82826040519b8c9a8b9963f305d71960e01b8b5260018060a01b031660048b015260248a0152020460448701520204606484015261dead608484015261012c420160a48401525af180156108bf5761150e575b505b600a5460038401805490916001600160a01b039182169116611413848a612b45565b600961141f878b612b45565b970196875491833b156101ee576040519463ea49c05f60e01b865233600487015260018060a01b038b1660248701526044860152606485015260848401524260a484015260c48301528160e48160e05180945af180156108bf576114f9575b50546001600160a01b03169561149e929161149891612b45565b94612b45565b9054906040519384526020840152426040840152606083015260018060a01b0316907f630616749c0aa3ac2b8943843261fd2d07d0045dde6fe2a8b25381b8e6dc0f2760803392a460e051600861010051015580808061118d565b611502906125da565b60e051801561147e5780fd5b61152f9060603d606011611536575b6115278183612658565b810190612cb1565b50506113ef565b503d61151d565b634e487b7160e01b60e051526011600452602460e051fd5b60038401546001600160a01b031661156d8389612b45565b906115788589612b45565b61012c4201421161153d5760c4888a946060946064605a8f82826040519b8c9a8b9963f305d71960e01b8b5260018060a01b031660048b015260248a0152020460448701520204606484015230608484015261012c420160a48401525af180156108bf5761180a575b50600954604051636eb1769f60e11b81523060048201526001600160a01b039182166024820181905260e05190926020918391604491839188165af19081156108bf5760e051916117d8575b5015611779575b506009546040516370a0823160e01b81523060048201526001600160a01b039182169290916020908390602490829085165afa9182156108bf5760e05192611744575b5085546040516344f53e6560e11b81526001600160a01b039283166004808301919091526407915f1250602483015260a0604483015260a4820152636c6f676f60e01b60c4820152606481019390935216608482015260e0519091602091839160e49183915af19081156108bf5760e05191611715575b506004840180546001600160a01b0319166001600160a01b039092169190911790556113f1565b611737915060203d60201161173d575b61172f8183612658565b810190612a9d565b876116ee565b503d611725565b91506020823d602011611771575b8161175f60209383612658565b81010312610a025790519060e4611677565b3d9150611752565b60405163095ea7b360e01b815260048101919091525f19602482015260e051602090829060449082906001600160a01b0387165af180156108bf5715611634576117d19060203d6020116109c3576109b48183612658565b5087611634565b90506020813d602011611802575b816117f360209383612658565b81010312610a0257518961162d565b3d91506117e6565b6118229060603d606011611536576115278183612658565b50506115e1565b5460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015260e051909291602091849160449183918c165af19182156108bf5760ff92611878575b5090611354565b6118909060203d6020116109c3576109b48183612658565b5089611871565b90506020813d6020116118c1575b816118b260209383612658565b81010312610a0257518a61134d565b3d91506118a5565b92506118de876118d984896129a8565b6129bb565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905260e05192959260209183916044918391908c165af180156108bf5761197d575b506001600160a01b0382163b156101ee5760405160016209351760e01b0319815260e05181600481836001600160a01b0388165af180156108bf57611968575b506112eb565b611971906125da565b60e05180156119625780fd5b6119959060203d6020116109c3576109b48183612658565b5088611922565b8415159150816119ae575b50896112e5565b905015896119a7565b90506020813d6020116119e1575b816119d260209383612658565b81010312610a025751896112d1565b3d91506119c5565b9092506020813d602011611a15575b81611a0560209383612658565b81010312610a0257519188611295565b3d91506119f8565b90506020813d602011611a49575b81611a3860209383612658565b81010312610a0257516111ea6111c9565b3d9150611a2b565b611a5a906125da565b60e051801561115e5780fd5b600681015460038201546002830154600884015460078501546009909501546001600160a01b0393841695948416949093909216843b156101ee57604051634437af4760e11b81526001600160a01b038a1660048201819052602482015260448101969096526064860152608485015260a48401524260c484015260e483015260e05190829061010490829084905af180156108bf57611b20575b5061010051600c01805463ff00000019166301000000179055836110ff565b611b29906125da565b60e0518015611b015780fd5b5060ff600c82015460181c16156110fa565b611b50906125da565b60e05180156110d85780fd5b611b749060203d6020116109c3576109b48183612658565b5081610f9d565b90506020813d602011611ba7575b81611b9660209383612658565b81010312610a025751610f3e610e70565b3d9150611b89565b90506020813d602011611bda575b81611bca60209383612658565b81010312610a0257516024610e26565b3d9150611bbd565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206275792076616c756560781b6044820152606490fd5b346101ee5760203660031901126101ee5760043561ffff811681036101ee5760e05180549091906001600160a01b03163303611c7357600a805461ffff60a01b191660a09290921b61ffff60a01b1691909117905580f35b5080fd5b6101003660031901126101ee5760043567ffffffffffffffff8082116101ee576023913683820112156101ee5760405192611cb18461263c565b839260448301923684116101ee5780600401945b8486106120ae5786611cd56125ae565b90611cde6125c4565b6001600160a01b03929060843584811681036101ee573660c312156101ee57604051611d098161263c565b60e4813682116101ee5760a4905b82821061209e575050359182151583036101ee573360e051526020956003875260ff604060e0512054161561206a576e5af43d82803e903d91602b57fd5bf3600654763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c161760e051526effffffffffffffffffffffffffffff199060781b16178752876037600960e051f01695861561205857878251920151873b156101ee57611df690611de4604051946366faaae360e01b8652602435600487015260a0602487015260a486019061284b565b8481036003190160448601529061284b565b306064840152336084840152828060e051920381838b5af19182156108bf578992612049575b5016968760e051526004875260e0519760408920805499680100000000000000008b1015612032575089611e5a916001600c999a9b9c0181556127b1565b81549060031b90848b831b921b1916179055611e74612889565b9081528881019288845282604083019816885282606083019116815260c082019433865260e0830196606460a089510152600160c089510152151560e0885101528651611ec46024358251612905565b90528a810190611ed682513490612905565b611ee58d8a5101918251612905565b905251606088510152516080875101528860e0515260058a52604060e051209783835116946001600160601b0360a01b95868b5416178a558460018b01915116868254161790558360028a01915116858254161790558260038901915116848254161790556004870182608083015116848254161790558160a06005890192015116838254161790556006860192511690825416179055519182516007820155848301516008820155604083015160098201556060830151600a8201556080830151600b820155019060ff60a0820151169082549161ff0060c0830151151560081b169063ff00000061010062ff000060e0860151151560101b16940151151560181b169363ffffffff1916171717179055604051602435815234838201527fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee4560403092a2604051908152f35b634e487b7160e01b9052604160045260e051602490fd5b612052906125da565b89611e1c565b60405163b06ebf3d60e01b8152600490fd5b60405162461bcd60e51b815260048101889052600c60248201526b3737ba103232b83637bcb2b960a11b6044820152606490fd5b8135815260209182019101611d17565b85358381116101ee5782013685820112156101ee576004810135916120d28361267a565b6120df6040519182612658565b838152602493368582860101116101ee5780602095869501858401378360e0519183010152815201950194611cc5565b346101ee5760e051806003193601126102125780546001600160a01b038116338190036101ea577ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c648208380a26001600160a01b031916815580f35b346101ee5760603660031901126101ee57612182612598565b6001600160a01b03602435818116908190036101ee576040519167ffffffffffffffff9160608401838111858210176122f857604052600284526020948585019160403684376121d182612abc565b928651156122e0578480941690526121e886612b21565b521660e05152600584526003604060e0512001541691604051809363d06ca61f60e01b8252604435600483015260406024830152818061222f60e051956044830190612696565b03915afa9081156108bf5760e05191612256575b8361224d83612b21565b51604051908152f35b903d8091843e6122668184612658565b82019183818403126101ee5780519182116101ee570181601f820112156101ee57805190612293826126d2565b916122a16040519384612658565b808352848084019160051b8301019384116101ee5784809201905b8482106122d15750505061224d915083612243565b815181529082019082016122bc565b634e487b7160e01b60e051526032600452602460e051fd5b634e487b7160e01b60e051526041600452602460e051fd5b346101ee5760203660031901126101ee57602061233361232e612598565b612abc565b6040516001600160a01b039091168152f35b346101ee5760203660031901126101ee576001600160a01b03612366612598565b1660e051526003602052602060ff604060e0512054166040519015158152f35b346101ee5760403660031901126101ee5760206123ad6123a4612598565b60243590612a3f565b604051908152f35b346101ee5760e05180600319360112610212576006546040516001600160a01b039091168152602090f35b346101ee5760403660031901126101ee5760206123ad6123fe612598565b602435906129d9565b346101ee5760e05180600319360112610212576001546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee5760206123ad612450612598565b612b52565b346101ee5760203660031901126101ee5761246e612598565b60e051805490916001600160a01b0391821633036101ea57166001600160601b0360a01b600a541617600a5580f35b346101ee5760e0518060031936011261021257600a546040516001600160a01b039091168152602090f35b346101ee5760203660031901126101ee5760206001600160a01b03806124ec612598565b1660e05152600582526002604060e05120015416604051908152f35b346101ee5760e05180600319360112610212576007546040516001600160a01b039091168152602090f35b34610a02575f366003190112610a02578061dead60209252f35b34610a02576020366003190112610a0257612566612598565b5f546001600160a01b03919082163303610a0257168015610a02576001600160601b0360a01b60065416176006555f80f35b600435906001600160a01b0382168203610a0257565b604435906001600160a01b0382168203610a0257565b606435906001600160a01b0382168203610a0257565b67ffffffffffffffff81116125ee57604052565b634e487b7160e01b5f52604160045260245ffd5b610100810190811067ffffffffffffffff8211176125ee57604052565b610120810190811067ffffffffffffffff8211176125ee57604052565b6040810190811067ffffffffffffffff8211176125ee57604052565b90601f8019910116810190811067ffffffffffffffff8211176125ee57604052565b67ffffffffffffffff81116125ee57601f01601f191660200190565b9081518082526020808093019301915f5b8281106126b5575050505090565b83516001600160a01b0316855293810193928101926001016126a7565b67ffffffffffffffff81116125ee5760051b60200190565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260ff60a08201511660a083015260c0810151151560c083015260e0810151151560e0830152610100809101511515910152565b9060e0806127af9360018060a01b038082511685528060208301511660208601528060408301511660408601528060608301511660608601528060808301511660808601528060a08301511660a086015260c08201511660c085015201519101906126ea565b565b80548210156127c6575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b906040516127e78161261f565b61010060ff600583958054855260018101546020860152600281015460408601526003810154606086015260048101546080860152015481811660a0850152818160081c16151560c0850152818160101c16151560e085015260181c161515910152565b91908251928382525f5b848110612875575050825f602080949584010152601f8019910116010190565b602081830181015184830182015201612855565b6040519061289682612602565b8160e05f918281528260208201528260408201528260608201528260808201528260a08201528260c0820152604051926128cf8461261f565b8084528060208501528060408501528060608501528060808501528060a08501528060c085015280838501526101008401520152565b9190820180921161291257565b634e487b7160e01b5f52601160045260245ffd5b1561292d57565b60405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081a5b9c1d5d08185b5bdd5b9d60621b6044820152606490fd5b1561297057565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420726573657276657360801b6044820152606490fd5b8181029291811591840414171561291257565b81156129c5570490565b634e487b7160e01b5f52601260045260245ffd5b90612a30916129e9821515612926565b60018060a01b03165f526005602052612a2a60405f20916008612a22600785015480151580612a33575b612a1c90612969565b836129a8565b930154612905565b906129bb565b90565b50858301541515612a13565b90612a3091612a4f821515612926565b60018060a01b03165f526005602052612a2a60405f2091612a8b600860078501549485151580612a91575b612a8390612969565b0154826129a8565b92612905565b50808201541515612a7a565b90816020910312610a0257516001600160a01b0381168103610a025790565b602060049160018060a01b038091165f5260058252600360405f20015416604051928380926315ab88c960e31b82525afa908115612b16575f91612afe575090565b612a30915060203d811161173d5761172f8183612658565b6040513d5f823e3d90fd5b8051600110156127c65760400190565b80518210156127c65760209160051b010190565b9190820391821161291257565b6001600160a01b03165f9081526005602052604090206008810154600b90910154612a3091612b45565b15612b8357565b60405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606490fd5b15612bc457565b60405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b6044820152606490fd5b90816020910312610a0257518015158103610a025790565b3d15612c3f573d90612c268261267a565b91612c346040519384612658565b82523d5f602084013e565b606090565b15612c4b57565b60405162461bcd60e51b815260206004820152601760248201527f66656520455448207472616e73666572206661696c65640000000000000000006044820152606490fd5b6002805414612c9f5760028055565b604051633ee5aeb560e01b8152600490fd5b90816060910312610a02578051916040602083015192015190565b9160018060a01b0392835f911681526020916005835260409360048487600388872001541687519283809263c45a015560e01b82525afa908115612e10579087918591612df3575b50865163e6a4390560e01b81526001600160a01b0384811660048301528516602482015297911691908588604481865afa978815612de9578598612dca575b50871615612d645750505050505090565b85516364e329cb60e11b81526001600160a01b039182166004820152921660248301529394509282908490604490829085905af1938415612dc0575092612daa57505090565b612a309250803d1061173d5761172f8183612658565b51903d90823e3d90fd5b612de2919850863d881161173d5761172f8183612658565b965f612d53565b87513d87823e3d90fd5b612e0a9150863d881161173d5761172f8183612658565b5f612d14565b86513d86823e3d90fdfea26469706673582212201b73b939b051c2fa15249f484ede21922b5f019830d3b7092efcd46787bdd9be64736f6c63430008140033

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

0000000000000000000000006be438c78e96b4a9bde2eb28acca822ed3f9eebd000000000000000000000000934b825af7cdbb626ddddc849458e2471b302d4b000000000000000000000000ba25eddc60b6e9d681780f5110cb2c78c7f0b48d00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894000000000000000000000000089a1cbd52ac5f8ba0a164e23093736798c8cb6600000000000000000000000000000000000000000000000000000000000003e8

-----Decoded View---------------
Arg [0] : _implementation (address): 0x6bE438C78E96b4a9Bde2eb28AcCa822eD3F9EebD
Arg [1] : _feeContract (address): 0x934b825af7CdbB626DdddC849458e2471b302d4B
Arg [2] : _lpLockDeployer (address): 0xBA25EdDc60B6E9D681780f5110cB2C78C7f0B48D
Arg [3] : _stableAddress (address): 0x29219dd400f2Bf60E5a23d13Be72B486D4038894
Arg [4] : _eventTracker (address): 0x089A1CBd52ac5f8ba0a164E23093736798C8cB66
Arg [5] : _feePer (uint16): 1000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000006be438c78e96b4a9bde2eb28acca822ed3f9eebd
Arg [1] : 000000000000000000000000934b825af7cdbb626ddddc849458e2471b302d4b
Arg [2] : 000000000000000000000000ba25eddc60b6e9d681780f5110cb2c78c7f0b48d
Arg [3] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [4] : 000000000000000000000000089a1cbd52ac5f8ba0a164e23093736798c8cb66
Arg [5] : 00000000000000000000000000000000000000000000000000000000000003e8


Deployed Bytecode Sourcemap

9491:19176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;4913:10;:19;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;28267:29;9491:19176;;;28267:29;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9655:3;9491:19176;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;4913:10;:19;9491:19176;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;4913:10;:19;;;9491:19176;;;5752:23;;;9491:19176;;5791:38;;;;;;-1:-1:-1;;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9703:5;9491:19176;;;;;;;;;;;;;;;;;10604:28;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;-1:-1:-1;;;;;9491:19176:0;;;:::i;:::-;;;;;10480:50;9491:19176;;;;;;;;;;;;10480:50;;9491:19176;10480:50;;9491:19176;;10480:50;;;;;9491:19176;;10480:50;9491:19176;10480:50;;9491:19176;;10480:50;9491:19176;10480:50;;9491:19176;;10480:50;;;;;;;9491:19176;;10480:50;;;;9491:19176;;10480:50;;;:::i;:::-;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10638:29;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;10386:50;;;;;;9491:19176;10386:50;;;;:::i;:::-;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10706:20;9491:19176;;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;16120:10;9491:19176;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16120:10;9491:19176;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;:::i;:::-;2441:103;;;:::i;:::-;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;16860:10;9491:19176;;;;;;16898:22;;;9491:19176;16890:53;;9491:19176;;;;16890:53;:::i;:::-;17017:38;9491:19176;;17017:38;;:::i;:::-;9491:19176;9703:5;17089:18;9491:19176;17101:6;9491:19176;;;;17089:18;;:::i;:::-;9491:19176;;;;;;;17212:14;;;9491:19176;;;;;;;;17190:51;;9491:19176;17190:51;9491:19176;17190:51;;;;;;;;;9491:19176;17190:51;;;;9491:19176;17162:80;9491:19176;9703:5;17162:80;9491:19176;17162:80;;;:::i;:::-;9491:19176;;-1:-1:-1;;;17349:103:0;;-1:-1:-1;;;;;9491:19176:0;;;17349:103;;9491:19176;;;;;;;;;;;17349:103;;;;;;;9491:19176;17349:103;;;;9491:19176;17304:162;;9703:5;17304:162;;;:::i;:::-;9491:19176;17500:13;;;;:36;;;9491:19176;17492:66;;;:::i;:::-;16898:10;;;9491:19176;17569:39;9491:19176;;;;17569:39;:::i;:::-;9491:19176;;17662:17;9491:19176;17618:21;;9491:19176;17618:34;9491:19176;;;17618:34;:::i;:::-;9491:19176;;17662:17;9491:19176;17662:30;9491:19176;;;17662:30;:::i;:::-;9491:19176;;;;;;;17703:69;;17733:10;9491:19176;17703:69;;9491:19176;17753:4;9491:19176;;;;;;;;;;;;;;;;;;;;;;;17703:69;;;;;;;;9491:19176;-1:-1:-1;16898:10:0;9491:19176;;;17928:43;;9491:19176;;;;;;-1:-1:-1;;;;;9491:19176:0;17838:47;:32;;;;;:::i;:::-;:47;:::i;:::-;17801:98;;;;;:::i;:::-;;17928:43;:::i;:::-;9491:19176;;17996:40;;;;;;;;;:::i;:::-;;9491:19176;;;;;;;;;;;;;;;;;18173:40;;;;:::i;:::-;;9491:19176;;;18342:24;9491:19176;;;18342:24;;;;;;;:::i;:::-;17733:10;18319:52;;;;:::i;:::-;;9491:19176;;;;;;;;;;;18443:219;17733:10;18533:15;;18443:219;18533:15;;;;9491:19176;;;18443:219;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18443:219;;;;9491:19176;;;;;;;;;;;;18533:15;9491:19176;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;18677:247;9491:19176;17733:10;18677:247;;17101:6;9491:19176;-1:-1:-1;;;;;9491:19176:0;;18934:144;;;;;9491:19176;;-1:-1:-1;;;18934:144:0;;9491:19176;;17733:10;9491:19176;18934:144;;9491:19176;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18934:144;9491:19176;;;18934:144;;;;;;;;;9491:19176;;17662:17;9491:19176;;;;;;;;;;;;;18934:144;;;;:::i;:::-;9491:19176;;;;18934:144;9491:19176;;;18934:144;9491:19176;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;17703:69;;;9491:19176;17703:69;9491:19176;17703:69;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17500:36;-1:-1:-1;9491:19176:0;;17517:19;;;17500:36;;17349:103;;;9491:19176;17349:103;;9491:19176;17349:103;;;;;;9491:19176;17349:103;;;:::i;:::-;;;9491:19176;;;;;17304:162;17349:103;;9491:19176;;;;17349:103;;;-1:-1:-1;17349:103:0;;17190:51;;;9491:19176;17190:51;;9491:19176;17190:51;;;;;;9491:19176;17190:51;;;:::i;:::-;;;9491:19176;;;;;;17190:51;;;;;-1:-1:-1;17190:51:0;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;9491:19176:0;;;:::i;:::-;;;;;;;;;;;16365:8;;;9491:19176;16365:8;16375:10;;;;;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16365:8;-1:-1:-1;;;;;9491:19176:0;;16422:12;;;;:::i;:::-;9491:19176;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;16400:35;;;;:::i;:::-;;;;;;:::i;:::-;;9491:19176;16365:8;;9491:19176;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;4913:10;:19;9491:19176;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;4913:10;:19;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;28394:35;9491:19176;;;28394:35;9491:19176;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;:::i;:::-;2441:103;;:::i;:::-;19273:9;:13;9491:19176;;;;;;;;;;;;19347:10;9491:19176;;19377:53;9491:19176;19385:22;9491:19176;;;;;;;19385:22;9491:19176;;;;19377:53;:::i;:::-;9703:5;19522:18;9491:19176;19534:6;9491:19176;;;;19273:9;19522:18;:::i;:::-;9491:19176;;;;;;;19653:14;9491:19176;19653:14;;9491:19176;;;;;;;19631:51;;9491:19176;19631:51;9491:19176;19631:51;;;;;;;;;9491:19176;19631:51;;;;9491:19176;19599:84;9491:19176;19599:84;9703:5;19599:84;9491:19176;19599:84;;;:::i;:::-;9491:19176;;;;;-1:-1:-1;;;19806:111:0;;-1:-1:-1;;;;;9491:19176:0;;;19806:111;;9491:19176;;;;;;19806:111;;;;;;;9491:19176;19806:111;;;;9491:19176;19753:182;;9703:5;19753:182;20492:43;19753:182;20677:43;19753:182;;:::i;:::-;9491:19176;;;20102:54;19988:100;20050:24;19273:9;;20050:24;:::i;:::-;19988:100;;:::i;:::-;;;;9491:19176;;-1:-1:-1;20110:24:0;20102:54;:::i;:::-;20289:30;20236:39;20171:51;20197:24;19273:9;;20197:24;:::i;:::-;9491:19176;;19385:10;20171:21;9491:19176;20171:51;:::i;:::-;9491:19176;19385:10;20171:21;9491:19176;20171:21;;9491:19176;19385:10;19988:100;20236:39;19385:10;;9491:19176;20236:39;:::i;:::-;9491:19176;19385:10;;;;;9491:19176;20289:17;19273:9;20289:17;;9491:19176;20289:30;:::i;:::-;:17;9491:19176;19385:10;20289:17;9491:19176;20394:47;9491:19176;;;;;19385:10;9491:19176;;;;;20394:47;;;;;;:32;9491:19176;20394:47;:32;9491:19176;20394:32;;;:::i;20492:43::-;9491:19176;;20564:40;;;;9491:19176;20564:40;;;;;;:::i;20677:43::-;20830;9491:19176;;20749:40;;;9491:19176;20749:40;9491:19176;;;;;;;;20749:40;;;;:::i;20830:43::-;9491:19176;;-1:-1:-1;;;20888:50:0;;19988:100;20888:50;20914:10;9491:19176;20888:50;;9491:19176;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;20888:50;;;;;;;;9491:19176;19385:10;9491:19176;19385:10;9491:19176;20171:21;;9491:19176;19385:10;20289:17;19385:10;;;9491:19176;20289:17;;9491:19176;;;;20957:253;20914:10;21065:15;;20957:253;21065:15;;;;19988:100;20957:253;19273:9;20957:253;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20957:253;;;;9491:19176;;19273:9;;9491:19176;;19988:100;9491:19176;;;;;21065:15;9491:19176;;;;;;;;19988:100;9491:19176;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;21229:282;9491:19176;20914:10;21229:282;;19534:6;9491:19176;-1:-1:-1;;;;;9491:19176:0;21525:163;;;;;9491:19176;;-1:-1:-1;;;21525:163:0;;9491:19176;;;19988:100;21525:163;20914:10;9491:19176;21525:163;;9491:19176;-1:-1:-1;;;;;9491:19176:0;;;;;;19273:9;9491:19176;;;;;;;;;;;;;;;;;;;;21525:163;;;;;;;;9491:19176;21733:23;;;;:::i;:::-;9491:19176;19385:10;21790:24;19534:6;21790:24;;9491:19176;;;;;21929:42;;;:82;;;9491:19176;21912:504;;9491:19176;22509:36;;;22505:634;;9491:19176;;20289:17;9491:19176;;;;;22505:634;9491:19176;19385:10;:22;;9491:19176;;-1:-1:-1;;9491:19176:0;;;-1:-1:-1;;;;;9491:19176:0;;22605:33;;;;9491:19176;;-1:-1:-1;;;22605:33:0;;9491:19176;;;;;;-1:-1:-1;;;;;9491:19176:0;;22605:33;;;;;;;;22505:634;19385:10;22652:53;9491:19176;19385:10;9491:19176;22677:28;;;9491:19176;20171:21;;9491:19176;22652:53;:::i;:::-;19385:22;9491:19176;19385:10;20171:21;9491:19176;20171:21;;9491:19176;19385:22;9491:19176;;;;;22719:409;;22505:634;;;;;22719:409;9491:19176;;-1:-1:-1;;;22836:41:0;;22871:4;9491:19176;22836:41;;9491:19176;;;;;-1:-1:-1;;;;;9491:19176:0;;22836:41;;;;;;;9491:19176;22836:41;;;;22719:409;9491:19176;22958:44;9655:3;22836:88;9491:19176;;;;;22836:88;;:::i;:::-;9491:19176;;;;;22958:44;;:::i;:::-;9491:19176;;;23393:2;9491:19176;;;23393:2;9491:19176;;;;;;;;23393:2;9491:19176;;;23393:2;9491:19176;;;;;;;;23616:23;;-1:-1:-1;;;;;9491:19176:0;;;;19347:10;9491:19176;;;;;;;;;;23735:21;9491:19176;23735:21;:::i;:::-;23790:44;9491:19176;23790:44;;;;;:::i;:::-;19347:10;23766:21;;9491:19176;;-1:-1:-1;;;;;;9491:19176:0;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;-1:-1:-1;;;23923:49:0;;9491:19176;23923:49;;9491:19176;;;;;;;;;;;;;23923:49;;;;;;;9491:19176;23923:49;;;;22719:409;-1:-1:-1;9491:19176:0;;-1:-1:-1;;;24001:43:0;;-1:-1:-1;;;;;9491:19176:0;;;;24001:43;;9491:19176;;;;;;;;;;;24001:43;;;;;;;9491:19176;24001:43;;;;22719:409;-1:-1:-1;;;;;;9491:19176:0;;24072:31;;;;:97;;22719:409;24055:406;;;22719:409;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;19347:10;9491:19176;;;;;;;;;;;;26517:12;9491:19176;;;;-1:-1:-1;;;26485:45:0;;22871:4;9491:19176;26485:45;;9491:19176;;;;;;;;;;;26517:12;;9491:19176;;;;;;;;;26485:45;;;;;;;9491:19176;26485:45;;;;22719:409;26485:50;;26481:128;;22719:409;-1:-1:-1;9491:19176:0;;;;;;;-1:-1:-1;9491:19176:0;24548:12;;9491:19176;-1:-1:-1;;;;;9491:19176:0;24602:31;;;;:::i;:::-;24691:33;;;;;:::i;:::-;24845:3;21065:15;9491:19176;21065:15;9491:19176;;;;;;;;;9655:3;23393:2;9491:19176;;;;;;;;;;;;;24532:331;;9491:19176;;;;;;;24532:331;;9491:19176;;;;;;;;;;;;;9655:3;9491:19176;;;9573:42;9491:19176;;;;24845:3;21065:15;9491:19176;;;;;24532:331;;;;;;;;24506:1127;;;19534:6;9491:19176;;25742:12;;9491:19176;;25742:12;;-1:-1:-1;;;;;9491:19176:0;;;;;25768:31;;;;:::i;:::-;20289:17;25813:33;;;;:::i;:::-;25889:17;;9491:19176;;;25642:274;;;;;;9491:19176;;;;;;25642:274;;20914:10;9491:19176;25642:274;;9491:19176;;;;;;;;;;;;;;;;9655:3;9491:19176;;;;;;;21065:15;9491:19176;;;;;;;;;;;;;25642:274;;;;;;;;;;24506:1127;-1:-1:-1;9491:19176:0;-1:-1:-1;;;;;9491:19176:0;;26068:33;;9491:19176;26023:31;;;:::i;:::-;26068:33;;:::i;:::-;9491:19176;;;;;;;;;;;;21065:15;9491:19176;;;;;;;;;;;;;;20914:10;25931:240;19988:100;20914:10;25931:240;;9491:19176;;;;19385:10;20171:21;9491:19176;22719:409;;;;;25642:274;;;;:::i;:::-;9491:19176;;;;25642:274;9491:19176;;;24532:331;;;9491:19176;24532:331;9491:19176;24532:331;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;9491:19176;;;;;;;;;;;;;;24506:1127;9491:19176;24910:12;;9491:19176;-1:-1:-1;;;;;9491:19176:0;24964:31;;;;:::i;:::-;25053:33;;;;;:::i;:::-;25216:3;21065:15;9491:19176;21065:15;9491:19176;;;;;;;;;9655:3;23393:2;9491:19176;;;;;;;;;;;;;24894:340;;9491:19176;;;;;;;24894:340;;9491:19176;;;;;;;;;;;;;9655:3;9491:19176;;;22871:4;9491:19176;;;;25216:3;21065:15;9491:19176;;;;;24894:340;;;;;;;;24506:1127;-1:-1:-1;20289:17:0;9491:19176;;;-1:-1:-1;;;26794:43:0;;22871:4;9491:19176;26794:43;;9491:19176;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;26794:43;;;;;;;9491:19176;26794:43;;;;24506:1127;26794:48;;26790:124;;24506:1127;-1:-1:-1;20289:17:0;9491:19176;;;-1:-1:-1;;;25521:48:0;;22871:4;9491:19176;25521:48;;9491:19176;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;25521:48;;;;;;;9491:19176;25521:48;;;;24506:1127;-1:-1:-1;9491:19176:0;;;;-1:-1:-1;;;25329:293:0;;-1:-1:-1;;;;;9491:19176:0;;;;25329:293;;;9491:19176;;;;25460:11;9491:19176;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;9655:3;9491:19176;;;;;;;;;;;;;;;;;;;;;;;25329:293;;;;;;;9491:19176;25329:293;;;;24506:1127;-1:-1:-1;9491:19176:0;25307:19;;9491:19176;;-1:-1:-1;;;;;;9491:19176:0;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;24506:1127;;25329:293;;;;9491:19176;25329:293;9491:19176;25329:293;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;25521:48;;;9491:19176;25521:48;;9491:19176;25521:48;;;;;;9491:19176;25521:48;;;:::i;:::-;;;9491:19176;;;;;;;;25521:48;;;;;-1:-1:-1;25521:48:0;;26790:124;9491:19176;;-1:-1:-1;;;26858:45:0;;9491:19176;26858:45;;9491:19176;;;;-1:-1:-1;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;26858:45;;;;;;;26790:124;26858:45;;;9491:19176;26858:45;9491:19176;26858:45;;;;;;;:::i;:::-;;;26790:124;;26794:43;;;9491:19176;26794:43;;9491:19176;26794:43;;;;;;9491:19176;26794:43;;;:::i;:::-;;;9491:19176;;;;;26794:43;;;;;;-1:-1:-1;26794:43:0;;24894:340;;;9491:19176;24894:340;9491:19176;24894:340;;;;;;;:::i;:::-;;;;;26481:128;9491:19176;;;-1:-1:-1;;;26551:47:0;;-1:-1:-1;;;;;9491:19176:0;;;;26551:47;;9491:19176;-1:-1:-1;;9491:19176:0;;;;;;;;;;;;;;;;;;;26551:47;;;;;;;9491:19176;26551:47;;;26481:128;;;;;26551:47;;;9491:19176;26551:47;9491:19176;26551:47;;;;;;;:::i;:::-;;;;;26485:45;;;9491:19176;26485:45;;9491:19176;26485:45;;;;;;9491:19176;26485:45;;;:::i;:::-;;;9491:19176;;;;;26485:45;;;;;;-1:-1:-1;26485:45:0;;24055:406;24225:41;;24224:71;24225:41;;;;;:::i;:::-;24224:71;:::i;:::-;9491:19176;;-1:-1:-1;;;24310:55:0;;-1:-1:-1;;;;;9491:19176:0;;;;24310:55;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;24310:55;;;;;;;;24055:406;-1:-1:-1;;;;;;9491:19176:0;;24380:31;;;;9491:19176;;-1:-1:-1;;;;;;24380:31:0;;9491:19176;;;;;;-1:-1:-1;;;;;9491:19176:0;;24380:31;;;;;;;;24055:406;;;;24380:31;;;;:::i;:::-;9491:19176;;;;24380:31;9491:19176;;;24310:55;;;9491:19176;24310:55;9491:19176;24310:55;;;;;;;:::i;:::-;;;;;24072:97;24120:23;;;;-1:-1:-1;24120:23:0;:48;;24072:97;;;;;24120:48;24147:21;;;24120:48;;;24001:43;;;9491:19176;24001:43;;9491:19176;24001:43;;;;;;9491:19176;24001:43;;;:::i;:::-;;;9491:19176;;;;;24001:43;;;;;;-1:-1:-1;24001:43:0;;23923:49;;;;9491:19176;23923:49;;9491:19176;23923:49;;;;;;9491:19176;23923:49;;;:::i;:::-;;;9491:19176;;;;;23923:49;;;;;;;-1:-1:-1;23923:49:0;;22836:41;;;9491:19176;22836:41;;9491:19176;22836:41;;;;;;9491:19176;22836:41;;;:::i;:::-;;;9491:19176;;;;;22958:44;22836:41;;;;;-1:-1:-1;22836:41:0;;22605:33;;;;:::i;:::-;9491:19176;;;;22605:33;9491:19176;;;21912:504;19653:14;;;9491:19176;;22153:12;;9491:19176;20289:17;22183:15;;9491:19176;;20171:21;;9491:19176;19385:10;;;9491:19176;20289:17;;;;9491:19176;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;22036:325;;;;;9491:19176;;-1:-1:-1;;;22036:325:0;;-1:-1:-1;;;;;9491:19176:0;;;22036:325;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;21065:15;9491:19176;;;;;;;;;;;;;;;;;;;22036:325;;;;;;;;21912:504;-1:-1:-1;9491:19176:0;19385:10;:22;;9491:19176;;-1:-1:-1;;9491:19176:0;;;;;21912:504;;;22036:325;;;;:::i;:::-;9491:19176;;;;22036:325;9491:19176;;;21929:82;19385:22;9491:19176;19385:22;;;9491:19176;;;;21987:24;21929:82;;21525:163;;;;:::i;:::-;9491:19176;;;;21525:163;9491:19176;;;20888:50;;;9491:19176;20888:50;9491:19176;20888:50;;;;;;;:::i;:::-;;;;;19806:111;;;9491:19176;19806:111;;9491:19176;19806:111;;;;;;9491:19176;19806:111;;;:::i;:::-;;;9491:19176;;;;;20677:43;19806:111;;;;;-1:-1:-1;19806:111:0;;19631:51;;;9491:19176;19631:51;;9491:19176;19631:51;;;;;;9491:19176;19631:51;;;:::i;:::-;;;9491:19176;;;;;;19631:51;;;;;-1:-1:-1;19631:51:0;;9491:19176;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;4913:10;:19;9491:19176;;28639:19;9491:19176;;-1:-1:-1;;;;9491:19176:0;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;12536:10;9491:19176;;;;;;;;;;;;;;;;;;1794:712:1;12607:14:0;9491:19176;1794:712:1;;;;;;;9491:19176:0;;1794:712:1;;;;;;;;;;9491:19176:0;1794:712:1;;9491:19176:0;;1794:712:1;9491:19176:0;2519:22:1;;;2515:85;;12702:15:0;;;9491:19176;;12731:15;12632:175;;;;;9491:19176;;;;;;;;;12632:175;;9491:19176;;;12632:175;;9491:19176;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;9491:19176:0;;;;;;;:::i;:::-;1631:4:1;9491:19176:0;;;;12536:10;9491:19176;;;;;;;;12632:175;;;;;;;;;;;;;;;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13013:10;;;9491:19176;;;;13044:14;9491:19176;13044:14;;9491:19176;;;;13081:11;9491:19176;13081:11;;9491:19176;;;;13112:13;;;12536:10;;9491:19176;;;13148:9;;;9491:19176;;13148:9;;:19;9491:19176;;13112:13;13183:9;;:21;9491:19176;;;;13221:9;;:16;9491:19176;13256:9;;:39;9491:19176;;;;13256:39;:::i;:::-;9491:19176;;;;;;13330:43;9491:19176;;13364:9;13330:43;;:::i;:::-;13305:69;:9;;;:20;9491:19176;;;13305:69;:::i;:::-;9491:19176;;;;13384:9;;:23;9491:19176;;;13451:9;;:27;9491:19176;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12607:14;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1794:712:1;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13112:13;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13364:9;9491:19176;;;;13662:54;9491:19176;1631:4:1;13662:54:0;;9491:19176;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;12632:175;;;;:::i;:::-;;;;2515:85:1;9491:19176:0;;-1:-1:-1;;;2564:25:1;;9491:19176:0;;2564:25:1;9491:19176:0;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;4913:10;:19;;;9491:19176;;5192:25;;;;-1:-1:-1;;;;;;9491:19176:0;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15559:1;9491:19176;;;;;;;;;;;;15581:21;;;:::i;:::-;9491:19176;;;;;;;;;;;;15612:32;;;:::i;:::-;9491:19176;;;;;15685:10;9491:19176;;;;;;;15685:27;9491:19176;;;;;;;;;;15669:85;;9491:19176;;;15669:85;;9491:19176;;;;;;;;;;;;;;;;;:::i;:::-;15669:85;;;;;;;;;9491:19176;;15669:85;;;9491:19176;15779:15;;;;:::i;:::-;9491:19176;;;;;;;15669:85;;;;;;;;;;;:::i;:::-;;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;15685:10;9491:19176;;;;;;;;;;;;;;;;;;;;15669:85;;;15779:15;15669:85;;;;;9491:19176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;-1:-1:-1;;;;;9491:19176:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10537:29;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;4913:10;:19;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;28523:31;9491:19176;;;28523:31;9491:19176;;;;;;;;;;;;;;;;;10673:27;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;-1:-1:-1;;;;;9491:19176:0;;;:::i;:::-;;;;;15052:10;9491:19176;;15097:15;9491:19176;;;;15097:15;9491:19176;;;;;;;;;;;;;;;;;;;;;;10572:26;9491:19176;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;9573:42;9491:19176;;;;;;;;;;-1:-1:-1;;9491:19176:0;;;;;;:::i;:::-;;;-1:-1:-1;;;;;9491:19176:0;;;;4913:10;:19;9491:19176;;;28103:29;;9491:19176;;-1:-1:-1;;;;;9491:19176:0;;28143:32;9491:19176;;;28143:32;9491:19176;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;9491:19176:0;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;9491:19176:0;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;-1:-1:-1;9491:19176:0;;-1:-1:-1;9491:19176:0;;;-1:-1:-1;9491:19176:0;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;9491:19176:0;;;;;;;;;-1:-1:-1;9491:19176:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;13852:541;;14363:23;13852:541;13982:45;13990:12;;;13982:45;:::i;:::-;9491:19176;;;;;;14001:1;9491:19176;14066:10;9491:19176;;14307:34;9491:19176;14001:1;9491:19176;14117:10;14308:21;14243:35;14117:10;;;9491:19176;14117:28;;;:57;;;13852:541;14096:120;;;:::i;:::-;14243:35;;:::i;:::-;14308:21;;9491:19176;14307:34;:::i;:::-;14363:23;;:::i;:::-;13852:541;:::o;14117:57::-;-1:-1:-1;14149:21:0;;;9491:19176;14149:25;;14117:57;;14399:538;;14907:23;14399:538;14526:45;14534:12;;;14526:45;:::i;:::-;9491:19176;;;;;;14545:1;9491:19176;14610:10;9491:19176;;14848:37;9491:19176;14545:1;9491:19176;14661:10;14787:32;14798:21;14661:10;;;9491:19176;14661:28;;;;:57;;;14399:538;14640:120;;;:::i;:::-;14798:21;9491:19176;14787:32;;:::i;:::-;14848:37;;:::i;14661:57::-;-1:-1:-1;14693:21:0;;;9491:19176;14693:25;;14661:57;;9491:19176;;;;;;;;;;-1:-1:-1;;;;;9491:19176:0;;;;;;;:::o;15126:144::-;9491:19176;15212:51;15126:144;9491:19176;;;;;;;;-1:-1:-1;9491:19176:0;15228:10;9491:19176;;15228:27;9491:19176;-1:-1:-1;9491:19176:0;15228:27;9491:19176;;;;;;;;;;;15212:51;;;;;;;;;-1:-1:-1;15212:51:0;;;15205:58;15126:144;:::o;15212:51::-;;;;9491:19176;15212:51;;;;;;;;;:::i;:::-;9491:19176;;;-1:-1:-1;9491:19176:0;;;;;;;;15617:1;9491:19176;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;15808:207::-;-1:-1:-1;;;;;9491:19176:0;-1:-1:-1;9491:19176:0;;;15918:10;9491:19176;;;;;15955:21;;;9491:19176;15979:28;;;;9491:19176;15955:52;;;:::i;9491:19176::-;;;;:::o;:::-;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;9491:19176:0;;;;:::o;:::-;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;9491:19176:0;;;;;;;;;;;;;;;;;;;;2550:307;2677:7;9491:19176;;2677:18;2673:86;;2677:7;9491:19176;;2550:307::o;2673:86::-;9491:19176;;-1:-1:-1;;;2718:30:0;;;;;9491:19176;;;;;;;;;;;;;;;;;;;;;:::o;26947:482::-;;9491:19176;;;;;-1:-1:-1;;;9491:19176:0;;;;;;27101:10;9491:19176;;;;27156:33;9491:19176;;27101:27;9491:19176;;;27101:27;9491:19176;;;;;;;;;;;27156:33;;;;;;;;;;;;;;;;26947:482;-1:-1:-1;9491:19176:0;;-1:-1:-1;;;27214:49:0;;-1:-1:-1;;;;;9491:19176:0;;;27156:33;27214:49;;9491:19176;;;;;;;;;;;;27214:49;9491:19176;;;;27214:49;;;;;;;;;;;26947:482;-1:-1:-1;9491:19176:0;;27277:18;9491:19176;;27311:11;;;;;;;:::o;27273:150::-;9491:19176;;-1:-1:-1;;;27360:52:0;;-1:-1:-1;;;;;9491:19176:0;;;27156:33;27360:52;;9491:19176;;;;;;;;;-1:-1:-1;9491:19176:0;;;;;;;;;;;27360:52;;;;;;;;;;;27353:59;;;:::o;27360:52::-;;;;;;-1:-1:-1;27360:52:0;;;;;;:::i;:::-;9491:19176;;;;;;;;;27214:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;9491:19176;;;;;;;;;27156:33;;;;;;;;;;;;;;:::i;:::-;;;;;9491:19176;;;;;;;;

Swarm Source

ipfs://1b73b939b051c2fa15249f484ede21922b5f019830d3b7092efcd46787bdd9be

Block Transaction 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
[ 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.