ETH Price: $2,821.92 (+15.01%)
Gas: 1.72 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

FXI Sports (FXI) (@$0.007)
Transaction Hash
Method
Block
From
To
Approve217685252025-02-03 20:59:597 hrs ago1738616399IN
FXI Sports: FXI Token
0 ETH0.000377738.11955427
Approve217682442025-02-03 20:03:118 hrs ago1738612991IN
FXI Sports: FXI Token
0 ETH0.0004799416.48722114
Approve217682082025-02-03 19:55:598 hrs ago1738612559IN
FXI Sports: FXI Token
0 ETH0.0007528416.29188108
Transfer217681242025-02-03 19:39:118 hrs ago1738611551IN
FXI Sports: FXI Token
0 ETH0.0009965813.86230578
Transfer217681162025-02-03 19:37:358 hrs ago1738611455IN
FXI Sports: FXI Token
0 ETH0.0011152515.51293548
Approve217662332025-02-03 13:19:3515 hrs ago1738588775IN
FXI Sports: FXI Token
0 ETH0.000289989.85602889
Approve217652882025-02-03 10:09:2318 hrs ago1738577363IN
FXI Sports: FXI Token
0 ETH0.000420419.03683621
Transfer217649852025-02-03 9:07:5919 hrs ago1738573679IN
FXI Sports: FXI Token
0 ETH0.0006113811.1631622
Approve217599532025-02-02 16:15:1136 hrs ago1738512911IN
FXI Sports: FXI Token
0 ETH0.000274745.90567868
Transfer217597162025-02-02 15:27:1137 hrs ago1738510031IN
FXI Sports: FXI Token
0 ETH0.000319244.44137621
Transfer217597002025-02-02 15:23:5937 hrs ago1738509839IN
FXI Sports: FXI Token
0 ETH0.000298174.14822758
Approve217592782025-02-02 13:59:1138 hrs ago1738504751IN
FXI Sports: FXI Token
0 ETH0.000179793.88385827
Approve217551522025-02-02 0:08:232 days ago1738454903IN
FXI Sports: FXI Token
0 ETH0.000139663.0153573
Approve217544632025-02-01 21:49:592 days ago1738446599IN
FXI Sports: FXI Token
0 ETH0.000129452.8
Approve217527832025-02-01 16:11:592 days ago1738426319IN
FXI Sports: FXI Token
0 ETH0.000075822.59713889
Approve217523052025-02-01 14:35:472 days ago1738420547IN
FXI Sports: FXI Token
0 ETH0.000208994.49238194
Approve217503702025-02-01 8:07:352 days ago1738397255IN
FXI Sports: FXI Token
0 ETH0.00006472.21447731
Transfer217503342025-02-01 8:00:112 days ago1738396811IN
FXI Sports: FXI Token
0 ETH0.000120542.2
Approve217502042025-02-01 7:33:592 days ago1738395239IN
FXI Sports: FXI Token
0 ETH0.000162863.49634539
Approve217489082025-02-01 3:12:593 days ago1738379579IN
FXI Sports: FXI Token
0 ETH0.00008271.78600774
Approve217476782025-01-31 23:05:233 days ago1738364723IN
FXI Sports: FXI Token
0 ETH0.000169713.67087769
Transfer217473862025-01-31 22:06:593 days ago1738361219IN
FXI Sports: FXI Token
0 ETH0.000322654.48807763
Transfer217471252025-01-31 21:14:233 days ago1738358063IN
FXI Sports: FXI Token
0 ETH0.000172093.1415705
Approve217469872025-01-31 20:46:473 days ago1738356407IN
FXI Sports: FXI Token
0 ETH0.000214844.64086408
Transfer217469652025-01-31 20:42:233 days ago1738356143IN
FXI Sports: FXI Token
0 ETH0.000327594.2791079
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
217687092025-02-03 21:36:477 hrs ago1738618607
FXI Sports: FXI Token
0.01933294 ETH
217687092025-02-03 21:36:477 hrs ago1738618607
FXI Sports: FXI Token
0.01933294 ETH
217685282025-02-03 21:00:357 hrs ago1738616435
FXI Sports: FXI Token
0.01032191 ETH
217685282025-02-03 21:00:357 hrs ago1738616435
FXI Sports: FXI Token
0.01032191 ETH
217662962025-02-03 13:32:1115 hrs ago1738589531
FXI Sports: FXI Token
0.04256624 ETH
217662962025-02-03 13:32:1115 hrs ago1738589531
FXI Sports: FXI Token
0.04256624 ETH
217648822025-02-03 8:47:1119 hrs ago1738572431
FXI Sports: FXI Token
0.0930884 ETH
217648822025-02-03 8:47:1119 hrs ago1738572431
FXI Sports: FXI Token
0.0930884 ETH
217602132025-02-02 17:07:5935 hrs ago1738516079
FXI Sports: FXI Token
0.01926757 ETH
217602132025-02-02 17:07:5935 hrs ago1738516079
FXI Sports: FXI Token
0.01926757 ETH
217581852025-02-02 10:19:2342 hrs ago1738491563
FXI Sports: FXI Token
0.01898322 ETH
217581852025-02-02 10:19:2342 hrs ago1738491563
FXI Sports: FXI Token
0.01898322 ETH
217566672025-02-02 5:12:3547 hrs ago1738473155
FXI Sports: FXI Token
0.01487578 ETH
217566672025-02-02 5:12:3547 hrs ago1738473155
FXI Sports: FXI Token
0.01487578 ETH
217526052025-02-01 15:35:472 days ago1738424147
FXI Sports: FXI Token
0.12722477 ETH
217526052025-02-01 15:35:472 days ago1738424147
FXI Sports: FXI Token
0.12722477 ETH
217521082025-02-01 13:56:232 days ago1738418183
FXI Sports: FXI Token
0.00987311 ETH
217521082025-02-01 13:56:232 days ago1738418183
FXI Sports: FXI Token
0.00987311 ETH
217496062025-02-01 5:33:112 days ago1738387991
FXI Sports: FXI Token
0.02377608 ETH
217496062025-02-01 5:33:112 days ago1738387991
FXI Sports: FXI Token
0.02377608 ETH
217478772025-01-31 23:45:353 days ago1738367135
FXI Sports: FXI Token
0.02615944 ETH
217478772025-01-31 23:45:353 days ago1738367135
FXI Sports: FXI Token
0.02615944 ETH
217471202025-01-31 21:13:233 days ago1738358003
FXI Sports: FXI Token
0.01887589 ETH
217471202025-01-31 21:13:233 days ago1738358003
FXI Sports: FXI Token
0.01887589 ETH
217464372025-01-31 18:56:233 days ago1738349783
FXI Sports: FXI Token
0.08967554 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FXISportsToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : FXISportsToken.sol
//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IFXISportsToken.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

