ETH Price: $1,930.97 (-4.50%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

Transaction Hash
Method
Block
From
To
Approve244286702026-02-10 20:10:3517 days ago1770754235IN
Alpha Gardeners: AG Token
0 ETH0.000096632.08385359
Transfer242994252026-01-23 18:58:1135 days ago1769194691IN
Alpha Gardeners: AG Token
0 ETH0.000007360.12619476
Approve242608332026-01-18 9:46:2340 days ago1768729583IN
Alpha Gardeners: AG Token
0 ETH0.00004952.03364103
Approve241757662026-01-06 12:54:5952 days ago1767704099IN
Alpha Gardeners: AG Token
0 ETH0.00003560.76453588
Approve241367782026-01-01 2:25:2357 days ago1767234323IN
Alpha Gardeners: AG Token
0 ETH0.000002040.04430241
Approve241298582025-12-31 3:15:1158 days ago1767150911IN
Alpha Gardeners: AG Token
0 ETH0.000006010.12925147
Approve241298512025-12-31 3:13:4758 days ago1767150827IN
Alpha Gardeners: AG Token
0 ETH0.000006420.13879358
Approve241298492025-12-31 3:13:2358 days ago1767150803IN
Alpha Gardeners: AG Token
0 ETH0.000006430.13875205
Approve241298462025-12-31 3:12:4758 days ago1767150767IN
Alpha Gardeners: AG Token
0 ETH0.000007080.15274772
Approve240757882025-12-23 14:03:4766 days ago1766498627IN
Alpha Gardeners: AG Token
0 ETH0.000006440.13931408
Approve238833802025-11-26 14:01:2393 days ago1764165683IN
Alpha Gardeners: AG Token
0 ETH0.000026390.57023227
Approve238504092025-11-21 22:41:3598 days ago1763764895IN
Alpha Gardeners: AG Token
0 ETH0.000087251.88153756
Approve237501902025-11-07 21:51:47112 days ago1762552307IN
Alpha Gardeners: AG Token
0 ETH0.000107522.32113179
Approve237264902025-11-04 14:15:59115 days ago1762265759IN
Alpha Gardeners: AG Token
0 ETH0.000047211.01260805
Approve237204522025-11-03 18:00:59116 days ago1762192859IN
Alpha Gardeners: AG Token
0 ETH0.000065172.67758952
Approve237183422025-11-03 10:56:11116 days ago1762167371IN
Alpha Gardeners: AG Token
0 ETH0.000048091.97596599
Approve236921842025-10-30 19:08:35120 days ago1761851315IN
Alpha Gardeners: AG Token
0 ETH0.000137542.9674249
Approve236709842025-10-27 19:52:35123 days ago1761594755IN
Alpha Gardeners: AG Token
0 ETH0.000030151.2388212
Approve236028992025-10-18 6:58:59132 days ago1760770739IN
Alpha Gardeners: AG Token
0 ETH0.000074041.59664739
Approve235767772025-10-14 15:17:11136 days ago1760455031IN
Alpha Gardeners: AG Token
0 ETH0.000111392.40774737
Approve235540482025-10-11 11:00:35139 days ago1760180435IN
Alpha Gardeners: AG Token
0 ETH0.000087521.88729709
Approve235536802025-10-11 9:46:47139 days ago1760176007IN
Alpha Gardeners: AG Token
0 ETH0.000037660.8091515
Approve235536712025-10-11 9:44:59139 days ago1760175899IN
Alpha Gardeners: AG Token
0 ETH0.000037350.80547564
Approve235120292025-10-05 14:00:35145 days ago1759672835IN
Alpha Gardeners: AG Token
0 ETH0.000052191.12822288
Approve235118952025-10-05 13:33:47145 days ago1759671227IN
Alpha Gardeners: AG Token
0 ETH0.000075151.6234814
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AG

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 * @title Alpha Gardeners - The Ultimate Degen Trading Toolkit
 *
 *      Join us on Telegram: https://t.me/alphagardeners_lounge
 *      Follow us on Twitter: https://twitter.com/alpha_gardeners
 *
 */
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.19;

import "./Ownable.sol";
import "./Pausable.sol";
import "./IUniswap.sol";

contract AG is Ownable, Pausable {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    // ERC20 events.
    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    // This token specific events.
    event BlacklistStatusUpdated(address wallet, bool isBlacklisted);
    event MarketPairUpdated(address pair, bool isMarketPair);
    event ExcludedFromFeesUpdated(address wallet, bool isExcluded);
    event TaxRecipientUpdated(address recipient);
    event TaxesUpdated(uint256 buyTax, uint256 sellTax, uint256 transferTax);
    event LimitsUpdated(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event NumTokensToSwapUpdated(uint256 amount);
    event ContractSwapEnabledUpdated(bool autoEnabled, bool manualEnabled);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public constant decimals = 18;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    // No mint or burn means we can just use a constant.
    // Total supply must fit in uint128.
    uint256 public constant totalSupply = 8_000_000_000 * 10**decimals;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                              TOKEN-SPECIFIC
    //////////////////////////////////////////////////////////////*/

    address public taxRecipient;

    uint256 public numTokensToSwap = 2_500_000 * 10**decimals;
    bool public contractSwapEnabled = false;
    bool public manualSwapEnabled = false;
    bool private inSwap;

    IUniswapV2Router02 public uniswapV2Router;
    // IUniswapV2Pair public uniswapV2Pair;
    address private WETH;
    event UniswapRouterUpdated(address newRouter);

    // When accessing the buy tax, we also access buy limit, and the same applies for
    // sell tax and limit. We pack them into a struct to save on gas.
    struct taxAndLimit {
        uint128 tax;
        uint128 limit;
    }

    taxAndLimit public buyTaxAndLimit = taxAndLimit({
        tax: 0,
        limit: uint128(totalSupply)
    });
    taxAndLimit public sellTaxAndLimit = taxAndLimit({
        tax: 0,
        limit: uint128(totalSupply)
    });

    uint256 public transferTax = 0;
    uint256 public maxWallet = totalSupply;

    /// @dev totalSupply * maxTax cannot exceed uint256.
    /// @dev maxTax cannot exceed taxDenominator.
    uint256 private constant maxTax = 1_000; // 10%, same limit applies to all taxes.
    uint256 private constant taxDenominator = 10_000; // 500/10000 = 5%

    // Pack it into a struct instead of individual mappings to save on gas.
    struct walletState {
        bool isBlacklisted;
        bool isMarketPair;
        bool isExcludedFromFees;
    }
    mapping (address => walletState) public _walletState;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    // Start paused.
    constructor(
        string memory _name,
        string memory _symbol,
        address _taxRecipient,
        address routerAddress
    ) Ownable(msg.sender) Pausable(true) {
        // Require supply to be less than the max uint128 value.
        require(totalSupply < type(uint128).max, "TOTAL_SUPPLY_EXCEEDS_MAX");
        name = _name;
        symbol = _symbol;
        taxRecipient = _taxRecipient;

        // Setup the Uniswap router used for swapping fees.
        uniswapV2Router = IUniswapV2Router02(routerAddress);
        _approve(address(this), routerAddress, type(uint256).max);
        WETH = uniswapV2Router.WETH();

        // Setup for EIP-2612.
        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();

        // Exclude owner and the contract from fees.
        _walletState[msg.sender] = walletState({
            isBlacklisted: false,
            isMarketPair: false,
            isExcludedFromFees: true
        });
        emit ExcludedFromFeesUpdated(msg.sender, true);
        _walletState[address(this)] = walletState({
            isBlacklisted: false,
            isMarketPair: false,
            isExcludedFromFees: true
        });
        emit ExcludedFromFeesUpdated(address(this), true);

        // Mint the initial supply.
        unchecked {
            balanceOf[msg.sender] += totalSupply;
        }

        emit Transfer(address(0), msg.sender, totalSupply);
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, allowance[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = msg.sender;
        uint256 currentAllowance = allowance[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        allowance[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }


    function transfer(address to, uint256 amount) public whenNotPaused returns (bool) {
        _transfer(msg.sender, to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public whenNotPaused returns (bool) {
        uint256 allowed = allowance[from][msg.sender];
        if (allowed != type(uint256).max) {
            require(allowed >= amount, "ERC20: insufficient allowance");
            // Won't overflow since allowed >= amount.
            unchecked {
                allowance[from][msg.sender] = allowed - amount;
            }
        }

        _transfer(from, to, amount);

        return true;
    }

    function _buyTransfer(address to, uint256 amount) internal view returns (uint256) {
        // balanceOf[to]+amount can't exceed uint256 as it can't exceed totalSupply.
        // Taxes are capped at 10k and totalSupply is <= uint(128).max, overflow is impossible.
        unchecked {
            taxAndLimit memory buyConfig = buyTaxAndLimit;
            uint256 fees = (amount * buyConfig.tax) / taxDenominator;

            require(amount <= buyConfig.limit, "transfer exceeds max buy");
            require(balanceOf[to] + amount <= maxWallet, "balance exceeds max wallet");

            return fees;
        }
    }

    function _sellTransfer(uint256 amount) internal view returns (uint256) {
        unchecked {
            taxAndLimit memory sellConfig = sellTaxAndLimit;
            uint256 fees = (amount * sellConfig.tax) / taxDenominator;

            require(amount <= sellConfig.limit, "transfer exceeds max sell");
            // Do not check max wallet as market pairs are allowed to exceed it.

            return fees;
        }
    }

    function _baseTransfer(address to, uint256 amount) internal view returns (uint256) {
        unchecked {
            require(balanceOf[to] + amount <= maxWallet, "balance exceeds max wallet");

            return (amount * transferTax) / taxDenominator;
        }
    }

    function _swapTokens() internal {
        // Only try to swap fees during a sell transaction.
        uint256 numTokens = numTokensToSwap;
        bool overMinTokenBalance = balanceOf[address(this)] >= numTokens;
        if (
            overMinTokenBalance &&
            !inSwap &&
            contractSwapEnabled
        ) {
            // Try to swap the fees and send them to the tax recipient.
            // If this fails, still allow the transfer to go through.
            try this.swapFeesAndSend(numTokens, 0) {} catch {}
        }
    }

    function _calcFees(address to, uint256 amount, bool isBuy, bool isSell) internal view returns (uint256) {
        if(isBuy) {
            return _buyTransfer(to, amount);
        }
        if(isSell) {
            return _sellTransfer(amount);
        }
        return _baseTransfer(to, amount);
    }

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

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

        walletState memory fromWalletState = _walletState[from];
        walletState memory toWalletState = _walletState[to];

        // Don't allow blacklisted wallets to receive or send tokens.
        require(!fromWalletState.isBlacklisted && !toWalletState.isBlacklisted, "blacklisted");

        uint256 fees = 0;
        bool takeFee = !fromWalletState.isExcludedFromFees && !toWalletState.isExcludedFromFees;

        // Tax and enforce limits appriopriately.
        if(takeFee) {
            bool isBuy = fromWalletState.isMarketPair;
            bool isSell = toWalletState.isMarketPair;

            fees = _calcFees(to, amount, isBuy, isSell);

            if(isSell && !isBuy) {
                _swapTokens();
            }
        }

        // Add the amount minus fees to the receiver.
        uint256 amountMinusFees;
        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        // fees is less than amount, so it can't overflow.
        unchecked {
            amountMinusFees = amount - fees;
            balanceOf[to] += amountMinusFees;
        }
        emit Transfer(from, to, amountMinusFees);

        // Add any fees collected to the contract.
        if(fees > 0) {
            emit Transfer(from, address(this), fees);
            unchecked {
                balanceOf[address(this)] += fees;
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                               SWAP LOGIC
    //////////////////////////////////////////////////////////////*/

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    function swapFeesAndSend(uint256 tokenAmount, uint256 minOut) external lockTheSwap {
        if(msg.sender != address(this)) {
            require(manualSwapEnabled || msg.sender == owner(), "manual swap disabled");
        }

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            minOut,
            path,
            taxRecipient, // Send ETH directly to the tax recipient.
            block.timestamp
        );
    }

    /*//////////////////////////////////////////////////////////////
                             OWNER-ONLY
    //////////////////////////////////////////////////////////////*/

    function setBlacklisted(address account, bool value) external onlyOwner {
        require(account != address(this), "cant change contract");
        _walletState[account].isBlacklisted = value;
        emit BlacklistStatusUpdated(account, value);
    }

    function setMarketPair(address account, bool value) external onlyOwner {
        require(account != address(this), "cant change contract");
        _walletState[account].isMarketPair = value;
        emit MarketPairUpdated(account, value);
    }

    function setExcludedFromFees(address account, bool value) external onlyOwner {
        require(account != address(this), "cant change contract");
        _walletState[account].isExcludedFromFees = value;
        emit ExcludedFromFeesUpdated(account, value);
    }

    function setTaxRecipient(address account) external onlyOwner {
        taxRecipient = account;
        emit TaxRecipientUpdated(account);
    }

    function setTaxes(uint256 _buyTax, uint256 _sellTax, uint256 _transferTax) public onlyOwner {
        // Cap any of the taxes to 10% max.
        require(_buyTax <= maxTax, "buy is too high");
        require(_sellTax <= maxTax, "sell is too high");
        require(_transferTax <= maxTax, "transfer is too high");

        buyTaxAndLimit.tax = uint128(_buyTax);
        sellTaxAndLimit.tax = uint128(_sellTax);
        transferTax = _transferTax;

        emit TaxesUpdated(_buyTax, _sellTax, _transferTax);
    }

    // setLimits are in wad of tokens. 1e18 = 1 token.
    function setLimits(uint256 _maxBuyWad, uint256 _maxSellWad, uint256 _maxWalletWad) public onlyOwner {
        require(_maxBuyWad >= 20_000_000, "buy is too low");
        require(_maxSellWad >= 20_000_000, "sell is too low");
        require(_maxWalletWad >= 20_000_000, "wallet is too low");

        buyTaxAndLimit.limit = uint128(_maxBuyWad * 10**decimals);
        sellTaxAndLimit.limit = uint128(_maxSellWad * 10**decimals);
        maxWallet = _maxWalletWad * 10**decimals;

        emit LimitsUpdated(_maxBuyWad * 10**decimals, _maxSellWad * 10**decimals, _maxWalletWad * 10**decimals);
    }

    // setNumTokensToSwap is in wad of tokens. 1e18 = 1 token.
    function setNumTokensToSwap(uint256 amountWad) external onlyOwner {
        require(amountWad > 0, "amount cant be zero");
        numTokensToSwap = amountWad * 10**decimals;

        emit NumTokensToSwapUpdated(amountWad * 10**decimals);
    }

    function setContractSwapEnabled(bool _contractSwapEnabled, bool _manualSwapEnabled) public onlyOwner {
        contractSwapEnabled = _contractSwapEnabled;
        manualSwapEnabled = _manualSwapEnabled;
        emit ContractSwapEnabledUpdated(_contractSwapEnabled, _manualSwapEnabled);
    }

    function Unpause() external onlyOwner {
        _unpause();
    }

    function Pause() external onlyOwner {
        _pause();
    }

    function updateUniswapRouter(address newRouter) external onlyOwner {
        address oldRouterAddress = address(uniswapV2Router);
        require(oldRouterAddress != newRouter, "can't set the same router address");

        uniswapV2Router = IUniswapV2Router02(newRouter);
        WETH = uniswapV2Router.WETH();

        // Approve the new router to spend contract's tokens.
        _approve(address(this), newRouter, type(uint256).max);

        // Reset approval on old router.
        _approve(address(this), oldRouterAddress, 0);

        emit UniswapRouterUpdated(newRouter);
    }

    function openTrading() external onlyOwner {
        // Start with manual swap disabled.
        setContractSwapEnabled(true, false);
        setLimits(
            20_000_000,
            20_000_000,
            60_000_000
        );
        setTaxes(1000, 1000, 0);
        _unpause();
    }

    function skimETH(address to, uint256 amount) external onlyOwner {
        (bool success,) = to.call{value: amount}("");
        require(success, "ETH transfer failed");
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED');
    }

    function skimTokens(address tokenAddress, address to, uint256 amount) external onlyOwner {
        safeTransfer(tokenAddress, to, amount);
    }

    /*//////////////////////////////////////////////////////////////
                             PAUSABLE OVERRIDES
    //////////////////////////////////////////////////////////////*/

    // Override the requireNotPaused implementation to allow the owner
    // to interact with the contract while it is paused. This allows the
    // owner to airdrop tokens or add liquidity while in a paused state.
    function _requireNotPaused() internal view override{
        if(paused()) {
            if(tx.origin != owner() && msg.sender != owner()) {
                revert EnforcedPause();
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }
}

File 2 of 4 : IUniswap.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.19;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
/// @dev edits: pass initial pause state in constructor and removed context dependency.
/// @author OpenZeppelin https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol
abstract contract Pausable {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor(bool initialPaused) {
        _paused = initialPaused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.19;

/// @dev removed context dependency.
/// @author OpenZeppelin https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
abstract contract Ownable {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != msg.sender) {
            revert OwnableUnauthorizedAccount(msg.sender);
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_taxRecipient","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"autoEnabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"manualEnabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"isMarketPair","type":"bool"}],"name":"MarketPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NumTokensToSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"TaxRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferTax","type":"uint256"}],"name":"TaxesUpdated","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UniswapRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_walletState","outputs":[{"internalType":"bool","name":"isBlacklisted","type":"bool"},{"internalType":"bool","name":"isMarketPair","type":"bool"},{"internalType":"bool","name":"isExcludedFromFees","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_contractSwapEnabled","type":"bool"},{"internalType":"bool","name":"_manualSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyWad","type":"uint256"},{"internalType":"uint256","name":"_maxSellWad","type":"uint256"},{"internalType":"uint256","name":"_maxWalletWad","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWad","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"uint256","name":"_transferTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"swapFeesAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052620000126012600a620007aa565b6200002190622625a0620007c2565b6006556007805461ffff191690556040805180820190915260008152602081016200004f6012600a620007aa565b62000060906401dcd65000620007c2565b6001600160801b0390811690915281516020928301518216600160801b029116176009556040805180820190915260008152908101620000a36012600a620007aa565b620000b4906401dcd65000620007c2565b6001600160801b0390811690915281516020909201518116600160801b02911617600a9081556000600b55620000ed90601290620007aa565b620000fe906401dcd65000620007c2565b600c553480156200010e57600080fd5b50604051620031d7380380620031d78339810160408190526200013191620008be565b6001336200013f8162000481565b5060008054911515600160a01b0260ff60a01b199092169190911790556001600160801b03620001726012600a620007aa565b62000183906401dcd65000620007c2565b10620001d65760405162461bcd60e51b815260206004820152601860248201527f544f54414c5f535550504c595f455843454544535f4d4158000000000000000060448201526064015b60405180910390fd5b6001620001e48582620009dc565b506002620001f38482620009dc565b50600580546001600160a01b0319166001600160a01b0384811691909117909155600780546301000000600160b81b031916630100000092841692909202919091179055620002463082600019620004d1565b600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c0919062000aa8565b600880546001600160a01b0319166001600160a01b039290921691909117905546608052620002ee620005f9565b60a0526040805160608101825260008082526020808301828152600184860181815233808652600d85529487902095518654935191511515620100000262ff0000199215156101000261ff00199215159290921661ffff19909516949094171716919091179093558351918252810191909152600080516020620031b7833981519152910160405180910390a16040805160608101825260008082526020808301828152600184860181815230808652600d85529487902095518654935191511515620100000262ff0000199215156101000261ff00199215159290921661ffff19909516949094171716919091179093558351918252810191909152600080516020620031b7833981519152910160405180910390a133600081815260036020526040812080546b19d971e4fe8401e7400000000190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620004556012600a620007aa565b62000466906401dcd65000620007c2565b60405190815260200160405180910390a35050505062000b44565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620005355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001cd565b6001600160a01b038216620005985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001cd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200062d919062000ac6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006ec578160001904821115620006d057620006d062000695565b80851615620006de57918102915b93841c9390800290620006b0565b509250929050565b6000826200070557506001620007a4565b816200071457506000620007a4565b81600181146200072d5760028114620007385762000758565b6001915050620007a4565b60ff8411156200074c576200074c62000695565b50506001821b620007a4565b5060208310610133831016604e8410600b84101617156200077d575081810a620007a4565b620007898383620006ab565b8060001904821115620007a057620007a062000695565b0290505b92915050565b6000620007bb60ff841683620006f4565b9392505050565b8082028115828204841417620007a457620007a462000695565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200080457600080fd5b81516001600160401b0380821115620008215762000821620007dc565b604051601f8301601f19908116603f011681019082821181831017156200084c576200084c620007dc565b816040528381526020925086838588010111156200086957600080fd5b600091505b838210156200088d57858201830151818301840152908201906200086e565b600093810190920192909252949350505050565b80516001600160a01b0381168114620008b957600080fd5b919050565b60008060008060808587031215620008d557600080fd5b84516001600160401b0380821115620008ed57600080fd5b620008fb88838901620007f2565b955060208701519150808211156200091257600080fd5b506200092187828801620007f2565b9350506200093260408601620008a1565b91506200094260608601620008a1565b905092959194509250565b600181811c908216806200096257607f821691505b6020821081036200098357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d757600081815260208120601f850160051c81016020861015620009b25750805b601f850160051c820191505b81811015620009d357828155600101620009be565b5050505b505050565b81516001600160401b03811115620009f857620009f8620007dc565b62000a108162000a0984546200094d565b8462000989565b602080601f83116001811462000a48576000841562000a2f5750858301515b600019600386901b1c1916600185901b178555620009d3565b600085815260208120601f198616915b8281101562000a795788860151825594840194600190910190840162000a58565b508582101562000a985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000abb57600080fd5b620007bb82620008a1565b600080835462000ad6816200094d565b6001828116801562000af1576001811462000b075762000b38565b60ff198416875282151583028701945062000b38565b8760005260208060002060005b8581101562000b2f5781548a82015290840190820162000b14565b50505082870194505b50929695505050505050565b60805160a05161264d62000b6a6000396000610a7c01526000610a47015261264d6000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638124f7ac11610151578063c9567bf9116100c3578063dd62ed3e11610087578063dd62ed3e146105a7578063e13e5c2d146105d2578063e9dae5ed146105e5578063f2fde38b146105f8578063f8b45b051461060b578063fdb78c0e1461061457600080fd5b8063c9567bf91461051d578063d01dd6d214610525578063d505accf14610538578063d53cd5661461054b578063d683804e1461058957600080fd5b8063a457c2d711610115578063a457c2d7146104ab578063a9059cbb146104be578063ae0295e2146104d1578063b359303a146104e4578063bfc2fc35146104f7578063c16dd4a41461050a57600080fd5b80638124f7ac146104645780638da5cb5b1461046d578063908bb2ae1461047e57806395d89b411461049157806398fbb9061461049957600080fd5b80633644e515116101ea57806370a08231116101ae57806370a08231146103ee578063715018a61461040e578063737ea06e146104165780637805862f1461042957806378e3079e146104315780637ecebe001461044457600080fd5b80633644e515146103a657806339509351146103ae578063590ffdce146103c15780635c975abb146103d45780636985a022146103e657600080fd5b80631694505e116102315780631694505e1461032c57806318160ddd1461035e578063189ae5f21461036657806323b872dd14610379578063313ce5671461038c57600080fd5b806301a6c43b1461026e57806306fdde031461028a578063095ea7b31461029f5780630f569dad146102c2578063143373a0146102d7575b600080fd5b61027760065481565b6040519081526020015b60405180910390f35b610292610621565b60405161028191906120a7565b6102b26102ad3660046120ef565b6106af565b6040519015158152602001610281565b6102d56102d036600461211b565b6106c6565b005b61030d6102e5366004612134565b600d6020526000908152604090205460ff808216916101008104821691620100009091041683565b6040805193151584529115156020840152151590820152606001610281565b60075461034690630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b61027761077e565b6102d5610374366004612151565b61079c565b6102b261038736600461217d565b61097d565b610394601281565b60405160ff9091168152602001610281565b610277610a43565b6102b26103bc3660046120ef565b610a9e565b6102d56103cf3660046121cc565b610ae7565b600054600160a01b900460ff166102b2565b6102d5610b85565b6102776103fc366004612134565b60036020526000908152604090205481565b6102d5610b97565b600554610346906001600160a01b031681565b6102d5610ba9565b6102d561043f366004612134565b610bb9565b610277610452366004612134565b600e6020526000908152604090205481565b610277600b5481565b6000546001600160a01b0316610346565b6102d561048c366004612134565b610c0f565b610292610d97565b6007546102b290610100900460ff1681565b6102b26104b93660046120ef565b610da4565b6102b26104cc3660046120ef565b610e36565b6102d56104df3660046120ef565b610e4b565b6102d56104f2366004612205565b610ef1565b6102d5610505366004612227565b611067565b6102d56105183660046121cc565b6110cb565b6102d561115f565b6102d56105333660046121cc565b611194565b6102d5610546366004612245565b611220565b600954610569906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610281565b600a54610569906001600160801b0380821691600160801b90041682565b6102776105b53660046122bc565b600460209081526000928352604080842090915290825290205481565b6102d56105e036600461217d565b611464565b6102d56105f3366004612151565b611477565b6102d5610606366004612134565b6115cd565b610277600c5481565b6007546102b29060ff1681565b6001805461062e906122ea565b80601f016020809104026020016040519081016040528092919081815260200182805461065a906122ea565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081565b60006106bc33848461160b565b5060015b92915050565b6106ce61172f565b600081116107195760405162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b60448201526064015b60405180910390fd5b6107256012600a61241e565b61072f908261242d565b6006557f4e3e41dc675aea3fcba9c02c7825641a2888e42a4b888399511f5276ca84b81861075f6012600a61241e565b610769908361242d565b6040519081526020015b60405180910390a150565b61078a6012600a61241e565b610799906401dcd6500061242d565b81565b6107a461172f565b6301312d008310156107e95760405162461bcd60e51b815260206004820152600e60248201526d62757920697320746f6f206c6f7760901b6044820152606401610710565b6301312d0082101561082f5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20697320746f6f206c6f7760881b6044820152606401610710565b6301312d008110156108775760405162461bcd60e51b815260206004820152601160248201527077616c6c657420697320746f6f206c6f7760781b6044820152606401610710565b6108836012600a61241e565b61088d908461242d565b600980546001600160801b03928316600160801b0292169190911790556108b66012600a61241e565b6108c0908361242d565b600a80546001600160801b03928316600160801b0292169190911781556108e99060129061241e565b6108f3908261242d565b600c557faa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b556109236012600a61241e565b61092d908561242d565b6109396012600a61241e565b610943908561242d565b61094f6012600a61241e565b610959908561242d565b604080519384526020840192909252908201526060015b60405180910390a1505050565b600061098761176b565b6001600160a01b03841660009081526004602090815260408083203384529091529020546000198114610a2d5782811015610a045760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610710565b6001600160a01b0385166000908152600460209081526040808320338452909152902083820390555b610a388585856117c1565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610a7957610a74611af1565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909190610add9082908690610ad8908790612444565b61160b565b5060019392505050565b610aef61172f565b306001600160a01b03831603610b175760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805462ff0000191662010000861515908102919091179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad91015b60405180910390a15050565b610b8d61172f565b610b95611b8b565b565b610b9f61172f565b610b956000611bdc565b610bb161172f565b610b95611c2c565b610bc161172f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fcb5639215577b3eba6150c2a74d8de8ea5885c176e29e2e66a7551cc15b7a7cf90602001610773565b610c1761172f565b6007546001600160a01b03630100000090910481169082168103610c875760405162461bcd60e51b815260206004820152602160248201527f63616e277420736574207468652073616d6520726f75746572206164647265736044820152607360f81b6064820152608401610710565b81600760036101000a8154816001600160a01b0302191690836001600160a01b03160217905550600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612485565b600880546001600160a01b0319166001600160a01b0392909216919091179055610d52308360001961160b565b610d5e3082600061160b565b6040516001600160a01b03831681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c90602001610b79565b6002805461062e906122ea565b3360008181526004602090815260408083206001600160a01b038716845290915281205490919083811015610e295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610710565b610a38828686840361160b565b6000610e4061176b565b6106bc3384846117c1565b610e5361172f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eec5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610710565b505050565b6007805462ff0000191662010000179055333014610f6c57600754610100900460ff1680610f2957506000546001600160a01b031633145b610f6c5760405162461bcd60e51b81526020600482015260146024820152731b585b9d585b081cddd85c08191a5cd8589b195960621b6044820152606401610710565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610fa157610fa16124a2565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610fd257610fd26124a2565b6001600160a01b03928316602091820292909201015260075460055460405163791ac94760e01b8152630100000090920483169263791ac94792611024928892889288929091169042906004016124b8565b600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50506007805462ff0000191690555050505050565b61106f61172f565b60078054821515610100810261ff001986151590811661ffff1990941693909317179092556040805191825260208201929092527fe170718435bb78d34d60ff2ad1c1fb4275ec0f1914bbcba82e7d67847b3279229101610b79565b6110d361172f565b306001600160a01b038316036110fb5760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805461ff001916610100861515908102919091179091558251938452908301527f160ff69a72bc70f3e792a86c87d27070e421562197f032d96bcab11c5010222e9101610b79565b61116761172f565b61117360016000611067565b6111866301312d0080630393870061079c565b610bb16103e8806000611477565b61119c61172f565b306001600160a01b038316036111c45760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb69101610b79565b428410156112705760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610710565b6000600161127c610a43565b6001600160a01b038a81166000818152600e602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906113be5750876001600160a01b0316816001600160a01b0316145b6113fb5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610710565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b61146c61172f565b610eec838383611c71565b61147f61172f565b6103e88311156114c35760405162461bcd60e51b815260206004820152600f60248201526e0c4eaf240d2e640e8dede40d0d2ced608b1b6044820152606401610710565b6103e88211156115085760405162461bcd60e51b815260206004820152601060248201526f0e6cad8d840d2e640e8dede40d0d2ced60831b6044820152606401610710565b6103e88111156115515760405162461bcd60e51b81526020600482015260146024820152730e8e4c2dce6cccae440d2e640e8dede40d0d2ced60631b6044820152606401610710565b600980546001600160801b038581166fffffffffffffffffffffffffffffffff1992831617909255600a805492851692909116919091179055600b81905560408051848152602081018490529081018290527fbf599f0b0b785a611d748a0dfabee402e180323c72c9ed973e5cc29d23c992d890606001610970565b6115d561172f565b6001600160a01b0381166115ff57604051631e4fbdf760e01b815260006004820152602401610710565b61160881611bdc565b50565b6001600160a01b03831661166d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610710565b6001600160a01b0382166116ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610710565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336117426000546001600160a01b031690565b6001600160a01b031614610b955760405163118cdaa760e01b8152336004820152602401610710565b600054600160a01b900460ff1615610b95576000546001600160a01b031632148015906117a357506000546001600160a01b03163314155b15610b955760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383166118255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610710565b6001600160a01b0382166118875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610710565b6001600160a01b038316600090815260036020526040902054818110156118ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610710565b6001600160a01b0380851660009081526003602090815260408083208686039055600d808352818420825160608082018552915460ff80821615158352610100808304821615158489015262010000928390048216151584880152988c1688529386529584902084519283018552548084161515835296870483161515948201949094529390940490931615159282019290925281511580156119a157508051155b6119db5760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610710565b60008083604001511580156119f257508260400151155b90508015611a2d5760208085015190840151611a1089898484611d7e565b9350808015611a1d575081155b15611a2a57611a2a611dbb565b50505b6001600160a01b038781166000818152600360209081526040918290208054878c03908101909155915182815291938c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a38215611ae65760405183815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526003602052604090208054840190555b505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611b239190612529565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611b9361176b565b6000805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c34611e4e565b6000805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001611bd2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611ccd91906125c8565b6000604051808303816000865af19150503d8060008114611d0a576040519150601f19603f3d011682016040523d82523d6000602084013e611d0f565b606091505b5091509150818015611d39575080511580611d39575080806020019051810190611d3991906125e4565b611d775760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610710565b5050505050565b60008215611d9757611d908585611e78565b9050611db3565b8115611da657611d9084611f6a565b611db08585611ff7565b90505b949350505050565b6006543060009081526003602052604090205481118015908190611de8575060075462010000900460ff16155b8015611df6575060075460ff165b15611e4a576040516359ac981d60e11b81526004810183905260006024820152309063b359303a90604401600060405180830381600087803b158015611e3b57600080fd5b505af1925050508015610eec57505b5050565b600054600160a01b900460ff16610b9557604051638dfc202b60e01b815260040160405180910390fd5b604080518082019091526009546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611efe5760405162461bcd60e51b815260206004820152601860248201527f7472616e736665722065786365656473206d61782062757900000000000000006044820152606401610710565b600c546001600160a01b03861660009081526003602052604090205485011115611db35760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b60408051808201909152600a546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611ff05760405162461bcd60e51b815260206004820152601960248201527f7472616e736665722065786365656473206d61782073656c6c000000000000006044820152606401610710565b9392505050565b600c546001600160a01b038316600090815260036020526040812054909190830111156120665760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b612710600b5483028161207b5761207b612601565b049392505050565b60005b8381101561209e578181015183820152602001612086565b50506000910152565b60208152600082518060208401526120c6816040850160208701612083565b601f01601f19169190910160400192915050565b6001600160a01b038116811461160857600080fd5b6000806040838503121561210257600080fd5b823561210d816120da565b946020939093013593505050565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135611ff0816120da565b60008060006060848603121561216657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561219257600080fd5b833561219d816120da565b925060208401356121ad816120da565b929592945050506040919091013590565b801515811461160857600080fd5b600080604083850312156121df57600080fd5b82356121ea816120da565b915060208301356121fa816121be565b809150509250929050565b6000806040838503121561221857600080fd5b50508035926020909101359150565b6000806040838503121561223a57600080fd5b82356121ea816121be565b600080600080600080600060e0888a03121561226057600080fd5b873561226b816120da565b9650602088013561227b816120da565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da816120da565b915060208301356121fa816120da565b600181811c908216806122fe57607f821691505b60208210810361231e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561237557816000190482111561235b5761235b612324565b8085161561236857918102915b93841c939080029061233f565b509250929050565b60008261238c575060016106c0565b81612399575060006106c0565b81600181146123af57600281146123b9576123d5565b60019150506106c0565b60ff8411156123ca576123ca612324565b50506001821b6106c0565b5060208310610133831016604e8410600b84101617156123f8575081810a6106c0565b612402838361233a565b806000190482111561241657612416612324565b029392505050565b6000611ff060ff84168361237d565b80820281158282048414176106c0576106c0612324565b808201808211156106c0576106c0612324565b60208082526014908201527318d85b9d0818da185b99d94818dbdb9d1c9858dd60621b604082015260600190565b60006020828403121561249757600080fd5b8151611ff0816120da565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125085784516001600160a01b0316835293830193918301916001016124e3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061254557607f831692505b6020808410820361256457634e487b7160e01b86526022600452602486fd5b818015612578576001811461258d576125ba565b60ff19861689528415158502890196506125ba565b60008a81526020902060005b868110156125b25781548b820152908501908301612599565b505084890196505b509498975050505050505050565b600082516125da818460208701612083565b9190910192915050565b6000602082840312156125f657600080fd5b8151611ff0816121be565b634e487b7160e01b600052601260045260246000fdfea26469706673582212202039dc0aa00140d747566f0c55dee0454c86fd9d2e68382f0621e6e281a613bc64736f6c63430008130033e4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000000f416c7068612047617264656e657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024147000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102695760003560e01c80638124f7ac11610151578063c9567bf9116100c3578063dd62ed3e11610087578063dd62ed3e146105a7578063e13e5c2d146105d2578063e9dae5ed146105e5578063f2fde38b146105f8578063f8b45b051461060b578063fdb78c0e1461061457600080fd5b8063c9567bf91461051d578063d01dd6d214610525578063d505accf14610538578063d53cd5661461054b578063d683804e1461058957600080fd5b8063a457c2d711610115578063a457c2d7146104ab578063a9059cbb146104be578063ae0295e2146104d1578063b359303a146104e4578063bfc2fc35146104f7578063c16dd4a41461050a57600080fd5b80638124f7ac146104645780638da5cb5b1461046d578063908bb2ae1461047e57806395d89b411461049157806398fbb9061461049957600080fd5b80633644e515116101ea57806370a08231116101ae57806370a08231146103ee578063715018a61461040e578063737ea06e146104165780637805862f1461042957806378e3079e146104315780637ecebe001461044457600080fd5b80633644e515146103a657806339509351146103ae578063590ffdce146103c15780635c975abb146103d45780636985a022146103e657600080fd5b80631694505e116102315780631694505e1461032c57806318160ddd1461035e578063189ae5f21461036657806323b872dd14610379578063313ce5671461038c57600080fd5b806301a6c43b1461026e57806306fdde031461028a578063095ea7b31461029f5780630f569dad146102c2578063143373a0146102d7575b600080fd5b61027760065481565b6040519081526020015b60405180910390f35b610292610621565b60405161028191906120a7565b6102b26102ad3660046120ef565b6106af565b6040519015158152602001610281565b6102d56102d036600461211b565b6106c6565b005b61030d6102e5366004612134565b600d6020526000908152604090205460ff808216916101008104821691620100009091041683565b6040805193151584529115156020840152151590820152606001610281565b60075461034690630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b61027761077e565b6102d5610374366004612151565b61079c565b6102b261038736600461217d565b61097d565b610394601281565b60405160ff9091168152602001610281565b610277610a43565b6102b26103bc3660046120ef565b610a9e565b6102d56103cf3660046121cc565b610ae7565b600054600160a01b900460ff166102b2565b6102d5610b85565b6102776103fc366004612134565b60036020526000908152604090205481565b6102d5610b97565b600554610346906001600160a01b031681565b6102d5610ba9565b6102d561043f366004612134565b610bb9565b610277610452366004612134565b600e6020526000908152604090205481565b610277600b5481565b6000546001600160a01b0316610346565b6102d561048c366004612134565b610c0f565b610292610d97565b6007546102b290610100900460ff1681565b6102b26104b93660046120ef565b610da4565b6102b26104cc3660046120ef565b610e36565b6102d56104df3660046120ef565b610e4b565b6102d56104f2366004612205565b610ef1565b6102d5610505366004612227565b611067565b6102d56105183660046121cc565b6110cb565b6102d561115f565b6102d56105333660046121cc565b611194565b6102d5610546366004612245565b611220565b600954610569906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610281565b600a54610569906001600160801b0380821691600160801b90041682565b6102776105b53660046122bc565b600460209081526000928352604080842090915290825290205481565b6102d56105e036600461217d565b611464565b6102d56105f3366004612151565b611477565b6102d5610606366004612134565b6115cd565b610277600c5481565b6007546102b29060ff1681565b6001805461062e906122ea565b80601f016020809104026020016040519081016040528092919081815260200182805461065a906122ea565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081565b60006106bc33848461160b565b5060015b92915050565b6106ce61172f565b600081116107195760405162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b60448201526064015b60405180910390fd5b6107256012600a61241e565b61072f908261242d565b6006557f4e3e41dc675aea3fcba9c02c7825641a2888e42a4b888399511f5276ca84b81861075f6012600a61241e565b610769908361242d565b6040519081526020015b60405180910390a150565b61078a6012600a61241e565b610799906401dcd6500061242d565b81565b6107a461172f565b6301312d008310156107e95760405162461bcd60e51b815260206004820152600e60248201526d62757920697320746f6f206c6f7760901b6044820152606401610710565b6301312d0082101561082f5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20697320746f6f206c6f7760881b6044820152606401610710565b6301312d008110156108775760405162461bcd60e51b815260206004820152601160248201527077616c6c657420697320746f6f206c6f7760781b6044820152606401610710565b6108836012600a61241e565b61088d908461242d565b600980546001600160801b03928316600160801b0292169190911790556108b66012600a61241e565b6108c0908361242d565b600a80546001600160801b03928316600160801b0292169190911781556108e99060129061241e565b6108f3908261242d565b600c557faa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b556109236012600a61241e565b61092d908561242d565b6109396012600a61241e565b610943908561242d565b61094f6012600a61241e565b610959908561242d565b604080519384526020840192909252908201526060015b60405180910390a1505050565b600061098761176b565b6001600160a01b03841660009081526004602090815260408083203384529091529020546000198114610a2d5782811015610a045760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610710565b6001600160a01b0385166000908152600460209081526040808320338452909152902083820390555b610a388585856117c1565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610a7957610a74611af1565b905090565b507f6d15047ff1fd1818681becc886f55fb2a9e2f6691f605534eddd8cf7d3741b5c90565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909190610add9082908690610ad8908790612444565b61160b565b5060019392505050565b610aef61172f565b306001600160a01b03831603610b175760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805462ff0000191662010000861515908102919091179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad91015b60405180910390a15050565b610b8d61172f565b610b95611b8b565b565b610b9f61172f565b610b956000611bdc565b610bb161172f565b610b95611c2c565b610bc161172f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fcb5639215577b3eba6150c2a74d8de8ea5885c176e29e2e66a7551cc15b7a7cf90602001610773565b610c1761172f565b6007546001600160a01b03630100000090910481169082168103610c875760405162461bcd60e51b815260206004820152602160248201527f63616e277420736574207468652073616d6520726f75746572206164647265736044820152607360f81b6064820152608401610710565b81600760036101000a8154816001600160a01b0302191690836001600160a01b03160217905550600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612485565b600880546001600160a01b0319166001600160a01b0392909216919091179055610d52308360001961160b565b610d5e3082600061160b565b6040516001600160a01b03831681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c90602001610b79565b6002805461062e906122ea565b3360008181526004602090815260408083206001600160a01b038716845290915281205490919083811015610e295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610710565b610a38828686840361160b565b6000610e4061176b565b6106bc3384846117c1565b610e5361172f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eec5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610710565b505050565b6007805462ff0000191662010000179055333014610f6c57600754610100900460ff1680610f2957506000546001600160a01b031633145b610f6c5760405162461bcd60e51b81526020600482015260146024820152731b585b9d585b081cddd85c08191a5cd8589b195960621b6044820152606401610710565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610fa157610fa16124a2565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610fd257610fd26124a2565b6001600160a01b03928316602091820292909201015260075460055460405163791ac94760e01b8152630100000090920483169263791ac94792611024928892889288929091169042906004016124b8565b600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50506007805462ff0000191690555050505050565b61106f61172f565b60078054821515610100810261ff001986151590811661ffff1990941693909317179092556040805191825260208201929092527fe170718435bb78d34d60ff2ad1c1fb4275ec0f1914bbcba82e7d67847b3279229101610b79565b6110d361172f565b306001600160a01b038316036110fb5760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805461ff001916610100861515908102919091179091558251938452908301527f160ff69a72bc70f3e792a86c87d27070e421562197f032d96bcab11c5010222e9101610b79565b61116761172f565b61117360016000611067565b6111866301312d0080630393870061079c565b610bb16103e8806000611477565b61119c61172f565b306001600160a01b038316036111c45760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb69101610b79565b428410156112705760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610710565b6000600161127c610a43565b6001600160a01b038a81166000818152600e602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906113be5750876001600160a01b0316816001600160a01b0316145b6113fb5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610710565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b61146c61172f565b610eec838383611c71565b61147f61172f565b6103e88311156114c35760405162461bcd60e51b815260206004820152600f60248201526e0c4eaf240d2e640e8dede40d0d2ced608b1b6044820152606401610710565b6103e88211156115085760405162461bcd60e51b815260206004820152601060248201526f0e6cad8d840d2e640e8dede40d0d2ced60831b6044820152606401610710565b6103e88111156115515760405162461bcd60e51b81526020600482015260146024820152730e8e4c2dce6cccae440d2e640e8dede40d0d2ced60631b6044820152606401610710565b600980546001600160801b038581166fffffffffffffffffffffffffffffffff1992831617909255600a805492851692909116919091179055600b81905560408051848152602081018490529081018290527fbf599f0b0b785a611d748a0dfabee402e180323c72c9ed973e5cc29d23c992d890606001610970565b6115d561172f565b6001600160a01b0381166115ff57604051631e4fbdf760e01b815260006004820152602401610710565b61160881611bdc565b50565b6001600160a01b03831661166d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610710565b6001600160a01b0382166116ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610710565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336117426000546001600160a01b031690565b6001600160a01b031614610b955760405163118cdaa760e01b8152336004820152602401610710565b600054600160a01b900460ff1615610b95576000546001600160a01b031632148015906117a357506000546001600160a01b03163314155b15610b955760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383166118255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610710565b6001600160a01b0382166118875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610710565b6001600160a01b038316600090815260036020526040902054818110156118ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610710565b6001600160a01b0380851660009081526003602090815260408083208686039055600d808352818420825160608082018552915460ff80821615158352610100808304821615158489015262010000928390048216151584880152988c1688529386529584902084519283018552548084161515835296870483161515948201949094529390940490931615159282019290925281511580156119a157508051155b6119db5760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610710565b60008083604001511580156119f257508260400151155b90508015611a2d5760208085015190840151611a1089898484611d7e565b9350808015611a1d575081155b15611a2a57611a2a611dbb565b50505b6001600160a01b038781166000818152600360209081526040918290208054878c03908101909155915182815291938c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a38215611ae65760405183815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526003602052604090208054840190555b505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611b239190612529565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611b9361176b565b6000805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c34611e4e565b6000805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001611bd2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611ccd91906125c8565b6000604051808303816000865af19150503d8060008114611d0a576040519150601f19603f3d011682016040523d82523d6000602084013e611d0f565b606091505b5091509150818015611d39575080511580611d39575080806020019051810190611d3991906125e4565b611d775760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610710565b5050505050565b60008215611d9757611d908585611e78565b9050611db3565b8115611da657611d9084611f6a565b611db08585611ff7565b90505b949350505050565b6006543060009081526003602052604090205481118015908190611de8575060075462010000900460ff16155b8015611df6575060075460ff165b15611e4a576040516359ac981d60e11b81526004810183905260006024820152309063b359303a90604401600060405180830381600087803b158015611e3b57600080fd5b505af1925050508015610eec57505b5050565b600054600160a01b900460ff16610b9557604051638dfc202b60e01b815260040160405180910390fd5b604080518082019091526009546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611efe5760405162461bcd60e51b815260206004820152601860248201527f7472616e736665722065786365656473206d61782062757900000000000000006044820152606401610710565b600c546001600160a01b03861660009081526003602052604090205485011115611db35760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b60408051808201909152600a546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611ff05760405162461bcd60e51b815260206004820152601960248201527f7472616e736665722065786365656473206d61782073656c6c000000000000006044820152606401610710565b9392505050565b600c546001600160a01b038316600090815260036020526040812054909190830111156120665760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b612710600b5483028161207b5761207b612601565b049392505050565b60005b8381101561209e578181015183820152602001612086565b50506000910152565b60208152600082518060208401526120c6816040850160208701612083565b601f01601f19169190910160400192915050565b6001600160a01b038116811461160857600080fd5b6000806040838503121561210257600080fd5b823561210d816120da565b946020939093013593505050565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135611ff0816120da565b60008060006060848603121561216657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561219257600080fd5b833561219d816120da565b925060208401356121ad816120da565b929592945050506040919091013590565b801515811461160857600080fd5b600080604083850312156121df57600080fd5b82356121ea816120da565b915060208301356121fa816121be565b809150509250929050565b6000806040838503121561221857600080fd5b50508035926020909101359150565b6000806040838503121561223a57600080fd5b82356121ea816121be565b600080600080600080600060e0888a03121561226057600080fd5b873561226b816120da565b9650602088013561227b816120da565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da816120da565b915060208301356121fa816120da565b600181811c908216806122fe57607f821691505b60208210810361231e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561237557816000190482111561235b5761235b612324565b8085161561236857918102915b93841c939080029061233f565b509250929050565b60008261238c575060016106c0565b81612399575060006106c0565b81600181146123af57600281146123b9576123d5565b60019150506106c0565b60ff8411156123ca576123ca612324565b50506001821b6106c0565b5060208310610133831016604e8410600b84101617156123f8575081810a6106c0565b612402838361233a565b806000190482111561241657612416612324565b029392505050565b6000611ff060ff84168361237d565b80820281158282048414176106c0576106c0612324565b808201808211156106c0576106c0612324565b60208082526014908201527318d85b9d0818da185b99d94818dbdb9d1c9858dd60621b604082015260600190565b60006020828403121561249757600080fd5b8151611ff0816120da565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125085784516001600160a01b0316835293830193918301916001016124e3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061254557607f831692505b6020808410820361256457634e487b7160e01b86526022600452602486fd5b818015612578576001811461258d576125ba565b60ff19861689528415158502890196506125ba565b60008a81526020902060005b868110156125b25781548b820152908501908301612599565b505084890196505b509498975050505050505050565b600082516125da818460208701612083565b9190910192915050565b6000602082840312156125f657600080fd5b8151611ff0816121be565b634e487b7160e01b600052601260045260246000fdfea26469706673582212202039dc0aa00140d747566f0c55dee0454c86fd9d2e68382f0621e6e281a613bc64736f6c63430008130033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000000f416c7068612047617264656e657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024147000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Alpha Gardeners
Arg [1] : _symbol (string): AG
Arg [2] : _taxRecipient (address): 0xFE73DBa49b8531C639DCDdeE764dcaf49D91066B
Arg [3] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 416c7068612047617264656e6572730000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4147000000000000000000000000000000000000000000000000000000000000


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

OVERVIEW

The all-in-one alpha discord & telegram with a complete toolkit for successful shitcoins and NFTs trading

Loading...
Loading
[ Download: CSV Export  ]

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