ETH Price: $2,724.09 (-1.49%)

Token

Lunatics (LunaT)
 

Overview

Max Total Supply

100,000,000,000 LunaT

Holders

397

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,741,507.751866258 LunaT

Value
$0.00
0x8710e184c0cc2818e6df6b9288c84fb546deec9d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Lunatics Token is a community-driven project. With a focus on transparency, honesty, and consistency, the team is tirelessly working towards building a multi-chain ecosystem that provides users with a DEX, wallet, crypto banking system, and much more.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Lunatics

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Lunatics.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
// by three they come
// by three they go
// and in between in fiery row
// burn the white-robed ranks of woe
// o/
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}
interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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;   
}
contract RewardsTracker is Ownable {

    mapping(address => uint256) public userShares;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTime;
    mapping(address => uint256) public elegibleUsersIndex;
    mapping(address => bool ) public isElegible;

    address[] elegibleUsers;

    IRouter public rewardRouter;
    address public rewardToken;

    uint256 constant internal magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividends;
    uint256 public totalDividendsWithdrawn;
    uint256 public totalShares;
    uint256 public minBalanceForRewards;
    uint256 public claimDelay;
    uint256 public currentIndex;

    event ExcludeFromDividends(address indexed account, bool value);
    event Claim(address indexed account, uint256 amount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);

    constructor(address _router, address _rewardToken) {
      rewardRouter = IRouter(_router);
      rewardToken = _rewardToken;
    }

    function excludeFromDividends(address account, bool value) external onlyOwner {
        require(excludedFromDividends[account] != value);
        excludedFromDividends[account] = value;
        if(value == true){
          _setBalance(account, 0);
        }
        else{
          _setBalance(account, userShares[account]);
        }
        emit ExcludeFromDividends(account, value);

    }
    
    function _setRewardToken(address newToken) internal{
      rewardToken = newToken;
    }

    function getAccount(address account) public view returns (uint256 withdrawableUserDividends, uint256 totalUserDividends, uint256 lastUserClaimTime, uint256 withdrawnUserDividends) {
        withdrawableUserDividends = withdrawableDividendOf(account);
        totalUserDividends = accumulativeDividendOf(account);
        lastUserClaimTime = lastClaimTime[account];
        withdrawnUserDividends = withdrawnDividends[account]; 
    }

    function setBalance(address account, uint256 newBalance) internal {
        if(excludedFromDividends[account]) {
            return;
        }   
        _setBalance(account, newBalance);
    }

    function _setMinBalanceForRewards(uint256 newMinBalance) internal {
        minBalanceForRewards = newMinBalance;
    }

    function autoDistribute(uint256 gasAvailable) public {
      uint256 size = elegibleUsers.length;
      if(size == 0) return;

      uint256 gasSpent = 0;
      uint256 gasLeft = gasleft();
      uint256 lastIndex = currentIndex;
      uint256 iterations = 0;

      while(gasSpent < gasAvailable && iterations < size){
        if(lastIndex >= size){
          lastIndex = 0;
        }
        address account = elegibleUsers[lastIndex];
        if(lastClaimTime[account] + claimDelay < block.timestamp){
          _processAccount(account);
        }
        lastIndex++;
        iterations++;
        gasSpent += gasLeft - gasleft();
        gasLeft = gasleft();
      }

      currentIndex = lastIndex;

    }

    function _processAccount(address account) internal returns(bool){
        uint256 amount = _withdrawDividendOfUser(account);

          if(amount > 0) {
              lastClaimTime[account] = block.timestamp;
              emit Claim(account, amount);
              return true;
          }
          return false;
    }

    /* function distributeDividends() external payable {
      if (msg.value > 0) {
      _distributeDividends(msg.value);
      }
    } no need for erc20 tokens */

    function _distributeDividends(uint256 amount) internal {
      require(totalShares > 0,"there are no shares");
      magnifiedDividendPerShare = magnifiedDividendPerShare + (amount * magnitude / totalShares);
      totalDividends= totalDividends + amount;
    }
    
    function _withdrawDividendOfUser(address user) internal returns (uint256) {
      uint256 _withdrawableDividend = withdrawableDividendOf(user);
      if (_withdrawableDividend > 0) {
        withdrawnDividends[user] += _withdrawableDividend;
        totalDividendsWithdrawn += _withdrawableDividend;
        emit DividendWithdrawn(user, _withdrawableDividend);
        (bool success) = swapEthForCustomToken(user, _withdrawableDividend);
        if(!success) {
          (bool secondSuccess,) = payable(user).call{value: _withdrawableDividend, gas: 3000}("");
          if(!secondSuccess) {
            withdrawnDividends[user] -= _withdrawableDividend;
            totalDividendsWithdrawn -= _withdrawableDividend;
            return 0;
          }       
        }
        return _withdrawableDividend;
      }
      return 0;
    }

    function swapEthForCustomToken(address user, uint256 amt) internal returns (bool) {
      address[] memory path = new address[](2);
      path[0] = rewardRouter.WETH();
      path[1] = rewardToken;
      
      try rewardRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amt}(0, path, user, block.timestamp) {
        return true;
      } catch {
        return false;
      }
    }

    function dividendOf(address _owner) public view returns(uint256) {
      return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns(uint256) {
      return accumulativeDividendOf(_owner) - withdrawnDividends[_owner];
    }

    function withdrawnDividendOf(address _owner) public view returns(uint256) {
      return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns(uint256) {
      return uint256(int256(magnifiedDividendPerShare * userShares[_owner]) + magnifiedDividendCorrections[_owner]) / magnitude;
    }

    function addShares(address account, uint256 value) internal {
      userShares[account] += value;
      totalShares += value;

      magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] - int256(magnifiedDividendPerShare * value);
    }

    function removeShares(address account, uint256 value) internal {
      userShares[account] -= value;
      totalShares -= value;

      magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] + int256(magnifiedDividendPerShare * value);
    }

    function _setBalance(address account, uint256 newBalance) internal {
      uint256 currentBalance = userShares[account];
      if(currentBalance > 0) {
        _processAccount(account);
      }
      if(newBalance < minBalanceForRewards && isElegible[account]){
        isElegible[account] = false;
        elegibleUsers[elegibleUsersIndex[account]] = elegibleUsers[elegibleUsers.length - 1];
        elegibleUsersIndex[elegibleUsers[elegibleUsers.length - 1]] = elegibleUsersIndex[account];
        elegibleUsers.pop();
        removeShares(account, currentBalance);
      }
      else{
        if(userShares[account] == 0){
          isElegible[account] = true;
          elegibleUsersIndex[account] = elegibleUsers.length;
          elegibleUsers.push(account);
        }
        if(newBalance > currentBalance) {
          uint256 mintAmount = newBalance - currentBalance;
          addShares(account, mintAmount);
        } else if(newBalance < currentBalance) {
          uint256 burnAmount = currentBalance - newBalance;
          removeShares(account, burnAmount);
        }
      }
    }
}

library Address {
    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');
    }
}

