ETH Price: $3,334.66 (-0.65%)

Token

Polymarket Bot (POLYBOT)
 

Overview

Max Total Supply

1,000,000,000 POLYBOT

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,921,807.488796976091824402 POLYBOT

Value
$0.00
0x79ea03605Ca2Fa1d2adEEceDc72245D107A1637c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
POLYBOT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-08
*/

/*
POLYBOT - The Polymarket Bot
Your unfair advantage on Polymarket through predictions, signals, auto trading, and more.

Website: https://polybot.pro
Twitter: https://x.com/polybotpro
Telegram: https://t.me/propolybot
Docs: https://docs.polybot.pro

*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

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

    /**
     * @dev 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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract POLYBOT is Context, IERC20, Ownable {
    using Address for address;
    //Mapping section for better tracking.
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    //Loging and Event Information for better troubleshooting.
    event Log(string, uint256);
    event AuditLog(string, address);
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SwapTokensForETH(uint256 amountIn, address[] path);
    //Supply Definition.
    uint256 private _tTotal = 1_000_000_000 ether;
    uint256 private _tFeeTotal;
    //Token Definition.
    string public constant name = "Polymarket Bot";
    string public constant symbol = "POLYBOT";
    uint8 public constant decimals = 18;
    //Definition of Wallets for Marketing or team.
    address payable public marketingWallet;
    address payable public revenueWallet;

    //Dead Wallet for SAFU Contract
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;

    //Taxes Definition.
    uint public buyFee = 30;
    uint256 public sellFee = 30;

    uint public revenueFee = 1;
    uint public marketingFee = 3;

    uint256 public marketingTokensCollected = 0;

    uint256 public totalMarketingTokensCollected = 0;

    uint256 public minimumTokensBeforeSwap = 10_000 ether;

    uint256 public maxWallet = 15_000_000 ether;
    uint256 public maximumTokenSwap = 15_000_000 ether;

    //Oracle Price Update, Manual Process.
    uint256 public swapOutput = 0;
    //Router and Pair Configuration.
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address private immutable WETH;
    //Tracking of Automatic Swap vs Manual Swap.
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _tOwned[_msgSender()] = _tTotal;
        //Ethereum
        address currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        //Base
        //address currentRouter = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
        //Sepolia sushiswap
        //address currentRouter = 0xeaBcE3E74EF41FB40024a21Cc2ee2F5dDc615791;
    
        marketingWallet = payable(owner());
        revenueWallet = payable(owner());

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), WETH);
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    //Readable Functions.
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

    //ERC 20 Standard Transfer Functions
    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    //ERC 20 Standard Allowance Function
    function allowance(
        address _owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[_owner][spender];
    }

    //ERC 20 Standard Approve Function
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    //ERC 20 Standard Transfer From
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        uint currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

    //ERC 20 Standard increase Allowance
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    //ERC 20 Standard decrease Allowance
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    function removeLimits() external onlyOwner {
        maxWallet = _tTotal;
        maximumTokenSwap = _tTotal;
    }

    function setFees(uint256 newBuyFee, uint256 newSellFee) external onlyOwner {
        require(newBuyFee <= buyFee
                && newSellFee <= sellFee,
                "Cannot increase taxes");
        buyFee = newBuyFee;
        sellFee = newSellFee;
    }

    //Approve Function
    function _approve(address _owner, address spender, uint256 amount) private {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[_owner][spender] = amount;
        emit Approval(_owner, spender, amount);
    }

    //Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _tOwned[from] >= amount,
            "ERC20: transfer amount exceeds balance"
        );

        //Adding logic for automatic swap.
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;
        uint fee = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify();
        }
        if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            require(
                amount <= maxWallet,
                "Maximum wallet exceeded"
            );
            fee = (sellFee * amount) / 100;
        }
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            require(
                amount <= maxWallet && balanceOf(to) + amount <= maxWallet,
                "Maximum wallet exceeded"
            );
            fee = (buyFee * amount) / 100;
        }
        amount -= fee;
        if (fee > 0) {
            _tokenTransfer(from, address(this), fee);
            marketingTokensCollected += fee;
            totalMarketingTokensCollected += fee;
        }
        _tokenTransfer(from, to, amount);
    }

    function swapAndLiquify() public lockTheSwap {
        uint256 totalTokens = balanceOf(address(this));
        if(totalTokens >= maximumTokenSwap) {
            totalTokens = maximumTokenSwap;
        }
        swapTokensForEth(totalTokens);
        uint ethBalance = address(this).balance;
        uint totalFees = revenueFee + marketingFee;
        if (totalFees == 0) totalFees = 1;
        uint revenueAmount = (ethBalance * revenueFee) / totalFees;
        ethBalance -= revenueAmount;
        transferToAddressETH(revenueWallet, revenueAmount);
        transferToAddressETH(marketingWallet, ethBalance);

        marketingTokensCollected = 0;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    //ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        _tOwned[sender] -= amount;
        _tOwned[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //exclude wallets from fees, this is needed for launch or other contracts.
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit AuditLog(
            "We have excluded the following walled in fees:",
            account
        );
    }

    //include wallet back in fees.
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit AuditLog(
            "We have including the following walled in fees:",
            account
        );
    }

    //Automatic Swap Configuration.
    function setTokensToSwap(
        uint256 _minimumTokensBeforeSwap
    ) external onlyOwner {
        require(
            _minimumTokensBeforeSwap >= 100 ether,
            "You need to enter more than 100 tokens."
        );
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
        emit Log(
            "We have updated minimunTokensBeforeSwap to:",
            minimumTokensBeforeSwap
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //set a new marketing wallet.
    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "setMarketingWallet: ZERO");
        marketingWallet = payable(_marketingWallet);
        emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
    }

    //set a new team wallet.
    function setRevenueWallet(address _revenueWallet) external onlyOwner {
        require(_revenueWallet != address(0), "setRevenueWallet: ZERO");
        revenueWallet = payable(_revenueWallet);
        emit AuditLog("We have Updated the RarketingWallet:", revenueWallet);
    }



    function transferToAddressETH(
        address payable recipient,
        uint256 amount
    ) private {
        if (amount == 0) return;
        (bool succ, ) = recipient.call{value: amount}("");
        require(succ, "Transfer failed.");
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    /////---fallback--////
    //This cannot be removed as is a fallback to the swapAndLiquify
    event SwapETHForTokens(uint256 amountIn, address[] path);

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            swapOutput, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp + 300
        );
        emit SwapETHForTokens(amount, path);
    }

    // Withdraw ETH that's potentially stuck in the Contract
    function recoverETHfromContract() external onlyOwner {
        uint ethBalance = address(this).balance;
        (bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
        require(succ, "Transfer failed");
        emit AuditLog(
            "We have recover the stock eth from contract.",
            marketingWallet
        );
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 _amount
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
        bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
        require(succ, "Transfer failed");
        emit Log("We have recovered tokens from contract:", _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","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":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTokenSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_revenueWallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526b033b2e3c9fd0803ce8000000600455601e60088190556009556001600a556003600b556000600c819055600d81905569021e19e0c9bab2400000600e556a0c685fa11e01ec6f000000600f8190556010556011556012805461ff0019166101001790553480156200007557600080fd5b5062000081336200031b565b6004543360009081526001602052604081209190915554737a250d5630b4cf539739df2c5dacb4c659f2488d906001600160a01b0316600680546001600160a01b0319166001600160a01b0392831617905560005416600780546001600160a01b0319166001600160a01b03928316179055604080516315ab88c960e31b81529051839283169163ad5c46489160048083019260209291908290030181865afa15801562000133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015991906200036b565b6001600160a01b031660c0816001600160a01b031681525050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d791906200036b565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f91906200036b565b6001600160a01b0390811660a05281166080526001600360006200027b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526003909252902080549091166001179055620002c33390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200030b91815260200190565b60405180910390a350506200039d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200037e57600080fd5b81516001600160a01b03811681146200039657600080fd5b9392505050565b60805160a05160c051611ec3620003f0600039600061191c0152600081816104c4015281816115ef0152818161164f01526117170152600081816103200152818161197401526119b00152611ec36000f3fe6080604052600436106102605760003560e01c80635eec497a11610144578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e1461073d578063e6be4a7214610783578063ea2f0b37146107a3578063f2fde38b146107c3578063f8b45b05146107e3578063fb235f34146107f957600080fd5b8063a9059cbb146106bd578063b29ad50a146106dd578063c49b9a80146106f2578063ce831ed514610712578063d2d7ad831461072757600080fd5b8063751039fc11610108578063751039fc1461060157806375f0a8741461061657806385141a77146106365780638da5cb5b1461064c57806395d89b411461066a578063a457c2d71461069d57600080fd5b80635eec497a146105745780636b67c4df1461058a5780636ca60bc6146105a057806370a08231146105b6578063715018a6146105ec57600080fd5b806339509351116101dd57806347062402116101a1578063470624021461049c57806349bd5a5e146104b25780634a74bb02146104e65780635342acb4146105055780635d098b381461053e5780635eaa82471461055e57600080fd5b806339509351146104065780634076350314610426578063437823ec1461043c578063444784251461045c578063461d94761461047c57600080fd5b8063220f669611610224578063220f66961461037957806323b872dd146103935780632b14ca56146103b3578063313ce567146103c957806336e4ec64146103f057600080fd5b806306fdde031461026c578063095ea7b3146102bc5780630b78f9c0146102ec5780631694505e1461030e57806318160ddd1461035a57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a66040518060400160405280600e81526020016d141bdb1e5b585c9ad95d08109bdd60921b81525081565b6040516102b39190611b99565b60405180910390f35b3480156102c857600080fd5b506102dc6102d7366004611c03565b610819565b60405190151581526020016102b3565b3480156102f857600080fd5b5061030c610307366004611c2d565b610830565b005b34801561031a57600080fd5b506103427f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b3565b34801561036657600080fd5b506004545b6040519081526020016102b3565b34801561038557600080fd5b506012546102dc9060ff1681565b34801561039f57600080fd5b506102dc6103ae366004611c4f565b6108a0565b3480156103bf57600080fd5b5061036b60095481565b3480156103d557600080fd5b506103de601281565b60405160ff90911681526020016102b3565b3480156103fc57600080fd5b5061036b600a5481565b34801561041257600080fd5b506102dc610421366004611c03565b61094f565b34801561043257600080fd5b5061036b600d5481565b34801561044857600080fd5b5061030c610457366004611c8b565b610986565b34801561046857600080fd5b50600754610342906001600160a01b031681565b34801561048857600080fd5b5061030c610497366004611cad565b610a34565b3480156104a857600080fd5b5061036b60085481565b3480156104be57600080fd5b506103427f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f257600080fd5b506012546102dc90610100900460ff1681565b34801561051157600080fd5b506102dc610520366004611c8b565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561054a57600080fd5b5061030c610559366004611c8b565b610b25565b34801561056a57600080fd5b5061036b60115481565b34801561058057600080fd5b5061036b60105481565b34801561059657600080fd5b5061036b600b5481565b3480156105ac57600080fd5b5061036b600c5481565b3480156105c257600080fd5b5061036b6105d1366004611c8b565b6001600160a01b031660009081526001602052604090205490565b3480156105f857600080fd5b5061030c610c04565b34801561060d57600080fd5b5061030c610c18565b34801561062257600080fd5b50600654610342906001600160a01b031681565b34801561064257600080fd5b5061034261dead81565b34801561065857600080fd5b506000546001600160a01b0316610342565b34801561067657600080fd5b506102a6604051806040016040528060078152602001661413d3165093d560ca1b81525081565b3480156106a957600080fd5b506102dc6106b8366004611c03565b610c2d565b3480156106c957600080fd5b506102dc6106d8366004611c03565b610c64565b3480156106e957600080fd5b5061030c610c71565b3480156106fe57600080fd5b5061030c61070d366004611cd4565b610d46565b34801561071e57600080fd5b5061030c610ded565b34801561073357600080fd5b5061036b600e5481565b34801561074957600080fd5b5061036b610758366004611cf1565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561078f57600080fd5b5061030c61079e366004611c03565b610f0c565b3480156107af57600080fd5b5061030c6107be366004611c8b565b6110c0565b3480156107cf57600080fd5b5061030c6107de366004611c8b565b611156565b3480156107ef57600080fd5b5061036b600f5481565b34801561080557600080fd5b5061030c610814366004611c8b565b6111cf565b60006108263384846112a7565b5060015b92915050565b6108386113cc565b600854821115801561084c57506009548111155b6108955760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420696e63726561736520746178657360581b60448201526064015b60405180910390fd5b600891909155600955565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156109255760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161088c565b610930858585611426565b610944853361093f8685611d3a565b6112a7565b506001949350505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061093f908690611d4d565b61098e6113cc565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611e6e83398151915290610a299083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610a3c6113cc565b68056bc75e2d63100000811015610aa55760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b606482015260840161088c565b600e81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610a29565b610b2d6113cc565b6001600160a01b038116610b835760405162461bcd60e51b815260206004820152601860248201527f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161088c565b600680546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611e6e8339815191529060a001610a29565b610c0c6113cc565b610c166000611875565b565b610c206113cc565b600454600f819055601055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061093f908690611d3a565b6000610826338484611426565b6012805460ff191660011790556000610c9f306001600160a01b031660009081526001602052604090205490565b90506010548110610caf57506010545b610cb8816118c5565b600b54600a544791600091610ccd9190611d4d565b905080600003610cdb575060015b600081600a5484610cec9190611d60565b610cf69190611d77565b9050610d028184611d3a565b600754909350610d1b906001600160a01b031682611a51565b600654610d31906001600160a01b031684611a51565b50506000600c5550506012805460ff19169055565b610d4e6113cc565b801515601260019054906101000a900460ff16151503610da45760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161088c565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610a2990831515815260200190565b610df56113cc565b60065460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610e46576040519150601f19603f3d011682016040523d82523d6000602084013e610e4b565b606091505b5050905080610e8e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161088c565b60065460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611e6e8339815191529060a0015b60405180910390a15050565b610f146113cc565b306001600160a01b03831603610f8b5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161088c565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610fe0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110049190611d99565b9050806110455760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161088c565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b6110c86113cc565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611e6e8339815191529060a001610a29565b61115e6113cc565b6001600160a01b0381166111c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088c565b6111cc81611875565b50565b6111d76113cc565b6001600160a01b0381166112265760405162461bcd60e51b8152602060048201526016602482015275736574526576656e756557616c6c65743a205a45524f60501b604482015260640161088c565b600780546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865205261726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611e6e8339815191529060a001610a29565b6001600160a01b0383166113095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161088c565b6001600160a01b03821661136a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161088c565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088c565b6001600160a01b03831661148a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161088c565b6001600160a01b0382166114ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161088c565b6000811161154e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161088c565b6001600160a01b0383166000908152600160205260409020548111156115c55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161088c565b30600090815260016020526040812054600e546012549192908310159160ff1615801561162457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b801561162d5750815b80156116405750601254610100900460ff165b1561164d5761164d610c71565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161480156116a757506001600160a01b03861660009081526003602052604090205460ff16155b1561171557600f548411156116f85760405162461bcd60e51b815260206004820152601760248201527613585e1a5b5d5b481dd85b1b195d08195e18d959591959604a1b604482015260640161088c565b6064846009546117089190611d60565b6117129190611d77565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614801561176f57506001600160a01b03851660009081526003602052604090205460ff16155b1561181457600f5484111580156117b15750600f54846117a4876001600160a01b031660009081526001602052604090205490565b6117ae9190611d4d565b11155b6117f75760405162461bcd60e51b815260206004820152601760248201527613585e1a5b5d5b481dd85b1b195d08195e18d959591959604a1b604482015260640161088c565b6064846008546118079190611d60565b6118119190611d77565b90505b61181e8185611d3a565b9350801561186257611831863083611af8565b80600c60008282546118439190611d4d565b9250508190555080600d600082825461185c9190611d4d565b90915550505b61186d868686611af8565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118fa576118fa611db6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061194e5761194e611db6565b60200260200101906001600160a01b031690816001600160a01b031681525050611999307f0000000000000000000000000000000000000000000000000000000000000000846112a7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906119ee908590600090869030904290600401611e10565b600060405180830381600087803b158015611a0857600080fd5b505af1158015611a1c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610f00929190611e4c565b80600003611a5d575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611aaa576040519150601f19603f3d011682016040523d82523d6000602084013e611aaf565b606091505b5050905080611af35760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161088c565b505050565b6001600160a01b03831660009081526001602052604081208054839290611b20908490611d3a565b90915550506001600160a01b03821660009081526001602052604081208054839290611b4d908490611d4d565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113bf91815260200190565b600060208083528351808285015260005b81811015611bc657858101830151858201604001528201611baa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bfe57600080fd5b919050565b60008060408385031215611c1657600080fd5b611c1f83611be7565b946020939093013593505050565b60008060408385031215611c4057600080fd5b50508035926020909101359150565b600080600060608486031215611c6457600080fd5b611c6d84611be7565b9250611c7b60208501611be7565b9150604084013590509250925092565b600060208284031215611c9d57600080fd5b611ca682611be7565b9392505050565b600060208284031215611cbf57600080fd5b5035919050565b80151581146111cc57600080fd5b600060208284031215611ce657600080fd5b8135611ca681611cc6565b60008060408385031215611d0457600080fd5b611d0d83611be7565b9150611d1b60208401611be7565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082a5761082a611d24565b8082018082111561082a5761082a611d24565b808202811582820484141761082a5761082a611d24565b600082611d9457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611dab57600080fd5b8151611ca681611cc6565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e055781516001600160a01b031687529582019590820190600101611de0565b509495945050505050565b85815284602082015260a060408201526000611e2f60a0830186611dcc565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e656040830184611dcc565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220e63210246c9649e676a60b406fbec6dee30f2770388c1c5fe6ba937a557ef80264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80635eec497a11610144578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e1461073d578063e6be4a7214610783578063ea2f0b37146107a3578063f2fde38b146107c3578063f8b45b05146107e3578063fb235f34146107f957600080fd5b8063a9059cbb146106bd578063b29ad50a146106dd578063c49b9a80146106f2578063ce831ed514610712578063d2d7ad831461072757600080fd5b8063751039fc11610108578063751039fc1461060157806375f0a8741461061657806385141a77146106365780638da5cb5b1461064c57806395d89b411461066a578063a457c2d71461069d57600080fd5b80635eec497a146105745780636b67c4df1461058a5780636ca60bc6146105a057806370a08231146105b6578063715018a6146105ec57600080fd5b806339509351116101dd57806347062402116101a1578063470624021461049c57806349bd5a5e146104b25780634a74bb02146104e65780635342acb4146105055780635d098b381461053e5780635eaa82471461055e57600080fd5b806339509351146104065780634076350314610426578063437823ec1461043c578063444784251461045c578063461d94761461047c57600080fd5b8063220f669611610224578063220f66961461037957806323b872dd146103935780632b14ca56146103b3578063313ce567146103c957806336e4ec64146103f057600080fd5b806306fdde031461026c578063095ea7b3146102bc5780630b78f9c0146102ec5780631694505e1461030e57806318160ddd1461035a57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102a66040518060400160405280600e81526020016d141bdb1e5b585c9ad95d08109bdd60921b81525081565b6040516102b39190611b99565b60405180910390f35b3480156102c857600080fd5b506102dc6102d7366004611c03565b610819565b60405190151581526020016102b3565b3480156102f857600080fd5b5061030c610307366004611c2d565b610830565b005b34801561031a57600080fd5b506103427f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102b3565b34801561036657600080fd5b506004545b6040519081526020016102b3565b34801561038557600080fd5b506012546102dc9060ff1681565b34801561039f57600080fd5b506102dc6103ae366004611c4f565b6108a0565b3480156103bf57600080fd5b5061036b60095481565b3480156103d557600080fd5b506103de601281565b60405160ff90911681526020016102b3565b3480156103fc57600080fd5b5061036b600a5481565b34801561041257600080fd5b506102dc610421366004611c03565b61094f565b34801561043257600080fd5b5061036b600d5481565b34801561044857600080fd5b5061030c610457366004611c8b565b610986565b34801561046857600080fd5b50600754610342906001600160a01b031681565b34801561048857600080fd5b5061030c610497366004611cad565b610a34565b3480156104a857600080fd5b5061036b60085481565b3480156104be57600080fd5b506103427f000000000000000000000000eda54f3c21850b4722d4619a3f8e5c576e0d9ea581565b3480156104f257600080fd5b506012546102dc90610100900460ff1681565b34801561051157600080fd5b506102dc610520366004611c8b565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561054a57600080fd5b5061030c610559366004611c8b565b610b25565b34801561056a57600080fd5b5061036b60115481565b34801561058057600080fd5b5061036b60105481565b34801561059657600080fd5b5061036b600b5481565b3480156105ac57600080fd5b5061036b600c5481565b3480156105c257600080fd5b5061036b6105d1366004611c8b565b6001600160a01b031660009081526001602052604090205490565b3480156105f857600080fd5b5061030c610c04565b34801561060d57600080fd5b5061030c610c18565b34801561062257600080fd5b50600654610342906001600160a01b031681565b34801561064257600080fd5b5061034261dead81565b34801561065857600080fd5b506000546001600160a01b0316610342565b34801561067657600080fd5b506102a6604051806040016040528060078152602001661413d3165093d560ca1b81525081565b3480156106a957600080fd5b506102dc6106b8366004611c03565b610c2d565b3480156106c957600080fd5b506102dc6106d8366004611c03565b610c64565b3480156106e957600080fd5b5061030c610c71565b3480156106fe57600080fd5b5061030c61070d366004611cd4565b610d46565b34801561071e57600080fd5b5061030c610ded565b34801561073357600080fd5b5061036b600e5481565b34801561074957600080fd5b5061036b610758366004611cf1565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561078f57600080fd5b5061030c61079e366004611c03565b610f0c565b3480156107af57600080fd5b5061030c6107be366004611c8b565b6110c0565b3480156107cf57600080fd5b5061030c6107de366004611c8b565b611156565b3480156107ef57600080fd5b5061036b600f5481565b34801561080557600080fd5b5061030c610814366004611c8b565b6111cf565b60006108263384846112a7565b5060015b92915050565b6108386113cc565b600854821115801561084c57506009548111155b6108955760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420696e63726561736520746178657360581b60448201526064015b60405180910390fd5b600891909155600955565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156109255760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161088c565b610930858585611426565b610944853361093f8685611d3a565b6112a7565b506001949350505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061093f908690611d4d565b61098e6113cc565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611e6e83398151915290610a299083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b610a3c6113cc565b68056bc75e2d63100000811015610aa55760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b606482015260840161088c565b600e81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a001610a29565b610b2d6113cc565b6001600160a01b038116610b835760405162461bcd60e51b815260206004820152601860248201527f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161088c565b600680546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611e6e8339815191529060a001610a29565b610c0c6113cc565b610c166000611875565b565b610c206113cc565b600454600f819055601055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061093f908690611d3a565b6000610826338484611426565b6012805460ff191660011790556000610c9f306001600160a01b031660009081526001602052604090205490565b90506010548110610caf57506010545b610cb8816118c5565b600b54600a544791600091610ccd9190611d4d565b905080600003610cdb575060015b600081600a5484610cec9190611d60565b610cf69190611d77565b9050610d028184611d3a565b600754909350610d1b906001600160a01b031682611a51565b600654610d31906001600160a01b031684611a51565b50506000600c5550506012805460ff19169055565b610d4e6113cc565b801515601260019054906101000a900460ff16151503610da45760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161088c565b601280548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610a2990831515815260200190565b610df56113cc565b60065460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610e46576040519150601f19603f3d011682016040523d82523d6000602084013e610e4b565b606091505b5050905080610e8e5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161088c565b60065460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611e6e8339815191529060a0015b60405180910390a15050565b610f146113cc565b306001600160a01b03831603610f8b5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161088c565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610fe0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110049190611d99565b9050806110455760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161088c565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b6110c86113cc565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611e6e8339815191529060a001610a29565b61115e6113cc565b6001600160a01b0381166111c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088c565b6111cc81611875565b50565b6111d76113cc565b6001600160a01b0381166112265760405162461bcd60e51b8152602060048201526016602482015275736574526576656e756557616c6c65743a205a45524f60501b604482015260640161088c565b600780546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865205261726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611e6e8339815191529060a001610a29565b6001600160a01b0383166113095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161088c565b6001600160a01b03821661136a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161088c565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088c565b6001600160a01b03831661148a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161088c565b6001600160a01b0382166114ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161088c565b6000811161154e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161088c565b6001600160a01b0383166000908152600160205260409020548111156115c55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161088c565b30600090815260016020526040812054600e546012549192908310159160ff1615801561162457507f000000000000000000000000eda54f3c21850b4722d4619a3f8e5c576e0d9ea56001600160a01b0316866001600160a01b031614155b801561162d5750815b80156116405750601254610100900460ff165b1561164d5761164d610c71565b7f000000000000000000000000eda54f3c21850b4722d4619a3f8e5c576e0d9ea56001600160a01b0316856001600160a01b03161480156116a757506001600160a01b03861660009081526003602052604090205460ff16155b1561171557600f548411156116f85760405162461bcd60e51b815260206004820152601760248201527613585e1a5b5d5b481dd85b1b195d08195e18d959591959604a1b604482015260640161088c565b6064846009546117089190611d60565b6117129190611d77565b90505b7f000000000000000000000000eda54f3c21850b4722d4619a3f8e5c576e0d9ea56001600160a01b0316866001600160a01b031614801561176f57506001600160a01b03851660009081526003602052604090205460ff16155b1561181457600f5484111580156117b15750600f54846117a4876001600160a01b031660009081526001602052604090205490565b6117ae9190611d4d565b11155b6117f75760405162461bcd60e51b815260206004820152601760248201527613585e1a5b5d5b481dd85b1b195d08195e18d959591959604a1b604482015260640161088c565b6064846008546118079190611d60565b6118119190611d77565b90505b61181e8185611d3a565b9350801561186257611831863083611af8565b80600c60008282546118439190611d4d565b9250508190555080600d600082825461185c9190611d4d565b90915550505b61186d868686611af8565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118fa576118fa611db6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061194e5761194e611db6565b60200260200101906001600160a01b031690816001600160a01b031681525050611999307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112a7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906119ee908590600090869030904290600401611e10565b600060405180830381600087803b158015611a0857600080fd5b505af1158015611a1c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610f00929190611e4c565b80600003611a5d575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611aaa576040519150601f19603f3d011682016040523d82523d6000602084013e611aaf565b606091505b5050905080611af35760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161088c565b505050565b6001600160a01b03831660009081526001602052604081208054839290611b20908490611d3a565b90915550506001600160a01b03821660009081526001602052604081208054839290611b4d908490611d4d565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113bf91815260200190565b600060208083528351808285015260005b81811015611bc657858101830151858201604001528201611baa565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bfe57600080fd5b919050565b60008060408385031215611c1657600080fd5b611c1f83611be7565b946020939093013593505050565b60008060408385031215611c4057600080fd5b50508035926020909101359150565b600080600060608486031215611c6457600080fd5b611c6d84611be7565b9250611c7b60208501611be7565b9150604084013590509250925092565b600060208284031215611c9d57600080fd5b611ca682611be7565b9392505050565b600060208284031215611cbf57600080fd5b5035919050565b80151581146111cc57600080fd5b600060208284031215611ce657600080fd5b8135611ca681611cc6565b60008060408385031215611d0457600080fd5b611d0d83611be7565b9150611d1b60208401611be7565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082a5761082a611d24565b8082018082111561082a5761082a611d24565b808202811582820484141761082a5761082a611d24565b600082611d9457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611dab57600080fd5b8151611ca681611cc6565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611e055781516001600160a01b031687529582019590820190600101611de0565b509495945050505050565b85815284602082015260a060408201526000611e2f60a0830186611dcc565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611e656040830184611dcc565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220e63210246c9649e676a60b406fbec6dee30f2770388c1c5fe6ba937a557ef80264736f6c63430008130033

Deployed Bytecode Sourcemap

23153:13881:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24045:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24045:46:0;;;;;;;;;;;;:::i;:::-;;;;;;;;27085:186;;;;;;;;;;-1:-1:-1;27085:186:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;27085:186:0;1004:187:1;28618:266:0;;;;;;;;;;-1:-1:-1;28618:266:0;;;;;:::i;:::-;;:::i;:::-;;25023:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1640:32:1;;;1622:51;;1610:2;1595:18;25023:51:0;1449:230:1;26355:95:0;;;;;;;;;;-1:-1:-1;26435:7:0;;26355:95;;;1830:25:1;;;1818:2;1803:18;26355:95:0;1684:177:1;25213:28:0;;;;;;;;;;-1:-1:-1;25213:28:0;;;;;;;;27316:478;;;;;;;;;;-1:-1:-1;27316:478:0;;;;;:::i;:::-;;:::i;24519:27::-;;;;;;;;;;;;;;;;24146:35;;;;;;;;;;;;24179:2;24146:35;;;;;2371:4:1;2359:17;;;2341:36;;2329:2;2314:18;24146:35:0;2199:184:1;24555:26:0;;;;;;;;;;;;;;;;27844:290;;;;;;;;;;-1:-1:-1;27844:290:0;;;;;:::i;:::-;;:::i;24677:48::-;;;;;;;;;;;;;;;;33061:233;;;;;;;;;;-1:-1:-1;33061:233:0;;;;;:::i;:::-;;:::i;24285:36::-;;;;;;;;;;-1:-1:-1;24285:36:0;;;;-1:-1:-1;;;;;24285:36:0;;;33616:428;;;;;;;;;;-1:-1:-1;33616:428:0;;;;;:::i;:::-;;:::i;24489:23::-;;;;;;;;;;;;;;;;25081:38;;;;;;;;;;;;;;;25248:40;;;;;;;;;;-1:-1:-1;25248:40:0;;;;;;;;;;;32847:126;;;;;;;;;;-1:-1:-1;32847:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32938:27:0;32914:4;32938:27;;;:18;:27;;;;;;;;;32847:126;34342:294;;;;;;;;;;-1:-1:-1;34342:294:0;;;;;:::i;:::-;;:::i;24949:29::-;;;;;;;;;;;;;;;;24846:50;;;;;;;;;;;;;;;;24588:28;;;;;;;;;;;;;;;;24625:43;;;;;;;;;;;;;;;;26458:117;;;;;;;;;;-1:-1:-1;26458:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;26551:16:0;26524:7;26551:16;;;:7;:16;;;;;;;26458:117;13273:103;;;;;;;;;;;;;:::i;28492:118::-;;;;;;;;;;;;;:::i;24240:38::-;;;;;;;;;;-1:-1:-1;24240:38:0;;;;-1:-1:-1;;;;;24240:38:0;;;24367:88;;;;;;;;;;;;24413:42;24367:88;;12625:87;;;;;;;;;;-1:-1:-1;12671:7:0;12698:6;-1:-1:-1;;;;;12698:6:0;12625:87;;24098:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24098:41:0;;;;;28184:300;;;;;;;;;;-1:-1:-1;28184:300:0;;;;;:::i;:::-;;:::i;26625:192::-;;;;;;;;;;-1:-1:-1;26625:192:0;;;;;:::i;:::-;;:::i;31135:669::-;;;;;;;;;;;;;:::i;34052:247::-;;;;;;;;;;-1:-1:-1;34052:247:0;;;;;:::i;:::-;;:::i;36130:359::-;;;;;;;;;;;;;:::i;24734:53::-;;;;;;;;;;;;;;;;26867:170;;;;;;;;;;-1:-1:-1;26867:170:0;;;;;:::i;:::-;-1:-1:-1;;;;;27001:19:0;;;26974:7;27001:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;26867:170;36566:465;;;;;;;;;;-1:-1:-1;36566:465:0;;;;;:::i;:::-;;:::i;33338:233::-;;;;;;;;;;-1:-1:-1;33338:233:0;;;;;:::i;:::-;;:::i;13531:238::-;;;;;;;;;;-1:-1:-1;13531:238:0;;;;;:::i;:::-;;:::i;24796:43::-;;;;;;;;;;;;;;;;34674:280;;;;;;;;;;-1:-1:-1;34674:280:0;;;;;:::i;:::-;;:::i;27085:186::-;27185:4;27202:39;436:10;27225:7;27234:6;27202:8;:39::i;:::-;-1:-1:-1;27259:4:0;27085:186;;;;;:::o;28618:266::-;12511:13;:11;:13::i;:::-;28725:6:::1;;28712:9;:19;;:61;;;;;28766:7;;28752:10;:21;;28712:61;28704:112;;;::::0;-1:-1:-1;;;28704:112:0;;4032:2:1;28704:112:0::1;::::0;::::1;4014:21:1::0;4071:2;4051:18;;;4044:30;-1:-1:-1;;;4090:18:1;;;4083:51;4151:18;;28704:112:0::1;;;;;;;;;28827:6;:18:::0;;;;28856:7:::1;:20:::0;28618:266::o;27316:478::-;-1:-1:-1;;;;;27489:19:0;;27448:4;27489:19;;;:11;:19;;;;;;;;436:10;27489:33;;;;;;;;27555:26;;;;27533:116;;;;-1:-1:-1;;;27533:116:0;;4382:2:1;27533:116:0;;;4364:21:1;4421:2;4401:18;;;4394:30;4460:34;4440:18;;;4433:62;-1:-1:-1;;;4511:18:1;;;4504:38;4559:19;;27533:116:0;4180:404:1;27533:116:0;27660:36;27670:6;27678:9;27689:6;27660:9;:36::i;:::-;27707:57;27716:6;436:10;27738:25;27757:6;27738:16;:25;:::i;:::-;27707:8;:57::i;:::-;-1:-1:-1;27782:4:0;;27316:478;-1:-1:-1;;;;27316:478:0:o;27844:290::-;436:10;27957:4;28046:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28046:34:0;;;;;;;;;;27957:4;;27974:130;;28024:7;;28046:47;;28083:10;;28046:47;:::i;33061:233::-;12511:13;:11;:13::i;:::-;-1:-1:-1;;;;;33132:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;33132:34:0::1;33162:4;33132:34;::::0;;33182:104;-1:-1:-1;;;;;;;;;;;33182:104:0;::::1;::::0;33151:7;;5214:2:1;5196:21;;;5253:2;5233:18;;;5226:30;5292:34;5287:2;5272:18;;5265:62;-1:-1:-1;;;5358:3:1;5343:19;;5336:45;-1:-1:-1;;;;;5455:32:1;;;;5448:4;5433:20;;5426:62;5413:3;5398:19;;4984:510;33182:104:0::1;;;;;;;;33061:233:::0;:::o;33616:428::-;12511:13;:11;:13::i;:::-;33771:9:::1;33743:24;:37;;33721:126;;;::::0;-1:-1:-1;;;33721:126:0;;5701:2:1;33721:126:0::1;::::0;::::1;5683:21:1::0;5740:2;5720:18;;;5713:30;5779:34;5759:18;;;5752:62;-1:-1:-1;;;5830:18:1;;;5823:37;5877:19;;33721:126:0::1;5499:403:1::0;33721:126:0::1;33858:23;:50:::0;;;33924:112:::1;::::0;;6119:21:1;;;6176:2;6156:18;;;6149:30;;;;6215:34;6210:2;6195:18;;6188:62;-1:-1:-1;;;6281:3:1;6266:19;;6259:42;6368:4;6353:20;;6346:36;;;33924:112:0::1;::::0;6333:3:1;6318:19;33924:112:0::1;5907:481:1::0;34342:294:0;12511:13;:11;:13::i;:::-;-1:-1:-1;;;;;34434:30:0;::::1;34426:67;;;::::0;-1:-1:-1;;;34426:67:0;;6595:2:1;34426:67:0::1;::::0;::::1;6577:21:1::0;6634:2;6614:18;;;6607:30;6673:26;6653:18;;;6646:54;6717:18;;34426:67:0::1;6393:348:1::0;34426:67:0::1;34504:15;:43:::0;;-1:-1:-1;;;;;;34504:43:0::1;-1:-1:-1::0;;;;;34504:43:0;::::1;::::0;;::::1;::::0;;;34563:65:::1;::::0;;6966:21:1;;;7023:2;7003:18;;;6996:30;;;;7062:34;7057:2;7042:18;;7035:62;-1:-1:-1;;;7128:3:1;7113:19;;7106:35;7208:4;7193:20;;7186:62;;;;-1:-1:-1;;;;;;;;;;;34563:65:0;7173:3:1;7158:19;34563:65:0::1;6746:508:1::0;13273:103:0;12511:13;:11;:13::i;:::-;13338:30:::1;13365:1;13338:18;:30::i;:::-;13273:103::o:0;28492:118::-;12511:13;:11;:13::i;:::-;28558:7:::1;::::0;28546:9:::1;:19:::0;;;28576:16:::1;:26:::0;28492:118::o;28184:300::-;436:10;28302:4;28391:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28391:34:0;;;;;;;;;;28302:4;;28319:135;;28369:7;;28391:52;;28428:15;;28391:52;:::i;26625:192::-;26728:4;26745:42;436:10;26769:9;26780:6;26745:9;:42::i;31135:669::-;25331:16;:23;;-1:-1:-1;;25331:23:0;25350:4;25331:23;;;:16;31213:24:::1;31231:4;-1:-1:-1::0;;;;;26551:16:0;26524:7;26551:16;;;:7;:16;;;;;;;26458:117;31213:24:::1;31191:46;;31266:16;;31251:11;:31;31248:93;;-1:-1:-1::0;31313:16:0::1;::::0;31248:93:::1;31351:29;31368:11;31351:16;:29::i;:::-;31471:12;::::0;31458:10:::1;::::0;31409:21:::1;::::0;31391:15:::1;::::0;31458:25:::1;::::0;31471:12;31458:25:::1;:::i;:::-;31441:42;;31498:9;31511:1;31498:14:::0;31494:33:::1;;-1:-1:-1::0;31526:1:0::1;31494:33;31538:18;31587:9;31573:10;;31560;:23;;;;:::i;:::-;31559:37;;;;:::i;:::-;31538:58:::0;-1:-1:-1;31607:27:0::1;31538:58:::0;31607:27;::::1;:::i;:::-;31666:13;::::0;31607:27;;-1:-1:-1;31645:50:0::1;::::0;-1:-1:-1;;;;;31666:13:0::1;31681::::0;31645:20:::1;:50::i;:::-;31727:15;::::0;31706:49:::1;::::0;-1:-1:-1;;;;;31727:15:0::1;31744:10:::0;31706:20:::1;:49::i;:::-;-1:-1:-1::0;;31795:1:0::1;31768:24;:28:::0;-1:-1:-1;;25377:16:0;:24;;-1:-1:-1;;25377:24:0;;;31135:669::o;34052:247::-;12511:13;:11;:13::i;:::-;34164:8:::1;34139:33;;:21;;;;;;;;;;;:33;;::::0;34131:63:::1;;;::::0;-1:-1:-1;;;34131:63:0;;7856:2:1;34131:63:0::1;::::0;::::1;7838:21:1::0;7895:2;7875:18;;;7868:30;-1:-1:-1;;;7914:18:1;;;7907:47;7971:18;;34131:63:0::1;7654:341:1::0;34131:63:0::1;34205:21;:32:::0;;;::::1;;;;-1:-1:-1::0;;34205:32:0;;::::1;;::::0;;34253:38:::1;::::0;::::1;::::0;::::1;::::0;34229:8;1169:14:1;1162:22;1144:41;;1132:2;1117:18;;1004:187;36130:359:0;12511:13;:11;:13::i;:::-;36268:15:::1;::::0;36260:52:::1;::::0;36212:21:::1;::::0;36194:15:::1;::::0;-1:-1:-1;;;;;36268:15:0;;::::1;::::0;36212:21;;36194:15;36260:52;36194:15;36260:52;36212:21;36268:15;36260:52:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36244:68;;;36331:4;36323:32;;;::::0;-1:-1:-1;;;36323:32:0;;8412:2:1;36323:32:0::1;::::0;::::1;8394:21:1::0;8451:2;8431:18;;;8424:30;-1:-1:-1;;;8470:18:1;;;8463:45;8525:18;;36323:32:0::1;8210:339:1::0;36323:32:0::1;36455:15;::::0;36371:110:::1;::::0;;8774:21:1;;;8831:2;8811:18;;;8804:30;;;;8870:34;8865:2;8850:18;;8843:62;-1:-1:-1;;;8936:3:1;8921:19;;8914:43;-1:-1:-1;;;;;36455:15:0;;::::1;9024:4:1::0;9009:20;;9002:62;-1:-1:-1;;;;;;;;;;;36371:110:0;8989:3:1;8974:19;36371:110:0::1;;;;;;;;36183:306;;36130:359::o:0;36566:465::-;12511:13;:11;:13::i;:::-;36743:4:::1;-1:-1:-1::0;;;;;36718:30:0;::::1;::::0;36696:134:::1;;;::::0;-1:-1:-1;;;36696:134:0;;9277:2:1;36696:134:0::1;::::0;::::1;9259:21:1::0;9316:2;9296:18;;;9289:30;9355:34;9335:18;;;9328:62;-1:-1:-1;;;9406:18:1;;;9399:52;9468:19;;36696:134:0::1;9075:418:1::0;36696:134:0::1;36884:15;::::0;36853:56:::1;::::0;-1:-1:-1;;;36853:56:0;;-1:-1:-1;;;;;36884:15:0;;::::1;36853:56;::::0;::::1;9680:51:1::0;9747:18;;;9740:34;;;36841:9:0::1;::::0;36853:30;::::1;::::0;::::1;::::0;9653:18:1;;36853:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36841:68;;36928:4;36920:32;;;::::0;-1:-1:-1;;;36920:32:0;;8412:2:1;36920:32:0::1;::::0;::::1;8394:21:1::0;8451:2;8431:18;;;8424:30;-1:-1:-1;;;8470:18:1;;;8463:45;8525:18;;36920:32:0::1;8210:339:1::0;36920:32:0::1;36968:55;::::0;;10247:21:1;;;10304:2;10284:18;;;10277:30;10343:34;10338:2;10323:18;;10316:62;-1:-1:-1;;;10409:3:1;10394:19;;10387:38;10492:4;10477:20;;10470:36;;;36968:55:0;;::::1;::::0;;;;10457:3:1;36968:55:0;;::::1;36685:346;36566:465:::0;;:::o;33338:233::-;12511:13;:11;:13::i;:::-;-1:-1:-1;;;;;33407:27:0;::::1;33437:5;33407:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;33407:35:0::1;::::0;;33458:105;;10729:21:1;;;10786:2;10766:18;;;10759:30;;;;10825:34;10820:2;10805:18;;10798:62;-1:-1:-1;;;10891:3:1;10876:19;;10869:46;10967:20;;10960:62;;;;-1:-1:-1;;;;;;;;;;;33458:105:0;10947:3:1;10932:19;33458:105:0::1;10517:511:1::0;13531:238:0;12511:13;:11;:13::i;:::-;-1:-1:-1;;;;;13634:22:0;::::1;13612:110;;;::::0;-1:-1:-1;;;13612:110:0;;11235:2:1;13612:110:0::1;::::0;::::1;11217:21:1::0;11274:2;11254:18;;;11247:30;11313:34;11293:18;;;11286:62;-1:-1:-1;;;11364:18:1;;;11357:36;11410:19;;13612:110:0::1;11033:402:1::0;13612:110:0::1;13733:28;13752:8;13733:18;:28::i;:::-;13531:238:::0;:::o;34674:280::-;12511:13;:11;:13::i;:::-;-1:-1:-1;;;;;34762:28:0;::::1;34754:63;;;::::0;-1:-1:-1;;;34754:63:0;;11642:2:1;34754:63:0::1;::::0;::::1;11624:21:1::0;11681:2;11661:18;;;11654:30;-1:-1:-1;;;11700:18:1;;;11693:52;11762:18;;34754:63:0::1;11440:346:1::0;34754:63:0::1;34828:13;:39:::0;;-1:-1:-1;;;;;;34828:39:0::1;-1:-1:-1::0;;;;;34828:39:0;::::1;::::0;;::::1;::::0;;;34883:63:::1;::::0;;12011:21:1;;;12068:2;12048:18;;;12041:30;;;;12107:34;12102:2;12087:18;;12080:62;-1:-1:-1;;;12173:3:1;12158:19;;12151:35;12253:4;12238:20;;12231:62;;;;-1:-1:-1;;;;;;;;;;;34883:63:0;12218:3:1;12203:19;34883:63:0::1;11791:508:1::0;28916:341:0;-1:-1:-1;;;;;29010:20:0;;29002:69;;;;-1:-1:-1;;;29002:69:0;;12506:2:1;29002:69:0;;;12488:21:1;12545:2;12525:18;;;12518:30;12584:34;12564:18;;;12557:62;-1:-1:-1;;;12635:18:1;;;12628:34;12679:19;;29002:69:0;12304:400:1;29002:69:0;-1:-1:-1;;;;;29090:21:0;;29082:68;;;;-1:-1:-1;;;29082:68:0;;12911:2:1;29082:68:0;;;12893:21:1;12950:2;12930:18;;;12923:30;12989:34;12969:18;;;12962:62;-1:-1:-1;;;13040:18:1;;;13033:32;13082:19;;29082:68:0;12709:398:1;29082:68:0;-1:-1:-1;;;;;29163:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;29216:33;;1830:25:1;;;29216:33:0;;1803:18:1;29216:33:0;;;;;;;;28916:341;;;:::o;12790:132::-;12671:7;12698:6;-1:-1:-1;;;;;12698:6:0;436:10;12854:23;12846:68;;;;-1:-1:-1;;;12846:68:0;;13314:2:1;12846:68:0;;;13296:21:1;;;13333:18;;;13326:30;13392:34;13372:18;;;13365:62;13444:18;;12846:68:0;13112:356:1;29390:1737:0;-1:-1:-1;;;;;29478:18:0;;29470:68;;;;-1:-1:-1;;;29470:68:0;;13675:2:1;29470:68:0;;;13657:21:1;13714:2;13694:18;;;13687:30;13753:34;13733:18;;;13726:62;-1:-1:-1;;;13804:18:1;;;13797:35;13849:19;;29470:68:0;13473:401:1;29470:68:0;-1:-1:-1;;;;;29557:16:0;;29549:64;;;;-1:-1:-1;;;29549:64:0;;14081:2:1;29549:64:0;;;14063:21:1;14120:2;14100:18;;;14093:30;14159:34;14139:18;;;14132:62;-1:-1:-1;;;14210:18:1;;;14203:33;14253:19;;29549:64:0;13879:399:1;29549:64:0;29641:1;29632:6;:10;29624:64;;;;-1:-1:-1;;;29624:64:0;;14485:2:1;29624:64:0;;;14467:21:1;14524:2;14504:18;;;14497:30;14563:34;14543:18;;;14536:62;-1:-1:-1;;;14614:18:1;;;14607:39;14663:19;;29624:64:0;14283:405:1;29624:64:0;-1:-1:-1;;;;;29721:13:0;;;;;;:7;:13;;;;;;:23;-1:-1:-1;29721:23:0;29699:111;;;;-1:-1:-1;;;29699:111:0;;14895:2:1;29699:111:0;;;14877:21:1;14934:2;14914:18;;;14907:30;14973:34;14953:18;;;14946:62;-1:-1:-1;;;15024:18:1;;;15017:36;15070:19;;29699:111:0;14693:402:1;29699:111:0;29916:4;29867:28;26551:16;;;:7;:16;;;;;;30001:23;;30161:16;;26551;;29964:60;;;;;30161:16;;30160:17;:55;;;;;30202:13;-1:-1:-1;;;;;30194:21:0;:4;-1:-1:-1;;;;;30194:21:0;;;30160:55;:95;;;;;30232:23;30160:95;:133;;;;-1:-1:-1;30272:21:0;;;;;;;30160:133;30142:206;;;30320:16;:14;:16::i;:::-;30368:13;-1:-1:-1;;;;;30362:19:0;:2;-1:-1:-1;;;;;30362:19:0;;:48;;;;-1:-1:-1;;;;;;30386:24:0;;;;;;:18;:24;;;;;;;;30385:25;30362:48;30358:230;;;30463:9;;30453:6;:19;;30427:104;;;;-1:-1:-1;;;30427:104:0;;15302:2:1;30427:104:0;;;15284:21:1;15341:2;15321:18;;;15314:30;-1:-1:-1;;;15360:18:1;;;15353:53;15423:18;;30427:104:0;15100:347:1;30427:104:0;30573:3;30563:6;30553:7;;:16;;;;:::i;:::-;30552:24;;;;:::i;:::-;30546:30;;30358:230;30610:13;-1:-1:-1;;;;;30602:21:0;:4;-1:-1:-1;;;;;30602:21:0;;:48;;;;-1:-1:-1;;;;;;30628:22:0;;;;;;:18;:22;;;;;;;;30627:23;30602:48;30598:268;;;30703:9;;30693:6;:19;;:58;;;;;30742:9;;30732:6;30716:13;30726:2;-1:-1:-1;;;;;26551:16:0;26524:7;26551:16;;;:7;:16;;;;;;;26458:117;30716:13;:22;;;;:::i;:::-;:35;;30693:58;30667:143;;;;-1:-1:-1;;;30667:143:0;;15302:2:1;30667:143:0;;;15284:21:1;15341:2;15321:18;;;15314:30;-1:-1:-1;;;15360:18:1;;;15353:53;15423:18;;30667:143:0;15100:347:1;30667:143:0;30851:3;30841:6;30832;;:15;;;;:::i;:::-;30831:23;;;;:::i;:::-;30825:29;;30598:268;30876:13;30886:3;30876:13;;:::i;:::-;;-1:-1:-1;30904:7:0;;30900:177;;30928:40;30943:4;30957;30964:3;30928:14;:40::i;:::-;31011:3;30983:24;;:31;;;;;;;:::i;:::-;;;;;;;;31062:3;31029:29;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;30900:177:0;31087:32;31102:4;31108:2;31112:6;31087:14;:32::i;:::-;29459:1668;;;29390:1737;;;:::o;13929:191::-;14003:16;14022:6;;-1:-1:-1;;;;;14039:17:0;;;-1:-1:-1;;;;;;14039:17:0;;;;;;14072:40;;14022:6;;;;;;;14072:40;;14003:16;14072:40;13992:128;13929:191;:::o;31812:638::-;31962:16;;;31976:1;31962:16;;;;;;;;31938:21;;31962:16;;;;;;;;;;-1:-1:-1;31962:16:0;31938:40;;32007:4;31989;31994:1;31989:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31989:23:0;;;-1:-1:-1;;;;;31989:23:0;;;;;32033:4;32023;32028:1;32023:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;32023:14:0;;;-1:-1:-1;;;;;32023:14:0;;;;;32048:62;32065:4;32080:15;32098:11;32048:8;:62::i;:::-;32149:240;;-1:-1:-1;;;32149:240:0;;-1:-1:-1;;;;;32149:15:0;:66;;;;:240;;32230:11;;32256:1;;32300:4;;32327;;32363:15;;32149:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32407:35;32424:11;32437:4;32407:35;;;;;;;:::i;34966:252::-;35087:6;35097:1;35087:11;35083:24;;34966:252;;:::o;35083:24::-;35118:9;35133;-1:-1:-1;;;;;35133:14:0;35155:6;35133:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35117:49;;;35185:4;35177:33;;;;-1:-1:-1;;;35177:33:0;;17308:2:1;35177:33:0;;;17290:21:1;17347:2;17327:18;;;17320:30;-1:-1:-1;;;17366:18:1;;;17359:46;17422:18;;35177:33:0;17106:340:1;35177:33:0;35072:146;34966:252;;:::o;32586:253::-;-1:-1:-1;;;;;32714:15:0;;;;;;:7;:15;;;;;:25;;32733:6;;32714:15;:25;;32733:6;;32714:25;:::i;:::-;;;;-1:-1:-1;;;;;;;32750:18:0;;;;;;:7;:18;;;;;:28;;32772:6;;32750:18;:28;;32772:6;;32750:28;:::i;:::-;;;;;;;;32813:9;-1:-1:-1;;;;;32796:35:0;32805:6;-1:-1:-1;;;;;32796:35:0;;32824:6;32796:35;;;;1830:25:1;;1818:2;1803:18;;1684:177;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:248::-;1264:6;1272;1325:2;1313:9;1304:7;1300:23;1296:32;1293:52;;;1341:1;1338;1331:12;1293:52;-1:-1:-1;;1364:23:1;;;1434:2;1419:18;;;1406:32;;-1:-1:-1;1196:248:1:o;1866:328::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;;2099:38;2133:2;2122:9;2118:18;2099:38;:::i;:::-;2089:48;;2184:2;2173:9;2169:18;2156:32;2146:42;;1866:328;;;;;:::o;2388:186::-;2447:6;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;2539:29;2558:9;2539:29;:::i;:::-;2529:39;2388:186;-1:-1:-1;;;2388:186:1:o;2803:180::-;2862:6;2915:2;2903:9;2894:7;2890:23;2886:32;2883:52;;;2931:1;2928;2921:12;2883:52;-1:-1:-1;2954:23:1;;2803:180;-1:-1:-1;2803:180:1:o;3196:118::-;3282:5;3275:13;3268:21;3261:5;3258:32;3248:60;;3304:1;3301;3294:12;3319:241;3375:6;3428:2;3416:9;3407:7;3403:23;3399:32;3396:52;;;3444:1;3441;3434:12;3396:52;3483:9;3470:23;3502:28;3524:5;3502:28;:::i;3565:260::-;3633:6;3641;3694:2;3682:9;3673:7;3669:23;3665:32;3662:52;;;3710:1;3707;3700:12;3662:52;3733:29;3752:9;3733:29;:::i;:::-;3723:39;;3781:38;3815:2;3804:9;3800:18;3781:38;:::i;:::-;3771:48;;3565:260;;;;;:::o;4589:127::-;4650:10;4645:3;4641:20;4638:1;4631:31;4681:4;4678:1;4671:15;4705:4;4702:1;4695:15;4721:128;4788:9;;;4809:11;;;4806:37;;;4823:18;;:::i;4854:125::-;4919:9;;;4940:10;;;4937:36;;;4953:18;;:::i;7259:168::-;7332:9;;;7363;;7380:15;;;7374:22;;7360:37;7350:71;;7401:18;;:::i;7432:217::-;7472:1;7498;7488:132;;7542:10;7537:3;7533:20;7530:1;7523:31;7577:4;7574:1;7567:15;7605:4;7602:1;7595:15;7488:132;-1:-1:-1;7634:9:1;;7432:217::o;9785:245::-;9852:6;9905:2;9893:9;9884:7;9880:23;9876:32;9873:52;;;9921:1;9918;9911:12;9873:52;9953:9;9947:16;9972:28;9994:5;9972:28;:::i;15584:127::-;15645:10;15640:3;15636:20;15633:1;15626:31;15676:4;15673:1;15666:15;15700:4;15697:1;15690:15;15716:461;15769:3;15807:5;15801:12;15834:6;15829:3;15822:19;15860:4;15889:2;15884:3;15880:12;15873:19;;15926:2;15919:5;15915:14;15947:1;15957:195;15971:6;15968:1;15965:13;15957:195;;;16036:13;;-1:-1:-1;;;;;16032:39:1;16020:52;;16092:12;;;;16127:15;;;;16068:1;15986:9;15957:195;;;-1:-1:-1;16168:3:1;;15716:461;-1:-1:-1;;;;;15716:461:1:o;16182:582::-;16481:6;16470:9;16463:25;16524:6;16519:2;16508:9;16504:18;16497:34;16567:3;16562:2;16551:9;16547:18;16540:31;16444:4;16588:57;16640:3;16629:9;16625:19;16617:6;16588:57;:::i;:::-;-1:-1:-1;;;;;16681:32:1;;;;16676:2;16661:18;;16654:60;-1:-1:-1;16745:3:1;16730:19;16723:35;16580:65;16182:582;-1:-1:-1;;;16182:582:1:o;16769:332::-;16976:6;16965:9;16958:25;17019:2;17014;17003:9;16999:18;16992:30;16939:4;17039:56;17091:2;17080:9;17076:18;17068:6;17039:56;:::i;:::-;17031:64;16769:332;-1:-1:-1;;;;16769:332:1:o

Swarm Source

ipfs://e63210246c9649e676a60b406fbec6dee30f2770388c1c5fe6ba937a557ef802
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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