contract FXISportsToken is Ownable, IFXISportsToken {
    /// @notice Maps an address to its token balance
    mapping(address => uint256) private _balances;
    /// @notice Maps addresses to allowances granted by token holders
    mapping(address => mapping(address => uint256)) private _allowances;
    /// @notice Maps addresses to indicate whether they are excluded from transaction fees
    mapping(address => bool) public excludedFromFees;
    /// @notice Maps addresses to indicate whether they are excluded from maximum wallet balance limits
    mapping(address => bool) public excludedFromMaxWallet;
    /// @notice Maps addresses to indicate whether they are whitelisted
    mapping(address => bool) public whitelists;

    /// @notice Total supply of the FX1 Sports Token
    uint256 private _totalSupply = 300_000_000 * 10 ** _decimals;
    /// @notice Timestamp of the token contract launch
    uint256 public launchTime;
    /// @notice Period during which addresses can be added to the whitelist
    uint256 public whitelistPeriod;
    /// @notice Minimum amount of tokens required to trigger an automatic swap for liquidity
    uint256 public swapThreshold;
    /// @notice Maximum amount of tokens that a wallet can hold
    uint256 public maxWalletAmount;
    /// @notice Accumulated amount of tokens reserved for liquidity
    uint256 private accLiquidityAmount;
    /// @notice Accumulated amount of tokens reserved for marketing purposes
    uint256 private accMarketingAmount;

    /// @notice The cumulative fee rate applied to buy transactions
    uint256 public totalBuyFeeRate;
    /// @notice The cumulative fee rate applied to sale transactions
    uint256 public totalSellFeeRate;

    /// @notice Address for receiving marketing-related tax payments
    address public marketingTaxRecv;
    /// @notice Address of the generated token pair
    address public pair;
    /// @notice Address representing a dead wallet
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    /// @notice Variable indicates whether a liquidity swap is in progress
    bool private inSwapLiquidity;

    /// @notice Name of the FX1 Sports Token
    string private _name = "FXI Sports";
    /// @notice Symbol of the FX1 Sports Token
    string private _symbol = "FXI";

    /// @notice Fixed-point multiplier used for calculations
    uint256 public immutable FIXED_POINT = 1000;
    /// @notice The maximum allowable fee rate
    uint16 public constant MAX_FEE = 100;
    /// @notice Number of decimal places for token values
    uint8 private constant _decimals = 18;

    /// @notice Router for interacting with the Uniswap decentralized exchange
    IUniswapV2Router02 public dexRouter;
    /// @notice Fee rates for buying transactions
    FeeRate public buyfeeRate;
    /// @notice Fee rates for selling transactions
    FeeRate public sellfeeRate;

    /// @notice Constructs the FX1SportsToken contract
    /// @param _param A struct containing various parameters required for the token's configuration
    constructor(
        FeeRate memory _buyfeeRate,
        FeeRate memory _sellfeeRate,
        Param memory _param
    ) checkFeeRates(_buyfeeRate) checkFeeRates(_sellfeeRate) {
        require(
            _param.marketingTaxRecv != address(0),
            "Invalid MarketingTaxRecv address"
        );
        require(_param.dexRouter != address(0), "Invalid dexRouter adddress");
        require(_param.whitelistPeriod > 0, "Invalid whitelistPeriod");
        address sender = msg.sender;
        marketingTaxRecv = _param.marketingTaxRecv;
        dexRouter = IUniswapV2Router02(_param.dexRouter);
        whitelistPeriod = _param.whitelistPeriod;
        buyfeeRate.liquidityFeeRate = _buyfeeRate.liquidityFeeRate;
        buyfeeRate.marketingFeeRate = _buyfeeRate.marketingFeeRate;
        totalBuyFeeRate =
            _buyfeeRate.liquidityFeeRate +
            _buyfeeRate.marketingFeeRate;

        sellfeeRate.liquidityFeeRate = _sellfeeRate.liquidityFeeRate;
        sellfeeRate.marketingFeeRate = _sellfeeRate.marketingFeeRate;
        totalSellFeeRate =
            _sellfeeRate.liquidityFeeRate +
            _sellfeeRate.marketingFeeRate;

        excludedFromFees[sender] = true;
        excludedFromMaxWallet[sender] = true;
        excludedFromMaxWallet[address(this)] = true;
        excludedFromMaxWallet[marketingTaxRecv] = true;
        whitelists[sender] = true;
        whitelists[address(this)] = true;

        _balances[sender] += _totalSupply;
        emit Transfer(address(0), sender, _totalSupply);
        swapThreshold = _totalSupply / 10000; // 0.01%
    }

    receive() external payable {}

    /**
     * @notice A modifier to check and enforce the maximum fee rates for marketing and liquidity
     * @param _fees The structure containing marketing and liquidity fee rates
     */
    modifier checkFeeRates(FeeRate memory _fees) {
        require(
            _fees.marketingFeeRate + _fees.liquidityFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        _;
    }

    /// ================================ Functions for ERC20 token ================================ ///

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    function allowance(
        address _owner,
        address _spender
    ) external view override returns (uint256) {
        return _allowances[_owner][_spender];
    }

    function approve(
        address _spender,
        uint256 _amount
    ) external override returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    ) external override returns (bool) {
        uint256 currentAllowance = _allowances[_sender][msg.sender];
        require(currentAllowance >= _amount, "Transfer > allowance");
        _approve(_sender, msg.sender, currentAllowance - _amount);
        _transfer(_sender, _recipient, _amount);
        return true;
    }

    /// ================================ External functions ================================ ///

    /**
     * @notice Updates the address of the Uniswap router
     * @param _newRouter The new address of the Uniswap router
     */
    function updateDexRouter(address _newRouter) external onlyOwner {
        require(Address.isContract(_newRouter), "Address is not a contract");
        dexRouter = IUniswapV2Router02(_newRouter);
    }

    /**
     * @notice External function update the Uniswap pair address and adjust exemption settings
     * @param _pair The new Uniswap pair address
     */
    function updatePair(address _pair) external onlyOwner {
        require(_pair != address(0), "Invalid pair address");
        if (pair != address(0)) {
            excludedFromMaxWallet[pair] = false;
            whitelists[pair] = false;
        }
        pair = _pair;
        excludedFromMaxWallet[_pair] = true;
        whitelists[_pair] = true;
    }

    /**
     * @notice External function update the whitelist period
     * @param _newWhiteListPeriod The new duration of the whitelist period in seconds
     */
    function setWhiteListPeriod(
        uint256 _newWhiteListPeriod
    ) external onlyOwner {
        require(_newWhiteListPeriod > 0, "Invalid whitelistPeriod");
        whitelistPeriod = _newWhiteListPeriod;
    }

    /**
     * @notice External function for allows the contract owner to send FX1SportsToken amounts of tokens to multiple recipients
     * @param _recipients An array of recipient addresses to send tokens to
     * @param _amounts An array of corresponding token amounts to be sent to each recipient
     */
    function multiSender(
        address[] memory _recipients,
        uint256[] memory _amounts
    ) external onlyOwner {
        require(_recipients.length == _amounts.length, "Invalid arrays length");

        uint256 totalAmountToSend = 0;
        for (uint256 i = 0; i < _recipients.length; ) {
            require(_recipients[i] != address(0), "Invalid recipient address");
            totalAmountToSend += _amounts[i];

            unchecked {
                i++;
            }
        }

        require(
            _balances[msg.sender] >= totalAmountToSend,
            "Not enough balance to send"
        );
        for (uint256 i = 0; i < _recipients.length; ) {
            _transfer(msg.sender, _recipients[i], _amounts[i]);

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set the launch time of the token
     */
    function setLaunchBegin() external override onlyOwner {
        require(launchTime == 0, "Already launched");
        launchTime = block.timestamp;
    }

    /**
     * @notice External function allows the contract owner to add or remove multiple addresses from the whitelists
     * @param _accounts An array of addresses to be added or removed from the whitelists
     * @param _add A boolean indicating whether to add or remove the addresses from the whitelists
     */
    function updateWhitelists(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid accounts length");

        for (uint256 i = 0; i < length; ) {
            whitelists[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from maximum wallet balance limits
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromMaxWallet[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to exclude or include multiple addresses from the list of addresses exempted from transaction fees
     * @param _accounts An array of addresses to be excluded or included in the list
     * @param _add A boolean indicating whether to exclude or include the addresses in the list
     */
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external override onlyOwner {
        uint256 length = _accounts.length;
        require(length > 0, "Invalid length array");
        for (uint256 i = 0; i < length; ) {
            excludedFromFees[_accounts[i]] = _add;

            unchecked {
                i++;
            }
        }
    }

    /**
     * @notice External function allows the contract owner to set a new maximum wallet balance limit
     * @param newLimit The new maximum transfer amount limit to be set
     */
    function setMaxWalletAmount(uint256 newLimit) external override onlyOwner {
        require(newLimit >= (_totalSupply * 10) / 1000, "Min 1% limit");
        maxWalletAmount = newLimit;
    }

    /**
     * @notice External function allows the contract owner to set a new address for the marketing tax wallet
     * @param _marketingTaxWallet The new address to be set as the marketing tax wallet
     */
    function setMarketingTaxWallet(
        address _marketingTaxWallet
    ) external override onlyOwner {
        require(
            _marketingTaxWallet != address(0),
            "Invalid marketingTaxWallet address"
        );
        marketingTaxRecv = _marketingTaxWallet;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for buy operations
     * @param _marketingBuyFeeRate New marketing fee rate for buy operations
     * @param _liquidityBuyFeeRate New liquidity fee rate for buy operations
     */
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external override onlyOwner {
        require(
            _marketingBuyFeeRate + _liquidityBuyFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        buyfeeRate.marketingFeeRate = _marketingBuyFeeRate;
        buyfeeRate.liquidityFeeRate = _liquidityBuyFeeRate;
        totalBuyFeeRate = _marketingBuyFeeRate + _liquidityBuyFeeRate;
    }

    /**
     * @notice This function allows the contract owner to update the fee rates for sell operations
     * @param _marketingSellFeeRate New marketing fee rate for sell operations
     * @param _liquiditySellFeeRate New liquidity fee rate for sell operations
     */
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external override onlyOwner {
        require(
            _marketingSellFeeRate + _liquiditySellFeeRate <= MAX_FEE,
            "Max Rate exceeded, please lower value"
        );
        sellfeeRate.marketingFeeRate = _marketingSellFeeRate;
        sellfeeRate.liquidityFeeRate = _liquiditySellFeeRate;
        totalSellFeeRate = _marketingSellFeeRate + _liquiditySellFeeRate;
    }

    /**
     * @notice External function allows the contract owner to set a new swap threshold value
     * @param _swapThreshold The new swap threshold value to be set
     */
    function setSwapThreshold(
        uint256 _swapThreshold
    ) external override onlyOwner {
        require(_swapThreshold > 0, "Invalid swapThreshold");
        swapThreshold = _swapThreshold;
    }

    /// ================================ Internal functions ================================ ///

    /**
     * @notice Internal function to perform token transfer between two addresses, subject to various checks and conditions
     * @param _sender The address from which tokens are being transferred
     * @param _recipient The address to which tokens are being transferred
     * @param _amount The amount of tokens being transferred
     */
    function _transfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        require(_sender != address(0), "Transfer from zero address");
        require(_recipient != address(0), "Transfer to zero address");
        require(_amount > 0, "Zero amount");
        require(_balances[_sender] >= _amount, "Not enough amount to transfer");
        require(_sender == owner() || launchTime != 0, "Not launched yet");
        if (block.timestamp < launchTime + whitelistPeriod) {
            require(whitelists[_recipient], "only whitelist");
        }
        if (maxWalletAmount > 0) {
            require(
                excludedFromMaxWallet[_recipient] ||
                    _balances[_recipient] + _amount <= maxWalletAmount,
                "Exceeds to maxWalletAmount"
            );
        }
        if (
            inSwapLiquidity ||
            excludedFromFees[_recipient] ||
            excludedFromFees[_sender]
        ) {
            _basicTransfer(_sender, _recipient, _amount);
            emit Transfer(_sender, _recipient, _amount);
            return;
        }
        if (pair != address(0)) {
            if (_sender == pair) {
                // buy
                _taxonBuyTransfer(_sender, _recipient, _amount);
            } else {
                _swapBack();

                if (_recipient == pair) {
                    // sell
                    _taxonSellTransfer(_sender, _recipient, _amount);
                } else {
                    _basicTransfer(_sender, _recipient, _amount);
                }
            }
        }

        emit Transfer(_sender, _recipient, _amount);
    }

    /**
     * @notice Internal function to swap excess tokens in the contract back to ETH and manage liquidity and fees
     */
    function _swapBack() internal {
        uint256 accTotalAmount = accLiquidityAmount + accMarketingAmount;
        if (accTotalAmount <= swapThreshold) {
            return;
        }
        inSwapLiquidity = true;
        uint256 swapAmountForLiquidity = accLiquidityAmount / 2;
        uint256 swapAmount = accTotalAmount - swapAmountForLiquidity;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), swapAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmount,
            0,
            path,
            address(this),
            block.timestamp + 30 minutes
        );
        uint256 swappedETHAmount = address(this).balance;
        require(swappedETHAmount > 0, "Too small token for swapBack");
        uint256 ethForLiquidity = (swappedETHAmount * swapAmountForLiquidity) /
            swapAmount;

        if (ethForLiquidity > 0) {
            uint256 amountForLiquidity = accLiquidityAmount -
                swapAmountForLiquidity;
            _approve(address(this), address(dexRouter), amountForLiquidity);
            dexRouter.addLiquidityETH{value: ethForLiquidity}(
                address(this),
                amountForLiquidity,
                0,
                0,
                0x000000000000000000000000000000000000dEaD,
                block.timestamp + 30 minutes
            );
            swappedETHAmount -= ethForLiquidity;
        }

        _transferETH(marketingTaxRecv, swappedETHAmount);

        accLiquidityAmount = 0;
        accMarketingAmount = 0;
        inSwapLiquidity = false;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being sold
     * @param _sender The address of the sender (seller)
     * @param _recipient The address of the recipient (buyer)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonSellTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (
            uint256 marketingFeeRate,
            uint256 liquidityFeeRate
        ) = _getSellFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to handle transfers when tokens are being bought
     * @param _sender The address of the sender (buyer)
     * @param _recipient The address of the recipient (seller)
     * @param _amount The amount of tokens being transferred
     */
    function _taxonBuyTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        (uint256 marketingFeeRate, uint256 liquidityFeeRate) = _getBuyFeeRate();

        uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
        uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
        uint256 recvAmount = _amount -
            (marketingFeeAmount + liquidityFeeAmount);

        _balances[_sender] -= _amount;
        _balances[_recipient] += recvAmount;
        _balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
        accLiquidityAmount += liquidityFeeAmount;
        accMarketingAmount += marketingFeeAmount;
    }

    /**
     * @notice Internal function to perform a basic transfer of tokens between two addresses
     * @param _sender The address of the sender
     * @param _recipient The address of the recipient
     * @param _amount The amount of tokens to transfer
     */
    function _basicTransfer(
        address _sender,
        address _recipient,
        uint256 _amount
    ) internal {
        _balances[_sender] -= _amount;
        _balances[_recipient] += _amount;
    }

    /**
     * @notice Internal function to get the fee rates for selling tokens based on the current time period after launch
     */
    function _getSellFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (sellfeeRate.marketingFeeRate, sellfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to get the fee rates for buying tokens based on the current time period after launch
     */
    function _getBuyFeeRate()
        internal
        view
        returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
    {
        return (buyfeeRate.marketingFeeRate, buyfeeRate.liquidityFeeRate);
    }

    /**
     * @notice Internal function to transfer ETH to a specified recipient
     * @param _recipient The address of the recipient to which ETH should be transferred
     * @param _amount The amount of ETH to transfer
     */
    function _transferETH(address _recipient, uint256 _amount) internal {
        if (_amount == 0) return;
        (bool sent, ) = _recipient.call{value: _amount}("");
        require(sent, "Sending ETH failed");
    }

    /// ================================ Private functions ================================ ///

    /**
     * @notice Private function to set the allowance amount that `_spender` can spend on behalf of `_owner`
     * @param _owner The address that approves spending
     * @param _spender The address that is allowed to spend
     * @param _amount The amount of tokens that `_spender` is allowed to spend
     */
    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    ) private {
        require(_owner != address(0), "Approve from zero");
        require(_spender != address(0), "Approve to zero");
        _allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 8 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 8 : IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

File 5 of 8 : IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

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

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

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

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

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

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

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

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

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

File 6 of 8 : IFXISportsToken.sol
//SPDX-License-Identifier: None

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @title FXI Sports Token
/// @title https://fx1.io/
/// @title https://t.me/fx1_sports_portal
/// @author https://PROOFplatform.io
/// @author https://5thWeb.io

interface IFXISportsToken is IERC20 {
    struct Param {
        address marketingTaxRecv;
        address dexRouter;
        uint256 whitelistPeriod;
    }

    struct FeeRate {
        uint256 marketingFeeRate;
        uint256 liquidityFeeRate;
    }

    /// @notice Locks trading until called. Cannont be called twice.
    /// @dev Only owner can call this function.
    function setLaunchBegin() external;

    /// @notice Add/Remove whitelists.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of whitelists.
    /// @param _add True/False = Add/Remove
    function updateWhitelists(address[] memory _accounts, bool _add) external;

    /// @notice Add/Remove wallets to excludedMaxWallet.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromMaxWallets(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Add/Remove wallets to excludedFromFees.
    /// @dev Only owner can call this function.
    /// @param _accounts The address of accounts.
    /// @param _add True/False = Add/Remove
    function excludeWalletsFromFees(
        address[] memory _accounts,
        bool _add
    ) external;

    /// @notice Set maxWalletAmount.
    /// @dev Only owner can call this function.
    /// @param _maxWalletAmount New maxWalletAmount.
    function setMaxWalletAmount(uint256 _maxWalletAmount) external;

    /// @notice Set marketingTaxRecipient wallet address.
    /// @dev Only owner can call this function.
    /// @param _marketingTaxWallet The address of marketingTaxRecipient wallet.
    function setMarketingTaxWallet(address _marketingTaxWallet) external;

    /// @notice UpdateBuyFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingBuyFeeRate New MarketingBuyFeeRate.
    /// @param _liquidityBuyFeeRate New LiquidityBuyFeeRate.
    function updateBuyFeeRate(
        uint16 _marketingBuyFeeRate,
        uint16 _liquidityBuyFeeRate
    ) external;

    /// @notice UpdateSellFeeRate.
    /// @dev Only owner can call this function.
    /// @dev Max Rate of 100(10%) 10 = 1%
    /// @param _marketingSellFeeRate New MarketingSellFeeRate.
    /// @param _liquiditySellFeeRate New LiquiditySellFeeRate.
    function updateSellFeeRate(
        uint16 _marketingSellFeeRate,
        uint16 _liquiditySellFeeRate
    ) external;

    /// @notice Set swapThreshold.
    /// @dev Only owner can call this function.
    /// @param _swapThreshold New swapThreshold amount.
    function setSwapThreshold(uint256 _swapThreshold) external;
}

File 7 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 8 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_buyfeeRate","type":"tuple"},{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_sellfeeRate","type":"tuple"},{"components":[{"internalType":"address","name":"marketingTaxRecv","type":"address"},{"internalType":"address","name":"dexRouter","type":"address"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"}],"internalType":"struct IFXISportsToken.Param","name":"_param","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FIXED_POINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromMaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxRecv","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setLaunchBegin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingTaxWallet","type":"address"}],"name":"setMarketingTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhiteListPeriod","type":"uint256"}],"name":"setWhiteListPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingBuyFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquidityBuyFeeRate","type":"uint16"}],"name":"updateBuyFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"updateDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingSellFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquiditySellFeeRate","type":"uint16"}],"name":"updateSellFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"updateWhitelists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000126012600a62000584565b62000022906311e1a3006200059c565b60065560408051808201909152600a8152694658492053706f72747360b01b60208201526011906200005590826200065b565b5060408051808201909152600381526246584960e81b60208201526012906200007f90826200065b565b506103e86080523480156200009357600080fd5b5060405162002d1d38038062002d1d833981016040819052620000b69162000796565b620000c1336200041f565b602083015183518491606491620000d991906200083f565b11156200012a5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b60648201526084015b60405180910390fd5b6020830151835184916064916200014291906200083f565b11156200018f5760405162461bcd60e51b8152602060048201526025602482015260008051602062002cfd83398151915260448201526476616c756560d81b606482015260840162000121565b82516001600160a01b0316620001e85760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964204d61726b6574696e67546178526563762061646472657373604482015260640162000121565b60208301516001600160a01b0316620002445760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420646578526f75746572206164646472657373000000000000604482015260640162000121565b60008360400151116200029a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f64000000000000000000604482015260640162000121565b8251600f80546001600160a01b03199081166001600160a01b039384161790915560208086015160138054909316931692909217905560408401516008558501516015819055855160148190553391620002f591906200083f565b600d55602085015160178190558551601681905562000314916200083f565b600e556001600160a01b0381811660008181526003602090815260408083208054600160ff199182168117909255600484528285208054821683179055308086528386208054831684179055600f549097168552828520805482168317905585855260058452828520805482168317905595845281842080549096168117909555600654938352939052918220805491929091620003b49084906200083f565b90915550506006546040519081526001600160a01b038216906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36127106006546200040f919062000855565b6009555062000878945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c6578160001904821115620004aa57620004aa6200046f565b80851615620004b857918102915b93841c93908002906200048a565b509250929050565b600082620004df575060016200057e565b81620004ee575060006200057e565b8160018114620005075760028114620005125762000532565b60019150506200057e565b60ff8411156200052657620005266200046f565b50506001821b6200057e565b5060208310610133831016604e8410600b841016171562000557575081810a6200057e565b62000563838362000485565b80600019048211156200057a576200057a6200046f565b0290505b92915050565b60006200059560ff841683620004ce565b9392505050565b80820281158282048414176200057e576200057e6200046f565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e157607f821691505b6020821081036200060257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065657600081815260208120601f850160051c81016020861015620006315750805b601f850160051c820191505b8181101562000652578281556001016200063d565b5050505b505050565b81516001600160401b03811115620006775762000677620005b6565b6200068f81620006888454620005cc565b8462000608565b602080601f831160018114620006c75760008415620006ae5750858301515b600019600386901b1c1916600185901b17855562000652565b600085815260208120601f198616915b82811015620006f857888601518255948401946001909101908401620006d7565b5085821015620007175787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000604082840312156200073a57600080fd5b604080519081016001600160401b03811182821017156200075f576200075f620005b6565b604052825181526020928301519281019290925250919050565b80516001600160a01b03811681146200079157600080fd5b919050565b600080600083850360e0811215620007ad57600080fd5b620007b9868662000727565b9350620007ca866040870162000727565b92506060607f1982011215620007df57600080fd5b50604051606081016001600160401b0381118282101715620008055762000805620005b6565b604052620008166080860162000779565b81526200082660a0860162000779565b602082015260c094909401516040850152509093909250565b808201808211156200057e576200057e6200046f565b6000826200087357634e487b7160e01b600052601260045260246000fd5b500490565b60805161245b620008a26000396000818161055b0152818161193b0152611974015261245b6000f3fe60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f0000000000000000000000000000000000000000000000000000000000000000611964848661231d565b61196e9190612334565b905060007f000000000000000000000000000000000000000000000000000000000000000061199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c634300081300334d617820526174652065786365656465642c20706c65617365206c6f776572200000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063790ca41311610139578063aa4bde28116100b6578063d82e49c81161007a578063d82e49c8146106f4578063dbe66ca014610709578063dd22a9de14610739578063dd62ed3e14610754578063f2fde38b1461079a578063f7712862146107ba57600080fd5b8063aa4bde2814610660578063b48e665e14610676578063bc063e1a1461068c578063bcac45d8146106b4578063d650b6f5146106d457600080fd5b806395d89b41116100fd57806395d89b41146105cb5780639d0014b1146105e0578063a4fd3e9914610600578063a8aa1b3114610620578063a9059cbb1461064057600080fd5b8063790ca41314610513578063794dca89146105295780637a458d7a146105495780637d99f9a41461057d5780638da5cb5b146105ad57600080fd5b8063256c2cd1116101c757806370a082311161018b57806370a082311461047257806370af439c146104a8578063714f75e0146104be578063715018a6146104de5780637653f01e146104f357600080fd5b8063256c2cd1146103e057806327a14fc21461040057806328b88eb114610420578063313ce5671461043657806345a1f81e1461045257600080fd5b8063095ea7b31161020e578063095ea7b31461032b57806318160ddd1461035b5780631b56bbf9146103705780631e7be2101461039057806323b872dd146103c057600080fd5b8063026e9ff2146102565780630445b6671461028b57806306fdde03146102af5780630758d924146102d157806308a580691461030957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50601454601554610271919082565b604080519283526020830191909152015b60405180910390f35b34801561029757600080fd5b506102a160095481565b604051908152602001610282565b3480156102bb57600080fd5b506102c46107da565b6040516102829190611e92565b3480156102dd57600080fd5b506013546102f1906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561031557600080fd5b50610329610324366004611ef7565b61086c565b005b34801561033757600080fd5b5061034b610346366004611f3f565b6108f0565b6040519015158152602001610282565b34801561036757600080fd5b506006546102a1565b34801561037c57600080fd5b5061032961038b366004611f6b565b610907565b34801561039c57600080fd5b5061034b6103ab366004611f6b565b60056020526000908152604090205460ff1681565b3480156103cc57600080fd5b5061034b6103db366004611f8f565b610a21565b3480156103ec57600080fd5b506103296103fb3660046120af565b610ab6565b34801561040c57600080fd5b5061032961041b366004612106565b610b88565b34801561042c57600080fd5b506102a1600d5481565b34801561044257600080fd5b5060405160128152602001610282565b34801561045e57600080fd5b5061032961046d366004611ef7565b610c11565b34801561047e57600080fd5b506102a161048d366004611f6b565b6001600160a01b031660009081526001602052604090205490565b3480156104b457600080fd5b506102a1600e5481565b3480156104ca57600080fd5b506103296104d9366004611f6b565b610c8c565b3480156104ea57600080fd5b50610329610d2f565b3480156104ff57600080fd5b50600f546102f1906001600160a01b031681565b34801561051f57600080fd5b506102a160075481565b34801561053557600080fd5b506103296105443660046120af565b610d65565b34801561055557600080fd5b506102a17f00000000000000000000000000000000000000000000000000000000000003e881565b34801561058957600080fd5b5061034b610598366004611f6b565b60046020526000908152604090205460ff1681565b3480156105b957600080fd5b506000546001600160a01b03166102f1565b3480156105d757600080fd5b506102c4610e3a565b3480156105ec57600080fd5b506103296105fb366004612106565b610e49565b34801561060c57600080fd5b5061032961061b366004611f6b565b610ec0565b34801561062c57600080fd5b506010546102f1906001600160a01b031681565b34801561064c57600080fd5b5061034b61065b366004611f3f565b610f6d565b34801561066c57600080fd5b506102a1600a5481565b34801561068257600080fd5b506102a160085481565b34801561069857600080fd5b506106a1606481565b60405161ffff9091168152602001610282565b3480156106c057600080fd5b506103296106cf366004612106565b610f7a565b3480156106e057600080fd5b506103296106ef36600461211f565b610ff9565b34801561070057600080fd5b506103296111d4565b34801561071557600080fd5b5061034b610724366004611f6b565b60036020526000908152604090205460ff1681565b34801561074557600080fd5b50601654601754610271919082565b34801561076057600080fd5b506102a161076f3660046121da565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107a657600080fd5b506103296107b5366004611f6b565b611247565b3480156107c657600080fd5b506103296107d53660046120af565b6112e2565b6060601180546107e990612208565b80601f016020809104026020016040519081016040528092919081815260200182805461081590612208565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000546001600160a01b0316331461089f5760405162461bcd60e51b815260040161089690612242565b60405180910390fd5b60646108ab828461228d565b61ffff1611156108cd5760405162461bcd60e51b8152600401610896906122af565b61ffff80831660165581166017556108e5818361228d565b61ffff16600e555050565b60006108fd3384846113ae565b5060015b92915050565b6000546001600160a01b031633146109315760405162461bcd60e51b815260040161089690612242565b6001600160a01b03811661097e5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642070616972206164647265737360601b6044820152606401610896565b6010546001600160a01b0316156109ce57601080546001600160a01b039081166000908152600460209081526040808320805460ff19908116909155945490931682526005905220805490911690555b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6001600160a01b038316600090815260026020908152604080832033845290915281205482811015610a8c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610896565b610aa08533610a9b86856122f4565b6113ae565b610aab8585856114a2565b506001949350505050565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260040161089690612242565b815180610b265760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b82578260036000868481518110610b4857610b48612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b29565b50505050565b6000546001600160a01b03163314610bb25760405162461bcd60e51b815260040161089690612242565b6103e8600654600a610bc4919061231d565b610bce9190612334565b811015610c0c5760405162461bcd60e51b815260206004820152600c60248201526b135a5b880c49481b1a5b5a5d60a21b6044820152606401610896565b600a55565b6000546001600160a01b03163314610c3b5760405162461bcd60e51b815260040161089690612242565b6064610c47828461228d565b61ffff161115610c695760405162461bcd60e51b8152600401610896906122af565b61ffff8083166014558116601555610c81818361228d565b61ffff16600d555050565b6000546001600160a01b03163314610cb65760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381163b610d0d5760405162461bcd60e51b815260206004820152601960248201527f41646472657373206973206e6f74206120636f6e7472616374000000000000006044820152606401610896565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089690612242565b610d636000611873565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089690612242565b815180610dde5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206163636f756e7473206c656e6774680000000000000000006044820152606401610896565b60005b81811015610b82578260056000868481518110610e0057610e00612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610de1565b6060601280546107e990612208565b6000546001600160a01b03163314610e735760405162461bcd60e51b815260040161089690612242565b60008111610ebb5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081cddd85c151a1c995cda1bdb19605a1b6044820152606401610896565b600955565b6000546001600160a01b03163314610eea5760405162461bcd60e51b815260040161089690612242565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206d61726b6574696e6754617857616c6c6574206164647265604482015261737360f01b6064820152608401610896565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fd3384846114a2565b6000546001600160a01b03163314610fa45760405162461bcd60e51b815260040161089690612242565b60008111610ff45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642077686974656c697374506572696f640000000000000000006044820152606401610896565b600855565b6000546001600160a01b031633146110235760405162461bcd60e51b815260040161089690612242565b805182511461106c5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c2e4e4c2f2e640d8cadccee8d605b1b6044820152606401610896565b6000805b83518110156111235760006001600160a01b031684828151811061109657611096612307565b60200260200101516001600160a01b0316036110f45760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e742061646472657373000000000000006044820152606401610896565b82818151811061110657611106612307565b6020026020010151826111199190612356565b9150600101611070565b50336000908152600160205260409020548111156111835760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f7567682062616c616e636520746f2073656e640000000000006044820152606401610896565b60005b8351811015610b82576111cc338583815181106111a5576111a5612307565b60200260200101518584815181106111bf576111bf612307565b60200260200101516114a2565b600101611186565b6000546001600160a01b031633146111fe5760405162461bcd60e51b815260040161089690612242565b600754156112415760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610896565b42600755565b6000546001600160a01b031633146112715760405162461bcd60e51b815260040161089690612242565b6001600160a01b0381166112d65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b6112df81611873565b50565b6000546001600160a01b0316331461130c5760405162461bcd60e51b815260040161089690612242565b8151806113525760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206c656e67746820617272617960601b6044820152606401610896565b60005b81811015610b8257826004600086848151811061137457611374612307565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611355565b6001600160a01b0383166113f85760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610896565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610896565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114f85760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722066726f6d207a65726f20616464726573730000000000006044820152606401610896565b6001600160a01b03821661154e5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610896565b6000811161158c5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610896565b6001600160a01b0383166000908152600160205260409020548111156115f45760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e736665720000006044820152606401610896565b6000546001600160a01b0384811691161480611611575060075415155b6116505760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610896565b6008546007546116609190612356565b4210156116c0576001600160a01b03821660009081526005602052604090205460ff166116c05760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b6044820152606401610896565b600a5415611760576001600160a01b03821660009081526004602052604090205460ff16806117145750600a546001600160a01b038316600090815260016020526040902054611711908390612356565b11155b6117605760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746f206d617857616c6c6574416d6f756e740000000000006044820152606401610896565b601054600160a01b900460ff168061179057506001600160a01b03821660009081526003602052604090205460ff165b806117b357506001600160a01b03831660009081526003602052604090205460ff165b15611808576117c38383836118c3565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149591815260200190565b6010546001600160a01b0316156117c3576010546001600160a01b039081169084160361183f5761183a838383611922565b6117c3565b611847611a89565b6010546001600160a01b03908116908316036118685761183a838383611dd9565b6117c38383836118c3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812080548392906118eb9084906122f4565b90915550506001600160a01b03821660009081526001602052604081208054839290611918908490612356565b9091555050505050565b6000806119326014546015549091565b909250905060007f00000000000000000000000000000000000000000000000000000000000003e8611964848661231d565b61196e9190612334565b905060007f00000000000000000000000000000000000000000000000000000000000003e861199d848761231d565b6119a79190612334565b905060006119b58284612356565b6119bf90876122f4565b6001600160a01b0389166000908152600160205260408120805492935088929091906119ec9084906122f4565b90915550506001600160a01b03871660009081526001602052604081208054839290611a19908490612356565b90915550611a2990508284612356565b3060009081526001602052604081208054909190611a48908490612356565b9250508190555081600b6000828254611a619190612356565b9250508190555082600c6000828254611a7a9190612356565b90915550505050505050505050565b6000600c54600b54611a9b9190612356565b90506009548111611aa95750565b6010805460ff60a01b1916600160a01b179055600b54600090611ace90600290612334565b90506000611adc82846122f4565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611b1657611b16612307565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190612369565b81600181518110611ba657611ba6612307565b6001600160a01b039283166020918202929092010152601354611bcc91309116846113ae565b6013546001600160a01b031663791ac9478360008430611bee42610708612356565b6040518663ffffffff1660e01b8152600401611c0e959493929190612386565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50479250505080611c8f5760405162461bcd60e51b815260206004820152601c60248201527f546f6f20736d616c6c20746f6b656e20666f7220737761704261636b000000006044820152606401610896565b600083611c9c868461231d565b611ca69190612334565b90508015611da457600085600b54611cbe91906122f4565b601354909150611cd99030906001600160a01b0316836113ae565b6013546001600160a01b031663f305d71983308460008061dead611cff42610708612356565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611d6c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d9191906123f7565b5050508183611da091906122f4565b9250505b600f54611dba906001600160a01b031683611de9565b50506000600b819055600c5550506010805460ff60a01b191690555050565b6000806119326016546017549091565b80600003611df5575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611e42576040519150601f19603f3d011682016040523d82523d6000602084013e611e47565b606091505b5050905080611e8d5760405162461bcd60e51b815260206004820152601260248201527114d95b991a5b99c81155120819985a5b195960721b6044820152606401610896565b505050565b600060208083528351808285015260005b81811015611ebf57858101830151858201604001528201611ea3565b506000604082860101526040601f19601f8301168501019250505092915050565b803561ffff81168114611ef257600080fd5b919050565b60008060408385031215611f0a57600080fd5b611f1383611ee0565b9150611f2160208401611ee0565b90509250929050565b6001600160a01b03811681146112df57600080fd5b60008060408385031215611f5257600080fd5b8235611f5d81611f2a565b946020939093013593505050565b600060208284031215611f7d57600080fd5b8135611f8881611f2a565b9392505050565b600080600060608486031215611fa457600080fd5b8335611faf81611f2a565b92506020840135611fbf81611f2a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561200f5761200f611fd0565b604052919050565b600067ffffffffffffffff82111561203157612031611fd0565b5060051b60200190565b600082601f83011261204c57600080fd5b8135602061206161205c83612017565b611fe6565b82815260059290921b8401810191818101908684111561208057600080fd5b8286015b848110156120a457803561209781611f2a565b8352918301918301612084565b509695505050505050565b600080604083850312156120c257600080fd5b823567ffffffffffffffff8111156120d957600080fd5b6120e58582860161203b565b925050602083013580151581146120fb57600080fd5b809150509250929050565b60006020828403121561211857600080fd5b5035919050565b6000806040838503121561213257600080fd5b823567ffffffffffffffff8082111561214a57600080fd5b6121568683870161203b565b935060209150818501358181111561216d57600080fd5b85019050601f8101861361218057600080fd5b803561218e61205c82612017565b81815260059190911b820183019083810190888311156121ad57600080fd5b928401925b828410156121cb578335825292840192908401906121b2565b80955050505050509250929050565b600080604083850312156121ed57600080fd5b82356121f881611f2a565b915060208301356120fb81611f2a565b600181811c9082168061221c57607f821691505b60208210810361223c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff8181168382160190808211156122a8576122a8612277565b5092915050565b60208082526025908201527f4d617820526174652065786365656465642c20706c65617365206c6f7765722060408201526476616c756560d81b606082015260800190565b8181038181111561090157610901612277565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761090157610901612277565b60008261235157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561090157610901612277565b60006020828403121561237b57600080fd5b8151611f8881611f2a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d65784516001600160a01b0316835293830193918301916001016123b1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220efee4ba0b843bc47ec0f767576171cec1953273c20d1f3be7b446402395fcffb64736f6c63430008130033

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

0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e650000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000003c

-----Decoded View---------------
Arg [0] : _buyfeeRate (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _sellfeeRate (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : _param (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000afc94420451fca019dc97100d14abcb8704d6e65
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003c


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

The $FXI token serves as your key to the FX1 community. Acquire $FXI to access platform services, hold it for exclusive benefits, or stake it for APY yield.

Validator Index Block Amount
View All Withdrawals

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

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