contract Lunatics is ERC20, Ownable, RewardsTracker {
    using Address for address payable;
    //custom
    IRouter public router;
    //address
    address public pair;
    //bool
    bool public swapAndLiquifyEnabled = true;
    bool public limitSells = true;
    bool public limitBuys = true;
    bool public feeStatus = true;
    bool public buyFeeStatus = true;
    bool public sellFeeStatus = true;
    bool public blockMultiBuys = true;
    bool public marketActive;
    bool private isInternalTransaction;
    //uint
    uint public gasLimit = 300_000;
    uint public minimumTokensBeforeSwap;
    uint public tokensToSwap;
    uint public intervalSecondsForSwap = 30;
    uint public minimumWeiForTokenomics = 1 * 10**17; // 0.1 ETH
    uint public maxBuyTxAmount;
    uint public maxSellTxAmount;
    uint private startTimeForSwap;
    uint private marketActiveAt;

    //struct
    struct userData {
        uint lastBuyTime;
    }
    struct Fees {
        uint64 rewards;
        uint64 marketing;
        uint64 buyback;
    }
    struct FeesAddress {
        address marketing;
        address buyback;
    }
    FeesAddress public feesAddress = FeesAddress(
        0x2d00FB5E5890EBF1B270fa4009E19052305F8074,
        0x8A52164f5612f0Cd075b8d5eA4a6b22d67335734
    );
    Fees public buyFees = Fees(3, 3, 2);
    Fees public sellFees = Fees(3, 3, 2);

    uint256 public totalBuyFee = 8;
    uint256 public totalSellFee = 8;

    //mapping
    mapping (address => bool) public premarketUser;
    mapping (address => bool) public excludedFromFees;
    mapping (address => userData) public userLastTradeData;
    mapping(address => bool) public isPair;
    event ContractSwap(uint256 date, uint256 amount);

    event PremarketUserChanged(bool status, address indexed user);
    event ExcludeFromFeesChanged(bool status, address indexed user);
    event MarketingFeeCollected(uint amount);
    event BuybackFeeCollected(uint amount);

    event FeesStatusChanged(bool feesActive, bool buy, bool sell);
    event SwapSystemChanged(bool status, uint256 intervalSecondsToWait, uint256 minimumToSwap, uint256 tokensToSwap);

    event MaxSellChanged(uint256 amount);
    event MaxBuyChanged(uint256 amount);
    event BlockMultiBuysChange(bool status);
    event LimitSellChanged(bool status);
    event LimitBuyChanged(bool status);
    event MarketStatusChanged(bool status, uint256 date);
    event TokenRemovedFromContract(address indexed tokenAddress, uint256 amount);
    event PairUpdated(address indexed pair);
    event RouterUpdated(address indexed router);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor(address _router, address _rewardToken) ERC20('Lunatics', 'LunaT') RewardsTracker(_router, _rewardToken) {
        router = IRouter(_router);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
        uint _totalSupply = 100_000_000_000 * (10**9);

        maxSellTxAmount = _totalSupply / 100; // 1% supply
        maxBuyTxAmount = _totalSupply / 100; // 1% supply
        minimumTokensBeforeSwap = _totalSupply / 10000; //0.01% supply
        tokensToSwap = _totalSupply / 10000; //0.01% supply
        minBalanceForRewards = 500_000 * 10 ** 9; // 500k
        claimDelay = 60*60; // 1 hour

        // exclude from receiving dividends
        excludedFromDividends[address(this)] = true;
        excludedFromDividends[owner()] = true;
        excludedFromDividends[address(0xdead)] = true;
        excludedFromDividends[address(_router)] = true;
        excludedFromDividends[address(pair)] = true;

        // exclude from paying fees or having max transaction amount
        excludedFromFees[owner()] = true;
        excludedFromFees[address(this)] = true;
        excludedFromFees[feesAddress.marketing] = true;
        excludedFromFees[feesAddress.buyback] = true;

        premarketUser[owner()] = true;
        isPair[pair] = true;

        // _mint is an internal function in ERC20.sol that is only called here,
        // and CANNOT be called ever again
        _mint(owner(), _totalSupply);
    }

    receive() external payable {}

    function decimals() public pure override returns(uint8) {
        return 9;
    }

    /// @notice Manual claim the dividends
    function claim() external {
        super._processAccount(payable(msg.sender));
    }

    // to take leftover(tokens) from contract
    function transferToken(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        } 
        _sent = IERC20(_token).transfer(_to, _value);
        emit TokenRemovedFromContract(_token, _value);
    }

    function transferETH() external onlyOwner {
        uint256 ETHbalance = address(this).balance;
        payable(owner()).sendValue(ETHbalance);
    }
    //switch functions
    function switchMarketActive(bool _state) external onlyOwner {
        //once marketActive is set to true, cannot be set back to false
        require(marketActive == false, "Cannot stop trade once is open");
        marketActive = _state;
        if(_state) {
            marketActiveAt = block.timestamp;
        }
        emit MarketStatusChanged(_state, block.timestamp);
    }
    function switchLimitSells(bool _state) external onlyOwner {
        limitSells = _state;
        emit LimitSellChanged(_state);
    }
    function updateRouter(address newRouter, bool _createPair) external onlyOwner {
        router = IRouter(newRouter);
        if(_createPair) {
            address _pair = IFactory(router.factory())
                .createPair(address(this), router.WETH());
            pair = _pair;
            emit PairUpdated(pair);
        } else {
            router = IRouter(newRouter);
        }
        emit RouterUpdated(newRouter);
    }

    function setBlockMultiBuys(bool _status) external onlyOwner {
        blockMultiBuys = _status;
        emit BlockMultiBuysChange(_status);
    }

    function switchLimitBuys(bool _state) external onlyOwner {
        limitBuys = _state;
        emit LimitBuyChanged(_state);
    }

    function setMaxSellTxAmount(uint _value) external onlyOwner {
        maxSellTxAmount = _value*10**decimals();
        require(maxSellTxAmount >= totalSupply() / 1000,"maxSellTxAmount should be at least 0.1% of total supply.");
        emit MaxSellChanged(_value);
    }

    function setMaxBuyTxAmount(uint _value) external onlyOwner {
        maxBuyTxAmount = _value*10**decimals();
        require(maxBuyTxAmount >= totalSupply() / 1000,"maxBuyTxAmount should be at least 0.1% of total supply.");
        emit MaxBuyChanged(maxBuyTxAmount);
    }
    
    function setFeeStatus(bool buy, bool sell, bool _state) external onlyOwner {
        feeStatus = _state;
        buyFeeStatus = buy;
        sellFeeStatus = sell;
        emit FeesStatusChanged(_state,buy,sell);
    }
    
    function setSwapAndLiquify(bool _state, uint _intervalSecondsForSwap, uint _minimumTokensBeforeSwap, uint _tokensToSwap) external onlyOwner {
        swapAndLiquifyEnabled = _state;
        intervalSecondsForSwap = _intervalSecondsForSwap;
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap*10**decimals();
        tokensToSwap = _tokensToSwap*10**decimals();
        require(minimumTokensBeforeSwap > 1000000000, "More than one token required"); 
        require(tokensToSwap > 1000000000, "More than one token required");
        require(tokensToSwap <= minimumTokensBeforeSwap,"You cannot swap more then the minimum amount");
        require(tokensToSwap <= totalSupply() / 1000,"token to swap limited to 0.1% supply");
        emit SwapSystemChanged(_state,_intervalSecondsForSwap,_minimumTokensBeforeSwap,_tokensToSwap);
    }
    // mappings functions
    function setPremarketUser(address _target, bool _status) external onlyOwner {
        premarketUser[_target] = _status;
        emit PremarketUserChanged(_status,_target);
    }
    function KKMigration(address[] memory _address, uint256[] memory _amount) external onlyOwner {
        for(uint i=0; i< _amount.length; i++){
            address adr = _address[i];
            uint amnt = _amount[i] *10**decimals();
            super._transfer(owner(), adr, amnt);
        }
        // events from ERC20
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        excludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            excludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setRewardToken(address newToken) external onlyOwner {
        super._setRewardToken(newToken);
    }

    function setMarketingWallet(address newWallet) external onlyOwner {
        feesAddress.marketing = newWallet;
    }

    function setBuybackWallet(address newWallet) external onlyOwner {
        feesAddress.buyback = newWallet;
    }

    function setClaimDelay(uint256 amountInSeconds) external onlyOwner {
        claimDelay = amountInSeconds;
    }

    function setBuyTaxes(
        uint64 _rewards,
        uint64 _marketing,
        uint64 _buyback
    ) external onlyOwner {
        totalBuyFee = _rewards + _marketing + _buyback;
        require(totalBuyFee <= 15, "Total buy fees cannot be more than 15%");
        buyFees = Fees(_rewards, _marketing, _buyback);
    }

    function setSellTaxes(
        uint64 _rewards,
        uint64 _marketing,
        uint64 _buyback
    ) external onlyOwner {
        totalSellFee = _rewards + _marketing + _buyback;
        require(totalSellFee <= 15, "Total sell fees cannot be more than 15%");
        sellFees = Fees(_rewards, _marketing, _buyback);
    }

    function setGasLimit(uint256 newGasLimit) external onlyOwner {
        gasLimit = newGasLimit;
    }

    function setMinBalanceForRewards(uint256 minBalance) external onlyOwner {
        minBalanceForRewards = minBalance;
    }

    function setPair(address newPair, bool value) external onlyOwner {
        isPair[newPair] = value;

        if (value) {
            excludedFromDividends[newPair] = true;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        emit ContractSwap(block.timestamp, tokenAmount);
    }
    function swapTokens(uint256 contractTokenBalance) private {
        isInternalTransaction = true;
        swapTokensForEth(contractTokenBalance);
        isInternalTransaction = false;
    }
    ////////////////////////
    // Transfer Functions //
    ////////////////////////

    function _transfer(address from, address to, uint256 amount) internal override {
        uint trade_type = 0;
    // market status flag
        if(!marketActive) {
            require(premarketUser[from],"cannot trade before the market opening");
        }
    // normal transaction
        if(!isInternalTransaction) {
        // tx limits
            //buy
            if(isPair[from]) {
                trade_type = 1;
                // limits
                if(!excludedFromFees[to]) {
                    // tx limit
                    if(limitBuys) {
                        require(amount <= maxBuyTxAmount, "maxBuyTxAmount Limit Exceeded");
                        // multi-buy limit
                        if(blockMultiBuys) {
                            require(marketActiveAt + 7 < block.timestamp,"You cannot buy at launch.");
                            require(userLastTradeData[tx.origin].lastBuyTime + 3 <= block.timestamp,"You cannot do multi-buy orders.");
                            userLastTradeData[tx.origin].lastBuyTime = block.timestamp;
                        }
                    }
                }
            }
            //sell
            else if(isPair[to]) {
                trade_type = 2;
                bool overMinimumTokenBalance = balanceOf(address(this)) >= minimumTokensBeforeSwap;
                // marketing auto-eth // if the swap is enabled and there are tokens in pool
                if (swapAndLiquifyEnabled && balanceOf(pair) > 0 && overMinimumTokenBalance &&
                    startTimeForSwap + intervalSecondsForSwap <= block.timestamp) {
                    // if contract has X tokens, not sold since Y time, sell Z tokens
                    startTimeForSwap = block.timestamp;
                    // sell to eth
                    swapTokens(tokensToSwap);
                }
                
                // limits
                if(!excludedFromFees[from]) {
                    // tx limit
                    if(limitSells) {
                    require(amount <= maxSellTxAmount, "maxSellTxAmount Limit Exceeded");
                    }
                }
            }
            // fees redistribution
            if(address(this).balance > minimumWeiForTokenomics) {
                //marketing
                uint256 caBalance = address(this).balance;
                uint256 marketingTokens = caBalance * sellFees.marketing / totalSellFee;
                (bool success,) = address(feesAddress.marketing).call{value: marketingTokens}("");
                if(success) {
                    emit MarketingFeeCollected(marketingTokens);
                }
                
                //buyback
                uint256 buybackTokens = caBalance * sellFees.buyback / totalSellFee;
                (bool success1,) = address(feesAddress.buyback).call{value: buybackTokens}("");
                if(success1) {
                    emit BuybackFeeCollected(buybackTokens);
                }
                //rewards
                uint256 dividends = caBalance * sellFees.rewards / totalSellFee;
                super._distributeDividends(dividends);
                super.autoDistribute(gasLimit);
            }
        // fees management
            if(feeStatus) {
                // buy
                if(trade_type == 1 && buyFeeStatus && !excludedFromFees[to]) {
                	uint txFees = amount * totalBuyFee / 100;
                	amount -= txFees;
                    super._transfer(from, address(this), txFees);
                }
                //sell
                if(trade_type == 2 && sellFeeStatus && !excludedFromFees[from]) {
                	uint txFees = amount * totalSellFee / 100;
                	amount -= txFees;
                    super._transfer(from, address(this), txFees);
                }
                // no wallet to wallet tax
            }
        }
        // transfer tokens
        super._transfer(from, to, amount);
        super.setBalance(from, balanceOf(from));
        super.setBalance(to, balanceOf(to));
        
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"}],"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":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockMultiBuysChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuybackFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ExcludeFromFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"feesActive","type":"bool"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"bool","name":"sell","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitSellChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"}],"name":"MarketStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MarketingFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxSellChanged","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":"pair","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"PremarketUserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"uint256","name":"intervalSecondsToWait","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minimumToSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensToSwap","type":"uint256"}],"name":"SwapSystemChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenRemovedFromContract","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":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"KKMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"gasAvailable","type":"uint256"}],"name":"autoDistribute","outputs":[],"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":"blockMultiBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint64","name":"rewards","type":"uint64"},{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"buyback","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"elegibleUsersIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesAddress","outputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"buyback","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"withdrawableUserDividends","type":"uint256"},{"internalType":"uint256","name":"totalUserDividends","type":"uint256"},{"internalType":"uint256","name":"lastUserClaimTime","type":"uint256"},{"internalType":"uint256","name":"withdrawnUserDividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"intervalSecondsForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isElegible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitBuys","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitSells","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBalanceForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumWeiForTokenomics","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"premarketUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint64","name":"rewards","type":"uint64"},{"internalType":"uint64","name":"marketing","type":"uint64"},{"internalType":"uint64","name":"buyback","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBlockMultiBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_rewards","type":"uint64"},{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_buyback","type":"uint64"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInSeconds","type":"uint256"}],"name":"setClaimDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGasLimit","type":"uint256"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBuyTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxSellTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBalance","type":"uint256"}],"name":"setMinBalanceForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPremarketUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_rewards","type":"uint64"},{"internalType":"uint64","name":"_marketing","type":"uint64"},{"internalType":"uint64","name":"_buyback","type":"uint64"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"},{"internalType":"uint256","name":"_intervalSecondsForSwap","type":"uint256"},{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"},{"internalType":"uint256","name":"_tokensToSwap","type":"uint256"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchLimitBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchLimitSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"switchMarketActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"bool","name":"_createPair","type":"bool"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastTradeData","outputs":[{"internalType":"uint256","name":"lastBuyTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6018805466ffffffffffffff60a01b1916660101010101010160a01b179055620493e0601955601e601c5567016345785d8a0000601d55732d00fb5e5890ebf1b270fa4009e19052305f80746080819052738a52164f5612f0cd075b8d5ea4a6b22d6733573460a0819052602280546001600160a01b0319908116909317905560238054909216179055600360c081905260e08190526002610100819052602480546001600160c01b0319908116700200000000000000030000000000000003908117909255610180604052610120849052610140939093526101609190915260258054909216179055600860268190556027553480156200010057600080fd5b50604051620049d8380380620049d88339810160408190526200012391620006b7565b8181604051806040016040528060088152602001674c756e617469637360c01b81525060405180604001604052806005815260200164131d5b985560da1b815250816003908162000175919062000793565b50600462000184828262000793565b505050620001a16200019b6200057960201b60201c565b6200057d565b600e80546001600160a01b03199081166001600160a01b0394851617909155600f80548216928416929092179091556017805490911691841691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200085f565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca91906200085f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e91906200085f565b601880546001600160a01b0319166001600160a01b039290921691909117905568056bc75e2d631000006200037560648262000884565b601f556200038560648262000884565b601e55620003966127108262000884565b601a55620003a76127108262000884565b601b556601c6bf52634000601455610e106015553060009081526009602081905260408220805460ff1916600190811790915591620003ee6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560099093527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548516600190811790915587821684528284208054861682179055601854909116835290822080549093168117909255602990620004896005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260299093528183208054851660019081179091556022548216845282842080548616821790556023549091168352908220805490931681179092556028906200050b6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556018549091168152602b90925290208054909116600117905562000570620005696005546001600160a01b031690565b82620005cf565b505050620008cf565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200062a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200063e9190620008a7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b0381168114620006b257600080fd5b919050565b60008060408385031215620006cb57600080fd5b620006d6836200069a565b9150620006e6602084016200069a565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071a57607f821691505b6020821081036200073b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069557600081815260208120601f850160051c810160208610156200076a5750805b601f850160051c820191505b818110156200078b5782815560010162000776565b505050505050565b81516001600160401b03811115620007af57620007af620006ef565b620007c781620007c0845462000705565b8462000741565b602080601f831160018114620007ff5760008415620007e65750858301515b600019600386901b1c1916600185901b1785556200078b565b600085815260208120601f198616915b8281101562000830578886015182559484019460019091019084016200080f565b50858210156200084f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087257600080fd5b6200087d826200069a565b9392505050565b600082620008a257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008c957634e487b7160e01b600052601160045260246000fd5b92915050565b6140f980620008df6000396000f3fe6080604052600436106104ae5760003560e01c806391b89fba1161026b578063c492f0461161014f578063e4748b9e116100c1578063f5537ede11610085578063f5537ede14610f49578063f68016b714610f69578063f7c618c114610f7f578063f887ea4014610f9f578063f91af3db14610fbf578063fbcbc0f114610fdf57600080fd5b8063e4748b9e14610e82578063e5e31b1314610eb8578063e76ad1f114610ee8578063ee7d72b414610f09578063f2fde38b14610f2957600080fd5b8063dbe66ca011610113578063dbe66ca014610d70578063dd5f739814610da0578063dd62ed3e14610dc0578063de69b3aa14610de0578063e0f3ccf514610e0d578063e28d717b14610e6d57600080fd5b8063c492f04614610ce4578063d1927fde14610d04578063d2d2162914610d24578063d2d7ad8314610d44578063d851fd0d14610d5a57600080fd5b8063a87e5da4116101e8578063aafd847a116101ac578063aafd847a14610be4578063ac252bd314610c1a578063b77cf9c614610c4a578063b912c7d714610c77578063bda258e414610c97578063c024666814610cc457600080fd5b8063a87e5da414610b4d578063a8aa1b3114610b63578063a8b9d24014610b83578063a9059cbb14610ba3578063aaa3115114610bc357600080fd5b8063997664d71161022f578063997664d714610abb578063997836d414610ad15780639d9241ec14610b015780639e1e066114610b17578063a457c2d714610b2d57600080fd5b806391b89fba146109fe57806391dd75e714610a1e578063958f973514610a6557806395d89b4114610a8657806397afefeb14610a9b57600080fd5b80634a74bb02116103925780635d098b381161030f5780637582c4de116102d35780637582c4de1461093f57806376915cd41461095f57806386a22eff1461097f5780638aee81271461099f5780638da5cb5b146109bf5780638ef71b1c146109dd57600080fd5b80635d098b38146108935780636d052ede146108b357806370a08231146108d457806370cbe56c1461090a578063715018a61461092a57600080fd5b80635561e1f6116103565780635561e1f6146107f857806359b107b91461080e5780635a3bb989146108245780635b3c6e011461085c5780635c67ed9c1461087d57600080fd5b80634a74bb02146107525780634e71d92d146107735780634e7b827f146107885780634f97f4c1146107b857806354bb5070146107d857600080fd5b806323b872dd1161042b5780632e145236116103ef5780632e145236146106a057806330219d4f146106c0578063313ce567146106e057806339509351146106fc5780633a1920f71461071c5780633a98ef391461073c57600080fd5b806323b872dd1461061e57806326987b601461063e578063272ecbb31461065457806327ce01471461066a5780632b8939291461068a57600080fd5b806317c6d7481161047257806317c6d7481461059257806318160ddd146105b25780631a29c9d3146105c75780631c8ec299146105e85780631d0adc07146105fe57600080fd5b80630483f7a0146104ba57806306fdde03146104dc578063095ea7b314610507578063117e8df91461053757806314fa7dbb1461055757600080fd5b366104b557005b600080fd5b3480156104c657600080fd5b506104da6104d53660046138ba565b61101f565b005b3480156104e857600080fd5b506104f16110ff565b6040516104fe91906138f3565b60405180910390f35b34801561051357600080fd5b50610527610522366004613941565b611191565b60405190151581526020016104fe565b34801561054357600080fd5b506104da61055236600461396d565b6111ab565b34801561056357600080fd5b50610584610572366004613991565b600b6020526000908152604090205481565b6040519081526020016104fe565b34801561059e57600080fd5b506104da6105ad3660046139ae565b61120b565b3480156105be57600080fd5b50600254610584565b3480156105d357600080fd5b5060185461052790600160a81b900460ff1681565b3480156105f457600080fd5b5061058460155481565b34801561060a57600080fd5b506104da610619366004613991565b6112ea565b34801561062a57600080fd5b506105276106393660046139c7565b611314565b34801561064a57600080fd5b5061058460165481565b34801561066057600080fd5b50610584601c5481565b34801561067657600080fd5b50610584610685366004613991565b611338565b34801561069657600080fd5b50610584601b5481565b3480156106ac57600080fd5b506104da6106bb366004613a24565b611383565b3480156106cc57600080fd5b506104da6106db36600461396d565b611475565b3480156106ec57600080fd5b50604051600981526020016104fe565b34801561070857600080fd5b50610527610717366004613941565b611535565b34801561072857600080fd5b506104da6107373660046139ae565b611557565b34801561074857600080fd5b5061058460135481565b34801561075e57600080fd5b5060185461052790600160a01b900460ff1681565b34801561077f57600080fd5b506104da611564565b34801561079457600080fd5b506105276107a3366004613991565b60096020526000908152604090205460ff1681565b3480156107c457600080fd5b506104da6107d3366004613a67565b611570565b3480156107e457600080fd5b506104da6107f3366004613a24565b61179d565b34801561080457600080fd5b5061058460145481565b34801561081a57600080fd5b5061058460265481565b34801561083057600080fd5b50600e54610844906001600160a01b031681565b6040516001600160a01b0390911681526020016104fe565b34801561086857600080fd5b5060185461052790600160d01b900460ff1681565b34801561088957600080fd5b50610584601d5481565b34801561089f57600080fd5b506104da6108ae366004613991565b61188b565b3480156108bf57600080fd5b5060185461052790600160b01b900460ff1681565b3480156108e057600080fd5b506105846108ef366004613991565b6001600160a01b031660009081526020819052604090205490565b34801561091657600080fd5b506104da6109253660046139ae565b6118b5565b34801561093657600080fd5b506104da6118c2565b34801561094b57600080fd5b506104da61095a3660046138ba565b6118d6565b34801561096b57600080fd5b506104da61097a36600461396d565b611936565b34801561098b57600080fd5b506104da61099a3660046138ba565b61198b565b3480156109ab57600080fd5b506104da6109ba366004613991565b6119e8565b3480156109cb57600080fd5b506005546001600160a01b0316610844565b3480156109e957600080fd5b5060185461052790600160c81b900460ff1681565b348015610a0a57600080fd5b50610584610a19366004613991565b611a0e565b348015610a2a57600080fd5b50602254602354610a45916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104fe565b348015610a7157600080fd5b5060185461052790600160b81b900460ff1681565b348015610a9257600080fd5b506104f1611a19565b348015610aa757600080fd5b506104da610ab636600461396d565b611a28565b348015610ac757600080fd5b5061058460115481565b348015610add57600080fd5b50610527610aec366004613991565b600c6020526000908152604090205460ff1681565b348015610b0d57600080fd5b5061058460275481565b348015610b2357600080fd5b5061058460125481565b348015610b3957600080fd5b50610527610b48366004613941565b611a7d565b348015610b5957600080fd5b50610584601e5481565b348015610b6f57600080fd5b50601854610844906001600160a01b031681565b348015610b8f57600080fd5b50610584610b9e366004613991565b611af8565b348015610baf57600080fd5b50610527610bbe366004613941565b611b24565b348015610bcf57600080fd5b5060185461052790600160d81b900460ff1681565b348015610bf057600080fd5b50610584610bff366004613991565b6001600160a01b031660009081526008602052604090205490565b348015610c2657600080fd5b50610527610c35366004613991565b60286020526000908152604090205460ff1681565b348015610c5657600080fd5b50610584610c65366004613991565b600a6020526000908152604090205481565b348015610c8357600080fd5b506104da610c92366004613aa2565b611b32565b348015610ca357600080fd5b50610584610cb2366004613991565b602a6020526000908152604090205481565b348015610cd057600080fd5b506104da610cdf3660046138ba565b611bcc565b348015610cf057600080fd5b506104da610cff366004613aed565b611c2c565b348015610d1057600080fd5b506104da610d1f3660046138ba565b611cd9565b348015610d3057600080fd5b506104da610d3f366004613c3b565b611f0c565b348015610d5057600080fd5b50610584601a5481565b348015610d6657600080fd5b50610584601f5481565b348015610d7c57600080fd5b50610527610d8b366004613991565b60296020526000908152604090205460ff1681565b348015610dac57600080fd5b506104da610dbb3660046139ae565b611faf565b348015610dcc57600080fd5b50610584610ddb366004613cfc565b612090565b348015610dec57600080fd5b50610584610dfb366004613991565b60066020526000908152604090205481565b348015610e1957600080fd5b50602554610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016104fe565b348015610e7957600080fd5b506104da6120bb565b348015610e8e57600080fd5b50602454610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b348015610ec457600080fd5b50610527610ed3366004613991565b602b6020526000908152604090205460ff1681565b348015610ef457600080fd5b5060185461052790600160c01b900460ff1681565b348015610f1557600080fd5b506104da610f243660046139ae565b6120e9565b348015610f3557600080fd5b506104da610f44366004613991565b6120f6565b348015610f5557600080fd5b50610527610f643660046139c7565b61216c565b348015610f7557600080fd5b5061058460195481565b348015610f8b57600080fd5b50600f54610844906001600160a01b031681565b348015610fab57600080fd5b50601754610844906001600160a01b031681565b348015610fcb57600080fd5b506104da610fda3660046139ae565b6122a8565b348015610feb57600080fd5b50610fff610ffa366004613991565b612386565b6040805194855260208501939093529183015260608201526080016104fe565b6110276123d1565b6001600160a01b03821660009081526009602052604090205481151560ff90911615150361105457600080fd5b6001600160a01b0382166000908152600960205260409020805460ff19168215159081179091556001036110925761108d82600061242b565b6110b6565b6001600160a01b0382166000908152600660205260409020546110b690839061242b565b816001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be826040516110f3911515815260200190565b60405180910390a25050565b60606003805461110e90613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461113a90613d2a565b80156111875780601f1061115c57610100808354040283529160200191611187565b820191906000526020600020905b81548152906001019060200180831161116a57829003601f168201915b5050505050905090565b60003361119f818585612697565b60019150505b92915050565b6111b36123d1565b60188054821515600160b01b0260ff60b01b199091161790556040517f9ae6a7edd4280cfe61f56b1e9d3643b6457d952ffb600cf213f86b16b4d9f6ae9061120090831515815260200190565b60405180910390a150565b600d54600081900361121b575050565b6000805a60165490915060005b858410801561123657508481105b156112e05784821061124757600091505b6000600d838154811061125c5761125c613d64565b60009182526020808320909101546015546001600160a01b03909116808452600a909252604090922054909250429161129491613d90565b10156112a5576112a3816127bb565b505b826112af81613da3565b93505081806112bd90613da3565b9250505a6112cb9085613dbc565b6112d59086613d90565b94505a935050611228565b5060165550505050565b6112f26123d1565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033611322858285612836565b61132d8585856128aa565b506001949350505050565b6001600160a01b0381166000908152600760209081526040808320546006909252822054601054600160801b929161136f91613dcf565b6113799190613de6565b6111a59190613e06565b61138b6123d1565b806113968385613e28565b6113a09190613e28565b6001600160401b03166026819055600f10156114125760405162461bcd60e51b815260206004820152602660248201527f546f74616c2062757920666565732063616e6e6f74206265206d6f7265207468604482015265616e2031352560d01b60648201526084015b60405180910390fd5b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602480546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b61147d6123d1565b601854600160d81b900460ff16156114d75760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073746f70207472616465206f6e6365206973206f70656e00006044820152606401611409565b6018805482158015600160d81b0260ff60d81b19909216919091179091556114fe57426021555b6040805182151581524260208201527fb89f558b3a2238cd6e750c4d3e29359faf8999130df57275857b0f526c34a4209101611200565b60003361119f8185856115488383612090565b6115529190613d90565b612697565b61155f6123d1565b601555565b61156d336127bb565b50565b6115786123d1565b6018805460ff60a01b1916600160a01b86151502179055601c83905560096115a190600a613f1d565b6115ab9083613dcf565b601a556115ba6009600a613f1d565b6115c49082613dcf565b601b55601a54633b9aca001061161c5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b633b9aca00601b54116116715760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b601a54601b5411156116da5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b6064820152608401611409565b6103e86116e660025490565b6116f09190613e06565b601b54111561174d5760405162461bcd60e51b8152602060048201526024808201527f746f6b656e20746f2073776170206c696d6974656420746f20302e312520737560448201526370706c7960e01b6064820152608401611409565b60408051851515815260208101859052908101839052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6117a56123d1565b806117b08385613e28565b6117ba9190613e28565b6001600160401b03166027819055600f10156118285760405162461bcd60e51b815260206004820152602760248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206d6f7265207460448201526668616e2031352560c81b6064820152608401611409565b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602580546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b6118936123d1565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6118bd6123d1565b601455565b6118ca6123d1565b6118d46000612f40565b565b6118de6123d1565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527fd6d6233f0b1134357edd66b38101a1aca28e48fe4a8443d62539b3094f4c829e91016110f3565b61193e6123d1565b60188054821515600160d01b0260ff60d01b199091161790556040517fa782f6c2e8e0fd8eb0754687f2c0364d0258995fa68fd81bccbce1db15a1772d9061120090831515815260200190565b6119936123d1565b6001600160a01b0382166000908152602b60205260409020805460ff191682158015919091179091556119e4576001600160a01b0382166000908152600960205260409020805460ff191660011790555b5050565b6119f06123d1565b600f80546001600160a01b0319166001600160a01b03831617905550565b60006111a582611af8565b60606004805461110e90613d2a565b611a306123d1565b60188054821515600160a81b0260ff60a81b199091161790556040517f56f9d75db21c343a56e797891efe112f3dae73300cf42611a7ac965224e714c09061120090831515815260200190565b60003381611a8b8286612090565b905083811015611aeb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611409565b61132d8286868403612697565b6001600160a01b038116600090815260086020526040812054611b1a83611338565b6111a59190613dbc565b60003361119f8185856128aa565b611b3a6123d1565b6018805461ffff60b81b1916600160b81b83151590810260ff60c01b191691909117600160c01b8615159081029190911760ff60c81b1916600160c81b861515908102919091179093556040805192835260208301919091528101919091527ff4621a74da7e40a7d3a6ddb78cf78bfb7bb572efda0287c5bc6a987d5c3c805b906060015b60405180910390a1505050565b611bd46123d1565b6001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110f3565b611c346123d1565b60005b82811015611ca5578160296000868685818110611c5657611c56613d64565b9050602002016020810190611c6b9190613991565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c9d81613da3565b915050611c37565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bbf93929190613f2c565b611ce16123d1565b601780546001600160a01b0319166001600160a01b0384161790558015611eb8576017546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f85565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613f85565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190613f85565b601880546001600160a01b0319166001600160a01b038316908117909155604051919250907f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90600090a250611ed4565b601780546001600160a01b0319166001600160a01b0384161790555b6040516001600160a01b038316907f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8090600090a25050565b611f146123d1565b60005b8151811015611faa576000838281518110611f3457611f34613d64565b602002602001015190506000611f48600990565b611f5390600a613f1d565b848481518110611f6557611f65613d64565b6020026020010151611f779190613dcf565b9050611f95611f8e6005546001600160a01b031690565b8383612f92565b50508080611fa290613da3565b915050611f17565b505050565b611fb76123d1565b611fc36009600a613f1d565b611fcd9082613dcf565b601e556103e8611fdc60025490565b611fe69190613e06565b601e54101561205d5760405162461bcd60e51b815260206004820152603760248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611409565b7f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534601e5460405161120091815260200190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6120c36123d1565b4761156d816120da6005546001600160a01b031690565b6001600160a01b031690613136565b6120f16123d1565b601955565b6120fe6123d1565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611409565b61156d81612f40565b60006121766123d1565b816000036121e9576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190613fa2565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225c9190613fbb565b9050836001600160a01b03167f25fc1612d5fabaa283e62605ffd52c2fde1105166c0b915e0eb003ec8a25cecb8360405161229991815260200190565b60405180910390a29392505050565b6122b06123d1565b6122bc6009600a613f1d565b6122c69082613dcf565b601f556103e86122d560025490565b6122df9190613e06565b601f5410156123565760405162461bcd60e51b815260206004820152603860248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401611409565b6040518181527f64a1c4a9e77388ab0db1168c4d687322d7a0d4304986c8fcb6486cd76235277b90602001611200565b60008060008061239585611af8565b93506123a085611338565b6001600160a01b039095166000908152600a6020908152604080832054600890925290912054949690949350915050565b6005546001600160a01b031633146118d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611409565b6001600160a01b038216600090815260066020526040902054801561245557612453836127bb565b505b6014548210801561247e57506001600160a01b0383166000908152600c602052604090205460ff165b156125bf576001600160a01b0383166000908152600c60205260409020805460ff19169055600d80546124b390600190613dbc565b815481106124c3576124c3613d64565b60009182526020808320909101546001600160a01b038681168452600b909252604090922054600d8054929093169291811061250157612501613d64565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600b918290526040812054600d80549193929161254d90600190613dbc565b8154811061255d5761255d613d64565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600d80548061259357612593613fd8565b600082815260209020810160001990810180546001600160a01b0319169055019055611faa838261324f565b6001600160a01b0383166000908152600660205260408120549003612651576001600160a01b0383166000818152600c60209081526040808320805460ff19166001908117909155600d8054600b909452918420839055820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b03191690911790555b808211156126775760006126658284613dbc565b905061267184826132e6565b50505050565b80821015611faa57600061268b8383613dbc565b9050612671848261324f565b6001600160a01b0383166126f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611409565b6001600160a01b03821661275a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611409565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806127c78361335d565b9050801561282d576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49061281c9084815260200190565b60405180910390a250600192915050565b50600092915050565b60006128428484612090565b90506000198114612671578181101561289d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611409565b6126718484848403612697565b601854600090600160d81b900460ff16612935576001600160a01b03841660009081526028602052604090205460ff166129355760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401611409565b601854600160e01b900460ff16612eea576001600160a01b0384166000908152602b602052604090205460ff1615612ae157506001600160a01b03821660009081526029602052604090205460019060ff16612adc57601854600160b01b900460ff1615612adc57601e548211156129ef5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d69742045786365656465640000006044820152606401611409565b601854600160d01b900460ff1615612adc57426021546007612a119190613d90565b10612a5e5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e000000000000006044820152606401611409565b326000908152602a60205260409020544290612a7b906003613d90565b1115612ac95760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e006044820152606401611409565b326000908152602a602052604090204290555b612c0f565b6001600160a01b0383166000908152602b602052604090205460ff1615612c0f5750601a5430600090815260208190526040812054600292906018549111159150600160a01b900460ff168015612b5057506018546001600160a01b0316600090815260208190526040812054115b8015612b595750805b8015612b74575042601c54602054612b719190613d90565b11155b15612b895742602055601b54612b89906134c2565b6001600160a01b03851660009081526029602052604090205460ff16612c0d57601854600160a81b900460ff1615612c0d57601f54831115612c0d5760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d697420457863656564656400006044820152606401611409565b505b601d54471115612de4576027546025544791600091612c3e90600160401b90046001600160401b031684613dcf565b612c489190613e06565b6022546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c9a576040519150601f19603f3d011682016040523d82523d6000602084013e612c9f565b606091505b505090508015612cdd576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b60275460255460009190612d0190600160801b90046001600160401b031686613dcf565b612d0b9190613e06565b6023546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d5d576040519150601f19603f3d011682016040523d82523d6000602084013e612d62565b606091505b505090508015612da0576040518281527f68eea9cf91897d2a3422a0c5081e0f0763309530966ac08bad40fb12e1fdab7e9060200160405180910390a15b60275460255460009190612dbd906001600160401b031688613dcf565b612dc79190613e06565b9050612dd2816134ee565b612ddd60195461120b565b5050505050505b601854600160b81b900460ff1615612eea57806001148015612e0f5750601854600160c01b900460ff165b8015612e3457506001600160a01b03831660009081526029602052604090205460ff16155b15612e70576000606460265484612e4b9190613dcf565b612e559190613e06565b9050612e618184613dbc565b9250612e6e853083612f92565b505b806002148015612e895750601854600160c81b900460ff165b8015612eae57506001600160a01b03841660009081526029602052604090205460ff16155b15612eea576000606460275484612ec59190613dcf565b612ecf9190613e06565b9050612edb8184613dbc565b9250612ee8853083612f92565b505b612ef5848484612f92565b612f1d84612f18866001600160a01b031660009081526020819052604090205490565b613575565b61267183612f18856001600160a01b031660009081526020819052604090205490565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316612ff65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611409565b6001600160a01b0382166130585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611409565b6001600160a01b038316600090815260208190526040902054818110156130d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611409565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612671565b804710156131865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611409565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d3576040519150601f19603f3d011682016040523d82523d6000602084013e6131d8565b606091505b5050905080611faa5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611409565b6001600160a01b03821660009081526006602052604081208054839290613277908490613dbc565b9250508190555080601360008282546132909190613dbc565b90915550506010546132a3908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613de6565b6001600160a01b0390921660009081526007602052604090209190915550565b6001600160a01b0382166000908152600660205260408120805483929061330e908490613d90565b9250508190555080601360008282546133279190613d90565b909155505060105461333a908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613fee565b60008061336983611af8565b9050801561282d576001600160a01b03831660009081526008602052604081208054839290613399908490613d90565b9250508190555080601260008282546133b29190613d90565b90915550506040518181526001600160a01b038416907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a2600061340184836135a4565b9050806134bb576000846001600160a01b031683610bb890604051600060405180830381858888f193505050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806134b9576001600160a01b03851660009081526008602052604081208054859290613490908490613dbc565b9250508190555082601260008282546134a99190613dbc565b9091555060009695505050505050565b505b5092915050565b6018805460ff60e01b1916600160e01b1790556134de81613703565b506018805460ff60e01b19169055565b6000601354116135365760405162461bcd60e51b8152602060048201526013602482015272746865726520617265206e6f2073686172657360681b6044820152606401611409565b601354613547600160801b83613dcf565b6135519190613e06565b60105461355e9190613d90565b60105560115461356f908290613d90565b60115550565b6001600160a01b03821660009081526009602052604090205460ff161561359a575050565b6119e4828261242b565b604080516002808252606082018352600092839291906020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136369190613f85565b8160008151811061364957613649613d64565b6001600160a01b039283166020918202929092010152600f5482519116908290600190811061367a5761367a613d64565b6001600160a01b039283166020918202929092010152600e5460405163b6f9de9560e01b815291169063b6f9de959085906136c09060009086908a904290600401614052565b6000604051808303818588803b1580156136d957600080fd5b505af1935050505080156136eb575060015b6136f95760009150506111a5565b60019150506111a5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613d64565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b59190613f85565b816001815181106137c8576137c8613d64565b6001600160a01b0392831660209182029290920101526017546137ee9130911684612697565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790613827908590600090869030904290600401614087565b600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505060408051428152602081018690527f361864e2bc9fde13aef92787495191b73eaff680fa79aba1b346c416f186334a935001905060405180910390a15050565b6001600160a01b038116811461156d57600080fd5b801515811461156d57600080fd5b600080604083850312156138cd57600080fd5b82356138d881613897565b915060208301356138e8816138ac565b809150509250929050565b600060208083528351808285015260005b8181101561392057858101830151858201604001528201613904565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561395457600080fd5b823561395f81613897565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a816138ac565b9392505050565b6000602082840312156139a357600080fd5b813561398a81613897565b6000602082840312156139c057600080fd5b5035919050565b6000806000606084860312156139dc57600080fd5b83356139e781613897565b925060208401356139f781613897565b929592945050506040919091013590565b80356001600160401b0381168114613a1f57600080fd5b919050565b600080600060608486031215613a3957600080fd5b613a4284613a08565b9250613a5060208501613a08565b9150613a5e60408501613a08565b90509250925092565b60008060008060808587031215613a7d57600080fd5b8435613a88816138ac565b966020860135965060408601359560600135945092505050565b600080600060608486031215613ab757600080fd5b8335613ac2816138ac565b92506020840135613ad2816138ac565b91506040840135613ae2816138ac565b809150509250925092565b600080600060408486031215613b0257600080fd5b83356001600160401b0380821115613b1957600080fd5b818601915086601f830112613b2d57600080fd5b813581811115613b3c57600080fd5b8760208260051b8501011115613b5157600080fd5b60209283019550935050840135613ae2816138ac565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ba557613ba5613b67565b604052919050565b60006001600160401b03821115613bc657613bc6613b67565b5060051b60200190565b600082601f830112613be157600080fd5b81356020613bf6613bf183613bad565b613b7d565b82815260059290921b84018101918181019086841115613c1557600080fd5b8286015b84811015613c305780358352918301918301613c19565b509695505050505050565b60008060408385031215613c4e57600080fd5b82356001600160401b0380821115613c6557600080fd5b818501915085601f830112613c7957600080fd5b81356020613c89613bf183613bad565b82815260059290921b84018101918181019089841115613ca857600080fd5b948201945b83861015613ccf578535613cc081613897565b82529482019490820190613cad565b96505086013592505080821115613ce557600080fd5b50613cf285828601613bd0565b9150509250929050565b60008060408385031215613d0f57600080fd5b8235613d1a81613897565b915060208301356138e881613897565b600181811c90821680613d3e57607f821691505b602082108103613d5e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156111a5576111a5613d7a565b600060018201613db557613db5613d7a565b5060010190565b818103818111156111a5576111a5613d7a565b80820281158282048414176111a5576111a5613d7a565b80820182811260008312801582168215821617156134b9576134b9613d7a565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156134bb576134bb613d7a565b600181815b80851115613e83578160001904821115613e6957613e69613d7a565b80851615613e7657918102915b93841c9390800290613e4d565b509250929050565b600082613e9a575060016111a5565b81613ea7575060006111a5565b81600181146136f95760028103613ed45760ff841115613ec957613ec9613d7a565b50506001821b6111a5565b5060208310610133831016604e8410600b8410161715613ef7575081810a6111a5565b613f018383613e48565b8060001904821115613f1557613f15613d7a565b029392505050565b600061398a60ff841683613e8b565b6040808252810183905260008460608301825b86811015613f6f578235613f5281613897565b6001600160a01b0316825260209283019290910190600101613f3f565b5080925050508215156020830152949350505050565b600060208284031215613f9757600080fd5b815161398a81613897565b600060208284031215613fb457600080fd5b5051919050565b600060208284031215613fcd57600080fd5b815161398a816138ac565b634e487b7160e01b600052603160045260246000fd5b81810360008312801583831316838312821617156134bb576134bb613d7a565b600081518084526020808501945080840160005b838110156140475781516001600160a01b031687529582019590820190600101614022565b509495945050505050565b84815260806020820152600061406b608083018661400e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006140a660a083018661400e565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220fc5c2126526b37af8b3a746a52bb755a3b44d994d3e48936a61d2da34feefa3464736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599

Deployed Bytecode

0x6080604052600436106104ae5760003560e01c806391b89fba1161026b578063c492f0461161014f578063e4748b9e116100c1578063f5537ede11610085578063f5537ede14610f49578063f68016b714610f69578063f7c618c114610f7f578063f887ea4014610f9f578063f91af3db14610fbf578063fbcbc0f114610fdf57600080fd5b8063e4748b9e14610e82578063e5e31b1314610eb8578063e76ad1f114610ee8578063ee7d72b414610f09578063f2fde38b14610f2957600080fd5b8063dbe66ca011610113578063dbe66ca014610d70578063dd5f739814610da0578063dd62ed3e14610dc0578063de69b3aa14610de0578063e0f3ccf514610e0d578063e28d717b14610e6d57600080fd5b8063c492f04614610ce4578063d1927fde14610d04578063d2d2162914610d24578063d2d7ad8314610d44578063d851fd0d14610d5a57600080fd5b8063a87e5da4116101e8578063aafd847a116101ac578063aafd847a14610be4578063ac252bd314610c1a578063b77cf9c614610c4a578063b912c7d714610c77578063bda258e414610c97578063c024666814610cc457600080fd5b8063a87e5da414610b4d578063a8aa1b3114610b63578063a8b9d24014610b83578063a9059cbb14610ba3578063aaa3115114610bc357600080fd5b8063997664d71161022f578063997664d714610abb578063997836d414610ad15780639d9241ec14610b015780639e1e066114610b17578063a457c2d714610b2d57600080fd5b806391b89fba146109fe57806391dd75e714610a1e578063958f973514610a6557806395d89b4114610a8657806397afefeb14610a9b57600080fd5b80634a74bb02116103925780635d098b381161030f5780637582c4de116102d35780637582c4de1461093f57806376915cd41461095f57806386a22eff1461097f5780638aee81271461099f5780638da5cb5b146109bf5780638ef71b1c146109dd57600080fd5b80635d098b38146108935780636d052ede146108b357806370a08231146108d457806370cbe56c1461090a578063715018a61461092a57600080fd5b80635561e1f6116103565780635561e1f6146107f857806359b107b91461080e5780635a3bb989146108245780635b3c6e011461085c5780635c67ed9c1461087d57600080fd5b80634a74bb02146107525780634e71d92d146107735780634e7b827f146107885780634f97f4c1146107b857806354bb5070146107d857600080fd5b806323b872dd1161042b5780632e145236116103ef5780632e145236146106a057806330219d4f146106c0578063313ce567146106e057806339509351146106fc5780633a1920f71461071c5780633a98ef391461073c57600080fd5b806323b872dd1461061e57806326987b601461063e578063272ecbb31461065457806327ce01471461066a5780632b8939291461068a57600080fd5b806317c6d7481161047257806317c6d7481461059257806318160ddd146105b25780631a29c9d3146105c75780631c8ec299146105e85780631d0adc07146105fe57600080fd5b80630483f7a0146104ba57806306fdde03146104dc578063095ea7b314610507578063117e8df91461053757806314fa7dbb1461055757600080fd5b366104b557005b600080fd5b3480156104c657600080fd5b506104da6104d53660046138ba565b61101f565b005b3480156104e857600080fd5b506104f16110ff565b6040516104fe91906138f3565b60405180910390f35b34801561051357600080fd5b50610527610522366004613941565b611191565b60405190151581526020016104fe565b34801561054357600080fd5b506104da61055236600461396d565b6111ab565b34801561056357600080fd5b50610584610572366004613991565b600b6020526000908152604090205481565b6040519081526020016104fe565b34801561059e57600080fd5b506104da6105ad3660046139ae565b61120b565b3480156105be57600080fd5b50600254610584565b3480156105d357600080fd5b5060185461052790600160a81b900460ff1681565b3480156105f457600080fd5b5061058460155481565b34801561060a57600080fd5b506104da610619366004613991565b6112ea565b34801561062a57600080fd5b506105276106393660046139c7565b611314565b34801561064a57600080fd5b5061058460165481565b34801561066057600080fd5b50610584601c5481565b34801561067657600080fd5b50610584610685366004613991565b611338565b34801561069657600080fd5b50610584601b5481565b3480156106ac57600080fd5b506104da6106bb366004613a24565b611383565b3480156106cc57600080fd5b506104da6106db36600461396d565b611475565b3480156106ec57600080fd5b50604051600981526020016104fe565b34801561070857600080fd5b50610527610717366004613941565b611535565b34801561072857600080fd5b506104da6107373660046139ae565b611557565b34801561074857600080fd5b5061058460135481565b34801561075e57600080fd5b5060185461052790600160a01b900460ff1681565b34801561077f57600080fd5b506104da611564565b34801561079457600080fd5b506105276107a3366004613991565b60096020526000908152604090205460ff1681565b3480156107c457600080fd5b506104da6107d3366004613a67565b611570565b3480156107e457600080fd5b506104da6107f3366004613a24565b61179d565b34801561080457600080fd5b5061058460145481565b34801561081a57600080fd5b5061058460265481565b34801561083057600080fd5b50600e54610844906001600160a01b031681565b6040516001600160a01b0390911681526020016104fe565b34801561086857600080fd5b5060185461052790600160d01b900460ff1681565b34801561088957600080fd5b50610584601d5481565b34801561089f57600080fd5b506104da6108ae366004613991565b61188b565b3480156108bf57600080fd5b5060185461052790600160b01b900460ff1681565b3480156108e057600080fd5b506105846108ef366004613991565b6001600160a01b031660009081526020819052604090205490565b34801561091657600080fd5b506104da6109253660046139ae565b6118b5565b34801561093657600080fd5b506104da6118c2565b34801561094b57600080fd5b506104da61095a3660046138ba565b6118d6565b34801561096b57600080fd5b506104da61097a36600461396d565b611936565b34801561098b57600080fd5b506104da61099a3660046138ba565b61198b565b3480156109ab57600080fd5b506104da6109ba366004613991565b6119e8565b3480156109cb57600080fd5b506005546001600160a01b0316610844565b3480156109e957600080fd5b5060185461052790600160c81b900460ff1681565b348015610a0a57600080fd5b50610584610a19366004613991565b611a0e565b348015610a2a57600080fd5b50602254602354610a45916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016104fe565b348015610a7157600080fd5b5060185461052790600160b81b900460ff1681565b348015610a9257600080fd5b506104f1611a19565b348015610aa757600080fd5b506104da610ab636600461396d565b611a28565b348015610ac757600080fd5b5061058460115481565b348015610add57600080fd5b50610527610aec366004613991565b600c6020526000908152604090205460ff1681565b348015610b0d57600080fd5b5061058460275481565b348015610b2357600080fd5b5061058460125481565b348015610b3957600080fd5b50610527610b48366004613941565b611a7d565b348015610b5957600080fd5b50610584601e5481565b348015610b6f57600080fd5b50601854610844906001600160a01b031681565b348015610b8f57600080fd5b50610584610b9e366004613991565b611af8565b348015610baf57600080fd5b50610527610bbe366004613941565b611b24565b348015610bcf57600080fd5b5060185461052790600160d81b900460ff1681565b348015610bf057600080fd5b50610584610bff366004613991565b6001600160a01b031660009081526008602052604090205490565b348015610c2657600080fd5b50610527610c35366004613991565b60286020526000908152604090205460ff1681565b348015610c5657600080fd5b50610584610c65366004613991565b600a6020526000908152604090205481565b348015610c8357600080fd5b506104da610c92366004613aa2565b611b32565b348015610ca357600080fd5b50610584610cb2366004613991565b602a6020526000908152604090205481565b348015610cd057600080fd5b506104da610cdf3660046138ba565b611bcc565b348015610cf057600080fd5b506104da610cff366004613aed565b611c2c565b348015610d1057600080fd5b506104da610d1f3660046138ba565b611cd9565b348015610d3057600080fd5b506104da610d3f366004613c3b565b611f0c565b348015610d5057600080fd5b50610584601a5481565b348015610d6657600080fd5b50610584601f5481565b348015610d7c57600080fd5b50610527610d8b366004613991565b60296020526000908152604090205460ff1681565b348015610dac57600080fd5b506104da610dbb3660046139ae565b611faf565b348015610dcc57600080fd5b50610584610ddb366004613cfc565b612090565b348015610dec57600080fd5b50610584610dfb366004613991565b60066020526000908152604090205481565b348015610e1957600080fd5b50602554610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016104fe565b348015610e7957600080fd5b506104da6120bb565b348015610e8e57600080fd5b50602454610e43906001600160401b0380821691600160401b8104821691600160801b9091041683565b348015610ec457600080fd5b50610527610ed3366004613991565b602b6020526000908152604090205460ff1681565b348015610ef457600080fd5b5060185461052790600160c01b900460ff1681565b348015610f1557600080fd5b506104da610f243660046139ae565b6120e9565b348015610f3557600080fd5b506104da610f44366004613991565b6120f6565b348015610f5557600080fd5b50610527610f643660046139c7565b61216c565b348015610f7557600080fd5b5061058460195481565b348015610f8b57600080fd5b50600f54610844906001600160a01b031681565b348015610fab57600080fd5b50601754610844906001600160a01b031681565b348015610fcb57600080fd5b506104da610fda3660046139ae565b6122a8565b348015610feb57600080fd5b50610fff610ffa366004613991565b612386565b6040805194855260208501939093529183015260608201526080016104fe565b6110276123d1565b6001600160a01b03821660009081526009602052604090205481151560ff90911615150361105457600080fd5b6001600160a01b0382166000908152600960205260409020805460ff19168215159081179091556001036110925761108d82600061242b565b6110b6565b6001600160a01b0382166000908152600660205260409020546110b690839061242b565b816001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be826040516110f3911515815260200190565b60405180910390a25050565b60606003805461110e90613d2a565b80601f016020809104026020016040519081016040528092919081815260200182805461113a90613d2a565b80156111875780601f1061115c57610100808354040283529160200191611187565b820191906000526020600020905b81548152906001019060200180831161116a57829003601f168201915b5050505050905090565b60003361119f818585612697565b60019150505b92915050565b6111b36123d1565b60188054821515600160b01b0260ff60b01b199091161790556040517f9ae6a7edd4280cfe61f56b1e9d3643b6457d952ffb600cf213f86b16b4d9f6ae9061120090831515815260200190565b60405180910390a150565b600d54600081900361121b575050565b6000805a60165490915060005b858410801561123657508481105b156112e05784821061124757600091505b6000600d838154811061125c5761125c613d64565b60009182526020808320909101546015546001600160a01b03909116808452600a909252604090922054909250429161129491613d90565b10156112a5576112a3816127bb565b505b826112af81613da3565b93505081806112bd90613da3565b9250505a6112cb9085613dbc565b6112d59086613d90565b94505a935050611228565b5060165550505050565b6112f26123d1565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033611322858285612836565b61132d8585856128aa565b506001949350505050565b6001600160a01b0381166000908152600760209081526040808320546006909252822054601054600160801b929161136f91613dcf565b6113799190613de6565b6111a59190613e06565b61138b6123d1565b806113968385613e28565b6113a09190613e28565b6001600160401b03166026819055600f10156114125760405162461bcd60e51b815260206004820152602660248201527f546f74616c2062757920666565732063616e6e6f74206265206d6f7265207468604482015265616e2031352560d01b60648201526084015b60405180910390fd5b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602480546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b61147d6123d1565b601854600160d81b900460ff16156114d75760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073746f70207472616465206f6e6365206973206f70656e00006044820152606401611409565b6018805482158015600160d81b0260ff60d81b19909216919091179091556114fe57426021555b6040805182151581524260208201527fb89f558b3a2238cd6e750c4d3e29359faf8999130df57275857b0f526c34a4209101611200565b60003361119f8185856115488383612090565b6115529190613d90565b612697565b61155f6123d1565b601555565b61156d336127bb565b50565b6115786123d1565b6018805460ff60a01b1916600160a01b86151502179055601c83905560096115a190600a613f1d565b6115ab9083613dcf565b601a556115ba6009600a613f1d565b6115c49082613dcf565b601b55601a54633b9aca001061161c5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b633b9aca00601b54116116715760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e206f6e6520746f6b656e207265717569726564000000006044820152606401611409565b601a54601b5411156116da5760405162461bcd60e51b815260206004820152602c60248201527f596f752063616e6e6f742073776170206d6f7265207468656e20746865206d6960448201526b1b9a5b5d5b48185b5bdd5b9d60a21b6064820152608401611409565b6103e86116e660025490565b6116f09190613e06565b601b54111561174d5760405162461bcd60e51b8152602060048201526024808201527f746f6b656e20746f2073776170206c696d6974656420746f20302e312520737560448201526370706c7960e01b6064820152608401611409565b60408051851515815260208101859052908101839052606081018290527feb7b7fa1011347d85e81a933db02079465f028f76206a1036ff5bf0204dff4a19060800160405180910390a150505050565b6117a56123d1565b806117b08385613e28565b6117ba9190613e28565b6001600160401b03166027819055600f10156118285760405162461bcd60e51b815260206004820152602760248201527f546f74616c2073656c6c20666565732063616e6e6f74206265206d6f7265207460448201526668616e2031352560c81b6064820152608401611409565b604080516060810182526001600160401b0394851680825293851660208201819052929094169301839052602580546001600160801b031916909217600160401b9091021767ffffffffffffffff60801b1916600160801b909202919091179055565b6118936123d1565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6118bd6123d1565b601455565b6118ca6123d1565b6118d46000612f40565b565b6118de6123d1565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527fd6d6233f0b1134357edd66b38101a1aca28e48fe4a8443d62539b3094f4c829e91016110f3565b61193e6123d1565b60188054821515600160d01b0260ff60d01b199091161790556040517fa782f6c2e8e0fd8eb0754687f2c0364d0258995fa68fd81bccbce1db15a1772d9061120090831515815260200190565b6119936123d1565b6001600160a01b0382166000908152602b60205260409020805460ff191682158015919091179091556119e4576001600160a01b0382166000908152600960205260409020805460ff191660011790555b5050565b6119f06123d1565b600f80546001600160a01b0319166001600160a01b03831617905550565b60006111a582611af8565b60606004805461110e90613d2a565b611a306123d1565b60188054821515600160a81b0260ff60a81b199091161790556040517f56f9d75db21c343a56e797891efe112f3dae73300cf42611a7ac965224e714c09061120090831515815260200190565b60003381611a8b8286612090565b905083811015611aeb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611409565b61132d8286868403612697565b6001600160a01b038116600090815260086020526040812054611b1a83611338565b6111a59190613dbc565b60003361119f8185856128aa565b611b3a6123d1565b6018805461ffff60b81b1916600160b81b83151590810260ff60c01b191691909117600160c01b8615159081029190911760ff60c81b1916600160c81b861515908102919091179093556040805192835260208301919091528101919091527ff4621a74da7e40a7d3a6ddb78cf78bfb7bb572efda0287c5bc6a987d5c3c805b906060015b60405180910390a1505050565b611bd46123d1565b6001600160a01b038216600081815260296020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016110f3565b611c346123d1565b60005b82811015611ca5578160296000868685818110611c5657611c56613d64565b9050602002016020810190611c6b9190613991565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611c9d81613da3565b915050611c37565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bbf93929190613f2c565b611ce16123d1565b601780546001600160a01b0319166001600160a01b0384161790558015611eb8576017546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015611d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d709190613f85565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190613f85565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e679190613f85565b601880546001600160a01b0319166001600160a01b038316908117909155604051919250907f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f90600090a250611ed4565b601780546001600160a01b0319166001600160a01b0384161790555b6040516001600160a01b038316907f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8090600090a25050565b611f146123d1565b60005b8151811015611faa576000838281518110611f3457611f34613d64565b602002602001015190506000611f48600990565b611f5390600a613f1d565b848481518110611f6557611f65613d64565b6020026020010151611f779190613dcf565b9050611f95611f8e6005546001600160a01b031690565b8383612f92565b50508080611fa290613da3565b915050611f17565b505050565b611fb76123d1565b611fc36009600a613f1d565b611fcd9082613dcf565b601e556103e8611fdc60025490565b611fe69190613e06565b601e54101561205d5760405162461bcd60e51b815260206004820152603760248201527f6d61784275795478416d6f756e742073686f756c64206265206174206c65617360448201527f7420302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611409565b7f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534601e5460405161120091815260200190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6120c36123d1565b4761156d816120da6005546001600160a01b031690565b6001600160a01b031690613136565b6120f16123d1565b601955565b6120fe6123d1565b6001600160a01b0381166121635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611409565b61156d81612f40565b60006121766123d1565b816000036121e9576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156121c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e69190613fa2565b91505b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015612238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225c9190613fbb565b9050836001600160a01b03167f25fc1612d5fabaa283e62605ffd52c2fde1105166c0b915e0eb003ec8a25cecb8360405161229991815260200190565b60405180910390a29392505050565b6122b06123d1565b6122bc6009600a613f1d565b6122c69082613dcf565b601f556103e86122d560025490565b6122df9190613e06565b601f5410156123565760405162461bcd60e51b815260206004820152603860248201527f6d617853656c6c5478416d6f756e742073686f756c64206265206174206c656160448201527f737420302e3125206f6620746f74616c20737570706c792e00000000000000006064820152608401611409565b6040518181527f64a1c4a9e77388ab0db1168c4d687322d7a0d4304986c8fcb6486cd76235277b90602001611200565b60008060008061239585611af8565b93506123a085611338565b6001600160a01b039095166000908152600a6020908152604080832054600890925290912054949690949350915050565b6005546001600160a01b031633146118d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611409565b6001600160a01b038216600090815260066020526040902054801561245557612453836127bb565b505b6014548210801561247e57506001600160a01b0383166000908152600c602052604090205460ff165b156125bf576001600160a01b0383166000908152600c60205260409020805460ff19169055600d80546124b390600190613dbc565b815481106124c3576124c3613d64565b60009182526020808320909101546001600160a01b038681168452600b909252604090922054600d8054929093169291811061250157612501613d64565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600b918290526040812054600d80549193929161254d90600190613dbc565b8154811061255d5761255d613d64565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600d80548061259357612593613fd8565b600082815260209020810160001990810180546001600160a01b0319169055019055611faa838261324f565b6001600160a01b0383166000908152600660205260408120549003612651576001600160a01b0383166000818152600c60209081526040808320805460ff19166001908117909155600d8054600b909452918420839055820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b03191690911790555b808211156126775760006126658284613dbc565b905061267184826132e6565b50505050565b80821015611faa57600061268b8383613dbc565b9050612671848261324f565b6001600160a01b0383166126f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611409565b6001600160a01b03821661275a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611409565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806127c78361335d565b9050801561282d576001600160a01b0383166000818152600a602052604090819020429055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49061281c9084815260200190565b60405180910390a250600192915050565b50600092915050565b60006128428484612090565b90506000198114612671578181101561289d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611409565b6126718484848403612697565b601854600090600160d81b900460ff16612935576001600160a01b03841660009081526028602052604090205460ff166129355760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74207472616465206265666f726520746865206d61726b6574206f60448201526570656e696e6760d01b6064820152608401611409565b601854600160e01b900460ff16612eea576001600160a01b0384166000908152602b602052604090205460ff1615612ae157506001600160a01b03821660009081526029602052604090205460019060ff16612adc57601854600160b01b900460ff1615612adc57601e548211156129ef5760405162461bcd60e51b815260206004820152601d60248201527f6d61784275795478416d6f756e74204c696d69742045786365656465640000006044820152606401611409565b601854600160d01b900460ff1615612adc57426021546007612a119190613d90565b10612a5e5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e6e6f7420627579206174206c61756e63682e000000000000006044820152606401611409565b326000908152602a60205260409020544290612a7b906003613d90565b1115612ac95760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e6e6f7420646f206d756c74692d627579206f72646572732e006044820152606401611409565b326000908152602a602052604090204290555b612c0f565b6001600160a01b0383166000908152602b602052604090205460ff1615612c0f5750601a5430600090815260208190526040812054600292906018549111159150600160a01b900460ff168015612b5057506018546001600160a01b0316600090815260208190526040812054115b8015612b595750805b8015612b74575042601c54602054612b719190613d90565b11155b15612b895742602055601b54612b89906134c2565b6001600160a01b03851660009081526029602052604090205460ff16612c0d57601854600160a81b900460ff1615612c0d57601f54831115612c0d5760405162461bcd60e51b815260206004820152601e60248201527f6d617853656c6c5478416d6f756e74204c696d697420457863656564656400006044820152606401611409565b505b601d54471115612de4576027546025544791600091612c3e90600160401b90046001600160401b031684613dcf565b612c489190613e06565b6022546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c9a576040519150601f19603f3d011682016040523d82523d6000602084013e612c9f565b606091505b505090508015612cdd576040518281527f14c3945b0e552cb130d2e123df9730f5b69c4872acd0fc354d63649227d61f129060200160405180910390a15b60275460255460009190612d0190600160801b90046001600160401b031686613dcf565b612d0b9190613e06565b6023546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612d5d576040519150601f19603f3d011682016040523d82523d6000602084013e612d62565b606091505b505090508015612da0576040518281527f68eea9cf91897d2a3422a0c5081e0f0763309530966ac08bad40fb12e1fdab7e9060200160405180910390a15b60275460255460009190612dbd906001600160401b031688613dcf565b612dc79190613e06565b9050612dd2816134ee565b612ddd60195461120b565b5050505050505b601854600160b81b900460ff1615612eea57806001148015612e0f5750601854600160c01b900460ff165b8015612e3457506001600160a01b03831660009081526029602052604090205460ff16155b15612e70576000606460265484612e4b9190613dcf565b612e559190613e06565b9050612e618184613dbc565b9250612e6e853083612f92565b505b806002148015612e895750601854600160c81b900460ff165b8015612eae57506001600160a01b03841660009081526029602052604090205460ff16155b15612eea576000606460275484612ec59190613dcf565b612ecf9190613e06565b9050612edb8184613dbc565b9250612ee8853083612f92565b505b612ef5848484612f92565b612f1d84612f18866001600160a01b031660009081526020819052604090205490565b613575565b61267183612f18856001600160a01b031660009081526020819052604090205490565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316612ff65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611409565b6001600160a01b0382166130585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611409565b6001600160a01b038316600090815260208190526040902054818110156130d05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611409565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612671565b804710156131865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611409565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d3576040519150601f19603f3d011682016040523d82523d6000602084013e6131d8565b606091505b5050905080611faa5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611409565b6001600160a01b03821660009081526006602052604081208054839290613277908490613dbc565b9250508190555080601360008282546132909190613dbc565b90915550506010546132a3908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613de6565b6001600160a01b0390921660009081526007602052604090209190915550565b6001600160a01b0382166000908152600660205260408120805483929061330e908490613d90565b9250508190555080601360008282546133279190613d90565b909155505060105461333a908290613dcf565b6001600160a01b0383166000908152600760205260409020546132c69190613fee565b60008061336983611af8565b9050801561282d576001600160a01b03831660009081526008602052604081208054839290613399908490613d90565b9250508190555080601260008282546133b29190613d90565b90915550506040518181526001600160a01b038416907fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9060200160405180910390a2600061340184836135a4565b9050806134bb576000846001600160a01b031683610bb890604051600060405180830381858888f193505050503d806000811461345a576040519150601f19603f3d011682016040523d82523d6000602084013e61345f565b606091505b50509050806134b9576001600160a01b03851660009081526008602052604081208054859290613490908490613dbc565b9250508190555082601260008282546134a99190613dbc565b9091555060009695505050505050565b505b5092915050565b6018805460ff60e01b1916600160e01b1790556134de81613703565b506018805460ff60e01b19169055565b6000601354116135365760405162461bcd60e51b8152602060048201526013602482015272746865726520617265206e6f2073686172657360681b6044820152606401611409565b601354613547600160801b83613dcf565b6135519190613e06565b60105461355e9190613d90565b60105560115461356f908290613d90565b60115550565b6001600160a01b03821660009081526009602052604090205460ff161561359a575050565b6119e4828261242b565b604080516002808252606082018352600092839291906020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136369190613f85565b8160008151811061364957613649613d64565b6001600160a01b039283166020918202929092010152600f5482519116908290600190811061367a5761367a613d64565b6001600160a01b039283166020918202929092010152600e5460405163b6f9de9560e01b815291169063b6f9de959085906136c09060009086908a904290600401614052565b6000604051808303818588803b1580156136d957600080fd5b505af1935050505080156136eb575060015b6136f95760009150506111a5565b60019150506111a5565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061373857613738613d64565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b59190613f85565b816001815181106137c8576137c8613d64565b6001600160a01b0392831660209182029290920101526017546137ee9130911684612697565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790613827908590600090869030904290600401614087565b600060405180830381600087803b15801561384157600080fd5b505af1158015613855573d6000803e3d6000fd5b505060408051428152602081018690527f361864e2bc9fde13aef92787495191b73eaff680fa79aba1b346c416f186334a935001905060405180910390a15050565b6001600160a01b038116811461156d57600080fd5b801515811461156d57600080fd5b600080604083850312156138cd57600080fd5b82356138d881613897565b915060208301356138e8816138ac565b809150509250929050565b600060208083528351808285015260005b8181101561392057858101830151858201604001528201613904565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561395457600080fd5b823561395f81613897565b946020939093013593505050565b60006020828403121561397f57600080fd5b813561398a816138ac565b9392505050565b6000602082840312156139a357600080fd5b813561398a81613897565b6000602082840312156139c057600080fd5b5035919050565b6000806000606084860312156139dc57600080fd5b83356139e781613897565b925060208401356139f781613897565b929592945050506040919091013590565b80356001600160401b0381168114613a1f57600080fd5b919050565b600080600060608486031215613a3957600080fd5b613a4284613a08565b9250613a5060208501613a08565b9150613a5e60408501613a08565b90509250925092565b60008060008060808587031215613a7d57600080fd5b8435613a88816138ac565b966020860135965060408601359560600135945092505050565b600080600060608486031215613ab757600080fd5b8335613ac2816138ac565b92506020840135613ad2816138ac565b91506040840135613ae2816138ac565b809150509250925092565b600080600060408486031215613b0257600080fd5b83356001600160401b0380821115613b1957600080fd5b818601915086601f830112613b2d57600080fd5b813581811115613b3c57600080fd5b8760208260051b8501011115613b5157600080fd5b60209283019550935050840135613ae2816138ac565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613ba557613ba5613b67565b604052919050565b60006001600160401b03821115613bc657613bc6613b67565b5060051b60200190565b600082601f830112613be157600080fd5b81356020613bf6613bf183613bad565b613b7d565b82815260059290921b84018101918181019086841115613c1557600080fd5b8286015b84811015613c305780358352918301918301613c19565b509695505050505050565b60008060408385031215613c4e57600080fd5b82356001600160401b0380821115613c6557600080fd5b818501915085601f830112613c7957600080fd5b81356020613c89613bf183613bad565b82815260059290921b84018101918181019089841115613ca857600080fd5b948201945b83861015613ccf578535613cc081613897565b82529482019490820190613cad565b96505086013592505080821115613ce557600080fd5b50613cf285828601613bd0565b9150509250929050565b60008060408385031215613d0f57600080fd5b8235613d1a81613897565b915060208301356138e881613897565b600181811c90821680613d3e57607f821691505b602082108103613d5e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156111a5576111a5613d7a565b600060018201613db557613db5613d7a565b5060010190565b818103818111156111a5576111a5613d7a565b80820281158282048414176111a5576111a5613d7a565b80820182811260008312801582168215821617156134b9576134b9613d7a565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156134bb576134bb613d7a565b600181815b80851115613e83578160001904821115613e6957613e69613d7a565b80851615613e7657918102915b93841c9390800290613e4d565b509250929050565b600082613e9a575060016111a5565b81613ea7575060006111a5565b81600181146136f95760028103613ed45760ff841115613ec957613ec9613d7a565b50506001821b6111a5565b5060208310610133831016604e8410600b8410161715613ef7575081810a6111a5565b613f018383613e48565b8060001904821115613f1557613f15613d7a565b029392505050565b600061398a60ff841683613e8b565b6040808252810183905260008460608301825b86811015613f6f578235613f5281613897565b6001600160a01b0316825260209283019290910190600101613f3f565b5080925050508215156020830152949350505050565b600060208284031215613f9757600080fd5b815161398a81613897565b600060208284031215613fb457600080fd5b5051919050565b600060208284031215613fcd57600080fd5b815161398a816138ac565b634e487b7160e01b600052603160045260246000fd5b81810360008312801583831316838312821617156134bb576134bb613d7a565b600081518084526020808501945080840160005b838110156140475781516001600160a01b031687529582019590820190600101614022565b509495945050505050565b84815260806020820152600061406b608083018661400e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a0604082015260006140a660a083018661400e565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220fc5c2126526b37af8b3a746a52bb755a3b44d994d3e48936a61d2da34feefa3464736f6c63430008130033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _rewardToken (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599

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


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.