ETH Price: $2,527.40 (+0.17%)
Gas: 0.9 Gwei

Token

Mad Pepe (MADPEPE)
 

Overview

Max Total Supply

800,000,000 MADPEPE

Holders

720

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap: Universal Router
Balance
0 MADPEPE

Value
$0.00
0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad
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:
MADPEPE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 * SPDX-License-Identifier: MIT
 * https://mad-pepe.vip/
 */

pragma solidity 0.8.19;

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IDexFactory {
    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 IDexRouter {
    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 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 MADPEPE is ERC20, Ownable {
    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    bool public tradingOpen = false;

    // Swapback
    bool private swapping;
    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    // Fees
    address private feeReceiver;

    uint256 private buyFee;
    uint256 private sellFee;

    /******************/

    mapping(address => bool) private isFeeExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    event TradingEnabled();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );

    event feeReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Mad Pepe", "MADPEPE") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyFee = 2;
        uint256 _sellFee = 2;

        uint256 totalSupply = 1_000_000_000 * 10 ** decimals();

        swapBackValueMin = (totalSupply * 1) / 1000;
        swapBackValueMax = (totalSupply * 1) / 100;

        buyFee = _buyFee;
        sellFee = _sellFee;
        feeReceiver = address(0x3dDF8A3D5Eb701B10Fbe1691E58948f2e1E0B4a2);

        // exclude from paying fees or having max transaction amount
        excludeFromTaxes(msg.sender, true);
        excludeFromTaxes(address(this), true);
        excludeFromTaxes(address(0xdead), true);
        excludeFromTaxes(feeReceiver, true);

        transferOwnership(msg.sender);

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

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingOpen = true;
        swapbackEnabled = true;
        emit TradingEnabled();
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 100000, so 1% = 1000.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 100000, so 1% = 1000.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 100000;
        swapBackValueMax = (totalSupply() * _max) / 100000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function excludeFromTaxes(address account, bool excluded) public onlyOwner {
        isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {feeReceiverUpdated} event
     * @param newWallet The new marketing wallet
     */
    function setFeeReceiver(address newWallet) external onlyOwner {
        emit feeReceiverUpdated(newWallet, feeReceiver);
        feeReceiver = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyFee The total fee for buys
     * @return _sellFee The total fee for sells
     * @return _feeReceiver The address that receives the fees
     */
    function feeInfo()
        external
        view
        returns (uint256 _buyFee, uint256 _sellFee, address _feeReceiver)
    {
        _buyFee = buyFee;
        _sellFee = sellFee;
        _feeReceiver = feeReceiver;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _isFeeExempt  If the wallet is excluded from fees
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (bool _isFeeExempt, bool _automatedMarketMakerPairs)
    {
        _isFeeExempt = isFeeExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ) {
            if (!tradingOpen) {
                require(
                    isFeeExempt[from] || isFeeExempt[to],
                    "_transfer:: Trading is not active."
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !isFeeExempt[from] &&
            !isFeeExempt[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (isFeeExempt[from] || isFeeExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFee > 0) {
                fees = (amount * sellFee) / (100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFee > 0) {
                fees = (amount * buyFee) / (100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    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] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            feeReceiver,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }
}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeReceiverUpdated","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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"address","name":"_feeReceiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560146101000a81548160ff0219169083151502179055506000600560166101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600881526020017f4d616420506570650000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4d414450455045000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c67565b508060049081620000d7919062000c67565b505050620000fa620000ee6200047a60201b60201c565b6200048260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000db8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000db8565b6040518363ffffffff1660e01b81526004016200026692919062000dfb565b6020604051808303816000875af115801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000db8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002f460a05160016200054860201b60201c565b600060029050600060029050600062000312620005e960201b60201c565b600a62000320919062000fb8565b633b9aca0062000331919062001009565b90506103e860018262000345919062001009565b62000351919062001083565b600681905550606460018262000368919062001009565b62000374919062001083565b6007819055508260098190555081600a81905550733ddf8a3d5eb701b10fbe1691e58948f2e1e0b4a2600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f0336001620005f260201b60201c565b62000403306001620005f260201b60201c565b6200041861dead6001620005f260201b60201c565b6200044d600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005f260201b60201c565b6200045e336200072c60201b60201c565b6200047033826200084160201b60201c565b50505050620012eb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620006026200047a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000628620009b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000678906200111c565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200072091906200115b565b60405180910390a25050565b6200073c6200047a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000762620009b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b2906200111c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200082d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082490620011ee565b60405180910390fd5b6200083e816200048260201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008aa9062001260565b60405180910390fd5b620008c760008383620009e360201b60201c565b8060026000828254620008db919062001282565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000932919062001282565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009999190620012ce565b60405180910390a3620009b560008383620009e860201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6f57607f821691505b60208210810362000a855762000a8462000a27565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000aef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ab0565b62000afb868362000ab0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4862000b4262000b3c8462000b13565b62000b1d565b62000b13565b9050919050565b6000819050919050565b62000b648362000b27565b62000b7c62000b738262000b4f565b84845462000abd565b825550505050565b600090565b62000b9362000b84565b62000ba081848462000b59565b505050565b5b8181101562000bc85762000bbc60008262000b89565b60018101905062000ba6565b5050565b601f82111562000c175762000be18162000a8b565b62000bec8462000aa0565b8101602085101562000bfc578190505b62000c1462000c0b8562000aa0565b83018262000ba5565b50505b505050565b600082821c905092915050565b600062000c3c6000198460080262000c1c565b1980831691505092915050565b600062000c57838362000c29565b9150826002028217905092915050565b62000c7282620009ed565b67ffffffffffffffff81111562000c8e5762000c8d620009f8565b5b62000c9a825462000a56565b62000ca782828562000bcc565b600060209050601f83116001811462000cdf576000841562000cca578287015190505b62000cd6858262000c49565b86555062000d46565b601f19841662000cef8662000a8b565b60005b8281101562000d195784890151825560018201915060208501945060208101905062000cf2565b8683101562000d39578489015162000d35601f89168262000c29565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d808262000d53565b9050919050565b62000d928162000d73565b811462000d9e57600080fd5b50565b60008151905062000db28162000d87565b92915050565b60006020828403121562000dd15762000dd062000d4e565b5b600062000de18482850162000da1565b91505092915050565b62000df58162000d73565b82525050565b600060408201905062000e12600083018562000dea565b62000e21602083018462000dea565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000eb65780860481111562000e8e5762000e8d62000e28565b5b600185161562000e9e5780820291505b808102905062000eae8562000e57565b945062000e6e565b94509492505050565b60008262000ed1576001905062000fa4565b8162000ee1576000905062000fa4565b816001811462000efa576002811462000f055762000f3b565b600191505062000fa4565b60ff84111562000f1a5762000f1962000e28565b5b8360020a91508482111562000f345762000f3362000e28565b5b5062000fa4565b5060208310610133831016604e8410600b841016171562000f755782820a90508381111562000f6f5762000f6e62000e28565b5b62000fa4565b62000f84848484600162000e64565b9250905081840481111562000f9e5762000f9d62000e28565b5b81810290505b9392505050565b600060ff82169050919050565b600062000fc58262000b13565b915062000fd28362000fab565b9250620010017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ebf565b905092915050565b6000620010168262000b13565b9150620010238362000b13565b9250828202620010338162000b13565b915082820484148315176200104d576200104c62000e28565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010908262000b13565b91506200109d8362000b13565b925082620010b057620010af62001054565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001104602083620010bb565b91506200111182620010cc565b602082019050919050565b600060208201905081810360008301526200113781620010f5565b9050919050565b60008115159050919050565b62001155816200113e565b82525050565b60006020820190506200117260008301846200114a565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620011d6602683620010bb565b9150620011e38262001178565b604082019050919050565b600060208201905081810360008301526200120981620011c7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001248601f83620010bb565b9150620012558262001210565b602082019050919050565b600060208201905081810360008301526200127b8162001239565b9050919050565b60006200128f8262000b13565b91506200129c8362000b13565b9250828201905080821115620012b757620012b662000e28565b5b92915050565b620012c88162000b13565b82525050565b6000602082019050620012e56000830184620012bd565b92915050565b60805160a05161354b6200132660003960008181610be601526112a50152600081816122c8015281816123a901526123d0015261354b6000f3fe60806040526004361061016a5760003560e01c8063995b5aae116100d1578063d08893581161008a578063efdcd97411610064578063efdcd97414610562578063f242ab411461058b578063f2fde38b146105b6578063ffb54a99146105df57610171565b8063d0889358146104be578063dd62ed3e146104e7578063e13b20071461052457610171565b8063995b5aae146103aa5780639a7a23d6146103d7578063a457c2d714610400578063a9059cbb1461043d578063ae7ed5671461047a578063c9567bf9146104a757610171565b80633950935111610123578063395093511461029a57806342966c68146102d757806370a0823114610300578063715018a61461033d5780638da5cb5b1461035457806395d89b411461037f57610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de578063226036611461020957806323b872dd14610232578063313ce5671461026f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61060a565b6040516101989190612518565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906125d3565b61069c565b6040516101d5919061262e565b60405180910390f35b3480156101ea57600080fd5b506101f36106ba565b6040516102009190612658565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061269f565b6106c4565b005b34801561023e57600080fd5b50610259600480360381019061025491906126df565b6107e9565b604051610266919061262e565b60405180910390f35b34801561027b57600080fd5b506102846108e1565b604051610291919061274e565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906125d3565b6108ea565b6040516102ce919061262e565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612769565b610996565b005b34801561030c57600080fd5b5061032760048036038101906103229190612796565b6109a3565b6040516103349190612658565b60405180910390f35b34801561034957600080fd5b506103526109eb565b005b34801561036057600080fd5b50610369610a73565b60405161037691906127d2565b60405180910390f35b34801561038b57600080fd5b50610394610a9d565b6040516103a19190612518565b60405180910390f35b3480156103b657600080fd5b506103bf610b2f565b6040516103ce939291906127ed565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f9919061269f565b610b68565b005b34801561040c57600080fd5b50610427600480360381019061042291906125d3565b610c80565b604051610434919061262e565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906125d3565b610d6b565b604051610471919061262e565b60405180910390f35b34801561048657600080fd5b5061048f610d89565b60405161049e93929190612824565b60405180910390f35b3480156104b357600080fd5b506104bc610daf565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061285b565b610e8f565b005b3480156104f357600080fd5b5061050e600480360381019061050991906128ae565b61103a565b60405161051b9190612658565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612796565b6110c1565b6040516105599291906128ee565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190612796565b611167565b005b34801561059757600080fd5b506105a06112a3565b6040516105ad91906127d2565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190612796565b6112c7565b005b3480156105eb57600080fd5b506105f46113be565b604051610601919061262e565b60405180910390f35b60606003805461061990612946565b80601f016020809104026020016040519081016040528092919081815260200182805461064590612946565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b60006106b06106a96113d1565b84846113d9565b6001905092915050565b6000600254905090565b6106cc6113d1565b73ffffffffffffffffffffffffffffffffffffffff166106ea610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610737906129c3565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107dd919061262e565b60405180910390a25050565b60006107f68484846115a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108416113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890612a55565b60405180910390fd5b6108d5856108cd6113d1565b8584036113d9565b60019150509392505050565b60006012905090565b600061098c6108f76113d1565b8484600160006109056113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109879190612aa4565b6113d9565b6001905092915050565b6109a03382611c25565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109f36113d1565b73ffffffffffffffffffffffffffffffffffffffff16610a11610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906129c3565b60405180910390fd5b610a716000611dfb565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610aac90612946565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad890612946565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b60008060006009549250600a549150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050909192565b610b706113d1565b73ffffffffffffffffffffffffffffffffffffffff16610b8e610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb906129c3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612b4a565b60405180910390fd5b610c7c8282611ec1565b5050565b60008060016000610c8f6113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390612bdc565b60405180910390fd5b610d60610d576113d1565b858584036113d9565b600191505092915050565b6000610d7f610d786113d1565b84846115a2565b6001905092915050565b6000806000600560169054906101000a900460ff16925060065491506007549050909192565b610db76113d1565b73ffffffffffffffffffffffffffffffffffffffff16610dd5610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906129c3565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b610e976113d1565b73ffffffffffffffffffffffffffffffffffffffff16610eb5610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f02906129c3565b60405180910390fd5b6001821015610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612c6e565b60405180910390fd5b81811015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612d00565b60405180910390fd5b82600560166101000a81548160ff021916908315150217905550620186a082610fb96106ba565b610fc39190612d20565b610fcd9190612d91565b600681905550620186a081610fe06106ba565b610fea9190612d20565b610ff49190612d91565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161102d93929190612824565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b61116f6113d1565b73ffffffffffffffffffffffffffffffffffffffff1661118d610a73565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906129c3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94223efa5e0ef633fcdce676def839a7ea220f7f45a1c693a4540846bc1ee14d60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112cf6113d1565b73ffffffffffffffffffffffffffffffffffffffff166112ed610a73565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906129c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990612e34565b60405180910390fd5b6113bb81611dfb565b50565b600560149054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90612ec6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90612f58565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115959190612658565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890612fea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061307c565b60405180910390fd5b600081036116995761169483836000611f62565b611c20565b6116a1610a73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561170f57506116df610a73565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611782575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179b5750600560159054906101000a900460ff16155b1561189657600560149054906101000a900460ff1661189557600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118555750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061310e565b60405180910390fd5b5b5b60006118a1306109a3565b9050600060065482101590508080156118c65750600560169054906101000a900460ff165b80156118df5750600560159054906101000a900460ff16155b80156119355750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561198b5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119e15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a25576001600560156101000a81548160ff021916908315150217905550611a096121e1565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611adb5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ae557600090505b60008115611c1057600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b4857506000600a54115b15611b6e576064600a5486611b5d9190612d20565b611b679190612d91565b9050611bec565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bc957506000600954115b15611beb57606460095486611bde9190612d20565b611be89190612d91565b90505b5b6000811115611c0157611c00873083611f62565b5b8085611c0d919061312e565b94505b611c1b878787611f62565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906131d4565b60405180910390fd5b611ca08260008361221f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613266565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d7d919061312e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611de29190612658565b60405180910390a3611df683600084612224565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890612fea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612040576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120379061307c565b60405180910390fd5b61204b83838361221f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906132f8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121649190612aa4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121c89190612658565b60405180910390a36121db848484612224565b50505050565b60006121ec306109a3565b9050600081036121fc575061221d565b60075481111561220c5760075490505b600081905061221a81612229565b50505b565b505050565b505050565b6000600267ffffffffffffffff81111561224657612245613318565b5b6040519080825280602002602001820160405280156122745781602001602082028036833780820191505090505b509050308160008151811061228c5761228b613347565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612355919061338b565b8160018151811061236957612368613347565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506123ce307f0000000000000000000000000000000000000000000000000000000000000000846113d9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016124529594939291906134bb565b600060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124c25780820151818401526020810190506124a7565b60008484015250505050565b6000601f19601f8301169050919050565b60006124ea82612488565b6124f48185612493565b93506125048185602086016124a4565b61250d816124ce565b840191505092915050565b6000602082019050818103600083015261253281846124df565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061256a8261253f565b9050919050565b61257a8161255f565b811461258557600080fd5b50565b60008135905061259781612571565b92915050565b6000819050919050565b6125b08161259d565b81146125bb57600080fd5b50565b6000813590506125cd816125a7565b92915050565b600080604083850312156125ea576125e961253a565b5b60006125f885828601612588565b9250506020612609858286016125be565b9150509250929050565b60008115159050919050565b61262881612613565b82525050565b6000602082019050612643600083018461261f565b92915050565b6126528161259d565b82525050565b600060208201905061266d6000830184612649565b92915050565b61267c81612613565b811461268757600080fd5b50565b60008135905061269981612673565b92915050565b600080604083850312156126b6576126b561253a565b5b60006126c485828601612588565b92505060206126d58582860161268a565b9150509250929050565b6000806000606084860312156126f8576126f761253a565b5b600061270686828701612588565b935050602061271786828701612588565b9250506040612728868287016125be565b9150509250925092565b600060ff82169050919050565b61274881612732565b82525050565b6000602082019050612763600083018461273f565b92915050565b60006020828403121561277f5761277e61253a565b5b600061278d848285016125be565b91505092915050565b6000602082840312156127ac576127ab61253a565b5b60006127ba84828501612588565b91505092915050565b6127cc8161255f565b82525050565b60006020820190506127e760008301846127c3565b92915050565b60006060820190506128026000830186612649565b61280f6020830185612649565b61281c60408301846127c3565b949350505050565b6000606082019050612839600083018661261f565b6128466020830185612649565b6128536040830184612649565b949350505050565b6000806000606084860312156128745761287361253a565b5b60006128828682870161268a565b9350506020612893868287016125be565b92505060406128a4868287016125be565b9150509250925092565b600080604083850312156128c5576128c461253a565b5b60006128d385828601612588565b92505060206128e485828601612588565b9150509250929050565b6000604082019050612903600083018561261f565b612910602083018461261f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061295e57607f821691505b60208210810361297157612970612917565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129ad602083612493565b91506129b882612977565b602082019050919050565b600060208201905081810360008301526129dc816129a0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612a3f602883612493565b9150612a4a826129e3565b604082019050919050565b60006020820190508181036000830152612a6e81612a32565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aaf8261259d565b9150612aba8361259d565b9250828201905080821115612ad257612ad1612a75565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612b34603983612493565b9150612b3f82612ad8565b604082019050919050565b60006020820190508181036000830152612b6381612b27565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612bc6602583612493565b9150612bd182612b6a565b604082019050919050565b60006020820190508181036000830152612bf581612bb9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612c58603583612493565b9150612c6382612bfc565b604082019050919050565b60006020820190508181036000830152612c8781612c4b565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000612cea602a83612493565b9150612cf582612c8e565b604082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b6000612d2b8261259d565b9150612d368361259d565b9250828202612d448161259d565b91508282048414831517612d5b57612d5a612a75565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d9c8261259d565b9150612da78361259d565b925082612db757612db6612d62565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e1e602683612493565b9150612e2982612dc2565b604082019050919050565b60006020820190508181036000830152612e4d81612e11565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eb0602483612493565b9150612ebb82612e54565b604082019050919050565b60006020820190508181036000830152612edf81612ea3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f42602283612493565b9150612f4d82612ee6565b604082019050919050565b60006020820190508181036000830152612f7181612f35565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612fd4602583612493565b9150612fdf82612f78565b604082019050919050565b6000602082019050818103600083015261300381612fc7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613066602383612493565b91506130718261300a565b604082019050919050565b6000602082019050818103600083015261309581613059565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006130f8602283612493565b91506131038261309c565b604082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b60006131398261259d565b91506131448361259d565b925082820390508181111561315c5761315b612a75565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006131be602183612493565b91506131c982613162565b604082019050919050565b600060208201905081810360008301526131ed816131b1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613250602283612493565b915061325b826131f4565b604082019050919050565b6000602082019050818103600083015261327f81613243565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132e2602683612493565b91506132ed82613286565b604082019050919050565b60006020820190508181036000830152613311816132d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061338581612571565b92915050565b6000602082840312156133a1576133a061253a565b5b60006133af84828501613376565b91505092915050565b6000819050919050565b6000819050919050565b60006133e76133e26133dd846133b8565b6133c2565b61259d565b9050919050565b6133f7816133cc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134328161255f565b82525050565b60006134448383613429565b60208301905092915050565b6000602082019050919050565b6000613468826133fd565b6134728185613408565b935061347d83613419565b8060005b838110156134ae5781516134958882613438565b97506134a083613450565b925050600181019050613481565b5085935050505092915050565b600060a0820190506134d06000830188612649565b6134dd60208301876133ee565b81810360408301526134ef818661345d565b90506134fe60608301856127c3565b61350b6080830184612649565b969550505050505056fea264697066735822122040bc53319ab6f37e9706b01e58d75c954977a48cbbb9fa6478974ef3ed63a67a64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063995b5aae116100d1578063d08893581161008a578063efdcd97411610064578063efdcd97414610562578063f242ab411461058b578063f2fde38b146105b6578063ffb54a99146105df57610171565b8063d0889358146104be578063dd62ed3e146104e7578063e13b20071461052457610171565b8063995b5aae146103aa5780639a7a23d6146103d7578063a457c2d714610400578063a9059cbb1461043d578063ae7ed5671461047a578063c9567bf9146104a757610171565b80633950935111610123578063395093511461029a57806342966c68146102d757806370a0823114610300578063715018a61461033d5780638da5cb5b1461035457806395d89b411461037f57610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de578063226036611461020957806323b872dd14610232578063313ce5671461026f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b61060a565b6040516101989190612518565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906125d3565b61069c565b6040516101d5919061262e565b60405180910390f35b3480156101ea57600080fd5b506101f36106ba565b6040516102009190612658565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061269f565b6106c4565b005b34801561023e57600080fd5b50610259600480360381019061025491906126df565b6107e9565b604051610266919061262e565b60405180910390f35b34801561027b57600080fd5b506102846108e1565b604051610291919061274e565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906125d3565b6108ea565b6040516102ce919061262e565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612769565b610996565b005b34801561030c57600080fd5b5061032760048036038101906103229190612796565b6109a3565b6040516103349190612658565b60405180910390f35b34801561034957600080fd5b506103526109eb565b005b34801561036057600080fd5b50610369610a73565b60405161037691906127d2565b60405180910390f35b34801561038b57600080fd5b50610394610a9d565b6040516103a19190612518565b60405180910390f35b3480156103b657600080fd5b506103bf610b2f565b6040516103ce939291906127ed565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f9919061269f565b610b68565b005b34801561040c57600080fd5b50610427600480360381019061042291906125d3565b610c80565b604051610434919061262e565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906125d3565b610d6b565b604051610471919061262e565b60405180910390f35b34801561048657600080fd5b5061048f610d89565b60405161049e93929190612824565b60405180910390f35b3480156104b357600080fd5b506104bc610daf565b005b3480156104ca57600080fd5b506104e560048036038101906104e0919061285b565b610e8f565b005b3480156104f357600080fd5b5061050e600480360381019061050991906128ae565b61103a565b60405161051b9190612658565b60405180910390f35b34801561053057600080fd5b5061054b60048036038101906105469190612796565b6110c1565b6040516105599291906128ee565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190612796565b611167565b005b34801561059757600080fd5b506105a06112a3565b6040516105ad91906127d2565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190612796565b6112c7565b005b3480156105eb57600080fd5b506105f46113be565b604051610601919061262e565b60405180910390f35b60606003805461061990612946565b80601f016020809104026020016040519081016040528092919081815260200182805461064590612946565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b60006106b06106a96113d1565b84846113d9565b6001905092915050565b6000600254905090565b6106cc6113d1565b73ffffffffffffffffffffffffffffffffffffffff166106ea610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610737906129c3565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107dd919061262e565b60405180910390a25050565b60006107f68484846115a2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108416113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890612a55565b60405180910390fd5b6108d5856108cd6113d1565b8584036113d9565b60019150509392505050565b60006012905090565b600061098c6108f76113d1565b8484600160006109056113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109879190612aa4565b6113d9565b6001905092915050565b6109a03382611c25565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109f36113d1565b73ffffffffffffffffffffffffffffffffffffffff16610a11610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906129c3565b60405180910390fd5b610a716000611dfb565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610aac90612946565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad890612946565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b60008060006009549250600a549150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050909192565b610b706113d1565b73ffffffffffffffffffffffffffffffffffffffff16610b8e610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb906129c3565b60405180910390fd5b7f000000000000000000000000d42f4db05b88bf861cbee42e748c91029c34780973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612b4a565b60405180910390fd5b610c7c8282611ec1565b5050565b60008060016000610c8f6113d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390612bdc565b60405180910390fd5b610d60610d576113d1565b858584036113d9565b600191505092915050565b6000610d7f610d786113d1565b84846115a2565b6001905092915050565b6000806000600560169054906101000a900460ff16925060065491506007549050909192565b610db76113d1565b73ffffffffffffffffffffffffffffffffffffffff16610dd5610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906129c3565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b610e976113d1565b73ffffffffffffffffffffffffffffffffffffffff16610eb5610a73565b73ffffffffffffffffffffffffffffffffffffffff1614610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f02906129c3565b60405180910390fd5b6001821015610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690612c6e565b60405180910390fd5b81811015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612d00565b60405180910390fd5b82600560166101000a81548160ff021916908315150217905550620186a082610fb96106ba565b610fc39190612d20565b610fcd9190612d91565b600681905550620186a081610fe06106ba565b610fea9190612d20565b610ff49190612d91565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161102d93929190612824565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050915091565b61116f6113d1565b73ffffffffffffffffffffffffffffffffffffffff1661118d610a73565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906129c3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f94223efa5e0ef633fcdce676def839a7ea220f7f45a1c693a4540846bc1ee14d60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000d42f4db05b88bf861cbee42e748c91029c34780981565b6112cf6113d1565b73ffffffffffffffffffffffffffffffffffffffff166112ed610a73565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a906129c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990612e34565b60405180910390fd5b6113bb81611dfb565b50565b600560149054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90612ec6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90612f58565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115959190612658565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890612fea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061307c565b60405180910390fd5b600081036116995761169483836000611f62565b611c20565b6116a1610a73565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561170f57506116df610a73565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611782575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561179b5750600560159054906101000a900460ff16155b1561189657600560149054906101000a900460ff1661189557600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118555750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061310e565b60405180910390fd5b5b5b60006118a1306109a3565b9050600060065482101590508080156118c65750600560169054906101000a900460ff165b80156118df5750600560159054906101000a900460ff16155b80156119355750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561198b5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119e15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a25576001600560156101000a81548160ff021916908315150217905550611a096121e1565b6000600560156101000a81548160ff0219169083151502179055505b6000600560159054906101000a900460ff16159050600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611adb5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ae557600090505b60008115611c1057600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b4857506000600a54115b15611b6e576064600a5486611b5d9190612d20565b611b679190612d91565b9050611bec565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611bc957506000600954115b15611beb57606460095486611bde9190612d20565b611be89190612d91565b90505b5b6000811115611c0157611c00873083611f62565b5b8085611c0d919061312e565b94505b611c1b878787611f62565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906131d4565b60405180910390fd5b611ca08260008361221f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90613266565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611d7d919061312e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611de29190612658565b60405180910390a3611df683600084612224565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890612fea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612040576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120379061307c565b60405180910390fd5b61204b83838361221f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906132f8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121649190612aa4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121c89190612658565b60405180910390a36121db848484612224565b50505050565b60006121ec306109a3565b9050600081036121fc575061221d565b60075481111561220c5760075490505b600081905061221a81612229565b50505b565b505050565b505050565b6000600267ffffffffffffffff81111561224657612245613318565b5b6040519080825280602002602001820160405280156122745781602001602082028036833780820191505090505b509050308160008151811061228c5761228b613347565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612355919061338b565b8160018151811061236957612368613347565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506123ce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113d9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016124529594939291906134bb565b600060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124c25780820151818401526020810190506124a7565b60008484015250505050565b6000601f19601f8301169050919050565b60006124ea82612488565b6124f48185612493565b93506125048185602086016124a4565b61250d816124ce565b840191505092915050565b6000602082019050818103600083015261253281846124df565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061256a8261253f565b9050919050565b61257a8161255f565b811461258557600080fd5b50565b60008135905061259781612571565b92915050565b6000819050919050565b6125b08161259d565b81146125bb57600080fd5b50565b6000813590506125cd816125a7565b92915050565b600080604083850312156125ea576125e961253a565b5b60006125f885828601612588565b9250506020612609858286016125be565b9150509250929050565b60008115159050919050565b61262881612613565b82525050565b6000602082019050612643600083018461261f565b92915050565b6126528161259d565b82525050565b600060208201905061266d6000830184612649565b92915050565b61267c81612613565b811461268757600080fd5b50565b60008135905061269981612673565b92915050565b600080604083850312156126b6576126b561253a565b5b60006126c485828601612588565b92505060206126d58582860161268a565b9150509250929050565b6000806000606084860312156126f8576126f761253a565b5b600061270686828701612588565b935050602061271786828701612588565b9250506040612728868287016125be565b9150509250925092565b600060ff82169050919050565b61274881612732565b82525050565b6000602082019050612763600083018461273f565b92915050565b60006020828403121561277f5761277e61253a565b5b600061278d848285016125be565b91505092915050565b6000602082840312156127ac576127ab61253a565b5b60006127ba84828501612588565b91505092915050565b6127cc8161255f565b82525050565b60006020820190506127e760008301846127c3565b92915050565b60006060820190506128026000830186612649565b61280f6020830185612649565b61281c60408301846127c3565b949350505050565b6000606082019050612839600083018661261f565b6128466020830185612649565b6128536040830184612649565b949350505050565b6000806000606084860312156128745761287361253a565b5b60006128828682870161268a565b9350506020612893868287016125be565b92505060406128a4868287016125be565b9150509250925092565b600080604083850312156128c5576128c461253a565b5b60006128d385828601612588565b92505060206128e485828601612588565b9150509250929050565b6000604082019050612903600083018561261f565b612910602083018461261f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061295e57607f821691505b60208210810361297157612970612917565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129ad602083612493565b91506129b882612977565b602082019050919050565b600060208201905081810360008301526129dc816129a0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612a3f602883612493565b9150612a4a826129e3565b604082019050919050565b60006020820190508181036000830152612a6e81612a32565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aaf8261259d565b9150612aba8361259d565b9250828201905080821115612ad257612ad1612a75565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612b34603983612493565b9150612b3f82612ad8565b604082019050919050565b60006020820190508181036000830152612b6381612b27565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612bc6602583612493565b9150612bd182612b6a565b604082019050919050565b60006020820190508181036000830152612bf581612bb9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000612c58603583612493565b9150612c6382612bfc565b604082019050919050565b60006020820190508181036000830152612c8781612c4b565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000612cea602a83612493565b9150612cf582612c8e565b604082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b6000612d2b8261259d565b9150612d368361259d565b9250828202612d448161259d565b91508282048414831517612d5b57612d5a612a75565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d9c8261259d565b9150612da78361259d565b925082612db757612db6612d62565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e1e602683612493565b9150612e2982612dc2565b604082019050919050565b60006020820190508181036000830152612e4d81612e11565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eb0602483612493565b9150612ebb82612e54565b604082019050919050565b60006020820190508181036000830152612edf81612ea3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f42602283612493565b9150612f4d82612ee6565b604082019050919050565b60006020820190508181036000830152612f7181612f35565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612fd4602583612493565b9150612fdf82612f78565b604082019050919050565b6000602082019050818103600083015261300381612fc7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613066602383612493565b91506130718261300a565b604082019050919050565b6000602082019050818103600083015261309581613059565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006130f8602283612493565b91506131038261309c565b604082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b60006131398261259d565b91506131448361259d565b925082820390508181111561315c5761315b612a75565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006131be602183612493565b91506131c982613162565b604082019050919050565b600060208201905081810360008301526131ed816131b1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613250602283612493565b915061325b826131f4565b604082019050919050565b6000602082019050818103600083015261327f81613243565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132e2602683612493565b91506132ed82613286565b604082019050919050565b60006020820190508181036000830152613311816132d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061338581612571565b92915050565b6000602082840312156133a1576133a061253a565b5b60006133af84828501613376565b91505092915050565b6000819050919050565b6000819050919050565b60006133e76133e26133dd846133b8565b6133c2565b61259d565b9050919050565b6133f7816133cc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134328161255f565b82525050565b60006134448383613429565b60208301905092915050565b6000602082019050919050565b6000613468826133fd565b6134728185613408565b935061347d83613419565b8060005b838110156134ae5781516134958882613438565b97506134a083613450565b925050600181019050613481565b5085935050505092915050565b600060a0820190506134d06000830188612649565b6134dd60208301876133ee565b81810360408301526134ef818661345d565b90506134fe60608301856127c3565b61350b6080830184612649565b969550505050505056fea264697066735822122040bc53319ab6f37e9706b01e58d75c954977a48cbbb9fa6478974ef3ed63a67a64736f6c63430008130033

Deployed Bytecode Sourcemap

18707:10346:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4305:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6538:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5425:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22714:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7210:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5267:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28969:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5596:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15644:103;;;;;;;;;;;;;:::i;:::-;;14993:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4524:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24798:232;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;23200:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8933:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5952:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24207:353;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21296:144;;;;;;;;;;;;;:::i;:::-;;21909:556;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6215:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25391:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;23686:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18794:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15902:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18835:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4305:100;4359:13;4392:5;4385:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4305:100;:::o;6538:194::-;6646:4;6663:39;6672:12;:10;:12::i;:::-;6686:7;6695:6;6663:8;:39::i;:::-;6720:4;6713:11;;6538:194;;;;:::o;5425:108::-;5486:7;5513:12;;5506:19;;5425:108;:::o;22714:175::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22823:8:::1;22800:11;:20;22812:7;22800:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22863:7;22847:34;;;22872:8;22847:34;;;;;;:::i;:::-;;;;;;;;22714:175:::0;;:::o;7210:529::-;7350:4;7367:36;7377:6;7385:9;7396:6;7367:9;:36::i;:::-;7416:24;7443:11;:19;7455:6;7443:19;;;;;;;;;;;;;;;:33;7463:12;:10;:12::i;:::-;7443:33;;;;;;;;;;;;;;;;7416:60;;7529:6;7509:16;:26;;7487:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7639:57;7648:6;7656:12;:10;:12::i;:::-;7689:6;7670:16;:25;7639:8;:57::i;:::-;7727:4;7720:11;;;7210:529;;;;;:::o;5267:93::-;5325:5;5350:2;5343:9;;5267:93;:::o;8144:290::-;8257:4;8274:130;8297:12;:10;:12::i;:::-;8324:7;8383:10;8346:11;:25;8358:12;:10;:12::i;:::-;8346:25;;;;;;;;;;;;;;;:34;8372:7;8346:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8274:8;:130::i;:::-;8422:4;8415:11;;8144:290;;;;:::o;28969:81::-;29018:24;29024:10;29036:5;29018;:24::i;:::-;28969:81;:::o;5596:143::-;5686:7;5713:9;:18;5723:7;5713:18;;;;;;;;;;;;;;;;5706:25;;5596:143;;;:::o;15644:103::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15709:30:::1;15736:1;15709:18;:30::i;:::-;15644:103::o:0;14993:87::-;15039:7;15066:6;;;;;;;;;;;15059:13;;14993:87;:::o;4524:104::-;4580:13;4613:7;4606:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4524:104;:::o;24798:232::-;24867:15;24884:16;24902:20;24950:6;;24940:16;;24978:7;;24967:18;;25011:11;;;;;;;;;;;24996:26;;24798:232;;;:::o;23200:300::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23346:7:::1;23338:15;;:4;:15;;::::0;23316:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23451:41;23480:4;23486:5;23451:28;:41::i;:::-;23200:300:::0;;:::o;8933:475::-;9051:4;9068:24;9095:11;:25;9107:12;:10;:12::i;:::-;9095:25;;;;;;;;;;;;;;;:34;9121:7;9095:34;;;;;;;;;;;;;;;;9068:61;;9182:15;9162:16;:35;;9140:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;9298:67;9307:12;:10;:12::i;:::-;9321:7;9349:15;9330:16;:34;9298:8;:67::i;:::-;9396:4;9389:11;;;8933:475;;;;:::o;5952:200::-;6063:4;6080:42;6090:12;:10;:12::i;:::-;6104:9;6115:6;6080:9;:42::i;:::-;6140:4;6133:11;;5952:200;;;;:::o;24207:353::-;24295:21;24331:25;24371;24443:15;;;;;;;;;;;24424:34;;24489:16;;24469:36;;24536:16;;24516:36;;24207:353;;;:::o;21296:144::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21363:4:::1;21349:11;;:18;;;;;;;;;;;;;;;;;;21396:4;21378:15;;:22;;;;;;;;;;;;;;;;;;21416:16;;;;;;;;;;21296:144::o:0;21909:556::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22075:1:::1;22067:4;:9;;22045:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;22184:4;22176;:12;;22168:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22266:8;22248:15;;:26;;;;;;;;;;;;;;;;;;22329:6;22321:4;22305:13;:11;:13::i;:::-;:20;;;;:::i;:::-;22304:31;;;;:::i;:::-;22285:16;:50;;;;22390:6;22382:4;22366:13;:11;:13::i;:::-;:20;;;;:::i;:::-;22365:31;;;;:::i;:::-;22346:16;:50;;;;22412:45;22436:8;22446:4;22452;22412:45;;;;;;;;:::i;:::-;;;;;;;;21909:556:::0;;;:::o;6215:176::-;6329:7;6356:11;:18;6368:5;6356:18;;;;;;;;;;;;;;;:27;6375:7;6356:27;;;;;;;;;;;;;;;;6349:34;;6215:176;;;;:::o;25391:291::-;25497:17;25516:31;25580:11;:20;25592:7;25580:20;;;;;;;;;;;;;;;;;;;;;;;;;25565:35;;25640:25;:34;25666:7;25640:34;;;;;;;;;;;;;;;;;;;;;;;;;25611:63;;25391:291;;;:::o;23686:162::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23794:11:::1;;;;;;;;;;;23764:42;;23783:9;23764:42;;;;;;;;;;;;23831:9;23817:11;;:23;;;;;;;;;;;;;;;;;;23686:162:::0;:::o;18794:32::-;;;:::o;15902:238::-;15224:12;:10;:12::i;:::-;15213:23;;:7;:5;:7::i;:::-;:23;;;15205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16025:1:::1;16005:22;;:8;:22;;::::0;15983:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16104:28;16123:8;16104:18;:28::i;:::-;15902:238:::0;:::o;18835:31::-;;;;;;;;;;;;;:::o;3311:98::-;3364:7;3391:10;3384:17;;3311:98;:::o;12716:380::-;12869:1;12852:19;;:5;:19;;;12844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12950:1;12931:21;;:7;:21;;;12923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13034:6;13004:11;:18;13016:5;13004:18;;;;;;;;;;;;;;;:27;13023:7;13004:27;;;;;;;;;;;;;;;:36;;;;13072:7;13056:32;;13065:5;13056:32;;;13081:6;13056:32;;;;;;:::i;:::-;;;;;;;;12716:380;;;:::o;25886:2105::-;26034:1;26018:18;;:4;:18;;;26010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26111:1;26097:16;;:2;:16;;;26089:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:1;26170:6;:11;26166:93;;26198:28;26214:4;26220:2;26224:1;26198:15;:28::i;:::-;26241:7;;26166:93;26297:7;:5;:7::i;:::-;26289:15;;:4;:15;;;;:45;;;;;26327:7;:5;:7::i;:::-;26321:13;;:2;:13;;;;26289:45;:78;;;;;26365:1;26351:16;;:2;:16;;;;26289:78;:116;;;;;26398:6;26384:21;;:2;:21;;;;26289:116;:142;;;;;26423:8;;;;;;;;;;;26422:9;26289:142;26271:395;;;26463:11;;;;;;;;;;;26458:197;;26525:11;:17;26537:4;26525:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;26546:11;:15;26558:2;26546:15;;;;;;;;;;;;;;;;;;;;;;;;;26525:36;26495:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;26458:197;26271:395;26678:28;26709:24;26727:4;26709:9;:24::i;:::-;26678:55;;26746:12;26785:16;;26761:20;:40;;26746:55;;26832:7;:39;;;;;26856:15;;;;;;;;;;;26832:39;:65;;;;;26889:8;;;;;;;;;;;26888:9;26832:65;:114;;;;;26915:25;:31;26941:4;26915:31;;;;;;;;;;;;;;;;;;;;;;;;;26914:32;26832:114;:149;;;;;26964:11;:17;26976:4;26964:17;;;;;;;;;;;;;;;;;;;;;;;;;26963:18;26832:149;:182;;;;;26999:11;:15;27011:2;26999:15;;;;;;;;;;;;;;;;;;;;;;;;;26998:16;26832:182;26814:314;;;27052:4;27041:8;;:15;;;;;;;;;;;;;;;;;;27073:10;:8;:10::i;:::-;27111:5;27100:8;;:16;;;;;;;;;;;;;;;;;;26814:314;27140:12;27156:8;;;;;;;;;;;27155:9;27140:24;;27266:11;:17;27278:4;27266:17;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;27287:11;:15;27299:2;27287:15;;;;;;;;;;;;;;;;;;;;;;;;;27266:36;27262:84;;;27329:5;27319:15;;27262:84;27358:12;27463:7;27459:479;;;27515:25;:29;27541:2;27515:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;27558:1;27548:7;;:11;27515:44;27511:278;;;27609:3;27597:7;;27588:6;:16;;;;:::i;:::-;27587:26;;;;:::i;:::-;27580:33;;27511:278;;;27675:25;:31;27701:4;27675:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27719:1;27710:6;;:10;27675:45;27671:118;;;27769:3;27758:6;;27749;:15;;;;:::i;:::-;27748:25;;;;:::i;:::-;27741:32;;27671:118;27511:278;27816:1;27809:4;:8;27805:91;;;27838:42;27854:4;27868;27875;27838:15;:42::i;:::-;27805:91;27922:4;27912:14;;;;;:::i;:::-;;;27459:479;27950:33;27966:4;27972:2;27976:6;27950:15;:33::i;:::-;25999:1992;;;;25886:2105;;;;:::o;11687:591::-;11790:1;11771:21;;:7;:21;;;11763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11843:49;11864:7;11881:1;11885:6;11843:20;:49::i;:::-;11905:22;11930:9;:18;11940:7;11930:18;;;;;;;;;;;;;;;;11905:43;;11985:6;11967:14;:24;;11959:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12104:6;12087:14;:23;12066:9;:18;12076:7;12066:18;;;;;;;;;;;;;;;:44;;;;12148:6;12132:12;;:22;;;;;;;:::i;:::-;;;;;;;;12198:1;12172:37;;12181:7;12172:37;;;12202:6;12172:37;;;;;;:::i;:::-;;;;;;;;12222:48;12242:7;12259:1;12263:6;12222:19;:48::i;:::-;11752:526;11687:591;;:::o;16300:191::-;16374:16;16393:6;;;;;;;;;;;16374:25;;16419:8;16410:6;;:17;;;;;;;;;;;;;;;;;;16474:8;16443:40;;16464:8;16443:40;;;;;;;;;;;;16363:128;16300:191;:::o;25690:188::-;25807:5;25773:25;:31;25799:4;25773:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25864:5;25830:40;;25858:4;25830:40;;;;;;;;;;;;25690:188;;:::o;9898:770::-;10056:1;10038:20;;:6;:20;;;10030:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10140:1;10119:23;;:9;:23;;;10111:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10195:47;10216:6;10224:9;10235:6;10195:20;:47::i;:::-;10255:21;10279:9;:17;10289:6;10279:17;;;;;;;;;;;;;;;;10255:41;;10346:6;10329:13;:23;;10307:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10490:6;10474:13;:22;10454:9;:17;10464:6;10454:17;;;;;;;;;;;;;;;:42;;;;10542:6;10518:9;:20;10528:9;10518:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10583:9;10566:35;;10575:6;10566:35;;;10594:6;10566:35;;;;;;:::i;:::-;;;;;;;;10614:46;10634:6;10642:9;10653:6;10614:19;:46::i;:::-;10019:649;9898:770;;;:::o;28576:385::-;28615:23;28641:24;28659:4;28641:9;:24::i;:::-;28615:50;;28699:1;28680:15;:20;28676:59;;28717:7;;;28676:59;28769:16;;28751:15;:34;28747:101;;;28820:16;;28802:34;;28747:101;28860:26;28889:15;28860:44;;28917:36;28934:18;28917:16;:36::i;:::-;28604:357;;28576:385;:::o;13696:125::-;;;;:::o;14425:124::-;;;;:::o;27999:569::-;28125:21;28163:1;28149:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28125:40;;28194:4;28176;28181:1;28176:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28220:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28210:4;28215:1;28210:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;28249:56;28266:4;28281:9;28293:11;28249:8;:56::i;:::-;28344:9;:60;;;28419:11;28445:1;28489:4;28508:11;;;;;;;;;;;28534:15;28344:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28054:514;27999:569;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:468::-;4124:6;4132;4181:2;4169:9;4160:7;4156:23;4152:32;4149:119;;;4187:79;;:::i;:::-;4149:119;4307:1;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4278:117;4434:2;4460:50;4502:7;4493:6;4482:9;4478:22;4460:50;:::i;:::-;4450:60;;4405:115;4059:468;;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:442::-;6759:4;6797:2;6786:9;6782:18;6774:26;;6810:71;6878:1;6867:9;6863:17;6854:6;6810:71;:::i;:::-;6891:72;6959:2;6948:9;6944:18;6935:6;6891:72;:::i;:::-;6973;7041:2;7030:9;7026:18;7017:6;6973:72;:::i;:::-;6610:442;;;;;;:::o;7058:430::-;7201:4;7239:2;7228:9;7224:18;7216:26;;7252:65;7314:1;7303:9;7299:17;7290:6;7252:65;:::i;:::-;7327:72;7395:2;7384:9;7380:18;7371:6;7327:72;:::i;:::-;7409;7477:2;7466:9;7462:18;7453:6;7409:72;:::i;:::-;7058:430;;;;;;:::o;7494:613::-;7568:6;7576;7584;7633:2;7621:9;7612:7;7608:23;7604:32;7601:119;;;7639:79;;:::i;:::-;7601:119;7759:1;7784:50;7826:7;7817:6;7806:9;7802:22;7784:50;:::i;:::-;7774:60;;7730:114;7883:2;7909:53;7954:7;7945:6;7934:9;7930:22;7909:53;:::i;:::-;7899:63;;7854:118;8011:2;8037:53;8082:7;8073:6;8062:9;8058:22;8037:53;:::i;:::-;8027:63;;7982:118;7494:613;;;;;:::o;8113:474::-;8181:6;8189;8238:2;8226:9;8217:7;8213:23;8209:32;8206:119;;;8244:79;;:::i;:::-;8206:119;8364:1;8389:53;8434:7;8425:6;8414:9;8410:22;8389:53;:::i;:::-;8379:63;;8335:117;8491:2;8517:53;8562:7;8553:6;8542:9;8538:22;8517:53;:::i;:::-;8507:63;;8462:118;8113:474;;;;;:::o;8593:308::-;8702:4;8740:2;8729:9;8725:18;8717:26;;8753:65;8815:1;8804:9;8800:17;8791:6;8753:65;:::i;:::-;8828:66;8890:2;8879:9;8875:18;8866:6;8828:66;:::i;:::-;8593:308;;;;;:::o;8907:180::-;8955:77;8952:1;8945:88;9052:4;9049:1;9042:15;9076:4;9073:1;9066:15;9093:320;9137:6;9174:1;9168:4;9164:12;9154:22;;9221:1;9215:4;9211:12;9242:18;9232:81;;9298:4;9290:6;9286:17;9276:27;;9232:81;9360:2;9352:6;9349:14;9329:18;9326:38;9323:84;;9379:18;;:::i;:::-;9323:84;9144:269;9093:320;;;:::o;9419:182::-;9559:34;9555:1;9547:6;9543:14;9536:58;9419:182;:::o;9607:366::-;9749:3;9770:67;9834:2;9829:3;9770:67;:::i;:::-;9763:74;;9846:93;9935:3;9846:93;:::i;:::-;9964:2;9959:3;9955:12;9948:19;;9607:366;;;:::o;9979:419::-;10145:4;10183:2;10172:9;10168:18;10160:26;;10232:9;10226:4;10222:20;10218:1;10207:9;10203:17;10196:47;10260:131;10386:4;10260:131;:::i;:::-;10252:139;;9979:419;;;:::o;10404:227::-;10544:34;10540:1;10532:6;10528:14;10521:58;10613:10;10608:2;10600:6;10596:15;10589:35;10404:227;:::o;10637:366::-;10779:3;10800:67;10864:2;10859:3;10800:67;:::i;:::-;10793:74;;10876:93;10965:3;10876:93;:::i;:::-;10994:2;10989:3;10985:12;10978:19;;10637:366;;;:::o;11009:419::-;11175:4;11213:2;11202:9;11198:18;11190:26;;11262:9;11256:4;11252:20;11248:1;11237:9;11233:17;11226:47;11290:131;11416:4;11290:131;:::i;:::-;11282:139;;11009:419;;;:::o;11434:180::-;11482:77;11479:1;11472:88;11579:4;11576:1;11569:15;11603:4;11600:1;11593:15;11620:191;11660:3;11679:20;11697:1;11679:20;:::i;:::-;11674:25;;11713:20;11731:1;11713:20;:::i;:::-;11708:25;;11756:1;11753;11749:9;11742:16;;11777:3;11774:1;11771:10;11768:36;;;11784:18;;:::i;:::-;11768:36;11620:191;;;;:::o;11817:244::-;11957:34;11953:1;11945:6;11941:14;11934:58;12026:27;12021:2;12013:6;12009:15;12002:52;11817:244;:::o;12067:366::-;12209:3;12230:67;12294:2;12289:3;12230:67;:::i;:::-;12223:74;;12306:93;12395:3;12306:93;:::i;:::-;12424:2;12419:3;12415:12;12408:19;;12067:366;;;:::o;12439:419::-;12605:4;12643:2;12632:9;12628:18;12620:26;;12692:9;12686:4;12682:20;12678:1;12667:9;12663:17;12656:47;12720:131;12846:4;12720:131;:::i;:::-;12712:139;;12439:419;;;:::o;12864:224::-;13004:34;13000:1;12992:6;12988:14;12981:58;13073:7;13068:2;13060:6;13056:15;13049:32;12864:224;:::o;13094:366::-;13236:3;13257:67;13321:2;13316:3;13257:67;:::i;:::-;13250:74;;13333:93;13422:3;13333:93;:::i;:::-;13451:2;13446:3;13442:12;13435:19;;13094:366;;;:::o;13466:419::-;13632:4;13670:2;13659:9;13655:18;13647:26;;13719:9;13713:4;13709:20;13705:1;13694:9;13690:17;13683:47;13747:131;13873:4;13747:131;:::i;:::-;13739:139;;13466:419;;;:::o;13891:240::-;14031:34;14027:1;14019:6;14015:14;14008:58;14100:23;14095:2;14087:6;14083:15;14076:48;13891:240;:::o;14137:366::-;14279:3;14300:67;14364:2;14359:3;14300:67;:::i;:::-;14293:74;;14376:93;14465:3;14376:93;:::i;:::-;14494:2;14489:3;14485:12;14478:19;;14137:366;;;:::o;14509:419::-;14675:4;14713:2;14702:9;14698:18;14690:26;;14762:9;14756:4;14752:20;14748:1;14737:9;14733:17;14726:47;14790:131;14916:4;14790:131;:::i;:::-;14782:139;;14509:419;;;:::o;14934:229::-;15074:34;15070:1;15062:6;15058:14;15051:58;15143:12;15138:2;15130:6;15126:15;15119:37;14934:229;:::o;15169:366::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:419::-;15707:4;15745:2;15734:9;15730:18;15722:26;;15794:9;15788:4;15784:20;15780:1;15769:9;15765:17;15758:47;15822:131;15948:4;15822:131;:::i;:::-;15814:139;;15541:419;;;:::o;15966:410::-;16006:7;16029:20;16047:1;16029:20;:::i;:::-;16024:25;;16063:20;16081:1;16063:20;:::i;:::-;16058:25;;16118:1;16115;16111:9;16140:30;16158:11;16140:30;:::i;:::-;16129:41;;16319:1;16310:7;16306:15;16303:1;16300:22;16280:1;16273:9;16253:83;16230:139;;16349:18;;:::i;:::-;16230:139;16014:362;15966:410;;;;:::o;16382:180::-;16430:77;16427:1;16420:88;16527:4;16524:1;16517:15;16551:4;16548:1;16541:15;16568:185;16608:1;16625:20;16643:1;16625:20;:::i;:::-;16620:25;;16659:20;16677:1;16659:20;:::i;:::-;16654:25;;16698:1;16688:35;;16703:18;;:::i;:::-;16688:35;16745:1;16742;16738:9;16733:14;;16568:185;;;;:::o;16759:225::-;16899:34;16895:1;16887:6;16883:14;16876:58;16968:8;16963:2;16955:6;16951:15;16944:33;16759:225;:::o;16990:366::-;17132:3;17153:67;17217:2;17212:3;17153:67;:::i;:::-;17146:74;;17229:93;17318:3;17229:93;:::i;:::-;17347:2;17342:3;17338:12;17331:19;;16990:366;;;:::o;17362:419::-;17528:4;17566:2;17555:9;17551:18;17543:26;;17615:9;17609:4;17605:20;17601:1;17590:9;17586:17;17579:47;17643:131;17769:4;17643:131;:::i;:::-;17635:139;;17362:419;;;:::o;17787:223::-;17927:34;17923:1;17915:6;17911:14;17904:58;17996:6;17991:2;17983:6;17979:15;17972:31;17787:223;:::o;18016:366::-;18158:3;18179:67;18243:2;18238:3;18179:67;:::i;:::-;18172:74;;18255:93;18344:3;18255:93;:::i;:::-;18373:2;18368:3;18364:12;18357:19;;18016:366;;;:::o;18388:419::-;18554:4;18592:2;18581:9;18577:18;18569:26;;18641:9;18635:4;18631:20;18627:1;18616:9;18612:17;18605:47;18669:131;18795:4;18669:131;:::i;:::-;18661:139;;18388:419;;;:::o;18813:221::-;18953:34;18949:1;18941:6;18937:14;18930:58;19022:4;19017:2;19009:6;19005:15;18998:29;18813:221;:::o;19040:366::-;19182:3;19203:67;19267:2;19262:3;19203:67;:::i;:::-;19196:74;;19279:93;19368:3;19279:93;:::i;:::-;19397:2;19392:3;19388:12;19381:19;;19040:366;;;:::o;19412:419::-;19578:4;19616:2;19605:9;19601:18;19593:26;;19665:9;19659:4;19655:20;19651:1;19640:9;19636:17;19629:47;19693:131;19819:4;19693:131;:::i;:::-;19685:139;;19412:419;;;:::o;19837:224::-;19977:34;19973:1;19965:6;19961:14;19954:58;20046:7;20041:2;20033:6;20029:15;20022:32;19837:224;:::o;20067:366::-;20209:3;20230:67;20294:2;20289:3;20230:67;:::i;:::-;20223:74;;20306:93;20395:3;20306:93;:::i;:::-;20424:2;20419:3;20415:12;20408:19;;20067:366;;;:::o;20439:419::-;20605:4;20643:2;20632:9;20628:18;20620:26;;20692:9;20686:4;20682:20;20678:1;20667:9;20663:17;20656:47;20720:131;20846:4;20720:131;:::i;:::-;20712:139;;20439:419;;;:::o;20864:222::-;21004:34;21000:1;20992:6;20988:14;20981:58;21073:5;21068:2;21060:6;21056:15;21049:30;20864:222;:::o;21092:366::-;21234:3;21255:67;21319:2;21314:3;21255:67;:::i;:::-;21248:74;;21331:93;21420:3;21331:93;:::i;:::-;21449:2;21444:3;21440:12;21433:19;;21092:366;;;:::o;21464:419::-;21630:4;21668:2;21657:9;21653:18;21645:26;;21717:9;21711:4;21707:20;21703:1;21692:9;21688:17;21681:47;21745:131;21871:4;21745:131;:::i;:::-;21737:139;;21464:419;;;:::o;21889:221::-;22029:34;22025:1;22017:6;22013:14;22006:58;22098:4;22093:2;22085:6;22081:15;22074:29;21889:221;:::o;22116:366::-;22258:3;22279:67;22343:2;22338:3;22279:67;:::i;:::-;22272:74;;22355:93;22444:3;22355:93;:::i;:::-;22473:2;22468:3;22464:12;22457:19;;22116:366;;;:::o;22488:419::-;22654:4;22692:2;22681:9;22677:18;22669:26;;22741:9;22735:4;22731:20;22727:1;22716:9;22712:17;22705:47;22769:131;22895:4;22769:131;:::i;:::-;22761:139;;22488:419;;;:::o;22913:194::-;22953:4;22973:20;22991:1;22973:20;:::i;:::-;22968:25;;23007:20;23025:1;23007:20;:::i;:::-;23002:25;;23051:1;23048;23044:9;23036:17;;23075:1;23069:4;23066:11;23063:37;;;23080:18;;:::i;:::-;23063:37;22913:194;;;;:::o;23113:220::-;23253:34;23249:1;23241:6;23237:14;23230:58;23322:3;23317:2;23309:6;23305:15;23298:28;23113:220;:::o;23339:366::-;23481:3;23502:67;23566:2;23561:3;23502:67;:::i;:::-;23495:74;;23578:93;23667:3;23578:93;:::i;:::-;23696:2;23691:3;23687:12;23680:19;;23339:366;;;:::o;23711:419::-;23877:4;23915:2;23904:9;23900:18;23892:26;;23964:9;23958:4;23954:20;23950:1;23939:9;23935:17;23928:47;23992:131;24118:4;23992:131;:::i;:::-;23984:139;;23711:419;;;:::o;24136:221::-;24276:34;24272:1;24264:6;24260:14;24253:58;24345:4;24340:2;24332:6;24328:15;24321:29;24136:221;:::o;24363:366::-;24505:3;24526:67;24590:2;24585:3;24526:67;:::i;:::-;24519:74;;24602:93;24691:3;24602:93;:::i;:::-;24720:2;24715:3;24711:12;24704:19;;24363:366;;;:::o;24735:419::-;24901:4;24939:2;24928:9;24924:18;24916:26;;24988:9;24982:4;24978:20;24974:1;24963:9;24959:17;24952:47;25016:131;25142:4;25016:131;:::i;:::-;25008:139;;24735:419;;;:::o;25160:225::-;25300:34;25296:1;25288:6;25284:14;25277:58;25369:8;25364:2;25356:6;25352:15;25345:33;25160:225;:::o;25391:366::-;25533:3;25554:67;25618:2;25613:3;25554:67;:::i;:::-;25547:74;;25630:93;25719:3;25630:93;:::i;:::-;25748:2;25743:3;25739:12;25732:19;;25391:366;;;:::o;25763:419::-;25929:4;25967:2;25956:9;25952:18;25944:26;;26016:9;26010:4;26006:20;26002:1;25991:9;25987:17;25980:47;26044:131;26170:4;26044:131;:::i;:::-;26036:139;;25763:419;;;:::o;26188:180::-;26236:77;26233:1;26226:88;26333:4;26330:1;26323:15;26357:4;26354:1;26347:15;26374:180;26422:77;26419:1;26412:88;26519:4;26516:1;26509:15;26543:4;26540:1;26533:15;26560:143;26617:5;26648:6;26642:13;26633:22;;26664:33;26691:5;26664:33;:::i;:::-;26560:143;;;;:::o;26709:351::-;26779:6;26828:2;26816:9;26807:7;26803:23;26799:32;26796:119;;;26834:79;;:::i;:::-;26796:119;26954:1;26979:64;27035:7;27026:6;27015:9;27011:22;26979:64;:::i;:::-;26969:74;;26925:128;26709:351;;;;:::o;27066:85::-;27111:7;27140:5;27129:16;;27066:85;;;:::o;27157:60::-;27185:3;27206:5;27199:12;;27157:60;;;:::o;27223:158::-;27281:9;27314:61;27332:42;27341:32;27367:5;27341:32;:::i;:::-;27332:42;:::i;:::-;27314:61;:::i;:::-;27301:74;;27223:158;;;:::o;27387:147::-;27482:45;27521:5;27482:45;:::i;:::-;27477:3;27470:58;27387:147;;:::o;27540:114::-;27607:6;27641:5;27635:12;27625:22;;27540:114;;;:::o;27660:184::-;27759:11;27793:6;27788:3;27781:19;27833:4;27828:3;27824:14;27809:29;;27660:184;;;;:::o;27850:132::-;27917:4;27940:3;27932:11;;27970:4;27965:3;27961:14;27953:22;;27850:132;;;:::o;27988:108::-;28065:24;28083:5;28065:24;:::i;:::-;28060:3;28053:37;27988:108;;:::o;28102:179::-;28171:10;28192:46;28234:3;28226:6;28192:46;:::i;:::-;28270:4;28265:3;28261:14;28247:28;;28102:179;;;;:::o;28287:113::-;28357:4;28389;28384:3;28380:14;28372:22;;28287:113;;;:::o;28436:732::-;28555:3;28584:54;28632:5;28584:54;:::i;:::-;28654:86;28733:6;28728:3;28654:86;:::i;:::-;28647:93;;28764:56;28814:5;28764:56;:::i;:::-;28843:7;28874:1;28859:284;28884:6;28881:1;28878:13;28859:284;;;28960:6;28954:13;28987:63;29046:3;29031:13;28987:63;:::i;:::-;28980:70;;29073:60;29126:6;29073:60;:::i;:::-;29063:70;;28919:224;28906:1;28903;28899:9;28894:14;;28859:284;;;28863:14;29159:3;29152:10;;28560:608;;;28436:732;;;;:::o;29174:831::-;29437:4;29475:3;29464:9;29460:19;29452:27;;29489:71;29557:1;29546:9;29542:17;29533:6;29489:71;:::i;:::-;29570:80;29646:2;29635:9;29631:18;29622:6;29570:80;:::i;:::-;29697:9;29691:4;29687:20;29682:2;29671:9;29667:18;29660:48;29725:108;29828:4;29819:6;29725:108;:::i;:::-;29717:116;;29843:72;29911:2;29900:9;29896:18;29887:6;29843:72;:::i;:::-;29925:73;29993:3;29982:9;29978:19;29969:6;29925:73;:::i;:::-;29174:831;;;;;;;;:::o

Swarm Source

ipfs://40bc53319ab6f37e9706b01e58d75c954977a48cbbb9fa6478974ef3ed63a67a
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.